X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=configure;h=681535c8330a259e24000e92a870f85dec61fc82;hb=e0d722f85f8599e324be2bebef9430155b25c329;hp=5f6e5f18c2d66b418f660fb7d70798363eb7dcd5;hpb=dd5b5d3959e35c122c7709a9823a26b589c950da;p=x264 diff --git a/configure b/configure index 5f6e5f18..681535c8 100755 --- a/configure +++ b/configure @@ -73,43 +73,54 @@ log_msg() { echo "$1" >> config.log } -intel_cflags() { - # Intel Compiler issues an incredibly large number of warnings on any warning level, - # suppress them by disabling all warnings rather than having to use #pragmas to disable most of them +cc_cflags() { + # several non gcc compilers issue an incredibly large number of warnings on high warning levels, + # suppress them by reducing the warning level rather than having to use #pragmas for arg in $*; do - [ $arg = -ffast-math ] && arg= [[ "$arg" = -falign-loops* ]] && arg= [ "$arg" = -fno-tree-vectorize ] && arg= [ "$arg" = -Wshadow ] && arg= + [ "$arg" = -Wno-maybe-uninitialized ] && arg= [[ "$arg" = -mpreferred-stack-boundary* ]] && arg= [[ "$arg" = -l* ]] && arg= [[ "$arg" = -L* ]] && arg= - if [ $compiler = ICL ]; then - [ "$arg" = -Wall ] && arg=-W0 + if [ $compiler_style = MS ]; then + [ "$arg" = -ffast-math ] && arg="-fp:fast" + [ "$arg" = -Wall ] && arg= + [ "$arg" = -Werror ] && arg="-W3 -WX" [ "$arg" = -g ] && arg=-Z7 [ "$arg" = -fomit-frame-pointer ] && arg= [ "$arg" = -s ] && arg= [ "$arg" = -fPIC ] && arg= else - [ "$arg" = -Wall ] && arg=-w0 + [ "$arg" = -ffast-math ] && arg= + [ "$arg" = -Wall ] && arg= + [ "$arg" = -Werror ] && arg="-w3 -Werror" fi + [ $compiler = CL -a "$arg" = -O3 ] && arg=-O2 [ -n "$arg" ] && echo -n "$arg " done } -icl_ldflags() { +cl_ldflags() { for arg in $*; do arg=${arg/LIBPATH/libpath} - [ ${arg#-libpath:} == $arg -a ${arg#-l} != $arg ] && arg=${arg#-l}.lib - [ ${arg#-L} != $arg ] && arg=-libpath:${arg#-L} - [ $arg = -Wl,--large-address-aware ] && arg=-largeaddressaware - [ $arg = -s ] && arg= + [ "${arg#-libpath:}" == "$arg" -a "${arg#-l}" != "$arg" ] && arg=${arg#-l}.lib + [ "${arg#-L}" != "$arg" ] && arg=-libpath:${arg#-L} + [ "$arg" = -Wl,--large-address-aware ] && arg=-largeaddressaware + [ "$arg" = -s ] && arg= [ "$arg" = -Wl,-Bsymbolic ] && arg= + [ "$arg" = -fno-tree-vectorize ] && arg= + [ "$arg" = -Werror ] && arg= + [ "$arg" = -Wshadow ] && arg= + [ "$arg" = -Wmaybe-uninitialized ] && arg= + [[ "$arg" = -Qdiag-error* ]] && arg= arg=${arg/pthreadGC/pthreadVC} [ "$arg" = avifil32.lib ] && arg=vfw32.lib [ "$arg" = gpac_static.lib ] && arg=libgpac_static.lib + [ "$arg" = x264.lib ] && arg=libx264.lib [ -n "$arg" ] && echo -n "$arg " done @@ -134,12 +145,14 @@ cc_check() { log_check "for $3 in $1"; fi rm -f conftest.c - [ -n "$1" ] && echo "#include <$1>" > conftest.c - echo "int main () { $3 return 0; }" >> conftest.c - if [ $compiler = ICL ]; then - cc_cmd="$CC conftest.c $(intel_cflags $CFLAGS $2) -link $(icl_ldflags $2 $LDFLAGSCLI $LDFLAGS)" + for arg in $1; do + echo "#include <$arg>" >> conftest.c + done + echo "int main (void) { $3 return 0; }" >> conftest.c + if [ $compiler_style = MS ]; then + cc_cmd="$CC conftest.c $(cc_cflags $CFLAGS $CHECK_CFLAGS $2) -link $(cl_ldflags $2 $LDFLAGSCLI $LDFLAGS)" else - cc_cmd="$CC conftest.c $CFLAGS $2 $LDFLAGSCLI $LDFLAGS -o conftest" + cc_cmd="$CC conftest.c $CFLAGS $CHECK_CFLAGS $2 $LDFLAGSCLI $LDFLAGS -o conftest" fi if $cc_cmd >conftest.log 2>&1; then res=$? @@ -163,10 +176,16 @@ cc_check() { cpp_check() { log_check "whether $3 is true" rm -f conftest.c - [ -n "$1" ] && echo "#include <$1>" > conftest.c + for arg in $1; do + echo "#include <$arg>" >> conftest.c + done echo -e "#if !($3) \n#error $4 \n#endif " >> conftest.c - - if $CC conftest.c $CFLAGS $2 -E -o conftest >conftest.log 2>&1; then + if [ $compiler_style = MS ]; then + cpp_cmd="$CC conftest.c $(cc_cflags $CFLAGS $2) -P" + else + cpp_cmd="$CC conftest.c $CFLAGS $2 -E -o conftest" + fi + if $cpp_cmd >conftest.log 2>&1; then res=$? log_ok else @@ -185,8 +204,9 @@ cpp_check() { as_check() { log_check "whether $AS supports $1" - echo "$1" > conftest.asm - if $AS conftest.asm $ASFLAGS $2 -o conftest.o >conftest.log 2>&1; then + echo "$1" > conftest$AS_EXT + as_cmd="$AS conftest$AS_EXT $ASFLAGS $2 -o conftest.o" + if $as_cmd >conftest.log 2>&1; then res=$? log_ok else @@ -194,12 +214,12 @@ as_check() { log_fail log_msg "Failed commandline was:" log_msg "--------------------------------------------------" - log_msg "$AS conftest.asm $ASFLAGS $2 -o conftest.o" + log_msg "$as_cmd" cat conftest.log >> config.log log_msg "--------------------------------------------------" log_msg "Failed program was:" log_msg "--------------------------------------------------" - cat conftest.asm >> config.log + cat conftest$AS_EXT >> config.log log_msg "--------------------------------------------------" fi return $res @@ -208,10 +228,10 @@ as_check() { rc_check() { log_check "whether $RC works" echo "$1" > conftest.rc - if [ $compiler = ICL ]; then - rc_cmd="$RC $RCFLAGS -foconftest.o conftest.rc" - else + if [ $compiler = GNU ]; then rc_cmd="$RC $RCFLAGS -o conftest.o conftest.rc" + else + rc_cmd="$RC $RCFLAGS -foconftest.o conftest.rc" fi if $rc_cmd >conftest.log 2>&1; then res=$? @@ -242,11 +262,66 @@ die() { exit 1 } +configure_system_override() { + log_check "system libx264 configuration" + x264_config_path="$1/x264_config.h" + if [ -e "$x264_config_path" ]; then + res=$? + log_ok + arg="$(grep '#define X264_GPL ' $x264_config_path | sed -e 's/#define X264_GPL *//; s/ *$//')" + if [ -n "$arg" ]; then + [ "$arg" = 0 ] && arg="no" || arg="yes" + [ "$arg" != "$gpl" ] && die "Incompatible license with system libx264" + fi + arg="$(grep '#define X264_BIT_DEPTH ' $x264_config_path | sed -e 's/#define X264_BIT_DEPTH *//; s/ *$//')" + if [ -n "$arg" ]; then + if [ "$arg" != "$bit_depth" ]; then + echo "Override output bit depth with system libx264 configuration" + bit_depth="$arg" + fi + fi + arg="$(grep '#define X264_CHROMA_FORMAT ' $x264_config_path | sed -e 's/#define X264_CHROMA_FORMAT *//; s/ *$//')" + if [ -n "$arg" ]; then + [ "$arg" = 0 ] && arg="all" || arg="${arg#X264_CSP_I}" + if [ "$arg" != "$chroma_format" ]; then + echo "Override output chroma format with system libx264 configuration" + chroma_format="$arg" + fi + fi + arg="$(grep '#define X264_INTERLACED ' $x264_config_path | sed -e 's/#define X264_INTERLACED *//; s/ *$//')" + if [ -n "$arg" ]; then + [ "$arg" = 0 ] && arg="no" || arg="yes" + if [ "$arg" != "$interlaced" ]; then + echo "Override interlaced encoding support with system libx264 configuration" + interlaced="$arg" + fi + fi + else + res=$? + log_fail + log_msg "Failed search path was: $x264_config_path" + fi + return $res +} + rm -f x264_config.h config.h config.mak config.log x264.pc x264.def conftest* -SRCPATH="$(cd $(dirname $0); pwd)" -[ "$SRCPATH" = "$(pwd)" ] && SRCPATH=. -[ -n "$(echo $SRCPATH | grep ' ')" ] && die "Out of tree builds are impossible with whitespace in source path." +# Construct a path to the specified directory relative to the working directory +relative_path() { + local base="${PWD%/}" + local path="$(cd "$1" >/dev/null; printf '%s/.' "${PWD%/}")" + local up='' + + while [[ $path != "$base/"* ]]; do + base="${base%/*}" + up="../$up" + done + + dirname "$up${path#"$base/"}" +} + +SRCPATH="$(relative_path "$(dirname "$0")")" +echo "$SRCPATH" | grep -q ' ' && die "Out of tree builds are impossible with whitespace in source path." [ -e "$SRCPATH/config.h" -o -e "$SRCPATH/x264_config.h" ] && die "Out of tree builds are impossible with config.h/x264_config.h in source dir." prefix='/usr/local' @@ -278,21 +353,27 @@ pic="no" bit_depth="8" chroma_format="all" compiler="GNU" +compiler_style="GNU" opencl="yes" CFLAGS="$CFLAGS -Wall -I. -I\$(SRCPATH)" LDFLAGS="$LDFLAGS" LDFLAGSCLI="$LDFLAGSCLI" -ASFLAGS="$ASFLAGS" +ASFLAGS="$ASFLAGS -I. -I\$(SRCPATH)" RCFLAGS="$RCFLAGS" +CHECK_CFLAGS="" HAVE_GETOPT_LONG=1 cross_prefix="" EXE="" +AS_EXT=".S" +NL=" +" # list of all preprocessor HAVE values we can define CONFIG_HAVE="MALLOC_H ALTIVEC ALTIVEC_H MMX ARMV6 ARMV6T2 NEON BEOSTHREAD POSIXTHREAD WIN32THREAD THREAD LOG2F SWSCALE \ - LAVF FFMS GPAC AVS GPL VECTOREXT INTERLACED CPU_COUNT OPENCL THP LSMASH" + LAVF FFMS GPAC AVS GPL VECTOREXT INTERLACED CPU_COUNT OPENCL THP LSMASH X86_INLINE_ASM AS_FUNC INTEL_DISPATCHER \ + MSA" # parse options @@ -439,23 +520,44 @@ host="${host#*-}" host_vendor="${host%%-*}" host_os="${host#*-}" -# test for use of Intel Compiler +trap 'rm -f conftest*' EXIT + +# test for use of compilers that require specific handling +cc_base=`basename "$CC"` +QPRE="-" if [[ $host_os = mingw* || $host_os = cygwin* ]]; then - if [[ `basename "$CC"` = icl* ]]; then + if [[ "$cc_base" = icl || "$cc_base" = icl[\ .]* ]]; then # Windows Intel Compiler creates dependency generation with absolute Windows paths, Cygwin's make does not support Windows paths. [[ $host_os = cygwin* ]] && die "Windows Intel Compiler support requires MSYS" compiler=ICL + compiler_style=MS CFLAGS="$CFLAGS -Qstd=c99 -nologo -Qms0 -DHAVE_STRING_H -I\$(SRCPATH)/extras" QPRE="-Q" `$CC 2>&1 | grep -q IA-32` && host_cpu=i486 `$CC 2>&1 | grep -q "Intel(R) 64"` && host_cpu=x86_64 cpp_check "" "" "_MSC_VER >= 1400" || die "Windows Intel Compiler support requires Visual Studio 2005 or newer" + if cc_check '' -Qdiag-error:10006,10157 ; then + CHECK_CFLAGS="$CHECK_CFLAGS -Qdiag-error:10006,10157" + fi + elif [[ "$cc_base" = cl || "$cc_base" = cl[\ .]* ]]; then + # Standard Microsoft Visual Studio + compiler=CL + compiler_style=MS + CFLAGS="$CFLAGS -nologo -GS- -DHAVE_STRING_H -I\$(SRCPATH)/extras" + `$CC 2>&1 | grep -q 'x86'` && host_cpu=i486 + `$CC 2>&1 | grep -q 'x64'` && host_cpu=x86_64 + cpp_check '' '' '_MSC_VER > 1800 || (_MSC_VER == 1800 && _MSC_FULL_VER >= 180030324)' || die "Microsoft Visual Studio support requires Visual Studio 2013 Update 2 or newer" fi else - if [[ `basename "$CC"` = icc* ]]; then + if [[ "$cc_base" = icc || "$cc_base" = icc[\ .]* ]]; then AR="xiar" compiler=ICC - QPRE="-" + fi +fi + +if [[ "$cc_base" = clang || "$cc_base" = clang[\ .]* ]]; then + if cc_check '' -Werror=unknown-warning-option ; then + CHECK_CFLAGS="$CHECK_CFLAGS -Werror=unknown-warning-option" fi fi @@ -501,7 +603,7 @@ case $host_os in ;; cygwin*) EXE=".exe" - if cc_check "" -mno-cygwin; then + if [ $compiler_style = GNU ] && cc_check "" -mno-cygwin; then CFLAGS="$CFLAGS -mno-cygwin" LDFLAGS="$LDFLAGS -mno-cygwin" fi @@ -520,7 +622,7 @@ case $host_os in EXE=".exe" DEVNULL="NUL" LDFLAGSCLI="$LDFLAGSCLI -lshell32" - [ $compiler = ICL ] && RC="${RC-rc}" || RC="${RC-${cross_prefix}windres}" + [ $compiler = GNU ] && RC="${RC-${cross_prefix}windres}" || RC="${RC-rc}" ;; sunos*|solaris*) SYS="SunOS" @@ -549,6 +651,9 @@ case $host_os in HAVE_GETOPT_LONG=0 CFLAGS="$CFLAGS -I\$(SRCPATH)/extras" ;; + *haiku*) + SYS="HAIKU" + ;; *) die "Unknown system $host, edit the configure" ;; @@ -560,18 +665,19 @@ stack_alignment=16 case $host_cpu in i*86) ARCH="X86" - AS="yasm" - ASFLAGS="$ASFLAGS -O2 -DARCH_X86_64=0 -I\$(SRCPATH)/common/x86/" + AS="${AS-yasm}" + AS_EXT=".asm" + ASFLAGS="$ASFLAGS -DARCH_X86_64=0 -I\$(SRCPATH)/common/x86/" if [ $compiler = GNU ]; then if [[ "$asm" == auto && "$CFLAGS" != *-march* ]]; then CFLAGS="$CFLAGS -march=i686" fi if [[ "$asm" == auto && "$CFLAGS" != *-mfpmath* ]]; then - CFLAGS="$CFLAGS -mfpmath=sse -msse" + CFLAGS="$CFLAGS -mfpmath=sse -msse -msse2" fi CFLAGS="-m32 $CFLAGS" LDFLAGS="-m32 $LDFLAGS" - else + elif [ $compiler = ICC ]; then # icc on linux has various degrees of mod16 stack support if [ $SYS = LINUX ]; then # < 11 is completely incapable of keeping a mod16 stack @@ -583,46 +689,49 @@ case $host_cpu in fi # >= 12 defaults to a mod16 stack fi - # icl on windows has no mod16 stack support - [ $SYS = WINDOWS ] && stack_alignment=4 + else # ICL/CL + # always a mod4 stack + stack_alignment=4 fi if [ "$SYS" = MACOSX ]; then - ASFLAGS="$ASFLAGS -f macho -DPREFIX" + ASFLAGS="$ASFLAGS -f macho32 -DPREFIX" elif [ "$SYS" = WINDOWS -o "$SYS" = CYGWIN ]; then ASFLAGS="$ASFLAGS -f win32 -DPREFIX" LDFLAGS="$LDFLAGS -Wl,--large-address-aware" - [ $compiler = GNU ] && LDFLAGS="$LDFLAGS -Wl,--nxcompat -Wl,--dynamicbase" + [ $compiler = GNU ] && LDFLAGS="$LDFLAGS -Wl,--dynamicbase,--nxcompat,--tsaware" [ $compiler = GNU ] && RCFLAGS="--target=pe-i386 $RCFLAGS" else - ASFLAGS="$ASFLAGS -f elf" + ASFLAGS="$ASFLAGS -f elf32" fi ;; x86_64) ARCH="X86_64" - AS="yasm" + AS="${AS-yasm}" + AS_EXT=".asm" ASFLAGS="$ASFLAGS -DARCH_X86_64=1 -I\$(SRCPATH)/common/x86/" [ $compiler = GNU ] && CFLAGS="-m64 $CFLAGS" && LDFLAGS="-m64 $LDFLAGS" if [ "$SYS" = MACOSX ]; then - ASFLAGS="$ASFLAGS -f macho64 -m amd64 -DPIC -DPREFIX" + ASFLAGS="$ASFLAGS -f macho64 -DPIC -DPREFIX" if cc_check '' "-arch x86_64"; then CFLAGS="$CFLAGS -arch x86_64" LDFLAGS="$LDFLAGS -arch x86_64" fi elif [ "$SYS" = WINDOWS -o "$SYS" = CYGWIN ]; then - ASFLAGS="$ASFLAGS -f win32 -m amd64" + ASFLAGS="$ASFLAGS -f win64" # only the GNU toolchain is inconsistent in prefixing function names with _ [ $compiler = GNU ] && cc_check "" "-S" && grep -q "_main:" conftest && ASFLAGS="$ASFLAGS -DPREFIX" - [ $compiler = GNU ] && LDFLAGS="$LDFLAGS -Wl,--nxcompat -Wl,--dynamicbase" + [ $compiler = GNU ] && LDFLAGS="$LDFLAGS -Wl,--dynamicbase,--nxcompat,--tsaware" [ $compiler = GNU ] && RCFLAGS="--target=pe-x86-64 $RCFLAGS" else - ASFLAGS="$ASFLAGS -f elf -m amd64" + ASFLAGS="$ASFLAGS -f elf64" fi ;; - powerpc|powerpc64) + powerpc*) ARCH="PPC" if [ $asm = auto ] ; then define HAVE_ALTIVEC - AS="${AS-${cross_prefix}gcc}" + AS="${AS-${CC}}" + AS_EXT=".c" if [ $SYS = MACOSX ] ; then CFLAGS="$CFLAGS -faltivec -fastf -mcpu=G4" else @@ -633,27 +742,16 @@ case $host_cpu in ;; sparc) ARCH="SPARC" - case $(uname -m) in - sun4u|sun4v) - if [ $asm = auto ]; then - ARCH="UltraSPARC" - if ! echo $CFLAGS | grep -Eq '\-mcpu' ; then - CFLAGS="$CFLAGS -mcpu=ultrasparc" - LDFLAGS="$LDFLAGS -mcpu=ultrasparc" - fi - AS="${AS-${cross_prefix}as}" - ASFLAGS="$ASFLAGS -xarch=v8plusa" - fi - ;; - esac ;; - mips|mipsel|mips64|mips64el) + mips*) ARCH="MIPS" + AS="${AS-${CC}}" + AS_EXT=".c" ;; arm*) ARCH="ARM" if [ "$SYS" = MACOSX ] ; then - AS="${AS-extras/gas-preprocessor.pl $CC}" + AS="${AS-${SRCPATH}/tools/gas-preprocessor.pl -arch arm -- ${CC}}" ASFLAGS="$ASFLAGS -DPREFIX -DPIC" # apple's ld doesn't support movw/movt relocations at all # build for armv7 by default if ! echo $CFLAGS | grep -Eq '\-arch' ; then @@ -661,7 +759,16 @@ case $host_cpu in LDFLAGS="$LDFLAGS -arch armv7" fi else - AS="${AS-${cross_prefix}gcc}" + AS="${AS-${CC}}" + fi + ;; + aarch64) + ARCH="AARCH64" + if [ "$SYS" = MACOSX ] ; then + AS="${AS-${SRCPATH}/tools/gas-preprocessor.pl -arch aarch64 -- ${CC}}" + ASFLAGS="$ASFLAGS -DPREFIX" + else + AS="${AS-${CC}}" fi ;; s390|s390x) @@ -701,7 +808,7 @@ log_msg "" cc_check || die "No working C compiler found." -if [ $compiler != ICL ]; then +if [ $compiler_style = GNU ]; then if cc_check '' -std=gnu99 'for( int i = 0; i < 9; i++ );' ; then CFLAGS="$CFLAGS -std=gnu99" elif cc_check '' -std=c99 'for( int i = 0; i < 9; i++ );' ; then @@ -723,14 +830,7 @@ if [ $asm = auto -a \( $ARCH = X86 -o $ARCH = X86_64 \) ] ; then echo "If you really want to compile without asm, configure with --disable-asm." exit 1 fi - if ! cc_check '' '' '__asm__("pabsw %xmm0, %xmm0");' ; then - VER=`(${cross_prefix}as --version || echo no gnu as) 2>/dev/null | head -n 1` - echo "Found $VER" - echo "Minimum version is binutils-2.17" - echo "Your compiler can't handle inline SSSE3 asm." - echo "If you really want to compile without asm, configure with --disable-asm." - exit 1 - fi + cc_check '' '' '__asm__("pabsw %xmm0, %xmm0");' && define HAVE_X86_INLINE_ASM ASFLAGS="$ASFLAGS -Worphan-labels" define HAVE_MMX if [ $compiler = GNU ] && cc_check '' -mpreferred-stack-boundary=5 ; then @@ -746,7 +846,7 @@ if [ $asm = auto -a $ARCH = ARM ] ; then if cc_check '' '' '__asm__("rev ip, ip");' ; then define HAVE_ARMV6 cc_check '' '' '__asm__("movt r0, #0");' && define HAVE_ARMV6T2 cc_check '' '' '__asm__("vadd.i16 q0, q0, q0");' && define HAVE_NEON - ASFLAGS="$ASFLAGS $CFLAGS -c" + ASFLAGS="$ASFLAGS -c" else echo "You specified a pre-ARMv6 or Thumb-1 CPU in your CFLAGS." echo "If you really want to run on such a CPU, configure with --disable-asm." @@ -754,6 +854,35 @@ if [ $asm = auto -a $ARCH = ARM ] ; then fi fi +if [ $asm = auto -a $ARCH = AARCH64 ] ; then + if cc_check '' '' '__asm__("cmeq v0.8h, v0.8h, #0");' ; then define HAVE_NEON + ASFLAGS="$ASFLAGS -c" + else + echo "no NEON support, try adding -mfpu=neon to CFLAGS" + echo "If you really want to run on such a CPU, configure with --disable-asm." + exit 1 + fi +fi + +if [ $asm = auto -a \( $ARCH = ARM -o $ARCH = AARCH64 \) ] ; then + # check if the assembler supports '.func' (clang 3.5 does not) + as_check ".func test${NL}.endfunc" && define HAVE_AS_FUNC 1 +fi + +if [ $asm = auto -a $ARCH = MIPS ] ; then + if ! echo $CFLAGS | grep -Eq '(-march|-mmsa|-mno-msa)' ; then + cc_check '' '-mmsa -mfp64 -mhard-float' && CFLAGS="-mmsa -mfp64 -mhard-float $CFLAGS" + fi + + if cc_check '' '' '__asm__("addvi.b $w0, $w1, 1");' ; then + define HAVE_MSA + else + echo "You specified a pre-MSA CPU in your CFLAGS." + echo "If you really want to run on such a CPU, configure with --disable-asm." + exit 1 + fi +fi + [ $asm = no ] && AS="" [ "x$AS" = x ] && asm="no" || asm="yes" @@ -763,17 +892,30 @@ define SYS_$SYS define STACK_ALIGNMENT $stack_alignment ASFLAGS="$ASFLAGS -DSTACK_ALIGNMENT=$stack_alignment" -# skip endianness check for Intel Compiler, as all supported platforms are little. the -ipo flag will also cause the check to fail +# skip endianness check for Intel Compiler and MSVS, as all supported platforms are little. each have flags that will cause the check to fail as well +CPU_ENDIAN="little-endian" if [ $compiler = GNU ]; then echo "int i[2] = {0x42494745,0}; double f[2] = {0x1.0656e6469616ep+102,0};" > conftest.c $CC $CFLAGS conftest.c -c -o conftest.o 2>/dev/null || die "endian test failed" if (${cross_prefix}strings -a conftest.o | grep -q BIGE) && (${cross_prefix}strings -a conftest.o | grep -q FPendian) ; then define WORDS_BIGENDIAN + CPU_ENDIAN="big-endian" elif !(${cross_prefix}strings -a conftest.o | grep -q EGIB && ${cross_prefix}strings -a conftest.o | grep -q naidnePF) ; then die "endian test failed" fi fi +if [ "$cli_libx264" = "system" -a "$shared" != "yes" ] ; then + [ "$static" = "yes" ] && die "Option --system-libx264 can not be used together with --enable-static" + if ${cross_prefix}pkg-config --exists x264 2>/dev/null; then + X264_LIBS="$(${cross_prefix}pkg-config --libs x264)" + X264_INCLUDE_DIR="${X264_INCLUDE_DIR-$(${cross_prefix}pkg-config --variable=includedir x264)}" + configure_system_override "$X264_INCLUDE_DIR" || die "Detection of system libx264 configuration failed" + else + die "Can not find system libx264" + fi +fi + # autodetect options that weren't forced nor disabled # pthread-win32 is lgpl, prevent its use if --disable-gpl is specified and targeting windows @@ -870,12 +1012,12 @@ if [ "$lavf" = "auto" ] ; then fi if [ -z "$LAVF_LIBS" -a -z "$LAVF_CFLAGS" ]; then LAVF_LIBS="-lavformat" - for lib in -lpostproc -lavcodec -lavcore -lswscale -lavutil -lm -lz -lbz2 $libpthread -lavifil32 -lws2_32; do + for lib in -lpostproc -lavcodec -lswscale -lavutil -lm -lz -lbz2 $libpthread -lavifil32 -lws2_32; do cc_check "" $lib && LAVF_LIBS="$LAVF_LIBS $lib" done fi LAVF_LIBS="-L. $LAVF_LIBS" - if cc_check libavformat/avformat.h "$LAVF_CFLAGS $LAVF_LIBS" "avformat_close_input(0);" ; then + if cc_check libavformat/avformat.h "$LAVF_CFLAGS $LAVF_LIBS" "av_frame_free(0);" ; then if [ "$swscale" = "yes" ]; then lavf="yes" else @@ -937,10 +1079,10 @@ if [ "$lsmash" = "auto" ] ; then [ -z "$LSMASH_LIBS" ] && LSMASH_LIBS="-llsmash" if cc_check lsmash.h "$LSMASH_CFLAGS $LSMASH_LIBS" ; then - if cpp_check lsmash.h "$LSMASH_CFLAGS" "LSMASH_VERSION_MAJOR > 0 || (LSMASH_VERSION_MAJOR == 0 && LSMASH_VERSION_MINOR >= 1)" ; then + if cpp_check lsmash.h "$LSMASH_CFLAGS" "LSMASH_VERSION_MAJOR > 1 || (LSMASH_VERSION_MAJOR == 1 && LSMASH_VERSION_MINOR >= 5)" ; then lsmash="yes" else - echo "Warning: lsmash is too old, update to rev.751 or later" + echo "Warning: lsmash is too old, update to rev.895 or later" fi fi fi @@ -993,7 +1135,7 @@ fi cc_check "stdint.h" "" "uint32_t test_vec __attribute__ ((vector_size (16))) = {0,1,2,3};" && define HAVE_VECTOREXT if [ "$pic" = "yes" ] ; then - CFLAGS="$CFLAGS -fPIC" + [ "$SYS" != WINDOWS -a "$SYS" != CYGWIN ] && CFLAGS="$CFLAGS -fPIC" ASFLAGS="$ASFLAGS -DPIC" # resolve textrels in the x86 asm cc_check stdio.h "-shared -Wl,-Bsymbolic" && SOFLAGS="$SOFLAGS -Wl,-Bsymbolic" @@ -1010,10 +1152,6 @@ fi if [ "$debug" = "yes" ]; then CFLAGS="-O1 -g $CFLAGS" -elif [ $ARCH = ARM ]; then - # arm-gcc-4.2 produces incorrect output with -ffast-math - # and it doesn't save any speed anyway on 4.4, so disable it - CFLAGS="-O3 -fno-fast-math $CFLAGS" else CFLAGS="-O3 -ffast-math $CFLAGS" fi @@ -1042,6 +1180,16 @@ if cc_check '' -Wshadow ; then CFLAGS="-Wshadow $CFLAGS" fi +if cc_check '' -Wmaybe-uninitialized ; then + CFLAGS="-Wno-maybe-uninitialized $CFLAGS" +fi + +if [ $compiler = ICC -o $compiler = ICL ] ; then + if cc_check 'extras/intel_dispatcher.h' '' 'x264_intel_dispatcher_override();' ; then + define HAVE_INTEL_DISPATCHER + fi +fi + if [ "$bit_depth" -gt "8" ]; then define HIGH_BIT_DEPTH ASFLAGS="$ASFLAGS -DHIGH_BIT_DEPTH=1" @@ -1063,15 +1211,6 @@ ASFLAGS="$ASFLAGS -DBIT_DEPTH=$bit_depth" libdl="" if [ "$opencl" = "yes" ]; then opencl="no" - log_check "for perl" - output=$(perl -v) - if [ "$output" = "" ]; then - log_fail - echo 'OpenCL support requires perl to compile.' - echo 'use --disable-opencl to compile without OpenCL.' - exit 1 - fi - log_ok # cygwin can use opencl if it can use LoadLibrary if [ $SYS = WINDOWS ] || ([ $SYS = CYGWIN ] && cc_check windows.h "" "LoadLibraryW(0);") ; then opencl="yes" @@ -1089,17 +1228,49 @@ for var in $CONFIG_HAVE; do grep -q "HAVE_$var 1" config.h || define HAVE_$var 0 done -if [ $compiler = ICL ]; then - AR="xilib -nologo -out:" - DEPMM=-QMM - DEPMT=-QMT +# generate exported config file + +config_chroma_format="X264_CSP_I$chroma_format" +[ "$config_chroma_format" == "X264_CSP_Iall" ] && config_chroma_format="0" +cat > x264_config.h << EOF +#define X264_BIT_DEPTH $bit_depth +#define X264_GPL $x264_gpl +#define X264_INTERLACED $x264_interlaced +#define X264_CHROMA_FORMAT $config_chroma_format +EOF + +${SRCPATH}/version.sh >> x264_config.h + +if [ "$cli_libx264" = "system" ] ; then + if [ "$shared" = "yes" ]; then + CLI_LIBX264='$(SONAME)' + else + CLI_LIBX264= + LDFLAGSCLI="$X264_LIBS $LDFLAGSCLI" + cc_check 'stdint.h x264.h' '' 'x264_encoder_open(0);' || die "System libx264 can't be used for compilation of this version" + fi +else + CLI_LIBX264='$(LIBX264)' +fi + +DEPMM="${QPRE}MM" +DEPMT="${QPRE}MT" +if [ $compiler_style = MS ]; then + AR="lib -nologo -out:" + LD="link -out:" + if [ $compiler = ICL ]; then + AR="xi$AR" + LD="xi$LD" + else + mslink="$(dirname "$(command -v cl 2>/dev/null)")/link" + [ -x "$mslink" ] && LD="\"$mslink\" -out:" + fi HAVE_GETOPT_LONG=0 - LD="xilink -out:" - LDFLAGS="-nologo -incremental:no $(icl_ldflags $LDFLAGS)" - LDFLAGSCLI="$(icl_ldflags $LDFLAGSCLI)" + LDFLAGS="-nologo -incremental:no $(cl_ldflags $LDFLAGS)" + LDFLAGSCLI="$(cl_ldflags $LDFLAGSCLI)" LIBX264=libx264.lib RANLIB= - [ -n "$RC" ] && RCFLAGS="$RCFLAGS -I. -I\$(SRCPATH)/extras -fo" + [ -n "$RC" ] && RCFLAGS="$RCFLAGS -nologo -I. -I\$(SRCPATH)/extras -fo" STRIP= if [ $debug = yes ]; then LDFLAGS="-debug $LDFLAGS" @@ -1107,42 +1278,39 @@ if [ $compiler = ICL ]; then else CFLAGS="-DNDEBUG $CFLAGS" fi -else +else # gcc/icc + DEPMM="$DEPMM -g0" AR="$AR rc " - DEPMM="-MM -g0" - DEPMT="-MT" LD="$CC -o " LIBX264=libx264.a [ -n "$RC" ] && RCFLAGS="$RCFLAGS -I. -o " fi -if [ $compiler = GNU ]; then - PROF_GEN_CC="-fprofile-generate" - PROF_GEN_LD="-fprofile-generate" - PROF_USE_CC="-fprofile-use" - PROF_USE_LD="-fprofile-use" -else - CFLAGS="$(intel_cflags $CFLAGS)" +[ $compiler != GNU ] && CFLAGS="$(cc_cflags $CFLAGS)" +if [ $compiler = ICC -o $compiler = ICL ]; then # icc does not define __SSE__ until SSE2 optimization and icl never defines it or _M_IX86_FP [ \( $ARCH = X86_64 -o $ARCH = X86 \) -a $asm = yes ] && ! cpp_check "" "" "defined(__SSE__)" && define __SSE__ PROF_GEN_CC="${QPRE}prof-gen ${QPRE}prof-dir." PROF_GEN_LD= PROF_USE_CC="${QPRE}prof-use ${QPRE}prof-dir." PROF_USE_LD= +elif [ $compiler = CL ]; then + # Visual Studio + # _M_IX86_FP is only defined on x86 + [ $ARCH = X86 ] && cpp_check '' '' '_M_IX86_FP >= 1' && define __SSE__ + [ $ARCH = X86_64 ] && define __SSE__ + # As long as the cli application can't link against the dll, the dll can not be pgo'd. + # pgds are link flag specific and the -dll flag for creating the dll makes it unshareable with the cli + PROF_GEN_CC="-GL" + PROF_GEN_LD="-LTCG:PGINSTRUMENT" + PROF_USE_CC="-GL" + PROF_USE_LD="-LTCG:PGOPTIMIZE" +else + PROF_GEN_CC="-fprofile-generate" + PROF_GEN_LD="-fprofile-generate" + PROF_USE_CC="-fprofile-use" + PROF_USE_LD="-fprofile-use" fi -rm -f conftest* - -# generate exported config file - -config_chroma_format="X264_CSP_I$chroma_format" -[ "$config_chroma_format" == "X264_CSP_Iall" ] && config_chroma_format="0" -cat > x264_config.h << EOF -#define X264_BIT_DEPTH $bit_depth -#define X264_GPL $x264_gpl -#define X264_INTERLACED $x264_interlaced -#define X264_CHROMA_FORMAT $config_chroma_format -EOF - # generate config files cat > config.mak << EOF @@ -1152,10 +1320,12 @@ exec_prefix=$exec_prefix bindir=$bindir libdir=$libdir includedir=$includedir -ARCH=$ARCH +SYS_ARCH=$ARCH SYS=$SYS CC=$CC CFLAGS=$CFLAGS +COMPILER=$compiler +COMPILER_STYLE=$compiler_style DEPMM=$DEPMM DEPMT=$DEPMT LD=$LD @@ -1179,7 +1349,7 @@ PROF_USE_LD=$PROF_USE_LD HAVE_OPENCL=$opencl EOF -if [ $compiler = ICL ]; then +if [ $compiler_style = MS ]; then echo '%.o: %.c' >> config.mak echo ' $(CC) $(CFLAGS) -c -Fo$@ $<' >> config.mak fi @@ -1193,7 +1363,7 @@ if [ "$shared" = "yes" ]; then API=$(grep '#define X264_BUILD' < ${SRCPATH}/x264.h | cut -f 3 -d ' ') if [ "$SYS" = "WINDOWS" -o "$SYS" = "CYGWIN" ]; then echo "SONAME=libx264-$API.dll" >> config.mak - if [ $compiler = ICL ]; then + if [ $compiler_style = MS ]; then echo 'IMPLIBNAME=libx264.dll.lib' >> config.mak # GNU ld on windows defaults to exporting all global functions if there are no explicit __declspec(dllexport) declarations # MSVC link does not act similarly, so it is required to make an export definition out of x264.h and use it at link time @@ -1229,23 +1399,9 @@ if [ "$static" = "yes" ]; then echo 'install: install-lib-static' >> config.mak fi -if [ "$cli_libx264" = "system" ] ; then - if [ "$shared" = "yes" ]; then - CLI_LIBX264='$(SONAME)' - elif ${cross_prefix}pkg-config --exists x264 2>/dev/null; then - LDFLAGSCLI="$LDFLAGSCLI $(${cross_prefix}pkg-config --libs x264)" - CLI_LIBX264= - else - die "Can not find system libx264" - fi -else - CLI_LIBX264='$(LIBX264)' -fi echo "LDFLAGSCLI = $LDFLAGSCLI" >> config.mak echo "CLI_LIBX264 = $CLI_LIBX264" >> config.mak -${SRCPATH}/version.sh "${SRCPATH}" >> x264_config.h - cat > x264.pc << EOF prefix=$prefix exec_prefix=$exec_prefix @@ -1267,6 +1423,7 @@ gpl_filters="" cat > conftest.log <> config.log cat conftest.log >> config.log cat conftest.log -rm conftest.log [ "$SRCPATH" != "." ] && ln -sf ${SRCPATH}/Makefile ./Makefile -mkdir -p common/{arm,ppc,sparc,x86} encoder extras filters/video input output tools +mkdir -p common/{aarch64,arm,ppc,x86} encoder extras filters/video input output tools echo echo "You can run 'make' or 'make fprofiled' now."