x86/doc/Makefile: DBG=1 to preprocess external asm

The macro hell sometimes make it difficult to trace the source of
an error, so it is easier to analyze the preprocessed output.

This patch makes this automatical by specifying DBG=1 on the
command line: a file ffmpeg/dir/file.asm gets preprocessed to
builddir/dir/file.dbg.asm, which is then compiled.

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
Christophe Gisquet 2015-02-08 12:18:27 +01:00 committed by Michael Niedermayer
parent d9293c776e
commit bc8e044d8c
4 changed files with 24 additions and 2 deletions

View File

@ -5,6 +5,14 @@
# first so "all" becomes default target
all: all-yes
DEFAULT_YASMD=.dbg
ifndef DBG
YASMD=
else
YASMD=$(DEFAULT_YASMD)
endif
ifndef SUBDIR
ifndef V
@ -138,7 +146,7 @@ $(TOOLOBJS): | tools
OBJDIRS := $(OBJDIRS) $(dir $(OBJS) $(HOBJS) $(HOSTOBJS) $(SLIBOBJS) $(TESTOBJS))
CLEANSUFFIXES = *.d *.o *~ *.h.c *.map *.ver *.ho *.gcno *.gcda
CLEANSUFFIXES = *.d *.o *~ *.h.c *.map *.ver *.ho *.gcno *.gcda *$(DEFAULT_YASMD).asm
DISTCLEANSUFFIXES = *.pc
LIBSUFFIXES = *.a *.lib *.so *.so.* *.dylib *.dll *.def *.dll.a

View File

@ -7,6 +7,11 @@ V
Disable the default terse mode, the full command issued by make and its
output will be shown on the screen.
DBG
Preprocess x86 external assembler files to a .dbg.asm file in the object
directory, which then gets compiled. Helps developping those assembler
files.
DESTDIR
Destination directory for the install targets, useful to prepare packages
or install FFmpeg in cross-environments.

View File

@ -191,6 +191,11 @@ __asm__() block.
Use external asm (nasm/yasm) or inline asm (__asm__()), do not use intrinsics.
The latter requires a good optimizing compiler which gcc is not.
When debugging a x86 external asm compilation issue, if lost in the macro
expansions, add DBG=1 to your make command-line: the input file will be
preprocessed, stripped of the debug/empty lines, then compiled, showing the
actual lines causing issues.
Inline asm vs. external asm
---------------------------
Both inline asm (__asm__("..") in a .c file, handled by a compiler such as gcc)

View File

@ -22,7 +22,11 @@ $(SUBDIR)%-test.i: $(SUBDIR)%-test.c
$(SUBDIR)%-test.i: $(SUBDIR)%.c
$(CC) $(CCFLAGS) $(CC_E) $<
$(SUBDIR)x86/%.o: $(SUBDIR)x86/%.asm
$(SUBDIR)x86/%$(DEFAULT_YASMD).asm: $(SUBDIR)x86/%.asm
$(DEPYASM) $(YASMFLAGS) -I $(<D)/ -M -o $@ $< > $(@:.asm=.d)
$(YASM) $(YASMFLAGS) -I $(<D)/ -e $< | sed '/^%/d;/^$$/d;' > $@
$(SUBDIR)x86/%.o: $(SUBDIR)x86/%$(YASMD).asm
$(DEPYASM) $(YASMFLAGS) -I $(<D)/ -M -o $@ $< > $(@:.o=.d)
$(YASM) $(YASMFLAGS) -I $(<D)/ -o $@ $<
-$(if $(ASMSTRIPFLAGS), $(STRIP) $(ASMSTRIPFLAGS) $@)