В сообщении от Thursday 05 September 2019 17:57:59 Phyllis Smith написал(а):
> Andrea, gg is interested in this.  Did you find a way to make dav1d work
> for 32-bit?  Phyllis/GG


Something like attached Makefile works, at least not errors out

patch (diff -u) made from dav1d directory also attached

I used this info as reference:

https://stackoverflow.com/questions/9279765/how-to-detect-os-in-a-make-file



> 
> 
> > Aha, for static Makefile GG added ...
> >
> > +$(NASM_BLD)/%.obj: src/x86/%.asm
> > +       $(NASM) -f elf64 \
> > +               -I src/ -I $(BUILD)/ -MQ $@ -MF [email protected] \
> > +               $< -o $@
> >
> > replace elf64 with elf32 for 32-bit builds ..... (looking at my source
> > folder for 32-bit libdav1d build via Meson/Ninja)
> >
> > actually there are two instances of this parameter, another for (libdav1d)
> > testfiles down the file ....
> >
> >
> > +$(TESTS_CHKASM_BLD)/x86/%.obj: $(TESTS_CHKASM)/x86/%.asm
> > +       @$(NASM) -f elf64 \
> > +               -I src/ -I $(BUILD)/ -MQ $@ -MF [email protected] \
> > +               $< -o $@
> >
> >
> 


export TOPDIR ?= $(CURDIR)/../..
include $(TOPDIR)/global_config

_ARCH := $(shell uname -m)
export _ARCH

ifeq ($(_ARCH), i686)
ASMARCH := elf32
endif

ifeq ($(_ARCH), x86_64)
ASMARCH := elf64
endif



BUILD=build
DESTDIR=/
PREFIX=usr/local
LIBDIR=$(PREFIX)/lib
INCDIR=$(PREFIX)/include
# make Q="" for verbose
Q?=@echo == $@; 
OBJDIR?=$(BUILD)/static
NASM_BLD=$(OBJDIR)/nasm
ENTRY_BLD=$(OBJDIR)/entry
SRC_BLD=$(OBJDIR)/src
BIT8_BLD=$(OBJDIR)/bits8
BIT16_BLD=$(OBJDIR)/bits16
TOOLS_BLD=$(BUILD)/tools
TESTS_BLD=$(BUILD)/tests

STATIC_LIB=$(BUILD)/src/libdav1d.a
SHARED_LIB=$(BUILD)/src/libdav1d.so
DEFS= -DNDEBUG -D_FILE_OFFSET_BITS=64 -D_POSIX_C_SOURCE=200112L
FUZZ= -DDAV1D_MT_FUZZING

BLD_INCL= $(DEFS) -I. -Isrc -Iinclude/dav1d -Iinclude \
	-I$(BUILD) -I$(BUILD)/include -I$(BUILD)/include/dav1d
TOOLS_INCL= $(DEFS) -Itools -I. -I$(BUILD) -I$(BUILD)/tools \
	-Iinclude -Iinclude/dav1d -I$(BUILD)/include/dav1d \
	-I$(BUILD)/include -I/usr/include/SDL2

NP?=.NOTPARALLEL:
$(NP)
MAKE_P:=$(MAKE) -j NP=""

all: meson_data
	$(MAKE_P) $(STATIC_LIB) OBJDIR=$(BUILD)/static
	$(MAKE_P) $(SHARED_LIB) OBJDIR=$(BUILD)/shared
# req SDL
#	$(MAKE_P) $(TOOLS) OBJDIR=$(BUILD)/static
#	$(MAKE_P) $(TESTS) OBJDIR=$(BUILD)/static

CC_DEFS=\
	-DNDEBUG \
	-D_FILE_OFFSET_BITS=64 \
	-D_POSIX_C_SOURCE=200112L \

CC_OPTS=\
	-pipe \
	-Wall \
	-Winvalid-pch \
	-Wextra \
	-std=c99 \
	-O3 \
	-fvisibility=hidden \
	-Wundef \
	-Werror=vla \
	-Wno-maybe-uninitialized \
	-Wno-missing-field-initializers \
	-Wno-unused-parameter \
	-Werror=missing-prototypes \
	-fomit-frame-pointer \
	-ffast-math \
	-fPIC \
	-mpreferred-stack-boundary=5 \
	-MD -MQ $@ -MF [email protected] \

