Browse code

yasm buildsystem

Originally committed as revision 14696 to svn://svn.ffmpeg.org/ffmpeg/trunk

Loren Merritt authored on 2008/08/12 08:53:31
Showing 2 changed files
... ...
@@ -8,6 +8,7 @@ ifndef SUBDIR
8 8
 vpath %.c $(SRC_DIR)
9 9
 vpath %.h $(SRC_DIR)
10 10
 vpath %.S $(SRC_DIR)
11
+vpath %.asm $(SRC_DIR)
11 12
 
12 13
 ifeq ($(SRC_DIR),$(SRC_PATH_BARE))
13 14
 BUILD_ROOT_REL = .
... ...
@@ -96,6 +97,12 @@ $(SUBDIR)%-test.o: $(SUBDIR)%.c
96 96
 $(SUBDIR)%-test.o: $(SUBDIR)%-test.c
97 97
 	$(CC) $(CFLAGS) -DTEST -c -o $$@ $$^
98 98
 
99
+$(SUBDIR)i386/%.o: $(SUBDIR)i386/%.asm
100
+	$(YASM) $(YASMFLAGS) -I $$(<D)/ -o $$@ $$<
101
+
102
+$(SUBDIR)i386/%.d: $(SUBDIR)i386/%.asm
103
+	$(YASM) $(YASMFLAGS) -I $$(<D)/ -M -o $$(@:%.d=%.o) $$< > $$@
104
+
99 105
 clean::
100 106
 	rm -f $(TESTS) $(addprefix $(SUBDIR),$(CLEANFILES) $(CLEANSUFFIXES) $(LIBSUFFIXES)) \
101 107
 	    $(addprefix $(SUBDIR), $(foreach suffix,$(CLEANSUFFIXES),$(addsuffix /$(suffix),$(DIRS))))
... ...
@@ -445,6 +445,14 @@ int foo(void){ asm volatile($asm); }
445 445
 EOF
446 446
 }
447 447
 
448
+check_yasm(){
449
+    log check_yasm "$@"
450
+    echo "$1" > $TMPS
451
+    log_file $TMPS
452
+    shift 1
453
+    check_cmd $yasmexe $YASMFLAGS "$@" -o $TMPO $TMPS
454
+}
455
+
448 456
 check_ld(){
449 457
     log check_ld "$@"
450 458
     check_cc || return
... ...
@@ -781,6 +789,7 @@ HAVE_LIST="
781 781
     termios_h
782 782
     threads
783 783
     winsock2_h
784
+    yasm
784 785
 "
785 786
 
786 787
 CMDLINE_SELECT="
... ...
@@ -930,12 +939,14 @@ shlibdir_default="$libdir_default"
930 930
 
931 931
 # toolchain
932 932
 cc="gcc"
933
+yasmexe="yasm"
933 934
 ar="ar"
934 935
 nm="nm"
935 936
 ranlib="ranlib"
936 937
 strip="strip"
937 938
 asmalign_pot="unknown"
938 939
 ln_s="ln -sf"
940
+objformat="elf"
939 941
 
940 942
 # machine
941 943
 arch=`uname -m`
... ...
@@ -1091,6 +1102,7 @@ echo "# $0 $@" > $logfile
1091 1091
 set >> $logfile
1092 1092
 
1093 1093
 cc="${cross_prefix}${cc}"
1094
+yasmexe="${cross_prefix}${yasmexe}"
1094 1095
 ar="${cross_prefix}${ar}"
1095 1096
 nm="${cross_prefix}${nm}"
1096 1097
 ranlib="${cross_prefix}${ranlib}"
... ...
@@ -1245,6 +1257,7 @@ case $target_os in
1245 1245
         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
1246 1246
         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
1247 1247
         FFSERVERLDFLAGS=-Wl,-bind_at_load
1248
+        objformat="macho"
1248 1249
         ;;
1249 1250
     mingw32*)
1250 1251
         target_os=mingw32
... ...
@@ -1271,6 +1284,7 @@ case $target_os in
1271 1271
             install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)"'
1272 1272
         SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"'
1273 1273
         SHFLAGS='-shared -Wl,--output-def,$$(@:$(SLIBSUF)=.def) -Wl,--enable-runtime-pseudo-reloc -Wl,--enable-auto-image-base'
1274
+        objformat="win32"
1274 1275
         ;;
1275 1276
     cygwin*)
1276 1277
         target_os=cygwin
... ...
@@ -1287,12 +1301,14 @@ case $target_os in
1287 1287
         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1288 1288
         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
1289 1289
         SHFLAGS='-shared -Wl,--enable-auto-image-base'
1290
+        objformat="win32"
1290 1291
         ;;
1291 1292
     *-dos|freedos|opendos)
1292 1293
         disable ffplay ffserver vhook
1293 1294
         disable $INDEV_LIST $OUTDEV_LIST
1294 1295
         network_extralibs="-lsocket"
1295 1296
         EXESUF=".exe"
1297
+        objformat="win32"
1296 1298
         ;;
1297 1299
     linux)
1298 1300
         enable dv1394
... ...
@@ -1535,6 +1551,15 @@ EOF
1535 1535
     enabled mmx2  && check_asm mmx2  '"movss %xmm0, %xmm0"'
1536 1536
 
1537 1537
     check_asm bswap '"bswap %%eax" ::: "%eax"'
1538
+
1539
+    YASMFLAGS="-f $objformat -DARCH_$(toupper $arch)"
1540
+    enabled     x86_64        && append YASMFLAGS "-m amd64"
1541
+    enabled_all x86_64 shared && append YASMFLAGS "-DPIC"
1542
+    case "$objformat" in
1543
+        elf) enabled debug && append YASMFLAGS "-g dwarf2" ;;
1544
+        *)                    append YASMFLAGS "-DPREFIX"  ;;
1545
+    esac
1546
+    check_yasm "pabsw xmm0, xmm0" && enable yasm
1538 1547
 fi
1539 1548
 
1540 1549
 # check for assembler specific support
... ...
@@ -2028,6 +2053,7 @@ echo "INCDIR=\$(DESTDIR)$incdir" >> config.mak
2028 2028
 echo "BINDIR=\$(DESTDIR)$bindir" >> config.mak
2029 2029
 echo "MANDIR=\$(DESTDIR)$mandir" >> config.mak
2030 2030
 echo "CC=$cc" >> config.mak
2031
+echo "YASM=$yasmexe" >> config.mak
2031 2032
 echo "AR=$ar" >> config.mak
2032 2033
 echo "RANLIB=$ranlib" >> config.mak
2033 2034
 echo "LN_S=$ln_s" >> config.mak
... ...
@@ -2040,6 +2066,7 @@ echo "VHOOKCFLAGS=$VHOOKCFLAGS" >> config.mak
2040 2040
 echo "LDFLAGS=$LDFLAGS" >> config.mak
2041 2041
 echo "FFSERVERLDFLAGS=$FFSERVERLDFLAGS" >> config.mak
2042 2042
 echo "SHFLAGS=$SHFLAGS" >> config.mak
2043
+echo "YASMFLAGS=$YASMFLAGS" >> config.mak
2043 2044
 echo "VHOOKSHFLAGS=$VHOOKSHFLAGS" >> config.mak
2044 2045
 echo "VHOOKLIBS=$VHOOKLIBS" >> config.mak
2045 2046
 echo "LIBOBJFLAGS=$LIBOBJFLAGS" >> config.mak