X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=configure;h=0e9df9d39a81809eb733c6cfd79225d9f2a9fe7b;hb=5c6570495f8f1c716b294aee1430d8766a4beb9c;hp=15b1c9114749909bae35e2952862a2744e019148;hpb=8e71b432e5dbe835fa4516064f6841a03c79b183;p=x264 diff --git a/configure b/configure index 15b1c911..0e9df9d3 100755 --- a/configure +++ b/configure @@ -74,10 +74,9 @@ log_msg() { } cc_cflags() { - # several non gcc compilers issue 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 + # 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= @@ -86,14 +85,16 @@ cc_cflags() { [[ "$arg" = -l* ]] && arg= [[ "$arg" = -L* ]] && arg= if [ $compiler_style = MS ]; then - [ "$arg" = -Wall ] && arg=-W0 + [ "$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 @@ -263,57 +264,64 @@ die() { configure_system_override() { log_check "system libx264 configuration" - x264_config_path= - for arg in $1; do - if [ "${arg#-I}" != "$arg" -a -e "${arg#-I}/x264_config.h" ]; then - x264_config_path=${arg#-I}/x264_config.h - break - fi - done - if [ -n "$x264_config_path" ]; then + 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/ *$//') + 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/ *$//') + 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 + bit_depth="$arg" fi fi - arg=$(grep '#define X264_CHROMA_FORMAT ' $x264_config_path | sed -e 's/#define X264_CHROMA_FORMAT *//; s/ *$//') + 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 + chroma_format="$arg" fi fi - arg=$(grep '#define X264_INTERLACED ' $x264_config_path | sed -e 's/#define X264_INTERLACED *//; s/ *$//') + 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 + interlaced="$arg" fi fi else res=$? log_fail - log_msg "Failed search path was: $1" + 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' @@ -364,7 +372,8 @@ 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 X86_INLINE_ASM AS_FUNC INTEL_DISPATCHER" + LAVF FFMS GPAC AVS GPL VECTOREXT INTERLACED CPU_COUNT OPENCL THP LSMASH X86_INLINE_ASM AS_FUNC INTEL_DISPATCHER \ + MSA" # parse options @@ -532,13 +541,11 @@ if [[ $host_os = mingw* || $host_os = cygwin* ]]; then fi elif [[ "$cc_base" = cl || "$cc_base" = cl[\ .]* ]]; then # Standard Microsoft Visual Studio - # Dependency creation includes absolute windows paths, Cygwin's make does not support Windows paths. - [[ $host_os = cygwin* ]] && die "Microsoft Visual Studio support requires MSYS" compiler=CL compiler_style=MS - CFLAGS="$CFLAGS -nologo -DHAVE_STRING_H -I\$(SRCPATH)/extras" - `$CC 2>&1 | grep -q 'for x86'` && host_cpu=i486 - `$CC 2>&1 | grep -q 'for x64'` && host_cpu=x86_64 + 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 @@ -596,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 @@ -644,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" ;; @@ -651,72 +661,58 @@ esac LDFLAGS="$LDFLAGS $libm" -stack_alignment=16 +stack_alignment=4 case $host_cpu in i*86) ARCH="X86" - AS="yasm" + AS="${AS-yasm}" AS_EXT=".asm" - ASFLAGS="$ASFLAGS -O2 -DARCH_X86_64=0 -I\$(SRCPATH)/common/x86/" + 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" - 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 - if cpp_check "" "" "__INTEL_COMPILER < 1100" ; then - stack_alignment=4 - # 11 <= x < 12 is capable of keeping a mod16 stack, but defaults to not doing so. - elif cpp_check "" "" "__INTEL_COMPILER < 1200" ; then - CFLAGS="$CFLAGS -falign-stack=assume-16-byte" - fi - # >= 12 defaults to a mod16 stack - fi - 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/" + stack_alignment=16 [ $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 @@ -733,8 +729,10 @@ case $host_cpu in sparc) ARCH="SPARC" ;; - mips|mipsel|mips64|mips64el) + mips*) ARCH="MIPS" + AS="${AS-${CC}}" + AS_EXT=".c" ;; arm*) ARCH="ARM" @@ -752,6 +750,7 @@ case $host_cpu in ;; aarch64) ARCH="AARCH64" + stack_alignment=16 if [ "$SYS" = MACOSX ] ; then AS="${AS-${SRCPATH}/tools/gas-preprocessor.pl -arch aarch64 -- ${CC}}" ASFLAGS="$ASFLAGS -DPREFIX" @@ -810,6 +809,29 @@ if [ $shared = yes -a \( $ARCH = "X86_64" -o $ARCH = "PPC" -o $ARCH = "ALPHA" -o pic="yes" fi +if [ $compiler = GNU -a \( $ARCH = X86 -o $ARCH = X86_64 \) ] ; then + if cc_check '' -mpreferred-stack-boundary=5 ; then + CFLAGS="$CFLAGS -mpreferred-stack-boundary=5" + stack_alignment=32 + elif [ $stack_alignment -lt 16 ] && cc_check '' -mpreferred-stack-boundary=4 ; then + CFLAGS="$CFLAGS -mpreferred-stack-boundary=4" + stack_alignment=16 + fi +elif [ $compiler = ICC -a $ARCH = X86 ]; then + # icc on linux has various degrees of mod16 stack support + if [ $SYS = LINUX ]; then + # >= 12 defaults to a mod16 stack + if cpp_check "" "" "__INTEL_COMPILER >= 1200" ; then + stack_alignment=16 + # 11 <= x < 12 is capable of keeping a mod16 stack, but defaults to not doing so. + elif cpp_check "" "" "__INTEL_COMPILER >= 1100" ; then + CFLAGS="$CFLAGS -falign-stack=assume-16-byte" + stack_alignment=16 + fi + # < 11 is completely incapable of keeping a mod16 stack + fi +fi + if [ $asm = auto -a \( $ARCH = X86 -o $ARCH = X86_64 \) ] ; then if ! as_check "vpmovzxwd ymm0, xmm0" ; then VER=`($AS --version || echo no assembler) 2>/dev/null | head -n 1` @@ -821,10 +843,6 @@ if [ $asm = auto -a \( $ARCH = X86 -o $ARCH = X86_64 \) ] ; then 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 - CFLAGS="$CFLAGS -mpreferred-stack-boundary=5" - stack_alignment=32 - fi fi if [ $asm = auto -a $ARCH = ARM ] ; then @@ -843,9 +861,6 @@ if [ $asm = auto -a $ARCH = ARM ] ; then fi if [ $asm = auto -a $ARCH = AARCH64 ] ; then - # set flags so neon is built by default - echo $CFLAGS | grep -Eq '(-mcpu|-march|-mfpu|-arch)' || CFLAGS="$CFLAGS -arch arm64 -mfpu=neon" - if cc_check '' '' '__asm__("cmeq v0.8h, v0.8h, #0");' ; then define HAVE_NEON ASFLAGS="$ASFLAGS -c" else @@ -860,6 +875,20 @@ if [ $asm = auto -a \( $ARCH = ARM -o $ARCH = AARCH64 \) ] ; then 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" @@ -870,11 +899,13 @@ define STACK_ALIGNMENT $stack_alignment ASFLAGS="$ASFLAGS -DSTACK_ALIGNMENT=$stack_alignment" # 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 @@ -883,9 +914,9 @@ 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="$X264_LIBS $(${cross_prefix}pkg-config --libs x264)" - X264_CFLAGS="$X264_CFLAGS $(${cross_prefix}pkg-config --cflags x264)" - configure_system_override "$X264_CFLAGS" || die "Detection of system libx264 configuration failed" + 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 @@ -1110,7 +1141,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" @@ -1214,7 +1245,7 @@ cat > x264_config.h << EOF #define X264_CHROMA_FORMAT $config_chroma_format EOF -${SRCPATH}/version.sh "${SRCPATH}" >> x264_config.h +${SRCPATH}/version.sh >> x264_config.h if [ "$cli_libx264" = "system" ] ; then if [ "$shared" = "yes" ]; then @@ -1233,7 +1264,13 @@ DEPMT="${QPRE}MT" if [ $compiler_style = MS ]; then AR="lib -nologo -out:" LD="link -out:" - [ $compiler = ICL ] && AR="xi$AR" && LD="xi$LD" + 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 LDFLAGS="-nologo -incremental:no $(cl_ldflags $LDFLAGS)" LDFLAGSCLI="$(cl_ldflags $LDFLAGSCLI)" @@ -1392,6 +1429,7 @@ gpl_filters="" cat > conftest.log <