SHA_OPTS=\
	-Wl,--no-undefined \
	-Wl,--as-needed \
	-Wl,-O1 \
	-shared \
	-fPIC \
	-Wl,--start-group \
	-Wl,-soname,libdav1d.so.2 \
	-Wl,--end-group \
	-pthread \

CC_CC=$(Q)cc $(CC_OPTS) $(CFLAGS)
NASM=$(Q)/usr/bin/nasm
any=$(foreach i,$(2),$(1)/$(i))

# nasm
NASM_OBJS=$(call any,$(NASM_BLD), \
	cdef.obj \
	cdef_sse.obj \
	cpuid.obj \
	ipred.obj \
	ipred_ssse3.obj \
	itx.obj \
	itx_ssse3.obj \
	loopfilter.obj \
	looprestoration.obj \
	looprestoration_ssse3.obj \
	mc.obj \
	mc_ssse3.obj \
	msac.obj)
$(NASM_BLD)/%.obj: src/x86/%.asm
	$(NASM) -f $(ASMARCH) \
		-I src/ -I $(BUILD)/ -MQ $@ -MF [email protected] \
		$< -o $@

# entry
ENTRY_OBJS=$(call any,$(ENTRY_BLD), \
	lib.c.o \
	thread_task.c.o)
$(ENTRY_BLD)/%.c.o: src/%.c
	$(CC_CC) -Iinclude -Ibuild/include/dav1d -Isrc/entry $(BLD_INCL) \
		-mincoming-stack-boundary=4 -o $@ -c $<

# src
SRC_OBJS=$(call any,$(SRC_BLD), \
	cdf.o \
	cpu.o \
	data.o \
	decode.o \
	dequant_tables.o \
	getbits.o \
	intra_edge.o \
	lf_mask.o \
	log.o \
	msac.o \
	obu.o \
	picture.o \
	qm.o \
	ref.o \
	ref_mvs.o \
	scan.o \
	tables.o \
	warpmv.o \
	wedge.o \
	x86/cpu.c.o)
$(SRC_BLD)/%.o: src/%.c
	$(CC_CC) $(BLD_INCL) -pthread -o $@ -c $<
$(SRC_BLD)/x86/%.c.o: src/x86/%.c
	$(CC_CC) $(BLD_INCL) -o $@ -c $<

# bits
BITS_OBJS= \
	cdef_tmpl.o \
	cdef_apply_tmpl.o \
	film_grain_tmpl.o \
	ipred_tmpl.o \
	ipred_prepare_tmpl.o \
	itx_tmpl.o \
	lf_apply_tmpl.o \
	loopfilter_tmpl.o \
	looprestoration_tmpl.o \
	lr_apply_tmpl.o \
	mc_tmpl.o \
	recon_tmpl.o \
	x86/cdef_init_tmpl.c.o \
	x86/ipred_init_tmpl.c.o \
	x86/itx_init_tmpl.c.o \
	x86/loopfilter_init_tmpl.c.o \
	x86/looprestoration_init_tmpl.c.o \
	x86/mc_init_tmpl.c.o \

BIT8_OBJS=$(call any,$(BIT8_BLD),$(BITS_OBJS))
$(BIT8_BLD)/x86/%.c.o: src/x86/%.c
	$(CC_CC) $(BLD_INCL) -DBITDEPTH=8 -o $@ -c $<
$(BIT8_BLD)/%.o: src/%.c
	$(CC_CC) $(BLD_INCL) -DBITDEPTH=8 -o $@ -c $<

BIT16_OBJS=$(call any,$(BIT16_BLD),$(BITS_OBJS))
$(BIT16_BLD)/x86/%.c.o: src/x86/%.c
	$(CC_CC) $(BLD_INCL) -DBITDEPTH=16 -o $@ -c $<
$(BIT16_BLD)/%.o: src/%.c
	$(CC_CC) $(BLD_INCL) -DBITDEPTH=16 -o $@ -c $<

$(BUILD)/config.h:
	echo  > $@ "#pragma once"
	echo >> $@ "#define ARCH_AARCH64 0"
	echo >> $@ "#define ARCH_ARM 0"
	echo >> $@ "#define ARCH_PPC64LE 0"
	echo >> $@ "#define ARCH_X86 1"
