5 ## This script is sourced by the main configure script and contains
6 ## utility functions and other common bits that aren't strictly libvpx
9 ## This build system is based in part on the FFmpeg configure script.
14 # Logging / Output Functions
17 echo "Unknown option \"$1\"."
18 echo "See $0 --help for available options."
26 echo "Configuration failed. This could reflect a misconfiguration of your"
27 echo "toolchains, improper options selected, or another problem. If you"
28 echo "don't see any useful error messages above, the next step is to look"
29 echo "at the configure error log file ($logfile) to determine what"
30 echo "configure was trying to do when it died."
53 echo "$@" >> ${outfile}
57 for opt in ${CMDLINE_SELECT}; do
58 opt2=`echo $opt | sed -e 's;_;-;g'`
60 eval "toggle_${opt}=\"--disable-${opt2}\""
62 eval "toggle_${opt}=\"--enable-${opt2} \""
67 Usage: configure [options]
71 --help print this message
72 --log=yes|no|FILE file configure log is written to [config.log]
73 --target=TARGET target platform tuple [generic-gnu]
74 --cpu=CPU optimize for a specific cpu rather than a family
75 --extra-cflags=ECFLAGS add ECFLAGS to CFLAGS [$CFLAGS]
76 --extra-cxxflags=ECXXFLAGS add ECXXFLAGS to CXXFLAGS [$CXXFLAGS]
77 ${toggle_extra_warnings} emit harmless warnings (always non-fatal)
78 ${toggle_werror} treat warnings as errors, if possible
79 (not available with all compilers)
80 ${toggle_optimizations} turn on/off compiler optimization flags
81 ${toggle_pic} turn on/off Position Independent Code
82 ${toggle_ccache} turn on/off compiler cache
83 ${toggle_debug} enable/disable debug mode
84 ${toggle_gprof} enable/disable gprof profiling instrumentation
85 ${toggle_gcov} enable/disable gcov coverage instrumentation
86 ${toggle_thumb} enable/disable building arm assembly in thumb mode
87 ${toggle_dependency_tracking}
88 disable to speed up one-time build
91 ${toggle_install_docs} control whether docs are installed
92 ${toggle_install_bins} control whether binaries are installed
93 ${toggle_install_libs} control whether libraries are installed
94 ${toggle_install_srcs} control whether sources are installed
105 Object files are built at the place where configure is launched.
107 All boolean options can be negated. The default value is the opposite
108 of that shown above. If the option --disable-foo is listed, then
109 the default value for foo is enabled.
113 show_targets ${all_platforms}
119 while [ -n "$*" ]; do
120 if [ "${1%%-*}" = "${2%%-*}" ]; then
121 if [ "${2%%-*}" = "${3%%-*}" ]; then
122 printf " %-24s %-24s %-24s\n" "$1" "$2" "$3"
125 printf " %-24s %-24s\n" "$1" "$2"
129 printf " %-24s\n" "$1"
141 # List Processing Functions
155 [ $var = $value ] && return 0
161 CFLAGS="${CFLAGS} $@"
162 CXXFLAGS="${CXXFLAGS} $@"
166 CFLAGS="${CFLAGS} $@"
169 add_cxxflags_only() {
170 CXXFLAGS="${CXXFLAGS} $@"
174 LDFLAGS="${LDFLAGS} $@"
178 ASFLAGS="${ASFLAGS} $@"
182 extralibs="${extralibs} $@"
186 # Boolean Manipulation Functions
198 eval test "x\$$1" = "xyes"
202 eval test "x\$$1" = "xno"
206 enabled "${1}" || echo " enabling ${1}"
207 enable_feature "${1}"
209 is_in "${1}" vp8 vp9 && enable_feature "${1}_encoder" "${1}_decoder"
213 disabled "${1}" || echo " disabling ${1}"
214 disable_feature "${1}"
216 is_in "${1}" vp8 vp9 && disable_feature "${1}_encoder" "${1}_decoder"
219 # Iterates through positional parameters, checks to confirm the parameter has
220 # not been explicitly (force) disabled, and enables the setting controlled by
221 # the parameter when the setting is not disabled.
222 # Note: Does NOT alter RTCD generation options ($RTCD_OPTIONS).
225 if ! disabled $var; then
226 enabled $var || log_echo " enabling $var"
232 # Iterates through positional parameters, checks to confirm the parameter has
233 # not been explicitly (force) enabled, and disables the setting controlled by
234 # the parameter when the setting is not enabled.
235 # Note: Does NOT alter RTCD generation options ($RTCD_OPTIONS).
238 if ! enabled $var; then
239 disabled $var || log_echo " disabling $var"
246 # Text Processing Functions
249 echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
253 echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
257 # Temporary File Functions
260 enable_feature source_path_used
261 if [ -z "$source_path" ] || [ "$source_path" = "." ]; then
263 disable_feature source_path_used
266 if test ! -z "$TMPDIR" ; then
268 elif test ! -z "$TEMPDIR" ; then
273 RAND=$(awk 'BEGIN { srand(); printf "%d\n",(rand() * 32768)}')
274 TMP_H="${TMPDIRx}/vpx-conf-$$-${RAND}.h"
275 TMP_C="${TMPDIRx}/vpx-conf-$$-${RAND}.c"
276 TMP_CC="${TMPDIRx}/vpx-conf-$$-${RAND}.cc"
277 TMP_O="${TMPDIRx}/vpx-conf-$$-${RAND}.o"
278 TMP_X="${TMPDIRx}/vpx-conf-$$-${RAND}.x"
279 TMP_ASM="${TMPDIRx}/vpx-conf-$$-${RAND}.asm"
282 rm -f ${TMP_C} ${TMP_CC} ${TMP_H} ${TMP_O} ${TMP_X} ${TMP_ASM}
283 enabled gcov && rm -f ${TMP_C%.c}.gcno ${TMP_CC%.cc}.gcno
287 # Toolchain Check Functions
290 enabled external_build && return
292 "$@" >>${logfile} 2>&1
299 check_cmd ${CC} ${CFLAGS} "$@" -c -o ${TMP_O} ${TMP_C}
306 check_cmd ${CXX} ${CXXFLAGS} "$@" -c -o ${TMP_O} ${TMP_CC}
313 check_cmd ${CC} ${CFLAGS} "$@" -E -o ${TMP_O} ${TMP_C}
319 && check_cmd ${LD} ${LDFLAGS} "$@" -o ${TMP_X} ${TMP_O} ${extralibs}
325 && check_cmd ${LD} ${LDFLAGS} -o ${TMP_X} ${TMP_O} "$@" ${extralibs}
329 log check_header "$@"
332 var=`echo $header | sed 's/[^A-Za-z0-9_]/_/g'`
334 check_cpp "$@" <<EOF && enable_feature $var
341 log check_cflags "$@"
342 check_cc -Werror "$@" <<EOF
348 log check_cxxflags "$@"
350 # Catch CFLAGS that trigger CXX warnings
352 *c++-analyzer|*clang++|*g++*)
353 check_cxx -Werror "$@" <<EOF
358 check_cxx -Werror "$@" <<EOF
366 check_cxxflags "$@" && add_cxxflags_only "$@"
367 check_cflags "$@" && add_cflags_only "$@"
370 check_add_cxxflags() {
371 check_cxxflags "$@" && add_cxxflags_only "$@"
374 check_add_asflags() {
379 check_add_ldflags() {
385 log check_asm_align "$@"
386 cat >${TMP_ASM} <<EOF
391 check_cmd ${AS} ${ASFLAGS} -o ${TMP_O} ${TMP_ASM}
392 readelf -WS ${TMP_O} >${TMP_X}
394 if ! grep -q '\.rodata .* 16$' ${TMP_X}; then
395 die "${AS} ${ASFLAGS} does not support section alignment (nasm <=2.08?)"
399 # tests for -m$1 toggling the feature given in $2. If $2 is empty $1 is used.
400 check_gcc_machine_option() {
403 [ -n "$feature" ] || feature="$opt"
405 if enabled gcc && ! disabled "$feature" && ! check_cflags "-m$opt"; then
406 RTCD_OPTIONS="${RTCD_OPTIONS}--disable-$feature "
408 soft_enable "$feature"
412 # tests for -m$2, -m$3, -m$4... toggling the feature given in $1.
413 check_gcc_machine_options() {
419 flags="$flags -m$opt"
422 if enabled gcc && ! disabled "$feature" && ! check_cflags $flags; then
423 RTCD_OPTIONS="${RTCD_OPTIONS}--disable-$feature "
425 soft_enable "$feature"
429 write_common_config_banner() {
430 print_webm_license config.mk "##" ""
431 echo '# This file automatically generated by configure. Do not edit!' >> config.mk
432 echo "TOOLCHAIN := ${toolchain}" >> config.mk
436 echo "ALT_LIBC := ${alt_libc}" >> config.mk
441 write_common_config_targets() {
442 for t in ${all_targets}; do
443 if enabled ${t}; then
444 if enabled child; then
445 fwrite config.mk "ALL_TARGETS += ${t}-${toolchain}"
447 fwrite config.mk "ALL_TARGETS += ${t}"
455 write_common_target_config_mk() {
458 enabled ccache && CC="ccache ${CC}"
459 enabled ccache && CXX="ccache ${CXX}"
460 print_webm_license $1 "##" ""
463 # This file automatically generated by configure. Do not edit!
464 SRC_PATH="$source_path"
465 SRC_PATH_BARE=$source_path
466 BUILD_PFX=${BUILD_PFX}
467 TOOLCHAIN=${toolchain}
468 ASM_CONVERSION=${asm_conversion_cmd:-${source_path}/build/make/ads2gas.pl}
469 GEN_VCPROJ=${gen_vcproj_cmd}
470 MSVS_ARCH_DIR=${msvs_arch_dir}
481 CXXFLAGS = ${CXXFLAGS}
482 ARFLAGS = -crs\$(if \$(quiet),,v)
485 extralibs = ${extralibs}
486 AS_SFX = ${AS_SFX:-.asm}
488 VCPROJ_SFX = ${VCPROJ_SFX}
489 RTCD_OPTIONS = ${RTCD_OPTIONS}
492 if enabled rvct; then cat >> $1 << EOF
493 fmt_deps = sed -e 's;^__image.axf;\${@:.d=.o} \$@;' #hide
495 else cat >> $1 << EOF
496 fmt_deps = sed -e 's;^\([a-zA-Z0-9_]*\)\.o;\${@:.d=.o} \$@;'
500 print_config_mk ARCH "${1}" ${ARCH_LIST}
501 print_config_mk HAVE "${1}" ${HAVE_LIST}
502 print_config_mk CONFIG "${1}" ${CONFIG_LIST}
503 print_config_mk HAVE "${1}" gnu_strip
505 enabled msvs && echo "CONFIG_VS_VERSION=${vs_version}" >> "${1}"
511 write_common_target_config_h() {
512 print_webm_license ${TMP_H} "/*" " */"
513 cat >> ${TMP_H} << EOF
514 /* This file automatically generated by configure. Do not edit! */
517 #define RESTRICT ${RESTRICT}
518 #define INLINE ${INLINE}
520 print_config_h ARCH "${TMP_H}" ${ARCH_LIST}
521 print_config_h HAVE "${TMP_H}" ${HAVE_LIST}
522 print_config_h CONFIG "${TMP_H}" ${CONFIG_LIST}
523 print_config_vars_h "${TMP_H}" ${VAR_LIST}
524 echo "#endif /* VPX_CONFIG_H */" >> ${TMP_H}
525 mkdir -p `dirname "$1"`
526 cmp "$1" ${TMP_H} >/dev/null 2>&1 || mv ${TMP_H} "$1"
529 process_common_cmdline() {
538 if ! disabled logging ; then
539 enabled logging || logfile="$logging"
545 toolchain="${toolchain:-${optval}}"
548 toolchain="${toolchain:-${optval}}"
549 enable_feature force_toolchain
555 extra_cflags="${optval}"
558 extra_cxxflags="${optval}"
560 --enable-?*|--disable-?*)
561 eval `echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g'`
562 if is_in ${option} ${ARCH_EXT_LIST}; then
563 [ $action = "disable" ] && RTCD_OPTIONS="${RTCD_OPTIONS}--disable-${option} "
564 elif [ $action = "disable" ] && ! disabled $option ; then
565 is_in ${option} ${CMDLINE_SELECT} || die_unknown $opt
566 log_echo " disabling $option"
567 elif [ $action = "enable" ] && ! enabled $option ; then
568 is_in ${option} ${CMDLINE_SELECT} || die_unknown $opt
569 log_echo " enabling $option"
571 ${action}_feature $option
574 eval `echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g'`
575 if is_in ${option} ${ARCH_EXT_LIST}; then
576 RTCD_OPTIONS="${RTCD_OPTIONS}${opt} "
581 --force-enable-?*|--force-disable-?*)
582 eval `echo "$opt" | sed 's/--force-/action=/;s/-/ option=/;s/-/_/g'`
583 ${action}_feature $option
586 [ -d "${optval}" ] || die "Not a directory: ${optval}"
587 disable_feature builtin_libc
591 [ "${optval}" = yasm ] || [ "${optval}" = nasm ] \
592 || [ "${optval}" = auto ] \
593 || die "Must be yasm, nasm or auto: ${optval}"
599 VAR_LIST="DECODE_WIDTH_LIMIT ${w} DECODE_HEIGHT_LIMIT ${h}"
600 [ ${w} -gt 0 ] && [ ${h} -gt 0 ] || die "Invalid size-limit: too small."
601 [ ${w} -lt 65536 ] && [ ${h} -lt 65536 ] \
602 || die "Invalid size-limit: too big."
603 enable_feature size_limit
612 [ -d "${optval}" ] || die "Not a directory: ${optval}"
615 --libc|--as|--prefix|--libdir|--sdk-path)
616 die "Option ${opt} requires argument"
633 process_common_cmdline $opt
639 post_process_common_cmdline() {
640 prefix="${prefix:-/usr/local}"
642 libdir="${libdir:-${prefix}/lib}"
644 if [ "${libdir#${prefix}}" = "${libdir}" ]; then
645 die "Libdir ${libdir} must be a subdirectory of ${prefix}"
649 post_process_cmdline() {
653 setup_gnu_toolchain() {
654 CC=${CC:-${CROSS}gcc}
655 CXX=${CXX:-${CROSS}g++}
657 LD=${LD:-${CROSS}${link_with_cc:-ld}}
659 STRIP=${STRIP:-${CROSS}strip}
665 # Reliably find the newest available Darwin SDKs. (Older versions of
666 # xcrun don't support --show-sdk-path.)
667 show_darwin_sdk_path() {
668 xcrun --sdk $1 --show-sdk-path 2>/dev/null ||
669 xcodebuild -sdk $1 -version Path 2>/dev/null
672 # Print the major version number of the Darwin SDK specified by $1.
673 show_darwin_sdk_major_version() {
674 xcrun --sdk $1 --show-sdk-version 2>/dev/null | cut -d. -f1
677 # Print the Xcode version.
678 show_xcode_version() {
679 xcodebuild -version | head -n1 | cut -d' ' -f2
682 # Fails when Xcode version is less than 6.3.
683 check_xcode_minimum_version() {
684 xcode_major=$(show_xcode_version | cut -f1 -d.)
685 xcode_minor=$(show_xcode_version | cut -f2 -d.)
688 if [ ${xcode_major} -lt ${xcode_min_major} ]; then
691 if [ ${xcode_major} -eq ${xcode_min_major} ] \
692 && [ ${xcode_minor} -lt ${xcode_min_minor} ]; then
697 process_common_toolchain() {
698 if [ -z "$toolchain" ]; then
699 gcctarget="${CHOST:-$(gcc -dumpmachine 2> /dev/null)}"
705 armv7*-hardfloat* | armv7*-gnueabihf | arm-*-gnueabihf)
777 [ -z "$tgt_isa" ] && tgt_isa=x86
791 if [ -n "$tgt_isa" ] && [ -n "$tgt_os" ]; then
792 toolchain=${tgt_isa}-${tgt_os}-gcc
796 toolchain=${toolchain:-generic-gnu}
798 is_in ${toolchain} ${all_platforms} || enabled force_toolchain \
799 || die "Unrecognized toolchain '${toolchain}'"
801 enabled child || log_echo "Configuring for target '${toolchain}'"
804 # Set up toolchain variables
806 tgt_isa=$(echo ${toolchain} | awk 'BEGIN{FS="-"}{print $1}')
807 tgt_os=$(echo ${toolchain} | awk 'BEGIN{FS="-"}{print $2}')
808 tgt_cc=$(echo ${toolchain} | awk 'BEGIN{FS="-"}{print $3}')
810 # Mark the specific ISA requested as enabled
811 soft_enable ${tgt_isa}
812 enable_feature ${tgt_os}
813 enable_feature ${tgt_cc}
815 # Enable the architecture family
828 # PIC is probably what we want when building shared libs
829 enabled shared && soft_enable pic
831 # Minimum iOS version for all target platforms (darwin and iphonesimulator).
832 # Shared library framework builds are only possible on iOS 8 and later.
833 if enabled shared; then
834 IOS_VERSION_OPTIONS="--enable-shared"
835 IOS_VERSION_MIN="8.0"
837 IOS_VERSION_OPTIONS=""
838 IOS_VERSION_MIN="6.0"
841 # Handle darwin variants. Newer SDKs allow targeting older
842 # platforms, so use the newest one available.
845 add_cflags "-miphoneos-version-min=${IOS_VERSION_MIN}"
846 iphoneos_sdk_dir="$(show_darwin_sdk_path iphoneos)"
847 if [ -d "${iphoneos_sdk_dir}" ]; then
848 add_cflags "-isysroot ${iphoneos_sdk_dir}"
849 add_ldflags "-isysroot ${iphoneos_sdk_dir}"
853 osx_sdk_dir="$(show_darwin_sdk_path macosx)"
854 if [ -d "${osx_sdk_dir}" ]; then
855 add_cflags "-isysroot ${osx_sdk_dir}"
856 add_ldflags "-isysroot ${osx_sdk_dir}"
863 add_cflags "-mmacosx-version-min=10.4"
864 add_ldflags "-mmacosx-version-min=10.4"
867 add_cflags "-mmacosx-version-min=10.5"
868 add_ldflags "-mmacosx-version-min=10.5"
871 add_cflags "-mmacosx-version-min=10.6"
872 add_ldflags "-mmacosx-version-min=10.6"
875 add_cflags "-mmacosx-version-min=10.7"
876 add_ldflags "-mmacosx-version-min=10.7"
879 add_cflags "-mmacosx-version-min=10.8"
880 add_ldflags "-mmacosx-version-min=10.8"
883 add_cflags "-mmacosx-version-min=10.9"
884 add_ldflags "-mmacosx-version-min=10.9"
887 add_cflags "-mmacosx-version-min=10.10"
888 add_ldflags "-mmacosx-version-min=10.10"
891 add_cflags "-mmacosx-version-min=10.11"
892 add_ldflags "-mmacosx-version-min=10.11"
895 add_cflags "-mmacosx-version-min=10.12"
896 add_ldflags "-mmacosx-version-min=10.12"
899 add_cflags "-mmacosx-version-min=10.13"
900 add_ldflags "-mmacosx-version-min=10.13"
903 add_cflags "-miphoneos-version-min=${IOS_VERSION_MIN}"
904 add_ldflags "-miphoneos-version-min=${IOS_VERSION_MIN}"
905 iossim_sdk_dir="$(show_darwin_sdk_path iphonesimulator)"
906 if [ -d "${iossim_sdk_dir}" ]; then
907 add_cflags "-isysroot ${iossim_sdk_dir}"
908 add_ldflags "-isysroot ${iossim_sdk_dir}"
913 # Handle Solaris variants. Solaris 10 needs -lposix4
916 add_extralibs -lposix4
919 add_extralibs -lposix4
923 # Process ARM architecture variants
926 # on arm, isa versions are supersets
933 # Only enable neon_asm when neon is also enabled.
934 enabled neon && soft_enable neon_asm
935 # If someone tries to force it through, die.
936 if disabled neon && enabled neon_asm; then
937 die "Disabling neon while keeping neon-asm is not supported"
942 asm_conversion_cmd="cat"
948 arch_int=${tgt_isa##armv}
949 arch_int=${arch_int%%te}
950 tune_cflags="-mtune="
951 if [ ${tgt_isa} = "armv7" ] || [ ${tgt_isa} = "armv7s" ]; then
952 if [ -z "${float_abi}" ]; then
953 check_cpp <<EOF && float_abi=hard || float_abi=softfp
954 #ifndef __ARM_PCS_VFP
959 check_add_cflags -march=armv7-a -mfloat-abi=${float_abi}
960 check_add_asflags -march=armv7-a -mfloat-abi=${float_abi}
962 if enabled neon || enabled neon_asm; then
963 check_add_cflags -mfpu=neon #-ftree-vectorize
964 check_add_asflags -mfpu=neon
966 elif [ ${tgt_isa} = "arm64" ] || [ ${tgt_isa} = "armv8" ]; then
967 check_add_cflags -march=armv8-a
968 check_add_asflags -march=armv8-a
970 check_add_cflags -march=${tgt_isa}
971 check_add_asflags -march=${tgt_isa}
974 enabled debug && add_asflags -g
975 asm_conversion_cmd="${source_path}/build/make/ads2gas.pl"
979 asm_conversion_cmd="$asm_conversion_cmd -noelf"
985 check_add_asflags --defsym ARCHITECTURE=${arch_int}
989 if enabled thumb; then
990 asm_conversion_cmd="$asm_conversion_cmd -thumb"
991 check_add_cflags -mthumb
992 check_add_asflags -mthumb -mimplicit-it=always
996 asm_conversion_cmd="${source_path}/build/make/ads2armasm_ms.pl"
998 msvs_arch_dir=arm-msvs
999 disable_feature multithread
1000 disable_feature unit_tests
1001 vs_version=${tgt_cc##vs}
1002 if [ $vs_version -ge 12 ]; then
1003 # MSVC 2013 doesn't allow doing plain .exe projects for ARM,
1004 # only "AppContainerApplication" which requires an AppxManifest.
1005 # Therefore disable the examples, just build the library.
1006 disable_feature examples
1007 disable_feature tools
1014 LD="${source_path}/build/make/armlink_adapter.sh"
1015 STRIP=arm-none-linux-gnueabi-strip
1016 NM=arm-none-linux-gnueabi-nm
1017 tune_cflags="--cpu="
1018 tune_asflags="--cpu="
1019 if [ -z "${tune_cpu}" ]; then
1020 if [ ${tgt_isa} = "armv7" ]; then
1021 if enabled neon || enabled neon_asm
1023 check_add_cflags --fpu=softvfp+vfpv3
1024 check_add_asflags --fpu=softvfp+vfpv3
1026 check_add_cflags --cpu=Cortex-A8
1027 check_add_asflags --cpu=Cortex-A8
1029 check_add_cflags --cpu=${tgt_isa##armv}
1030 check_add_asflags --cpu=${tgt_isa##armv}
1033 arch_int=${tgt_isa##armv}
1034 arch_int=${arch_int%%te}
1035 check_add_asflags --pd "\"ARCHITECTURE SETA ${arch_int}\""
1036 enabled debug && add_asflags -g
1038 add_cflags --enum_is_int
1039 add_cflags --wchar32
1045 disable_feature multithread
1046 disable_feature os_support
1050 if [ -n "${sdk_path}" ]; then
1051 SDK_PATH=${sdk_path}
1052 COMPILER_LOCATION=`find "${SDK_PATH}" \
1053 -name "arm-linux-androideabi-gcc*" -print -quit`
1054 TOOLCHAIN_PATH=${COMPILER_LOCATION%/*}/arm-linux-androideabi-
1055 CC=${TOOLCHAIN_PATH}gcc
1056 CXX=${TOOLCHAIN_PATH}g++
1057 AR=${TOOLCHAIN_PATH}ar
1058 LD=${TOOLCHAIN_PATH}gcc
1059 AS=${TOOLCHAIN_PATH}as
1060 STRIP=${TOOLCHAIN_PATH}strip
1061 NM=${TOOLCHAIN_PATH}nm
1063 if [ -z "${alt_libc}" ]; then
1064 alt_libc=`find "${SDK_PATH}" -name arch-arm -print | \
1065 awk '{n = split($0,a,"/"); \
1066 split(a[n-1],b,"-"); \
1067 print $0 " " b[2]}' | \
1069 awk '{ print $1 }' | tail -1`
1072 if [ -d "${alt_libc}" ]; then
1073 add_cflags "--sysroot=${alt_libc}"
1074 add_ldflags "--sysroot=${alt_libc}"
1077 # linker flag that routes around a CPU bug in some
1078 # Cortex-A8 implementations (NDK Dev Guide)
1079 add_ldflags "-Wl,--fix-cortex-a8"
1082 soft_enable realtime_only
1083 if [ ${tgt_isa} = "armv7" ]; then
1084 soft_enable runtime_cpu_detect
1086 if enabled runtime_cpu_detect; then
1087 add_cflags "-I${SDK_PATH}/sources/android/cpufeatures"
1090 echo "Assuming standalone build with NDK toolchain."
1091 echo "See build/make/Android.mk for details."
1092 check_add_ldflags -static
1093 soft_enable unit_tests
1098 XCRUN_FIND="xcrun --sdk iphoneos --find"
1099 CXX="$(${XCRUN_FIND} clang++)"
1100 CC="$(${XCRUN_FIND} clang)"
1101 AR="$(${XCRUN_FIND} ar)"
1102 AS="$(${XCRUN_FIND} as)"
1103 STRIP="$(${XCRUN_FIND} strip)"
1104 NM="$(${XCRUN_FIND} nm)"
1105 RANLIB="$(${XCRUN_FIND} ranlib)"
1107 LD="${CXX:-$(${XCRUN_FIND} ld)}"
1109 # ASFLAGS is written here instead of using check_add_asflags
1110 # because we need to overwrite all of ASFLAGS and purge the
1111 # options that were put in above
1112 ASFLAGS="-arch ${tgt_isa} -g"
1114 add_cflags -arch ${tgt_isa}
1115 add_ldflags -arch ${tgt_isa}
1117 alt_libc="$(show_darwin_sdk_path iphoneos)"
1118 if [ -d "${alt_libc}" ]; then
1119 add_cflags -isysroot ${alt_libc}
1122 if [ "${LD}" = "${CXX}" ]; then
1123 add_ldflags -miphoneos-version-min="${IOS_VERSION_MIN}"
1125 add_ldflags -ios_version_min "${IOS_VERSION_MIN}"
1128 for d in lib usr/lib usr/lib/system; do
1129 try_dir="${alt_libc}/${d}"
1130 [ -d "${try_dir}" ] && add_ldflags -L"${try_dir}"
1134 armv7|armv7s|armv8|arm64)
1135 if enabled neon && ! check_xcode_minimum_version; then
1137 log_echo " neon disabled: upgrade Xcode (need v6.3+)."
1138 if enabled neon_asm; then
1139 soft_disable neon_asm
1140 log_echo " neon_asm disabled: upgrade Xcode (need v6.3+)."
1146 asm_conversion_cmd="${source_path}/build/make/ads2gas_apple.pl"
1148 if [ "$(show_darwin_sdk_major_version iphoneos)" -gt 8 ]; then
1149 check_add_cflags -fembed-bitcode
1150 check_add_asflags -fembed-bitcode
1151 check_add_ldflags -fembed-bitcode
1156 enable_feature linux
1157 if enabled rvct; then
1158 # Check if we have CodeSourcery GCC in PATH. Needed for
1160 which arm-none-linux-gnueabi-gcc 2>&- || \
1161 die "Couldn't find CodeSourcery GCC from PATH"
1163 # Use armcc as a linker to enable translation of
1164 # some gcc specific options such as -lm and -lpthread.
1165 LD="armcc --translate_gcc"
1167 # create configuration file (uses path to CodeSourcery GCC)
1168 armcc --arm_linux_configure --arm_linux_config_file=arm_linux.cfg
1170 add_cflags --arm_linux_paths --arm_linux_config_file=arm_linux.cfg
1171 add_asflags --no_hide_all --apcs=/interwork
1172 add_ldflags --arm_linux_paths --arm_linux_config_file=arm_linux.cfg
1173 enabled pic && add_cflags --apcs=/fpic
1174 enabled pic && add_asflags --apcs=/fpic
1175 enabled shared && add_cflags --shared
1183 tune_cflags="-mtune="
1184 if enabled dspr2; then
1185 check_add_cflags -mips32r2 -mdspr2
1188 if enabled runtime_cpu_detect; then
1189 disable_feature runtime_cpu_detect
1192 if [ -n "${tune_cpu}" ]; then
1195 check_add_cflags -mips32r5 -mload-store-pairs
1196 check_add_cflags -msched-weight -mhard-float -mfp64
1197 check_add_asflags -mips32r5 -mhard-float -mfp64
1198 check_add_ldflags -mfp64
1201 check_add_cflags -mips64r6 -mabi=64 -msched-weight
1202 check_add_cflags -mload-store-pairs -mhard-float -mfp64
1203 check_add_asflags -mips64r6 -mabi=64 -mhard-float -mfp64
1204 check_add_ldflags -mips64r6 -mabi=64 -mfp64
1208 if enabled msa; then
1215 if enabled mmi; then
1217 check_add_ldflags -march=loongson3a
1220 check_add_cflags -march=${tgt_isa}
1221 check_add_asflags -march=${tgt_isa}
1222 check_add_asflags -KPIC
1227 check_gcc_machine_option "vsx"
1232 soft_enable realtime_only
1235 enabled gcc && add_cflags -fno-common
1238 CC=${CC:-${CROSS}gcc}
1239 CXX=${CXX:-${CROSS}g++}
1240 LD=${LD:-${CROSS}gcc}
1246 add_ldflags -Zhigh-mem
1250 AS="${alt_as:-${AS:-auto}}"
1256 add_cflags -use-msasm # remove -use-msasm too?
1257 # add -no-intel-extensions to suppress warning #10237
1258 # refer to http://software.intel.com/en-us/forums/topic/280199
1259 add_ldflags -i-static -no-intel-extensions
1260 enabled x86_64 && add_cflags -ipo -static -O3 -no-prec-div
1261 enabled x86_64 && AR=xiar
1265 tune_cpu="SSE3_ATOM"
1268 tune_cflags="-march="
1274 tune_cflags="-march="
1276 #for 32 bit x86 builds, -O3 did not turn on this flag
1277 enabled optimizations && disabled gprof && check_add_cflags -fomit-frame-pointer
1280 # When building with Microsoft Visual Studio the assembler is
1281 # invoked directly. Checking at configure time is unnecessary.
1282 # Skip the check by setting AS arbitrarily
1284 msvs_arch_dir=x86-msvs
1285 vc_version=${tgt_cc##vs}
1287 7|8|9|10|11|12|13|14)
1288 echo "${tgt_cc} does not support avx512, disabling....."
1289 RTCD_OPTIONS="${RTCD_OPTIONS}--disable-avx512 "
1295 echo "${tgt_cc} does not support avx/avx2, disabling....."
1296 RTCD_OPTIONS="${RTCD_OPTIONS}--disable-avx --disable-avx2 "
1303 echo "${tgt_cc} omits stdint.h, disabling webm-io..."
1304 soft_disable webm_io
1311 enabled x86_64 && bits=64
1312 check_cpp <<EOF && bits=x32
1313 #if !defined(__ILP32__) || !defined(__x86_64__)
1319 add_cflags -m${bits}
1320 add_ldflags -m${bits}
1324 soft_enable runtime_cpu_detect
1325 # We can't use 'check_cflags' until the compiler is configured and CC is
1327 for ext in ${ARCH_EXT_LIST_X86}; do
1328 # disable higher order extensions to simplify asm dependencies
1329 if [ "$disable_exts" = "yes" ]; then
1330 if ! disabled $ext; then
1331 RTCD_OPTIONS="${RTCD_OPTIONS}--disable-${ext} "
1332 disable_feature $ext
1334 elif disabled $ext; then
1337 if [ "$ext" = "avx512" ]; then
1338 check_gcc_machine_options $ext avx512f avx512cd avx512bw avx512dq avx512vl
1340 # use the shortened version for the flag: sse4_1 -> sse4
1341 check_gcc_machine_option ${ext%_*} $ext
1346 if enabled external_build; then
1347 log_echo " skipping assembler detection"
1351 which nasm >/dev/null 2>&1 && AS=nasm
1352 which yasm >/dev/null 2>&1 && AS=yasm
1353 if [ "${AS}" = nasm ] ; then
1354 # Apple ships version 0.98 of nasm through at least Xcode 6. Revisit
1355 # this check if they start shipping a compatible version.
1356 apple=`nasm -v | grep "Apple"`
1358 && echo "Unsupported version of nasm: ${apple}" \
1361 [ "${AS}" = auto ] || [ -z "${AS}" ] \
1362 && die "Neither yasm nor nasm have been found." \
1363 "See the prerequisites section in the README for more info."
1366 log_echo " using $AS"
1371 add_asflags -f win32
1372 enabled debug && add_asflags -g cv8
1376 add_asflags -f win64
1377 enabled debug && add_asflags -g cv8
1380 linux*|solaris*|android*)
1381 add_asflags -f elf${bits}
1382 enabled debug && [ "${AS}" = yasm ] && add_asflags -g dwarf2
1383 enabled debug && [ "${AS}" = nasm ] && add_asflags -g
1384 [ "${AS##*/}" = nasm ] && check_asm_align
1387 add_asflags -f macho${bits}
1388 enabled x86 && darwin_arch="-arch i386" || darwin_arch="-arch x86_64"
1389 add_cflags ${darwin_arch}
1390 add_ldflags ${darwin_arch}
1391 # -mdynamic-no-pic is still a bit of voodoo -- it was required at
1392 # one time, but does not seem to be now, and it breaks some of the
1393 # code that still relies on inline assembly.
1394 # enabled icc && ! enabled pic && add_cflags -fno-pic -mdynamic-no-pic
1395 enabled icc && ! enabled pic && add_cflags -fno-pic
1398 add_asflags -f macho${bits}
1399 enabled x86 && sim_arch="-arch i386" || sim_arch="-arch x86_64"
1400 add_cflags ${sim_arch}
1401 add_ldflags ${sim_arch}
1403 if [ "$(disabled external_build)" ] &&
1404 [ "$(show_darwin_sdk_major_version iphonesimulator)" -gt 8 ]; then
1405 # yasm v1.3.0 doesn't know what -fembed-bitcode means, so turning it
1406 # on is pointless (unless building a C-only lib). Warn the user, but
1408 log "Warning: Bitcode embed disabled for simulator targets."
1413 enabled debug && add_asflags -g
1417 log "Warning: Unknown os $tgt_os while setting up $AS flags"
1428 # Try to enable CPU specific tuning
1429 if [ -n "${tune_cpu}" ]; then
1430 if [ -n "${tune_cflags}" ]; then
1431 check_add_cflags ${tune_cflags}${tune_cpu} || \
1432 die "Requested CPU '${tune_cpu}' not supported by compiler"
1434 if [ -n "${tune_asflags}" ]; then
1435 check_add_asflags ${tune_asflags}${tune_cpu} || \
1436 die "Requested CPU '${tune_cpu}' not supported by assembler"
1438 if [ -z "${tune_cflags}${tune_asflags}" ]; then
1439 log_echo "Warning: CPU tuning not supported by this toolchain"
1443 if enabled debug; then
1444 check_add_cflags -g && check_add_ldflags -g
1446 check_add_cflags -DNDEBUG
1449 enabled gprof && check_add_cflags -pg && check_add_ldflags -pg
1451 check_add_cflags -fprofile-arcs -ftest-coverage &&
1452 check_add_ldflags -fprofile-arcs -ftest-coverage
1454 if enabled optimizations; then
1455 if enabled rvct; then
1456 enabled small && check_add_cflags -Ospace || check_add_cflags -Otime
1458 enabled small && check_add_cflags -O2 || check_add_cflags -O3
1462 # Position Independent Code (PIC) support, for building relocatable
1464 enabled gcc && enabled pic && check_add_cflags -fPIC
1466 # Work around longjmp interception on glibc >= 2.11, to improve binary
1467 # compatibility. See http://code.google.com/p/webm/issues/detail?id=166
1468 enabled linux && check_add_cflags -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=0
1470 # Check for strip utility variant
1471 ${STRIP} -V 2>/dev/null | grep GNU >/dev/null && enable_feature gnu_strip
1473 # Try to determine target endianness
1475 unsigned int e = 'O'<<24 | '2'<<16 | 'B'<<8 | 'E';
1477 [ -f "${TMP_O}" ] && od -A n -t x1 "${TMP_O}" | tr -d '\n' |
1478 grep '4f *32 *42 *45' >/dev/null 2>&1 && enable_feature big_endian
1480 # Try to find which inline keywords are supported
1481 check_cc <<EOF && INLINE="inline"
1482 static inline function() {}
1485 # Almost every platform uses pthreads.
1486 if enabled multithread; then
1487 case ${toolchain} in
1491 # bionic includes basic pthread functionality, obviating -lpthread.
1494 check_header pthread.h && check_lib -lpthread <<EOF && add_extralibs -lpthread || disable_feature pthread_h
1495 #include <pthread.h>
1497 int main(void) { return pthread_create(NULL, NULL, NULL, NULL); }
1503 # only for MIPS platforms
1504 case ${toolchain} in
1506 if enabled big_endian; then
1507 if enabled dspr2; then
1508 echo "dspr2 optimizations are available only for little endian platforms"
1509 disable_feature dspr2
1511 if enabled msa; then
1512 echo "msa optimizations are available only for little endian platforms"
1515 if enabled mmi; then
1516 echo "mmi optimizations are available only for little endian platforms"
1524 if enabled linux; then
1525 add_cflags -D_LARGEFILE_SOURCE
1526 add_cflags -D_FILE_OFFSET_BITS=64
1530 process_toolchain() {
1531 process_common_toolchain
1535 saved_prefix="${prefix}"
1540 if enabled $cfg; then
1541 upname="`toupper $cfg`"
1542 echo "${prefix}_${upname}=yes" >> $makefile
1545 prefix="${saved_prefix}"
1549 saved_prefix="${prefix}"
1554 upname="`toupper $cfg`"
1555 if enabled $cfg; then
1556 echo "#define ${prefix}_${upname} 1" >> $header
1558 echo "#define ${prefix}_${upname} 0" >> $header
1561 prefix="${saved_prefix}"
1564 print_config_vars_h() {
1567 while [ $# -gt 0 ]; do
1568 upname="`toupper $1`"
1569 echo "#define ${upname} $2" >> $header
1574 print_webm_license() {
1575 saved_prefix="${prefix}"
1580 cat <<EOF > ${destination}
1581 ${prefix} Copyright (c) 2011 The WebM project authors. All Rights Reserved.${suffix}
1583 ${prefix} Use of this source code is governed by a BSD-style license${suffix}
1584 ${prefix} that can be found in the LICENSE file in the root of the source${suffix}
1585 ${prefix} tree. An additional intellectual property rights grant can be found${suffix}
1586 ${prefix} in the file PATENTS. All contributing project authors may${suffix}
1587 ${prefix} be found in the AUTHORS file in the root of the source tree.${suffix}
1589 prefix="${saved_prefix}"
1600 enable_feature logging
1601 logfile="config.log"
1605 process_cmdline "$@"
1606 if enabled child; then
1607 echo "# ${self} $@" >> ${logfile}
1609 echo "# ${self} $@" > ${logfile}
1611 post_process_common_cmdline
1612 post_process_cmdline
1617 OOT_INSTALLS="${OOT_INSTALLS}"
1618 if enabled source_path_used; then
1619 # Prepare the PWD for building.
1620 for f in ${OOT_INSTALLS}; do
1621 install -D "${source_path}/$f" "$f"
1624 cp "${source_path}/build/make/Makefile" .