X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;ds=inline;f=configure;h=741f6d69e87dcb787bd4caa7ba0279d2917fc7d7;hb=3d972062c8a37d1a19586e2351e889b0a70beb40;hp=d82c44906d3ed48d52d5c0363340b6e2b10b6f81;hpb=ce0757d9d2778e349a7c2f6445b6aa75d8765c30;p=x264 diff --git a/configure b/configure index d82c4490..741f6d69 100755 --- a/configure +++ b/configure @@ -28,7 +28,7 @@ Configuration options: --disable-opencl disable OpenCL features --disable-gpl disable GPL-only features --disable-thread disable multithreaded encoding - --enable-win32thread use win32threads (windows only) + --disable-win32thread disable win32threads (windows only) --disable-interlaced disable interlaced encoding support --bit-depth=BIT_DEPTH set output bit depth (8-10) [8] --chroma-format=FORMAT output chroma format (420, 422, 444, all) [all] @@ -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 @@ -305,9 +306,22 @@ configure_system_override() { 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' @@ -359,7 +373,7 @@ 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 \ - MSA" + MSA MMAP" # parse options @@ -432,8 +446,8 @@ for opt do --disable-thread) thread="no" ;; - --enable-win32thread) - thread="win32" + --disable-win32thread) + [ "$thread" != "no" ] && thread="posix" ;; --disable-swscale) swscale="no" @@ -527,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 @@ -589,29 +601,18 @@ case $host_os in define HAVE_MALLOC_H libm="-lm" ;; - cygwin*) + cygwin*|mingw*|msys*) EXE=".exe" - if cc_check "" -mno-cygwin; then - CFLAGS="$CFLAGS -mno-cygwin" - LDFLAGS="$LDFLAGS -mno-cygwin" - fi - if cpp_check "" "" "defined(__CYGWIN__)" ; then - define HAVE_MALLOC_H + if [[ $host_os = cygwin* ]] && cpp_check "" "" "defined(__CYGWIN__)" ; then SYS="CYGWIN" + define HAVE_MALLOC_H else SYS="WINDOWS" DEVNULL="NUL" LDFLAGSCLI="$LDFLAGSCLI -lshell32" - RC="${RC-${cross_prefix}windres}" + [ $compiler = GNU ] && RC="${RC-${cross_prefix}windres}" || RC="${RC-rc}" fi ;; - mingw*) - SYS="WINDOWS" - EXE=".exe" - DEVNULL="NUL" - LDFLAGSCLI="$LDFLAGSCLI -lshell32" - [ $compiler = GNU ] && RC="${RC-${cross_prefix}windres}" || RC="${RC-rc}" - ;; sunos*|solaris*) SYS="SunOS" define HAVE_MALLOC_H @@ -639,6 +640,9 @@ case $host_os in HAVE_GETOPT_LONG=0 CFLAGS="$CFLAGS -I\$(SRCPATH)/extras" ;; + *haiku*) + SYS="HAIKU" + ;; *) die "Unknown system $host, edit the configure" ;; @@ -646,7 +650,7 @@ esac LDFLAGS="$LDFLAGS $libm" -stack_alignment=16 +stack_alignment=4 case $host_cpu in i*86) ARCH="X86" @@ -658,32 +662,17 @@ case $host_cpu in 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 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 elf32" @@ -694,6 +683,7 @@ case $host_cpu in 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 -DPIC -DPREFIX" @@ -705,13 +695,13 @@ case $host_cpu in 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 elf64" fi ;; - powerpc|powerpc64) + powerpc*) ARCH="PPC" if [ $asm = auto ] ; then define HAVE_ALTIVEC @@ -749,6 +739,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" @@ -807,6 +798,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` @@ -818,10 +832,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 @@ -840,9 +850,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 @@ -881,11 +888,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 @@ -904,11 +913,25 @@ fi # autodetect options that weren't forced nor disabled -# pthread-win32 is lgpl, prevent its use if --disable-gpl is specified and targeting windows -[ "$SYS" = "WINDOWS" -a "$gpl" = "no" -a "$thread" = "auto" ] && thread="win32" - libpthread="" -if [ "$thread" = "auto" ]; then +if [ "$SYS" = "WINDOWS" -a "$thread" = "posix" ] ; then + if [ "$gpl" = "no" ] ; then + echo "Warning: pthread-win32 is LGPL and is therefore not supported with --disable-gpl" + thread="no" + elif cc_check pthread.h -lpthread "pthread_create(0,0,0,0);" ; then + libpthread="-lpthread" + elif cc_check pthread.h -lpthreadGC2 "pthread_create(0,0,0,0);" ; then + libpthread="-lpthreadGC2" + elif cc_check pthread.h "-lpthreadGC2 -lwsock32 -DPTW32_STATIC_LIB" "pthread_create(0,0,0,0);" ; then + libpthread="-lpthreadGC2 -lwsock32" + define PTW32_STATIC_LIB + elif cc_check pthread.h "-lpthreadGC2 -lws2_32 -DPTW32_STATIC_LIB" "pthread_create(0,0,0,0);" ; then + libpthread="-lpthreadGC2 -lws2_32" + define PTW32_STATIC_LIB + else + thread="no" + fi +elif [ "$thread" != "no" ] ; then thread="no" case $SYS in BEOS) @@ -916,24 +939,8 @@ if [ "$thread" = "auto" ]; then define HAVE_BEOSTHREAD ;; WINDOWS) - if cc_check pthread.h -lpthread "pthread_create(0,0,0,0);" ; then - thread="posix" - libpthread="-lpthread" - elif cc_check pthread.h -lpthreadGC2 "pthread_create(0,0,0,0);" ; then - thread="posix" - libpthread="-lpthreadGC2" - elif cc_check pthread.h "-lpthreadGC2 -lwsock32 -DPTW32_STATIC_LIB" "pthread_create(0,0,0,0);" ; then - thread="posix" - libpthread="-lpthreadGC2 -lwsock32" - define PTW32_STATIC_LIB - elif cc_check pthread.h "-lpthreadGC2 -lws2_32 -DPTW32_STATIC_LIB" "pthread_create(0,0,0,0);" ; then - thread="posix" - libpthread="-lpthreadGC2 -lws2_32" - define PTW32_STATIC_LIB - else - # default to native threading if pthread-win32 is unavailable - thread="win32" - fi + thread="win32" + define HAVE_WIN32THREAD ;; QNX) cc_check pthread.h -lc "pthread_create(0,0,0,0);" && thread="posix" && libpthread="-lc" @@ -955,20 +962,16 @@ if [ "$thread" = "posix" ]; then define HAVE_CPU_COUNT fi fi -if [ "$thread" = "win32" ]; then - # cygwin does not support win32 threads - if [ "$SYS" = "WINDOWS" ]; then - define HAVE_WIN32THREAD - else - thread="no" - fi -fi [ "$thread" != "no" ] && define HAVE_THREAD if cc_check "math.h" "-Werror" "return log2f(2);" ; then define HAVE_LOG2F fi +if [ "$SYS" != "WINDOWS" ] && cpp_check "sys/mman.h unistd.h" "" "defined(MAP_PRIVATE)"; then + define HAVE_MMAP +fi + if [ "$SYS" = "LINUX" -a \( "$ARCH" = "X86" -o "$ARCH" = "X86_64" \) ] && cc_check "sys/mman.h" "" "MADV_HUGEPAGE;" ; then define HAVE_THP fi @@ -1225,7 +1228,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 @@ -1244,7 +1247,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)" @@ -1403,6 +1412,7 @@ gpl_filters="" cat > conftest.log <