ifeq ($(_ARCH), x86_64)
	echo >> $@ "#define ARCH_X86_32 0"
	echo >> $@ "#define ARCH_X86_64 1"
endif
ifeq ($(_ARCH), i686)
	echo >> $@ "#define ARCH_X86_32 1"
	echo >> $@ "#define ARCH_X86_64 0"
endif
	echo >> $@ "#define CONFIG_16BPC 1"
	echo >> $@ "#define CONFIG_8BPC 1"
	echo >> $@ "#define CONFIG_LOG 1"
	echo >> $@ "#define ENDIANNESS_BIG 0"
	echo >> $@ "#define HAVE_ASM 1"
	echo >> $@ "#define HAVE_POSIX_MEMALIGN 1"
	echo >> $@ "#define HAVE_UNISTD_H 1"
	echo >> $@ "#define STACK_ALIGNMENT 32"

$(BUILD)/config.asm:
ifeq ($(_ARCH), x86_64)
	echo  > $@ "%define ARCH_X86_32 0"
	echo >> $@ "%define ARCH_X86_64 1"
	echo >> $@ "%define PIC 1"
	echo >> $@ "%define STACK_ALIGNMENT 32"
endif

ifeq ($(_ARCH), i686)
	echo  > $@ "%define ARCH_X86_32 1"
	echo >> $@ "%define ARCH_X86_64 0"
	echo >> $@ "%define PIC 1"
	echo >> $@ "%define STACK_ALIGNMENT 32"
endif


$(BUILD)/include/vcs_version.h:
	mkdir -p $(BUILD)/include
	echo  > $@ "#define DAV1D_VERSION \"0.4.0\""

$(BUILD)/include/dav1d/version.h:
	mkdir -p $(BUILD)/include/dav1d
	echo  > $@ "#ifndef DAV1D_VERSION_H"
	echo >> $@ "#define DAV1D_VERSION_H"
	echo >> $@ "#define DAV1D_API_VERSION_MAJOR 2"
	echo >> $@ "#define DAV1D_API_VERSION_MINOR 0"
	echo >> $@ "#define DAV1D_API_VERSION_PATCH 0"
	echo >> $@ "#endif /* DAV1D_VERSION_H */"

$(TOOLS_BLD)/cli_config.h:
	mkdir -p $(TOOLS_BLD)
	echo  > $@ "#pragma once"
	echo >> $@ "#define HAVE_CLOCK_GETTIME 1"

.PHONY: meson_data
meson_data:
	make meson_dirs OBJDIR=$(BUILD)/static
	make meson_dirs OBJDIR=$(BUILD)/shared
	ln -sf ./include/compat/gcc/stdatomic.h .

.PHONY: meson_dirs
meson_dirs: $(OBJDIR) \
	$(BUILD)/config.h $(BUILD)/config.asm \
	$(BUILD)/include/vcs_version.h \
	$(BUILD)/include/dav1d/version.h \
	$(TOOLS_BLD)/cli_config.h \

LIB_OBJS=$(ENTRY_OBJS) $(NASM_OBJS) $(SRC_OBJS) $(BIT8_OBJS) $(BIT16_OBJS)

$(STATIC_LIB): DIR?=static
$(STATIC_LIB): $(LIB_OBJS)
	rm -f $@
	gcc-ar csrD $@ $(LIB_OBJS)

$(SHARED_LIB): DIR?=shared
$(SHARED_LIB): $(LIB_OBJS)
	rm -f $@
	cc -o $@ $(LIB_OBJS) $(SHA_OPTS)

# tools
DAV1D_OBJS=$(call any,$(TOOLS_BLD),\
	dav1d.o \
	dav1d_cli_parse.o \
	input/annexb.o \
	input/ivf.o \
	input/input.o \
	output/md5.o \
	output/null.o \
	output/output.o \
	output/y4m2.o \
	output/yuv.o)

DAV1DPLAY_OBJS=$(call any,$(TOOLS_BLD),\
	dav1dplay.o \
	input/annexb.o \
	input/ivf.o \
	input/input.o)

$(TOOLS_BLD)/%.o: tools/%.c
	$(CC_CC) $(TOOLS_INCL) -o $@ -c $<

