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}
323 log check_header "$@"
326 var=`echo $header | sed 's/[^A-Za-z0-9_]/_/g'`
328 check_cpp "$@" <<EOF && enable_feature $var
335 log check_cflags "$@"
336 check_cc -Werror "$@" <<EOF
342 log check_cxxflags "$@"
344 # Catch CFLAGS that trigger CXX warnings
346 *c++-analyzer|*clang++|*g++*)
347 check_cxx -Werror "$@" <<EOF
352 check_cxx -Werror "$@" <<EOF
360 check_cxxflags "$@" && add_cxxflags_only "$@"
361 check_cflags "$@" && add_cflags_only "$@"
364 check_add_cxxflags() {
365 check_cxxflags "$@" && add_cxxflags_only "$@"
368 check_add_asflags() {
373 check_add_ldflags() {
379 log check_asm_align "$@"
380 cat >${TMP_ASM} <<EOF
385 check_cmd ${AS} ${ASFLAGS} -o ${TMP_O} ${TMP_ASM}
386 readelf -WS ${TMP_O} >${TMP_X}
388 if ! grep -q '\.rodata .* 16$' ${TMP_X}; then
389 die "${AS} ${ASFLAGS} does not support section alignment (nasm <=2.08?)"
393 # tests for -m$1 toggling the feature given in $2. If $2 is empty $1 is used.
394 check_gcc_machine_option() {
397 [ -n "$feature" ] || feature="$opt"
399 if enabled gcc && ! disabled "$feature" && ! check_cflags "-m$opt"; then
400 RTCD_OPTIONS="${RTCD_OPTIONS}--disable-$feature "
402 soft_enable "$feature"
406 write_common_config_banner() {
407 print_webm_license config.mk "##" ""
408 echo '# This file automatically generated by configure. Do not edit!' >> config.mk
409 echo "TOOLCHAIN := ${toolchain}" >> config.mk
413 echo "ALT_LIBC := ${alt_libc}" >> config.mk
418 write_common_config_targets() {
419 for t in ${all_targets}; do
420 if enabled ${t}; then
421 if enabled child; then
422 fwrite config.mk "ALL_TARGETS += ${t}-${toolchain}"
424 fwrite config.mk "ALL_TARGETS += ${t}"
432 write_common_target_config_mk() {
435 enabled ccache && CC="ccache ${CC}"
436 enabled ccache && CXX="ccache ${CXX}"
437 print_webm_license $1 "##" ""
440 # This file automatically generated by configure. Do not edit!
441 SRC_PATH="$source_path"
442 SRC_PATH_BARE=$source_path
443 BUILD_PFX=${BUILD_PFX}
444 TOOLCHAIN=${toolchain}
445 ASM_CONVERSION=${asm_conversion_cmd:-${source_path}/build/make/ads2gas.pl}
446 GEN_VCPROJ=${gen_vcproj_cmd}
447 MSVS_ARCH_DIR=${msvs_arch_dir}
458 CXXFLAGS = ${CXXFLAGS}
459 ARFLAGS = -crs\$(if \$(quiet),,v)
462 extralibs = ${extralibs}
463 AS_SFX = ${AS_SFX:-.asm}
465 VCPROJ_SFX = ${VCPROJ_SFX}
466 RTCD_OPTIONS = ${RTCD_OPTIONS}
469 if enabled rvct; then cat >> $1 << EOF
470 fmt_deps = sed -e 's;^__image.axf;\${@:.d=.o} \$@;' #hide
472 else cat >> $1 << EOF
473 fmt_deps = sed -e 's;^\([a-zA-Z0-9_]*\)\.o;\${@:.d=.o} \$@;'
477 print_config_mk ARCH "${1}" ${ARCH_LIST}
478 print_config_mk HAVE "${1}" ${HAVE_LIST}
479 print_config_mk CONFIG "${1}" ${CONFIG_LIST}
480 print_config_mk HAVE "${1}" gnu_strip
482 enabled msvs && echo "CONFIG_VS_VERSION=${vs_version}" >> "${1}"
488 write_common_target_config_h() {
489 print_webm_license ${TMP_H} "/*" " */"
490 cat >> ${TMP_H} << EOF
491 /* This file automatically generated by configure. Do not edit! */
494 #define RESTRICT ${RESTRICT}
495 #define INLINE ${INLINE}
497 print_config_h ARCH "${TMP_H}" ${ARCH_LIST}
498 print_config_h HAVE "${TMP_H}" ${HAVE_LIST}
499 print_config_h CONFIG "${TMP_H}" ${CONFIG_LIST}
500 print_config_vars_h "${TMP_H}" ${VAR_LIST}
501 echo "#endif /* VPX_CONFIG_H */" >> ${TMP_H}
502 mkdir -p `dirname "$1"`
503 cmp "$1" ${TMP_H} >/dev/null 2>&1 || mv ${TMP_H} "$1"
506 process_common_cmdline() {
515 if ! disabled logging ; then
516 enabled logging || logfile="$logging"
522 toolchain="${toolchain:-${optval}}"
525 toolchain="${toolchain:-${optval}}"
526 enable_feature force_toolchain
532 extra_cflags="${optval}"
535 extra_cxxflags="${optval}"
537 --enable-?*|--disable-?*)
538 eval `echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g'`
539 if is_in ${option} ${ARCH_EXT_LIST}; then
540 [ $action = "disable" ] && RTCD_OPTIONS="${RTCD_OPTIONS}--disable-${option} "
541 elif [ $action = "disable" ] && ! disabled $option ; then
542 is_in ${option} ${CMDLINE_SELECT} || die_unknown $opt
543 log_echo " disabling $option"
544 elif [ $action = "enable" ] && ! enabled $option ; then
545 is_in ${option} ${CMDLINE_SELECT} || die_unknown $opt
546 log_echo " enabling $option"
548 ${action}_feature $option
551 eval `echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g'`
552 if is_in ${option} ${ARCH_EXT_LIST}; then
553 RTCD_OPTIONS="${RTCD_OPTIONS}${opt} "
558 --force-enable-?*|--force-disable-?*)
559 eval `echo "$opt" | sed 's/--force-/action=/;s/-/ option=/;s/-/_/g'`
560 ${action}_feature $option
563 [ -d "${optval}" ] || die "Not a directory: ${optval}"
564 disable_feature builtin_libc
568 [ "${optval}" = yasm ] || [ "${optval}" = nasm ] \
569 || [ "${optval}" = auto ] \
570 || die "Must be yasm, nasm or auto: ${optval}"
576 VAR_LIST="DECODE_WIDTH_LIMIT ${w} DECODE_HEIGHT_LIMIT ${h}"
577 [ ${w} -gt 0 ] && [ ${h} -gt 0 ] || die "Invalid size-limit: too small."
578 [ ${w} -lt 65536 ] && [ ${h} -lt 65536 ] \
579 || die "Invalid size-limit: too big."
580 enable_feature size_limit
589 [ -d "${optval}" ] || die "Not a directory: ${optval}"
592 --libc|--as|--prefix|--libdir|--sdk-path)
593 die "Option ${opt} requires argument"
610 process_common_cmdline $opt
616 post_process_common_cmdline() {
617 prefix="${prefix:-/usr/local}"
619 libdir="${libdir:-${prefix}/lib}"
621 if [ "${libdir#${prefix}}" = "${libdir}" ]; then
622 die "Libdir ${libdir} must be a subdirectory of ${prefix}"
626 post_process_cmdline() {
630 setup_gnu_toolchain() {
631 CC=${CC:-${CROSS}gcc}
632 CXX=${CXX:-${CROSS}g++}
634 LD=${LD:-${CROSS}${link_with_cc:-ld}}
636 STRIP=${STRIP:-${CROSS}strip}
642 # Reliably find the newest available Darwin SDKs. (Older versions of
643 # xcrun don't support --show-sdk-path.)
644 show_darwin_sdk_path() {
645 xcrun --sdk $1 --show-sdk-path 2>/dev/null ||
646 xcodebuild -sdk $1 -version Path 2>/dev/null
649 # Print the major version number of the Darwin SDK specified by $1.
650 show_darwin_sdk_major_version() {
651 xcrun --sdk $1 --show-sdk-version 2>/dev/null | cut -d. -f1
654 # Print the Xcode version.
655 show_xcode_version() {
656 xcodebuild -version | head -n1 | cut -d' ' -f2
659 # Fails when Xcode version is less than 6.3.
660 check_xcode_minimum_version() {
661 xcode_major=$(show_xcode_version | cut -f1 -d.)
662 xcode_minor=$(show_xcode_version | cut -f2 -d.)
665 if [ ${xcode_major} -lt ${xcode_min_major} ]; then
668 if [ ${xcode_major} -eq ${xcode_min_major} ] \
669 && [ ${xcode_minor} -lt ${xcode_min_minor} ]; then
674 process_common_toolchain() {
675 if [ -z "$toolchain" ]; then
676 gcctarget="${CHOST:-$(gcc -dumpmachine 2> /dev/null)}"
686 armv7*-hardfloat* | armv7*-gnueabihf | arm-*-gnueabihf)
735 [ -z "$tgt_isa" ] && tgt_isa=x86
749 if [ -n "$tgt_isa" ] && [ -n "$tgt_os" ]; then
750 toolchain=${tgt_isa}-${tgt_os}-gcc
754 toolchain=${toolchain:-generic-gnu}
756 is_in ${toolchain} ${all_platforms} || enabled force_toolchain \
757 || die "Unrecognized toolchain '${toolchain}'"
759 enabled child || log_echo "Configuring for target '${toolchain}'"
762 # Set up toolchain variables
764 tgt_isa=$(echo ${toolchain} | awk 'BEGIN{FS="-"}{print $1}')
765 tgt_os=$(echo ${toolchain} | awk 'BEGIN{FS="-"}{print $2}')
766 tgt_cc=$(echo ${toolchain} | awk 'BEGIN{FS="-"}{print $3}')
768 # Mark the specific ISA requested as enabled
769 soft_enable ${tgt_isa}
770 enable_feature ${tgt_os}
771 enable_feature ${tgt_cc}
773 # Enable the architecture family
783 # PIC is probably what we want when building shared libs
784 enabled shared && soft_enable pic
786 # Minimum iOS version for all target platforms (darwin and iphonesimulator).
787 # Shared library framework builds are only possible on iOS 8 and later.
788 if enabled shared; then
789 IOS_VERSION_OPTIONS="--enable-shared"
790 IOS_VERSION_MIN="8.0"
792 IOS_VERSION_OPTIONS=""
793 IOS_VERSION_MIN="6.0"
796 # Handle darwin variants. Newer SDKs allow targeting older
797 # platforms, so use the newest one available.
800 add_cflags "-miphoneos-version-min=${IOS_VERSION_MIN}"
801 iphoneos_sdk_dir="$(show_darwin_sdk_path iphoneos)"
802 if [ -d "${iphoneos_sdk_dir}" ]; then
803 add_cflags "-isysroot ${iphoneos_sdk_dir}"
804 add_ldflags "-isysroot ${iphoneos_sdk_dir}"
808 osx_sdk_dir="$(show_darwin_sdk_path macosx)"
809 if [ -d "${osx_sdk_dir}" ]; then
810 add_cflags "-isysroot ${osx_sdk_dir}"
811 add_ldflags "-isysroot ${osx_sdk_dir}"
818 add_cflags "-mmacosx-version-min=10.4"
819 add_ldflags "-mmacosx-version-min=10.4"
822 add_cflags "-mmacosx-version-min=10.5"
823 add_ldflags "-mmacosx-version-min=10.5"
826 add_cflags "-mmacosx-version-min=10.6"
827 add_ldflags "-mmacosx-version-min=10.6"
830 add_cflags "-mmacosx-version-min=10.7"
831 add_ldflags "-mmacosx-version-min=10.7"
834 add_cflags "-mmacosx-version-min=10.8"
835 add_ldflags "-mmacosx-version-min=10.8"
838 add_cflags "-mmacosx-version-min=10.9"
839 add_ldflags "-mmacosx-version-min=10.9"
842 add_cflags "-mmacosx-version-min=10.10"
843 add_ldflags "-mmacosx-version-min=10.10"
846 add_cflags "-mmacosx-version-min=10.11"
847 add_ldflags "-mmacosx-version-min=10.11"
850 add_cflags "-miphoneos-version-min=${IOS_VERSION_MIN}"
851 add_ldflags "-miphoneos-version-min=${IOS_VERSION_MIN}"
852 iossim_sdk_dir="$(show_darwin_sdk_path iphonesimulator)"
853 if [ -d "${iossim_sdk_dir}" ]; then
854 add_cflags "-isysroot ${iossim_sdk_dir}"
855 add_ldflags "-isysroot ${iossim_sdk_dir}"
860 # Handle Solaris variants. Solaris 10 needs -lposix4
863 add_extralibs -lposix4
866 add_extralibs -lposix4
870 # Process ARM architecture variants
873 # on arm, isa versions are supersets
880 # Only enable neon_asm when neon is also enabled.
881 enabled neon && soft_enable neon_asm
882 # If someone tries to force it through, die.
883 if disabled neon && enabled neon_asm; then
884 die "Disabling neon while keeping neon-asm is not supported"
887 # Apple iOS SDKs no longer support armv6 as of the version 9
888 # release (coincides with release of Xcode 7). Only enable media
889 # when using earlier SDK releases.
891 if [ "$(show_darwin_sdk_major_version iphoneos)" -lt 9 ]; then
895 RTCD_OPTIONS="${RTCD_OPTIONS}--disable-media "
906 if [ "$(show_darwin_sdk_major_version iphoneos)" -lt 9 ]; then
909 die "Your iOS SDK does not support armv6."
919 asm_conversion_cmd="cat"
925 arch_int=${tgt_isa##armv}
926 arch_int=${arch_int%%te}
927 check_add_asflags --defsym ARCHITECTURE=${arch_int}
928 tune_cflags="-mtune="
929 if [ ${tgt_isa} = "armv7" ] || [ ${tgt_isa} = "armv7s" ]; then
930 if [ -z "${float_abi}" ]; then
931 check_cpp <<EOF && float_abi=hard || float_abi=softfp
932 #ifndef __ARM_PCS_VFP
937 check_add_cflags -march=armv7-a -mfloat-abi=${float_abi}
938 check_add_asflags -march=armv7-a -mfloat-abi=${float_abi}
940 if enabled neon || enabled neon_asm; then
941 check_add_cflags -mfpu=neon #-ftree-vectorize
942 check_add_asflags -mfpu=neon
944 elif [ ${tgt_isa} = "arm64" ] || [ ${tgt_isa} = "armv8" ]; then
945 check_add_cflags -march=armv8-a
946 check_add_asflags -march=armv8-a
948 check_add_cflags -march=${tgt_isa}
949 check_add_asflags -march=${tgt_isa}
952 enabled debug && add_asflags -g
953 asm_conversion_cmd="${source_path}/build/make/ads2gas.pl"
954 if enabled thumb; then
955 asm_conversion_cmd="$asm_conversion_cmd -thumb"
956 check_add_cflags -mthumb
957 check_add_asflags -mthumb -mimplicit-it=always
961 asm_conversion_cmd="${source_path}/build/make/ads2armasm_ms.pl"
963 msvs_arch_dir=arm-msvs
964 disable_feature multithread
965 disable_feature unit_tests
966 vs_version=${tgt_cc##vs}
967 if [ $vs_version -ge 12 ]; then
968 # MSVC 2013 doesn't allow doing plain .exe projects for ARM,
969 # only "AppContainerApplication" which requires an AppxManifest.
970 # Therefore disable the examples, just build the library.
971 disable_feature examples
978 LD="${source_path}/build/make/armlink_adapter.sh"
979 STRIP=arm-none-linux-gnueabi-strip
980 NM=arm-none-linux-gnueabi-nm
982 tune_asflags="--cpu="
983 if [ -z "${tune_cpu}" ]; then
984 if [ ${tgt_isa} = "armv7" ]; then
985 if enabled neon || enabled neon_asm
987 check_add_cflags --fpu=softvfp+vfpv3
988 check_add_asflags --fpu=softvfp+vfpv3
990 check_add_cflags --cpu=Cortex-A8
991 check_add_asflags --cpu=Cortex-A8
993 check_add_cflags --cpu=${tgt_isa##armv}
994 check_add_asflags --cpu=${tgt_isa##armv}
997 arch_int=${tgt_isa##armv}
998 arch_int=${arch_int%%te}
999 check_add_asflags --pd "\"ARCHITECTURE SETA ${arch_int}\""
1000 enabled debug && add_asflags -g
1002 add_cflags --enum_is_int
1003 add_cflags --wchar32
1009 disable_feature multithread
1010 disable_feature os_support
1014 if [ -z "${sdk_path}" ]; then
1015 die "Must specify --sdk-path for Android builds."
1018 SDK_PATH=${sdk_path}
1019 COMPILER_LOCATION=`find "${SDK_PATH}" \
1020 -name "arm-linux-androideabi-gcc*" -print -quit`
1021 TOOLCHAIN_PATH=${COMPILER_LOCATION%/*}/arm-linux-androideabi-
1022 CC=${TOOLCHAIN_PATH}gcc
1023 CXX=${TOOLCHAIN_PATH}g++
1024 AR=${TOOLCHAIN_PATH}ar
1025 LD=${TOOLCHAIN_PATH}gcc
1026 AS=${TOOLCHAIN_PATH}as
1027 STRIP=${TOOLCHAIN_PATH}strip
1028 NM=${TOOLCHAIN_PATH}nm
1030 if [ -z "${alt_libc}" ]; then
1031 alt_libc=`find "${SDK_PATH}" -name arch-arm -print | \
1032 awk '{n = split($0,a,"/"); \
1033 split(a[n-1],b,"-"); \
1034 print $0 " " b[2]}' | \
1036 awk '{ print $1 }' | tail -1`
1039 if [ -d "${alt_libc}" ]; then
1040 add_cflags "--sysroot=${alt_libc}"
1041 add_ldflags "--sysroot=${alt_libc}"
1044 # linker flag that routes around a CPU bug in some
1045 # Cortex-A8 implementations (NDK Dev Guide)
1046 add_ldflags "-Wl,--fix-cortex-a8"
1049 soft_enable realtime_only
1050 if [ ${tgt_isa} = "armv7" ]; then
1051 soft_enable runtime_cpu_detect
1053 if enabled runtime_cpu_detect; then
1054 add_cflags "-I${SDK_PATH}/sources/android/cpufeatures"
1059 XCRUN_FIND="xcrun --sdk iphoneos --find"
1060 CXX="$(${XCRUN_FIND} clang++)"
1061 CC="$(${XCRUN_FIND} clang)"
1062 AR="$(${XCRUN_FIND} ar)"
1063 AS="$(${XCRUN_FIND} as)"
1064 STRIP="$(${XCRUN_FIND} strip)"
1065 NM="$(${XCRUN_FIND} nm)"
1066 RANLIB="$(${XCRUN_FIND} ranlib)"
1068 LD="${CXX:-$(${XCRUN_FIND} ld)}"
1070 # ASFLAGS is written here instead of using check_add_asflags
1071 # because we need to overwrite all of ASFLAGS and purge the
1072 # options that were put in above
1073 ASFLAGS="-arch ${tgt_isa} -g"
1075 add_cflags -arch ${tgt_isa}
1076 add_ldflags -arch ${tgt_isa}
1078 alt_libc="$(show_darwin_sdk_path iphoneos)"
1079 if [ -d "${alt_libc}" ]; then
1080 add_cflags -isysroot ${alt_libc}
1083 if [ "${LD}" = "${CXX}" ]; then
1084 add_ldflags -miphoneos-version-min="${IOS_VERSION_MIN}"
1086 add_ldflags -ios_version_min "${IOS_VERSION_MIN}"
1089 for d in lib usr/lib usr/lib/system; do
1090 try_dir="${alt_libc}/${d}"
1091 [ -d "${try_dir}" ] && add_ldflags -L"${try_dir}"
1095 armv7|armv7s|armv8|arm64)
1096 if enabled neon && ! check_xcode_minimum_version; then
1098 log_echo " neon disabled: upgrade Xcode (need v6.3+)."
1099 if enabled neon_asm; then
1100 soft_disable neon_asm
1101 log_echo " neon_asm disabled: upgrade Xcode (need v6.3+)."
1107 asm_conversion_cmd="${source_path}/build/make/ads2gas_apple.pl"
1109 if [ "$(show_darwin_sdk_major_version iphoneos)" -gt 8 ]; then
1110 check_add_cflags -fembed-bitcode
1111 check_add_asflags -fembed-bitcode
1112 check_add_ldflags -fembed-bitcode
1117 enable_feature linux
1118 if enabled rvct; then
1119 # Check if we have CodeSourcery GCC in PATH. Needed for
1121 which arm-none-linux-gnueabi-gcc 2>&- || \
1122 die "Couldn't find CodeSourcery GCC from PATH"
1124 # Use armcc as a linker to enable translation of
1125 # some gcc specific options such as -lm and -lpthread.
1126 LD="armcc --translate_gcc"
1128 # create configuration file (uses path to CodeSourcery GCC)
1129 armcc --arm_linux_configure --arm_linux_config_file=arm_linux.cfg
1131 add_cflags --arm_linux_paths --arm_linux_config_file=arm_linux.cfg
1132 add_asflags --no_hide_all --apcs=/interwork
1133 add_ldflags --arm_linux_paths --arm_linux_config_file=arm_linux.cfg
1134 enabled pic && add_cflags --apcs=/fpic
1135 enabled pic && add_asflags --apcs=/fpic
1136 enabled shared && add_cflags --shared
1144 tune_cflags="-mtune="
1145 if enabled dspr2; then
1146 check_add_cflags -mips32r2 -mdspr2
1149 if enabled runtime_cpu_detect; then
1150 disable_feature runtime_cpu_detect
1153 if [ -n "${tune_cpu}" ]; then
1156 check_add_cflags -mips32r5 -mload-store-pairs
1157 check_add_cflags -msched-weight -mhard-float -mfp64
1158 check_add_asflags -mips32r5 -mhard-float -mfp64
1159 check_add_ldflags -mfp64
1162 check_add_cflags -mips64r6 -mabi=64 -msched-weight
1163 check_add_cflags -mload-store-pairs -mhard-float -mfp64
1164 check_add_asflags -mips64r6 -mabi=64 -mhard-float -mfp64
1165 check_add_ldflags -mips64r6 -mabi=64 -mfp64
1169 if enabled msa; then
1176 check_add_cflags -march=${tgt_isa}
1177 check_add_asflags -march=${tgt_isa}
1178 check_add_asflags -KPIC
1183 enabled gcc && add_cflags -fno-common
1186 CC=${CC:-${CROSS}gcc}
1187 CXX=${CXX:-${CROSS}g++}
1188 LD=${LD:-${CROSS}gcc}
1194 add_ldflags -Zhigh-mem
1198 AS="${alt_as:-${AS:-auto}}"
1204 add_cflags -use-msasm # remove -use-msasm too?
1205 # add -no-intel-extensions to suppress warning #10237
1206 # refer to http://software.intel.com/en-us/forums/topic/280199
1207 add_ldflags -i-static -no-intel-extensions
1208 enabled x86_64 && add_cflags -ipo -static -O3 -no-prec-div
1209 enabled x86_64 && AR=xiar
1213 tune_cpu="SSE3_ATOM"
1216 tune_cflags="-march="
1222 tune_cflags="-march="
1224 #for 32 bit x86 builds, -O3 did not turn on this flag
1225 enabled optimizations && disabled gprof && check_add_cflags -fomit-frame-pointer
1228 # When building with Microsoft Visual Studio the assembler is
1229 # invoked directly. Checking at configure time is unnecessary.
1230 # Skip the check by setting AS arbitrarily
1232 msvs_arch_dir=x86-msvs
1233 vc_version=${tgt_cc##vs}
1236 echo "${tgt_cc} does not support avx/avx2, disabling....."
1237 RTCD_OPTIONS="${RTCD_OPTIONS}--disable-avx --disable-avx2 "
1244 echo "${tgt_cc} omits stdint.h, disabling webm-io..."
1245 soft_disable webm_io
1252 enabled x86_64 && bits=64
1253 check_cpp <<EOF && bits=x32
1254 #if !defined(__ILP32__) || !defined(__x86_64__)
1260 add_cflags -m${bits}
1261 add_ldflags -m${bits}
1265 soft_enable runtime_cpu_detect
1266 # We can't use 'check_cflags' until the compiler is configured and CC is
1268 for ext in ${ARCH_EXT_LIST_X86}; do
1269 # disable higher order extensions to simplify asm dependencies
1270 if [ "$disable_exts" = "yes" ]; then
1271 if ! disabled $ext; then
1272 RTCD_OPTIONS="${RTCD_OPTIONS}--disable-${ext} "
1273 disable_feature $ext
1275 elif disabled $ext; then
1278 # use the shortened version for the flag: sse4_1 -> sse4
1279 check_gcc_machine_option ${ext%_*} $ext
1283 if enabled external_build; then
1284 log_echo " skipping assembler detection"
1288 which nasm >/dev/null 2>&1 && AS=nasm
1289 which yasm >/dev/null 2>&1 && AS=yasm
1290 if [ "${AS}" = nasm ] ; then
1291 # Apple ships version 0.98 of nasm through at least Xcode 6. Revisit
1292 # this check if they start shipping a compatible version.
1293 apple=`nasm -v | grep "Apple"`
1295 && echo "Unsupported version of nasm: ${apple}" \
1298 [ "${AS}" = auto ] || [ -z "${AS}" ] \
1299 && die "Neither yasm nor nasm have been found." \
1300 "See the prerequisites section in the README for more info."
1303 log_echo " using $AS"
1305 [ "${AS##*/}" = nasm ] && add_asflags -Ox
1309 add_asflags -f win32
1310 enabled debug && add_asflags -g cv8
1315 enabled debug && add_asflags -g cv8
1318 linux*|solaris*|android*)
1319 add_asflags -f elf${bits}
1320 enabled debug && [ "${AS}" = yasm ] && add_asflags -g dwarf2
1321 enabled debug && [ "${AS}" = nasm ] && add_asflags -g
1322 [ "${AS##*/}" = nasm ] && check_asm_align
1325 add_asflags -f macho${bits}
1326 enabled x86 && darwin_arch="-arch i386" || darwin_arch="-arch x86_64"
1327 add_cflags ${darwin_arch}
1328 add_ldflags ${darwin_arch}
1329 # -mdynamic-no-pic is still a bit of voodoo -- it was required at
1330 # one time, but does not seem to be now, and it breaks some of the
1331 # code that still relies on inline assembly.
1332 # enabled icc && ! enabled pic && add_cflags -fno-pic -mdynamic-no-pic
1333 enabled icc && ! enabled pic && add_cflags -fno-pic
1336 add_asflags -f macho${bits}
1337 enabled x86 && sim_arch="-arch i386" || sim_arch="-arch x86_64"
1338 add_cflags ${sim_arch}
1339 add_ldflags ${sim_arch}
1341 if [ "$(show_darwin_sdk_major_version iphonesimulator)" -gt 8 ]; then
1342 # yasm v1.3.0 doesn't know what -fembed-bitcode means, so turning it
1343 # on is pointless (unless building a C-only lib). Warn the user, but
1345 log "Warning: Bitcode embed disabled for simulator targets."
1350 enabled debug && add_asflags -g
1354 log "Warning: Unknown os $tgt_os while setting up $AS flags"
1365 # Try to enable CPU specific tuning
1366 if [ -n "${tune_cpu}" ]; then
1367 if [ -n "${tune_cflags}" ]; then
1368 check_add_cflags ${tune_cflags}${tune_cpu} || \
1369 die "Requested CPU '${tune_cpu}' not supported by compiler"
1371 if [ -n "${tune_asflags}" ]; then
1372 check_add_asflags ${tune_asflags}${tune_cpu} || \
1373 die "Requested CPU '${tune_cpu}' not supported by assembler"
1375 if [ -z "${tune_cflags}${tune_asflags}" ]; then
1376 log_echo "Warning: CPU tuning not supported by this toolchain"
1380 if enabled debug; then
1381 check_add_cflags -g && check_add_ldflags -g
1383 check_add_cflags -DNDEBUG
1386 enabled gprof && check_add_cflags -pg && check_add_ldflags -pg
1388 check_add_cflags -fprofile-arcs -ftest-coverage &&
1389 check_add_ldflags -fprofile-arcs -ftest-coverage
1391 if enabled optimizations; then
1392 if enabled rvct; then
1393 enabled small && check_add_cflags -Ospace || check_add_cflags -Otime
1395 enabled small && check_add_cflags -O2 || check_add_cflags -O3
1399 if [ "${tgt_isa}" = "x86_64" ] || [ "${tgt_isa}" = "x86" ]; then
1400 soft_enable use_x86inc
1403 # Position Independent Code (PIC) support, for building relocatable
1405 enabled gcc && enabled pic && check_add_cflags -fPIC
1407 # Work around longjmp interception on glibc >= 2.11, to improve binary
1408 # compatibility. See http://code.google.com/p/webm/issues/detail?id=166
1409 enabled linux && check_add_cflags -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=0
1411 # Check for strip utility variant
1412 ${STRIP} -V 2>/dev/null | grep GNU >/dev/null && enable_feature gnu_strip
1414 # Try to determine target endianness
1416 unsigned int e = 'O'<<24 | '2'<<16 | 'B'<<8 | 'E';
1418 [ -f "${TMP_O}" ] && od -A n -t x1 "${TMP_O}" | tr -d '\n' |
1419 grep '4f *32 *42 *45' >/dev/null 2>&1 && enable_feature big_endian
1421 # Try to find which inline keywords are supported
1422 check_cc <<EOF && INLINE="inline"
1423 static inline function() {}
1426 # Almost every platform uses pthreads.
1427 if enabled multithread; then
1428 case ${toolchain} in
1434 check_header pthread.h && add_extralibs -lpthread
1439 # only for MIPS platforms
1440 case ${toolchain} in
1442 if enabled big_endian; then
1443 if enabled dspr2; then
1444 echo "dspr2 optimizations are available only for little endian platforms"
1445 disable_feature dspr2
1447 if enabled msa; then
1448 echo "msa optimizations are available only for little endian platforms"
1456 if enabled linux; then
1457 add_cflags -D_LARGEFILE_SOURCE
1458 add_cflags -D_FILE_OFFSET_BITS=64
1462 process_toolchain() {
1463 process_common_toolchain
1467 saved_prefix="${prefix}"
1472 if enabled $cfg; then
1473 upname="`toupper $cfg`"
1474 echo "${prefix}_${upname}=yes" >> $makefile
1477 prefix="${saved_prefix}"
1481 saved_prefix="${prefix}"
1486 upname="`toupper $cfg`"
1487 if enabled $cfg; then
1488 echo "#define ${prefix}_${upname} 1" >> $header
1490 echo "#define ${prefix}_${upname} 0" >> $header
1493 prefix="${saved_prefix}"
1496 print_config_vars_h() {
1499 while [ $# -gt 0 ]; do
1500 upname="`toupper $1`"
1501 echo "#define ${upname} $2" >> $header
1506 print_webm_license() {
1507 saved_prefix="${prefix}"
1512 cat <<EOF > ${destination}
1513 ${prefix} Copyright (c) 2011 The WebM project authors. All Rights Reserved.${suffix}
1515 ${prefix} Use of this source code is governed by a BSD-style license${suffix}
1516 ${prefix} that can be found in the LICENSE file in the root of the source${suffix}
1517 ${prefix} tree. An additional intellectual property rights grant can be found${suffix}
1518 ${prefix} in the file PATENTS. All contributing project authors may${suffix}
1519 ${prefix} be found in the AUTHORS file in the root of the source tree.${suffix}
1521 prefix="${saved_prefix}"
1532 enable_feature logging
1533 logfile="config.log"
1537 process_cmdline "$@"
1538 if enabled child; then
1539 echo "# ${self} $@" >> ${logfile}
1541 echo "# ${self} $@" > ${logfile}
1543 post_process_common_cmdline
1544 post_process_cmdline
1549 OOT_INSTALLS="${OOT_INSTALLS}"
1550 if enabled source_path_used; then
1551 # Prepare the PWD for building.
1552 for f in ${OOT_INSTALLS}; do
1553 install -D "${source_path}/$f" "$f"
1556 cp "${source_path}/build/make/Makefile" .