--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]
}
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=
[[ "$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
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'
# 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 WINRT"
# parse options
--disable-thread)
thread="no"
;;
- --enable-win32thread)
- thread="win32"
+ --disable-win32thread)
+ [ "$thread" != "no" ] && thread="posix"
;;
--disable-swscale)
swscale="no"
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
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
HAVE_GETOPT_LONG=0
CFLAGS="$CFLAGS -I\$(SRCPATH)/extras"
;;
+ *haiku*)
+ SYS="HAIKU"
+ ;;
*)
die "Unknown system $host, edit the configure"
;;
LDFLAGS="$LDFLAGS $libm"
-stack_alignment=16
+stack_alignment=4
case $host_cpu in
i*86)
ARCH="X86"
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"
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"
fi
elif [ "$SYS" = WINDOWS -o "$SYS" = CYGWIN ]; then
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,--dynamicbase,--nxcompat,--tsaware"
- [ $compiler = GNU ] && RCFLAGS="--target=pe-x86-64 $RCFLAGS"
+ if [ $compiler = GNU ]; then
+ # only the GNU toolchain is inconsistent in prefixing function names with _
+ cc_check "" "-S" && grep -q "_main:" conftest && ASFLAGS="$ASFLAGS -DPREFIX"
+ cc_check "" "-Wl,--high-entropy-va" && LDFLAGS="$LDFLAGS -Wl,--high-entropy-va"
+ LDFLAGS="$LDFLAGS -Wl,--dynamicbase,--nxcompat,--tsaware"
+ LDFLAGSCLI="$LDFLAGSCLI -Wl,--image-base,0x140000000"
+ SOFLAGS="$SOFLAGS -Wl,--image-base,0x180000000"
+ RCFLAGS="--target=pe-x86-64 $RCFLAGS"
+ fi
else
ASFLAGS="$ASFLAGS -f elf64"
fi
;;
aarch64)
ARCH="AARCH64"
+ stack_alignment=16
if [ "$SYS" = MACOSX ] ; then
AS="${AS-${SRCPATH}/tools/gas-preprocessor.pl -arch aarch64 -- ${CC}}"
ASFLAGS="$ASFLAGS -DPREFIX"
if ! rc_check "0 RCDATA {0}" ; then
RC=""
fi
+
+ if cpp_check "winapifamily.h" "" "!WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)" ; then
+ [ $compiler = CL ] || die "WinRT requires MSVC"
+ define HAVE_WINRT
+ CFLAGS="$CFLAGS -MD"
+ LDFLAGS="$LDFLAGS -appcontainer"
+ if ! cpp_check "" "" "defined(_WIN32_WINNT) && _WIN32_WINNT >= 0x0603" ; then
+ die "_WIN32_WINNT must be defined to at least 0x0603 (Windows 8.1) for WinRT"
+ elif cpp_check "" "" "_WIN32_WINNT >= 0x0A00" ; then
+ # Universal Windows Platform (Windows 10)
+ LDFLAGS="$LDFLAGS -lWindowsApp"
+ fi
+ cli="no"
+ opencl="no"
+ fi
fi
log_msg "x264 configure script"
if [ $compiler_style = GNU ]; then
if cc_check '' -std=gnu99 'for( int i = 0; i < 9; i++ );' ; then
- CFLAGS="$CFLAGS -std=gnu99"
+ CFLAGS="$CFLAGS -std=gnu99 -D_POSIX_C_SOURCE=200112L -D_GNU_SOURCE"
elif cc_check '' -std=c99 'for( int i = 0; i < 9; i++ );' ; then
CFLAGS="$CFLAGS -std=c99 -D_POSIX_C_SOURCE=200112L -D_BSD_SOURCE"
elif ! cc_check '' '' 'for( int i = 0; i < 9; i++ );' ; then
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`
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
# 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)
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"
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
+if [ "$cli" = "no" ] ; then
+ avs="no"
+ lavf="no"
+ ffms="no"
+ gpac="no"
+ lsmash="no"
+ mp4="no"
+ swscale="no"
+fi
+
if [ "$swscale" = "auto" ] ; then
swscale="no"
if ${cross_prefix}pkg-config --exists libswscale 2>/dev/null; then
fi
if [ "$ffms" = "auto" ] ; then
- ffms_major="2"; ffms_minor="16"; ffms_micro="2"; ffms_bump="0"
+ ffms_major="2"; ffms_minor="21"; ffms_micro="0"; ffms_bump="0"
ffms="no"
if ${cross_prefix}pkg-config --exists ffms2 2>/dev/null; then
#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
grep "extern.*x264" ${SRCPATH}/x264.h | sed -e "s/.*\(x264\w*\)\W.*/\1 DATA/;" >> x264.def
else
echo 'IMPLIBNAME=libx264.dll.a' >> config.mak
- echo "SOFLAGS=-shared -Wl,--out-implib,\$(IMPLIBNAME) -Wl,--enable-auto-image-base $SOFLAGS" >> config.mak
+ echo "SOFLAGS=-shared -Wl,--out-implib,\$(IMPLIBNAME) $SOFLAGS" >> config.mak
fi
elif [ "$SYS" = "MACOSX" ]; then
echo "SOSUFFIX=dylib" >> config.mak