summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--common.mak10
-rw-r--r--doc/build_system.txt5
-rw-r--r--doc/optimization.txt5
-rw-r--r--library.mak6
4 files changed, 24 insertions, 2 deletions
diff --git a/common.mak b/common.mak
index a493792657..a6fabb300a 100644
--- a/common.mak
+++ b/common.mak
@@ -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
diff --git a/doc/build_system.txt b/doc/build_system.txt
index 2efde5ce02..20242b1353 100644
--- a/doc/build_system.txt
+++ b/doc/build_system.txt
@@ -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.
diff --git a/doc/optimization.txt b/doc/optimization.txt
index 94a4277326..1a0b98cd0e 100644
--- a/doc/optimization.txt
+++ b/doc/optimization.txt
@@ -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)
diff --git a/library.mak b/library.mak
index 72e5574386..e23abd2251 100644
--- a/library.mak
+++ b/library.mak
@@ -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) $@)