DAV1D=$(TOOLS_BLD)/dav1d
$(DAV1D): $(DAV1D_OBJS)
	$(CC_CC) -pthread -I$(BUILD) -o $@ $(DAV1D_OBJS) $(STATIC_LIB)

DAV1DPLAY=$(TOOLS_BLD)/dav1dplay
$(DAV1DPLAY): $(DAV1DPLAY_OBJS)
	$(CC_CC) -pthread -o $(TOOLS_BLD)/dav1dplay $(DAV1DPLAY_OBJS) $(STATIC_LIB) -lSDL2

TOOLS=$(DAV1D) $(DAV1DPLAY)
.PHONY:	tools
tools:	$(TOOLS)

# tests
TESTS_CHKASM=tests/checkasm
TESTS_CHKASM_BLD=$(TESTS_BLD)/checkasm
CHKASM_BIT8=$(TESTS_CHKASM_BLD)/bit8
CHKASM_BIT16=$(TESTS_CHKASM_BLD)/bit16
CHKASM_BITS= \
	cdef.o \
	ipred.o \
	itx.o \
	loopfilter.o \
	looprestoration.o \
	mc.o \

CHKASM_BIT8_OBJS=$(call any,$(CHKASM_BIT8),$(CHKASM_BITS))
CHKASM_BIT16_OBJS=$(call any,$(CHKASM_BIT16),$(CHKASM_BITS))

TESTS_CHKASM_OBJS= \
	$(TESTS_CHKASM_BLD)/checkasm.o \
	$(TESTS_CHKASM_BLD)/msac.o \
	$(CHKASM_BIT8_OBJS) $(CHKASM_BIT16_OBJS) \
	$(TESTS_CHKASM_BLD)/x86/checkasm.obj \

$(TESTS_CHKASM_BLD)/%.o: $(TESTS_CHKASM)/%.c
	$(CC_CC) $(BLD_INCL) -o $@ -c $<
$(CHKASM_BIT8)/%.o: $(TESTS_CHKASM)/%.c
	$(CC_CC) $(BLD_INCL) -DBITDEPTH=8 -o $@ -c $<
$(CHKASM_BIT16)/%.o: $(TESTS_CHKASM)/%.c
	$(CC_CC) $(BLD_INCL) -DBITDEPTH=16 -o $@ -c $<
$(TESTS_CHKASM_BLD)/x86/%.obj: $(TESTS_CHKASM)/x86/%.asm
	@$(NASM) -f $(ASMARCH) \
		-I src/ -I $(BUILD)/ -MQ $@ -MF [email protected] \
		$< -o $@

CHECKASM=$(TESTS_BLD)/checkasm/checkasm
$(CHECKASM): $(TESTS_CHKASM_OBJS) $(STATIC_LIB)
	$(CC_CC) -pthread -o $@ $(TESTS_CHKASM_OBJS) $(STATIC_LIB) -lm

TESTS_FUZZER=tests/libfuzzer
TESTS_FUZZER_BLD=$(TESTS_BLD)/libfuzzer
TESTS_FUZZER_OBJS= \
	$(TESTS_FUZZER_BLD)/main.o \
	$(TESTS_FUZZER_BLD)/dav1d_fuzzer.o \

$(TESTS_FUZZER_BLD)/%.o: $(TESTS_FUZZER)/%.c
	$(CC_CC) $(BLD_INCL) -o $@ -c $<

DAV1D_FUZZER=$(TESTS_BLD)/dav1d_fuzzer
$(DAV1D_FUZZER): $(TESTS_FUZZER_OBJS) $(STATIC_LIB)
	$(CC_CC) -pthread -o $@ $(TESTS_FUZZER_OBJS) $(STATIC_LIB)

TESTS=$(CHECKASM) $(DAV1D_FUZZER)
.PHONY:	tests
tests:	$(TESTS)

$(OBJDIR):
	mkdir -p $@/include/dav1d \
		$(BUILD)/src $(BUILD)/include \
		$(ENTRY_BLD) $(NASM_BLD) \
		$(SRC_BLD)/x86 $(BIT8_BLD)/x86 $(BIT16_BLD)/x86 \
		$(TOOLS_BLD) $(TOOLS_BLD)/input $(TOOLS_BLD)/output \
		$(TESTS_CHKASM_BLD)/bit8 $(TESTS_CHKASM_BLD)/bit16 \
		$(TESTS_CHKASM_BLD)/x86 $(TESTS_FUZZER_BLD) \

clean:
	rm -rf $(BUILD)

install:
	mkdir -p $(DESTDIR)$(LIBDIR)
	cp -a $(STATIC_LIB) $(DESTDIR)$(LIBDIR)
	cp -a $(SHARED_LIB) $(DESTDIR)$(LIBDIR)
	mkdir -p $(DESTDIR)$(INCDIR)
	cp -a include/dav1d $(DESTDIR)$(INCDIR)
	rm -f $(DESTDIR)$(INCDIR)/dav1d/meson.build
	rm -f $(DESTDIR)$(INCDIR)/dav1d/version.h.in
	cp -a $(BUILD)/include/dav1d/version.h $(DESTDIR)$(INCDIR)/version.h

--- Makefile.orig	2019-09-05 23:36:27.313308532 +0300
+++ Makefile	2019-09-06 00:19:45.446010156 +0300
@@ -1,3 +1,19 @@
+export TOPDIR ?= $(CURDIR)/../..
+include $(TOPDIR)/global_config
+
+_ARCH := $(shell uname -m)
+export _ARCH
+
+ifeq ($(_ARCH), i686)
+ASMARCH := elf32
+endif
+
+ifeq ($(_ARCH), x86_64)
+ASMARCH := elf64
+endif
+
+
+
 BUILD=build
 DESTDIR=/
 PREFIX=usr/local
@@ -92,7 +108,7 @@
 	mc_ssse3.obj \
 	msac.obj)
 $(NASM_BLD)/%.obj: src/x86/%.asm
-	$(NASM) -f elf64 \
+	$(NASM) -f $(ASMARCH) \
 		-I src/ -I $(BUILD)/ -MQ $@ -MF [email protected] \
 		$< -o $@
 
@@ -170,8 +186,14 @@
 	echo >> $@ "#define ARCH_ARM 0"
 	echo >> $@ "#define ARCH_PPC64LE 0"
 	echo >> $@ "#define ARCH_X86 1"
+ifeq ($(_ARCH), x86_64)
 	echo >> $@ "#define ARCH_X86_32 0"
 	echo >> $@ "#define ARCH_X86_64 1"
+endif
+ifeq ($(_ARCH), i686)
+	echo >> $@ "#define ARCH_X86_32 1"
+	echo >> $@ "#define ARCH_X86_64 0"
+endif
 	echo >> $@ "#define CONFIG_16BPC 1"
 	echo >> $@ "#define CONFIG_8BPC 1"
 	echo >> $@ "#define CONFIG_LOG 1"
@@ -182,10 +204,20 @@
 	echo >> $@ "#define STACK_ALIGNMENT 32"
 
 $(BUILD)/config.asm:
+ifeq ($(_ARCH), x86_64)
 	echo  > $@ "%define ARCH_X86_32 0"
 	echo >> $@ "%define ARCH_X86_64 1"
 	echo >> $@ "%define PIC 1"
 	echo >> $@ "%define STACK_ALIGNMENT 32"
+endif
+
+ifeq ($(_ARCH), i686)
+	echo  > $@ "%define ARCH_X86_32 1"
+	echo >> $@ "%define ARCH_X86_64 0"
+	echo >> $@ "%define PIC 1"
+	echo >> $@ "%define STACK_ALIGNMENT 32"
+endif
+
 
 $(BUILD)/include/vcs_version.h:
 	mkdir -p $(BUILD)/include
@@ -293,7 +325,7 @@
 $(CHKASM_BIT16)/%.o: $(TESTS_CHKASM)/%.c
 	$(CC_CC) $(BLD_INCL) -DBITDEPTH=16 -o $@ -c $<
 $(TESTS_CHKASM_BLD)/x86/%.obj: $(TESTS_CHKASM)/x86/%.asm
-	@$(NASM) -f elf64 \
+	@$(NASM) -f $(ASMARCH) \
 		-I src/ -I $(BUILD)/ -MQ $@ -MF [email protected] \
 		$< -o $@
 
-- 
Cin mailing list
[email protected]
https://lists.cinelerra-gg.org/mailman/listinfo/cin

Reply via email to