diff --git a/build/make/configure.sh b/build/make/configure.sh index 7f4c6ba6e..d264ea260 100644 --- a/build/make/configure.sh +++ b/build/make/configure.sh @@ -14,62 +14,56 @@ # Logging / Output Functions # die_unknown(){ - echo "Unknown option \"$1\"." - echo "See $0 --help for available options." - clean_temp_files - exit 1 + echo "Unknown option \"$1\"." + echo "See $0 --help for available options." + clean_temp_files + exit 1 } - die() { - echo "$@" - echo - echo "Configuration failed. This could reflect a misconfiguration of your" - echo "toolchains, improper options selected, or another problem. If you" - echo "don't see any useful error messages above, the next step is to look" - echo "at the configure error log file ($logfile) to determine what" - echo "configure was trying to do when it died." - clean_temp_files - exit 1 + echo "$@" + echo + echo "Configuration failed. This could reflect a misconfiguration of your" + echo "toolchains, improper options selected, or another problem. If you" + echo "don't see any useful error messages above, the next step is to look" + echo "at the configure error log file ($logfile) to determine what" + echo "configure was trying to do when it died." + clean_temp_files + exit 1 } - log(){ - echo "$@" >>$logfile + echo "$@" >>$logfile } - log_file(){ - log BEGIN $1 - cat -n $1 >>$logfile - log END $1 + log BEGIN $1 + cat -n $1 >>$logfile + log END $1 } - log_echo() { - echo "$@" - log "$@" + echo "$@" + log "$@" } - fwrite () { - outfile=$1 - shift - echo "$@" >> ${outfile} + outfile=$1 + shift + echo "$@" >> ${outfile} } - show_help_pre(){ - for opt in ${CMDLINE_SELECT}; do - opt2=`echo $opt | sed -e 's;_;-;g'` - if enabled $opt; then - eval "toggle_${opt}=\"--disable-${opt2}\"" - else - eval "toggle_${opt}=\"--enable-${opt2} \"" - fi - done + for opt in ${CMDLINE_SELECT}; do + opt2=`echo $opt | sed -e 's;_;-;g'` + if enabled $opt; then + eval "toggle_${opt}=\"--disable-${opt2}\"" + else + eval "toggle_${opt}=\"--enable-${opt2} \"" + fi + done - cat <>${logfile} 2>&1 + enabled external_build && return + log "$@" + "$@" >>${logfile} 2>&1 } check_cc() { - log check_cc "$@" - cat >${TMP_C} - log_file ${TMP_C} - check_cmd ${CC} ${CFLAGS} "$@" -c -o ${TMP_O} ${TMP_C} + log check_cc "$@" + cat >${TMP_C} + log_file ${TMP_C} + check_cmd ${CC} ${CFLAGS} "$@" -c -o ${TMP_O} ${TMP_C} } check_cxx() { - log check_cxx "$@" - cat >${TMP_CC} - log_file ${TMP_CC} - check_cmd ${CXX} ${CXXFLAGS} "$@" -c -o ${TMP_O} ${TMP_CC} + log check_cxx "$@" + cat >${TMP_CC} + log_file ${TMP_CC} + check_cmd ${CXX} ${CXXFLAGS} "$@" -c -o ${TMP_O} ${TMP_CC} } check_cpp() { - log check_cpp "$@" - cat > ${TMP_C} - log_file ${TMP_C} - check_cmd ${CC} ${CFLAGS} "$@" -E -o ${TMP_O} ${TMP_C} + log check_cpp "$@" + cat > ${TMP_C} + log_file ${TMP_C} + check_cmd ${CC} ${CFLAGS} "$@" -E -o ${TMP_O} ${TMP_C} } check_ld() { - log check_ld "$@" - check_cc $@ \ - && check_cmd ${LD} ${LDFLAGS} "$@" -o ${TMP_X} ${TMP_O} ${extralibs} + log check_ld "$@" + check_cc $@ \ + && check_cmd ${LD} ${LDFLAGS} "$@" -o ${TMP_X} ${TMP_O} ${extralibs} } check_header(){ - log check_header "$@" - header=$1 - shift - var=`echo $header | sed 's/[^A-Za-z0-9_]/_/g'` - disable_feature $var - check_cpp "$@" <${TMP_ASM} <${TMP_ASM} <${TMP_X} - log_file ${TMP_X} - if ! grep -q '\.rodata .* 16$' ${TMP_X}; then - die "${AS} ${ASFLAGS} does not support section alignment (nasm <=2.08?)" - fi + log_file ${TMP_ASM} + check_cmd ${AS} ${ASFLAGS} -o ${TMP_O} ${TMP_ASM} + readelf -WS ${TMP_O} >${TMP_X} + log_file ${TMP_X} + if ! grep -q '\.rodata .* 16$' ${TMP_X}; then + die "${AS} ${ASFLAGS} does not support section alignment (nasm <=2.08?)" + fi } # tests for -m$1 toggling the feature given in $2. If $2 is empty $1 is used. check_gcc_machine_option() { - opt="$1" - feature="$2" - [ -n "$feature" ] || feature="$opt" + opt="$1" + feature="$2" + [ -n "$feature" ] || feature="$opt" - if enabled gcc && ! disabled "$feature" && ! check_cflags "-m$opt"; then - RTCD_OPTIONS="${RTCD_OPTIONS}--disable-$feature " - else - soft_enable "$feature" - fi + if enabled gcc && ! disabled "$feature" && ! check_cflags "-m$opt"; then + RTCD_OPTIONS="${RTCD_OPTIONS}--disable-$feature " + else + soft_enable "$feature" + fi } write_common_config_banner() { - print_webm_license config.mk "##" "" - echo '# This file automatically generated by configure. Do not edit!' >> config.mk - echo "TOOLCHAIN := ${toolchain}" >> config.mk + print_webm_license config.mk "##" "" + echo '# This file automatically generated by configure. Do not edit!' >> config.mk + echo "TOOLCHAIN := ${toolchain}" >> config.mk - case ${toolchain} in - *-linux-rvct) - echo "ALT_LIBC := ${alt_libc}" >> config.mk - ;; - esac + case ${toolchain} in + *-linux-rvct) + echo "ALT_LIBC := ${alt_libc}" >> config.mk + ;; + esac } write_common_config_targets() { - for t in ${all_targets}; do - if enabled ${t}; then - if enabled universal || enabled child; then - fwrite config.mk "ALL_TARGETS += ${t}-${toolchain}" - else - fwrite config.mk "ALL_TARGETS += ${t}" - fi - fi + for t in ${all_targets}; do + if enabled ${t}; then + if enabled universal || enabled child; then + fwrite config.mk "ALL_TARGETS += ${t}-${toolchain}" + else + fwrite config.mk "ALL_TARGETS += ${t}" + fi + fi true; - done -true + done + true } write_common_target_config_mk() { - saved_CC="${CC}" - saved_CXX="${CXX}" - enabled ccache && CC="ccache ${CC}" - enabled ccache && CXX="ccache ${CXX}" - print_webm_license $1 "##" "" + saved_CC="${CC}" + saved_CXX="${CXX}" + enabled ccache && CC="ccache ${CC}" + enabled ccache && CXX="ccache ${CXX}" + print_webm_license $1 "##" "" - cat >> $1 << EOF + cat >> $1 << EOF # This file automatically generated by configure. Do not edit! SRC_PATH="$source_path" SRC_PATH_BARE=$source_path @@ -455,73 +436,77 @@ VCPROJ_SFX = ${VCPROJ_SFX} RTCD_OPTIONS = ${RTCD_OPTIONS} EOF - if enabled rvct; then cat >> $1 << EOF + if enabled rvct; then cat >> $1 << EOF fmt_deps = sed -e 's;^__image.axf;\${@:.d=.o} \$@;' #hide EOF - else cat >> $1 << EOF + else cat >> $1 << EOF fmt_deps = sed -e 's;^\([a-zA-Z0-9_]*\)\.o;\${@:.d=.o} \$@;' EOF - fi + fi - print_config_mk ARCH "${1}" ${ARCH_LIST} - print_config_mk HAVE "${1}" ${HAVE_LIST} - print_config_mk CONFIG "${1}" ${CONFIG_LIST} - print_config_mk HAVE "${1}" gnu_strip + print_config_mk ARCH "${1}" ${ARCH_LIST} + print_config_mk HAVE "${1}" ${HAVE_LIST} + print_config_mk CONFIG "${1}" ${CONFIG_LIST} + print_config_mk HAVE "${1}" gnu_strip - enabled msvs && echo "CONFIG_VS_VERSION=${vs_version}" >> "${1}" + enabled msvs && echo "CONFIG_VS_VERSION=${vs_version}" >> "${1}" - CC="${saved_CC}" - CXX="${saved_CXX}" + CC="${saved_CC}" + CXX="${saved_CXX}" } - write_common_target_config_h() { - print_webm_license ${TMP_H} "/*" " */" - cat >> ${TMP_H} << EOF + print_webm_license ${TMP_H} "/*" " */" + cat >> ${TMP_H} << EOF /* This file automatically generated by configure. Do not edit! */ #ifndef VPX_CONFIG_H #define VPX_CONFIG_H #define RESTRICT ${RESTRICT} #define INLINE ${INLINE} EOF - print_config_h ARCH "${TMP_H}" ${ARCH_LIST} - print_config_h HAVE "${TMP_H}" ${HAVE_LIST} - print_config_h CONFIG "${TMP_H}" ${CONFIG_LIST} - print_config_vars_h "${TMP_H}" ${VAR_LIST} - echo "#endif /* VPX_CONFIG_H */" >> ${TMP_H} - mkdir -p `dirname "$1"` - cmp "$1" ${TMP_H} >/dev/null 2>&1 || mv ${TMP_H} "$1" + print_config_h ARCH "${TMP_H}" ${ARCH_LIST} + print_config_h HAVE "${TMP_H}" ${HAVE_LIST} + print_config_h CONFIG "${TMP_H}" ${CONFIG_LIST} + print_config_vars_h "${TMP_H}" ${VAR_LIST} + echo "#endif /* VPX_CONFIG_H */" >> ${TMP_H} + mkdir -p `dirname "$1"` + cmp "$1" ${TMP_H} >/dev/null 2>&1 || mv ${TMP_H} "$1" } process_common_cmdline() { - for opt in "$@"; do - optval="${opt#*=}" - case "$opt" in - --child) enable_feature child + for opt in "$@"; do + optval="${opt#*=}" + case "$opt" in + --child) + enable_feature child ;; - --log*) + --log*) logging="$optval" if ! disabled logging ; then - enabled logging || logfile="$logging" + enabled logging || logfile="$logging" else - logfile=/dev/null + logfile=/dev/null fi ;; - --target=*) toolchain="${toolchain:-${optval}}" + --target=*) + toolchain="${toolchain:-${optval}}" ;; - --force-target=*) toolchain="${toolchain:-${optval}}"; enable_feature force_toolchain + --force-target=*) + toolchain="${toolchain:-${optval}}" + enable_feature force_toolchain ;; - --cpu) + --cpu) ;; - --cpu=*) tune_cpu="$optval" + --cpu=*) + tune_cpu="$optval" ;; - --extra-cflags=*) + --extra-cflags=*) extra_cflags="${optval}" ;; - --enable-?*|--disable-?*) + --enable-?*|--disable-?*) eval `echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g'` if echo "${ARCH_EXT_LIST}" | grep "^ *$option\$" >/dev/null; then - [ $action = "disable" ] && RTCD_OPTIONS="${RTCD_OPTIONS}--disable-${option} " + [ $action = "disable" ] && RTCD_OPTIONS="${RTCD_OPTIONS}--disable-${option} " elif [ $action = "disable" ] && ! disabled $option ; then echo "${CMDLINE_SELECT}" | grep "^ *$option\$" >/dev/null || die_unknown $opt @@ -531,7 +516,7 @@ process_common_cmdline() { fi ${action}_feature $option ;; - --require-?*) + --require-?*) eval `echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g'` if echo "${ARCH_EXT_LIST}" none | grep "^ *$option\$" >/dev/null; then RTCD_OPTIONS="${RTCD_OPTIONS}${opt} " @@ -539,22 +524,22 @@ process_common_cmdline() { die_unknown $opt fi ;; - --force-enable-?*|--force-disable-?*) + --force-enable-?*|--force-disable-?*) eval `echo "$opt" | sed 's/--force-/action=/;s/-/ option=/;s/-/_/g'` ${action}_feature $option ;; - --libc=*) + --libc=*) [ -d "${optval}" ] || die "Not a directory: ${optval}" disable_feature builtin_libc alt_libc="${optval}" ;; - --as=*) + --as=*) [ "${optval}" = yasm ] || [ "${optval}" = nasm ] \ - || [ "${optval}" = auto ] \ - || die "Must be yasm, nasm or auto: ${optval}" + || [ "${optval}" = auto ] \ + || die "Must be yasm, nasm or auto: ${optval}" alt_as="${optval}" ;; - --size-limit=*) + --size-limit=*) w="${optval%%x*}" h="${optval##*x}" VAR_LIST="DECODE_WIDTH_LIMIT ${w} DECODE_HEIGHT_LIMIT ${h}" @@ -563,816 +548,824 @@ process_common_cmdline() { || die "Invalid size-limit: too big." enable_feature size_limit ;; - --prefix=*) + --prefix=*) prefix="${optval}" ;; - --libdir=*) + --libdir=*) libdir="${optval}" ;; - --sdk-path=*) + --sdk-path=*) [ -d "${optval}" ] || die "Not a directory: ${optval}" sdk_path="${optval}" ;; - --libc|--as|--prefix|--libdir|--sdk-path) + --libc|--as|--prefix|--libdir|--sdk-path) die "Option ${opt} requires argument" ;; - --help|-h) show_help + --help|-h) + show_help ;; - *) die_unknown $opt + *) + die_unknown $opt ;; - esac - done + esac + done } process_cmdline() { - for opt do - optval="${opt#*=}" - case "$opt" in - *) process_common_cmdline $opt + for opt do + optval="${opt#*=}" + case "$opt" in + *) + process_common_cmdline $opt ;; - esac - done + esac + done } - post_process_common_cmdline() { - prefix="${prefix:-/usr/local}" - prefix="${prefix%/}" - libdir="${libdir:-${prefix}/lib}" - libdir="${libdir%/}" - if [ "${libdir#${prefix}}" = "${libdir}" ]; then - die "Libdir ${libdir} must be a subdirectory of ${prefix}" - fi + prefix="${prefix:-/usr/local}" + prefix="${prefix%/}" + libdir="${libdir:-${prefix}/lib}" + libdir="${libdir%/}" + if [ "${libdir#${prefix}}" = "${libdir}" ]; then + die "Libdir ${libdir} must be a subdirectory of ${prefix}" + fi } - post_process_cmdline() { - true; + true; } setup_gnu_toolchain() { - CC=${CC:-${CROSS}gcc} - CXX=${CXX:-${CROSS}g++} - AR=${AR:-${CROSS}ar} - LD=${LD:-${CROSS}${link_with_cc:-ld}} - AS=${AS:-${CROSS}as} - STRIP=${STRIP:-${CROSS}strip} - NM=${NM:-${CROSS}nm} - AS_SFX=.s - EXE_SFX= + CC=${CC:-${CROSS}gcc} + CXX=${CXX:-${CROSS}g++} + AR=${AR:-${CROSS}ar} + LD=${LD:-${CROSS}${link_with_cc:-ld}} + AS=${AS:-${CROSS}as} + STRIP=${STRIP:-${CROSS}strip} + NM=${NM:-${CROSS}nm} + AS_SFX=.s + EXE_SFX= } process_common_toolchain() { - if [ -z "$toolchain" ]; then - gcctarget="${CHOST:-$(gcc -dumpmachine 2> /dev/null)}" + if [ -z "$toolchain" ]; then + gcctarget="${CHOST:-$(gcc -dumpmachine 2> /dev/null)}" - # detect tgt_isa - case "$gcctarget" in - armv6*) - tgt_isa=armv6 - ;; - armv7*-hardfloat*) - tgt_isa=armv7 - float_abi=hard - ;; - armv7*) - tgt_isa=armv7 - float_abi=softfp - ;; - *x86_64*|*amd64*) - tgt_isa=x86_64 - ;; - *i[3456]86*) - tgt_isa=x86 - ;; - *powerpc64*) - tgt_isa=ppc64 - ;; - *powerpc*) - tgt_isa=ppc32 - ;; - *sparc*) - tgt_isa=sparc - ;; - esac + # detect tgt_isa + case "$gcctarget" in + armv6*) + tgt_isa=armv6 + ;; + armv7*-hardfloat*) + tgt_isa=armv7 + float_abi=hard + ;; + armv7*) + tgt_isa=armv7 + float_abi=softfp + ;; + *x86_64*|*amd64*) + tgt_isa=x86_64 + ;; + *i[3456]86*) + tgt_isa=x86 + ;; + *powerpc64*) + tgt_isa=ppc64 + ;; + *powerpc*) + tgt_isa=ppc32 + ;; + *sparc*) + tgt_isa=sparc + ;; + esac - # detect tgt_os - case "$gcctarget" in - *darwin8*) - tgt_isa=universal - tgt_os=darwin8 - ;; - *darwin9*) - tgt_isa=universal - tgt_os=darwin9 - ;; - *darwin10*) - tgt_isa=x86_64 - tgt_os=darwin10 - ;; - *darwin11*) - tgt_isa=x86_64 - tgt_os=darwin11 - ;; - *darwin12*) - tgt_isa=x86_64 - tgt_os=darwin12 - ;; - *darwin13*) - tgt_isa=x86_64 - tgt_os=darwin13 - ;; - x86_64*mingw32*) - tgt_os=win64 - ;; - *mingw32*|*cygwin*) - [ -z "$tgt_isa" ] && tgt_isa=x86 - tgt_os=win32 - ;; - *linux*|*bsd*) - tgt_os=linux - ;; - *solaris2.10) - tgt_os=solaris - ;; - *os2*) - tgt_os=os2 - ;; - esac + # detect tgt_os + case "$gcctarget" in + *darwin8*) + tgt_isa=universal + tgt_os=darwin8 + ;; + *darwin9*) + tgt_isa=universal + tgt_os=darwin9 + ;; + *darwin10*) + tgt_isa=x86_64 + tgt_os=darwin10 + ;; + *darwin11*) + tgt_isa=x86_64 + tgt_os=darwin11 + ;; + *darwin12*) + tgt_isa=x86_64 + tgt_os=darwin12 + ;; + *darwin13*) + tgt_isa=x86_64 + tgt_os=darwin13 + ;; + x86_64*mingw32*) + tgt_os=win64 + ;; + *mingw32*|*cygwin*) + [ -z "$tgt_isa" ] && tgt_isa=x86 + tgt_os=win32 + ;; + *linux*|*bsd*) + tgt_os=linux + ;; + *solaris2.10) + tgt_os=solaris + ;; + *os2*) + tgt_os=os2 + ;; + esac - if [ -n "$tgt_isa" ] && [ -n "$tgt_os" ]; then - toolchain=${tgt_isa}-${tgt_os}-gcc - fi + if [ -n "$tgt_isa" ] && [ -n "$tgt_os" ]; then + toolchain=${tgt_isa}-${tgt_os}-gcc fi + fi - toolchain=${toolchain:-generic-gnu} + toolchain=${toolchain:-generic-gnu} - is_in ${toolchain} ${all_platforms} || enabled force_toolchain \ - || die "Unrecognized toolchain '${toolchain}'" + is_in ${toolchain} ${all_platforms} || enabled force_toolchain \ + || die "Unrecognized toolchain '${toolchain}'" - enabled child || log_echo "Configuring for target '${toolchain}'" + enabled child || log_echo "Configuring for target '${toolchain}'" - # - # Set up toolchain variables - # - tgt_isa=$(echo ${toolchain} | awk 'BEGIN{FS="-"}{print $1}') - tgt_os=$(echo ${toolchain} | awk 'BEGIN{FS="-"}{print $2}') - tgt_cc=$(echo ${toolchain} | awk 'BEGIN{FS="-"}{print $3}') + # + # Set up toolchain variables + # + tgt_isa=$(echo ${toolchain} | awk 'BEGIN{FS="-"}{print $1}') + tgt_os=$(echo ${toolchain} | awk 'BEGIN{FS="-"}{print $2}') + tgt_cc=$(echo ${toolchain} | awk 'BEGIN{FS="-"}{print $3}') - # Mark the specific ISA requested as enabled - soft_enable ${tgt_isa} - enable_feature ${tgt_os} - enable_feature ${tgt_cc} + # Mark the specific ISA requested as enabled + soft_enable ${tgt_isa} + enable_feature ${tgt_os} + enable_feature ${tgt_cc} - # Enable the architecture family - case ${tgt_isa} in - arm*) enable_feature arm;; - mips*) enable_feature mips;; - esac - - # PIC is probably what we want when building shared libs - enabled shared && soft_enable pic - - # Minimum iOS version for all target platforms (darwin and iphonesimulator). - IOS_VERSION_MIN="6.0" - - # Handle darwin variants. Newer SDKs allow targeting older - # platforms, so find the newest SDK available. - case ${toolchain} in - *-darwin*) - if [ -z "${DEVELOPER_DIR}" ]; then - DEVELOPER_DIR=`xcode-select -print-path 2> /dev/null` - [ $? -ne 0 ] && OSX_SKIP_DIR_CHECK=1 - fi - if [ -z "${OSX_SKIP_DIR_CHECK}" ]; then - OSX_SDK_ROOTS="${DEVELOPER_DIR}/SDKs" - OSX_SDK_VERSIONS="MacOSX10.4u.sdk MacOSX10.5.sdk MacOSX10.6.sdk" - OSX_SDK_VERSIONS="${OSX_SDK_VERSIONS} MacOSX10.7.sdk" - for v in ${OSX_SDK_VERSIONS}; do - if [ -d "${OSX_SDK_ROOTS}/${v}" ]; then - osx_sdk_dir="${OSX_SDK_ROOTS}/${v}" - fi - done - fi - ;; - esac - - if [ -d "${osx_sdk_dir}" ]; then - add_cflags "-isysroot ${osx_sdk_dir}" - add_ldflags "-isysroot ${osx_sdk_dir}" - fi - - case ${toolchain} in - *-darwin8-*) - add_cflags "-mmacosx-version-min=10.4" - add_ldflags "-mmacosx-version-min=10.4" - ;; - *-darwin9-*) - add_cflags "-mmacosx-version-min=10.5" - add_ldflags "-mmacosx-version-min=10.5" - ;; - *-darwin10-*) - add_cflags "-mmacosx-version-min=10.6" - add_ldflags "-mmacosx-version-min=10.6" - ;; - *-darwin11-*) - add_cflags "-mmacosx-version-min=10.7" - add_ldflags "-mmacosx-version-min=10.7" - ;; - *-darwin12-*) - add_cflags "-mmacosx-version-min=10.8" - add_ldflags "-mmacosx-version-min=10.8" - ;; - *-darwin13-*) - add_cflags "-mmacosx-version-min=10.9" - add_ldflags "-mmacosx-version-min=10.9" - ;; - *-iphonesimulator-*) - add_cflags "-miphoneos-version-min=${IOS_VERSION_MIN}" - add_ldflags "-miphoneos-version-min=${IOS_VERSION_MIN}" - osx_sdk_dir="$(xcrun --sdk iphonesimulator --show-sdk-path)" - add_cflags "-isysroot ${osx_sdk_dir}" - add_ldflags "-isysroot ${osx_sdk_dir}" - ;; - esac - - # Handle Solaris variants. Solaris 10 needs -lposix4 - case ${toolchain} in - sparc-solaris-*) - add_extralibs -lposix4 - disable_feature fast_unaligned - ;; - *-solaris-*) - add_extralibs -lposix4 - ;; - esac - - # Process ARM architecture variants - case ${toolchain} in + # Enable the architecture family + case ${tgt_isa} in arm*) - # on arm, isa versions are supersets - case ${tgt_isa} in + enable_feature arm + ;; + mips*) + enable_feature mips + ;; + esac + + # PIC is probably what we want when building shared libs + enabled shared && soft_enable pic + + # Minimum iOS version for all target platforms (darwin and iphonesimulator). + IOS_VERSION_MIN="6.0" + + # Handle darwin variants. Newer SDKs allow targeting older + # platforms, so find the newest SDK available. + case ${toolchain} in + *-darwin*) + if [ -z "${DEVELOPER_DIR}" ]; then + DEVELOPER_DIR=`xcode-select -print-path 2> /dev/null` + [ $? -ne 0 ] && OSX_SKIP_DIR_CHECK=1 + fi + if [ -z "${OSX_SKIP_DIR_CHECK}" ]; then + OSX_SDK_ROOTS="${DEVELOPER_DIR}/SDKs" + OSX_SDK_VERSIONS="MacOSX10.4u.sdk MacOSX10.5.sdk MacOSX10.6.sdk" + OSX_SDK_VERSIONS="${OSX_SDK_VERSIONS} MacOSX10.7.sdk" + for v in ${OSX_SDK_VERSIONS}; do + if [ -d "${OSX_SDK_ROOTS}/${v}" ]; then + osx_sdk_dir="${OSX_SDK_ROOTS}/${v}" + fi + done + fi + ;; + esac + + if [ -d "${osx_sdk_dir}" ]; then + add_cflags "-isysroot ${osx_sdk_dir}" + add_ldflags "-isysroot ${osx_sdk_dir}" + fi + + case ${toolchain} in + *-darwin8-*) + add_cflags "-mmacosx-version-min=10.4" + add_ldflags "-mmacosx-version-min=10.4" + ;; + *-darwin9-*) + add_cflags "-mmacosx-version-min=10.5" + add_ldflags "-mmacosx-version-min=10.5" + ;; + *-darwin10-*) + add_cflags "-mmacosx-version-min=10.6" + add_ldflags "-mmacosx-version-min=10.6" + ;; + *-darwin11-*) + add_cflags "-mmacosx-version-min=10.7" + add_ldflags "-mmacosx-version-min=10.7" + ;; + *-darwin12-*) + add_cflags "-mmacosx-version-min=10.8" + add_ldflags "-mmacosx-version-min=10.8" + ;; + *-darwin13-*) + add_cflags "-mmacosx-version-min=10.9" + add_ldflags "-mmacosx-version-min=10.9" + ;; + *-iphonesimulator-*) + add_cflags "-miphoneos-version-min=${IOS_VERSION_MIN}" + add_ldflags "-miphoneos-version-min=${IOS_VERSION_MIN}" + osx_sdk_dir="$(xcrun --sdk iphonesimulator --show-sdk-path)" + add_cflags "-isysroot ${osx_sdk_dir}" + add_ldflags "-isysroot ${osx_sdk_dir}" + ;; + esac + + # Handle Solaris variants. Solaris 10 needs -lposix4 + case ${toolchain} in + sparc-solaris-*) + add_extralibs -lposix4 + disable_feature fast_unaligned + ;; + *-solaris-*) + add_extralibs -lposix4 + ;; + esac + + # Process ARM architecture variants + case ${toolchain} in + arm*) + # on arm, isa versions are supersets + case ${tgt_isa} in arm64|armv8) - soft_enable neon - ;; + soft_enable neon + ;; armv7|armv7s) - soft_enable neon - soft_enable neon_asm - soft_enable media - soft_enable fast_unaligned - ;; + soft_enable neon + soft_enable neon_asm + soft_enable media + soft_enable fast_unaligned + ;; armv6) - soft_enable media - soft_enable fast_unaligned - ;; - esac + soft_enable media + soft_enable fast_unaligned + ;; + esac - asm_conversion_cmd="cat" + asm_conversion_cmd="cat" - case ${tgt_cc} in + case ${tgt_cc} in gcc) - CROSS=${CROSS:-arm-none-linux-gnueabi-} - link_with_cc=gcc - setup_gnu_toolchain - arch_int=${tgt_isa##armv} - arch_int=${arch_int%%te} - check_add_asflags --defsym ARCHITECTURE=${arch_int} - tune_cflags="-mtune=" - if [ ${tgt_isa} = "armv7" ] || [ ${tgt_isa} = "armv7s" ]; then - if [ -z "${float_abi}" ]; then - check_cpp <&- || \ - die "Couldn't find CodeSourcery GCC from PATH" + enable_feature linux + if enabled rvct; then + # Check if we have CodeSourcery GCC in PATH. Needed for + # libraries + hash arm-none-linux-gnueabi-gcc 2>&- || \ + die "Couldn't find CodeSourcery GCC from PATH" - # Use armcc as a linker to enable translation of - # some gcc specific options such as -lm and -lpthread. - LD="armcc --translate_gcc" + # Use armcc as a linker to enable translation of + # some gcc specific options such as -lm and -lpthread. + LD="armcc --translate_gcc" - # create configuration file (uses path to CodeSourcery GCC) - armcc --arm_linux_configure --arm_linux_config_file=arm_linux.cfg + # create configuration file (uses path to CodeSourcery GCC) + armcc --arm_linux_configure --arm_linux_config_file=arm_linux.cfg - add_cflags --arm_linux_paths --arm_linux_config_file=arm_linux.cfg - add_asflags --no_hide_all --apcs=/interwork - add_ldflags --arm_linux_paths --arm_linux_config_file=arm_linux.cfg - enabled pic && add_cflags --apcs=/fpic - enabled pic && add_asflags --apcs=/fpic - enabled shared && add_cflags --shared - fi - ;; - - esac - ;; + add_cflags --arm_linux_paths --arm_linux_config_file=arm_linux.cfg + add_asflags --no_hide_all --apcs=/interwork + add_ldflags --arm_linux_paths --arm_linux_config_file=arm_linux.cfg + enabled pic && add_cflags --apcs=/fpic + enabled pic && add_asflags --apcs=/fpic + enabled shared && add_cflags --shared + fi + ;; + esac + ;; mips*) - link_with_cc=gcc - setup_gnu_toolchain - tune_cflags="-mtune=" - if enabled dspr2; then - check_add_cflags -mips32r2 -mdspr2 - disable_feature fast_unaligned - fi - check_add_cflags -march=${tgt_isa} - check_add_asflags -march=${tgt_isa} - check_add_asflags -KPIC - ;; + link_with_cc=gcc + setup_gnu_toolchain + tune_cflags="-mtune=" + if enabled dspr2; then + check_add_cflags -mips32r2 -mdspr2 + disable_feature fast_unaligned + fi + check_add_cflags -march=${tgt_isa} + check_add_asflags -march=${tgt_isa} + check_add_asflags -KPIC + ;; ppc*) - enable_feature ppc - bits=${tgt_isa##ppc} - link_with_cc=gcc - setup_gnu_toolchain - add_asflags -force_cpusubtype_ALL -I"\$(dir \$<)darwin" - soft_enable altivec - enabled altivec && add_cflags -maltivec + enable_feature ppc + bits=${tgt_isa##ppc} + link_with_cc=gcc + setup_gnu_toolchain + add_asflags -force_cpusubtype_ALL -I"\$(dir \$<)darwin" + soft_enable altivec + enabled altivec && add_cflags -maltivec - case "$tgt_os" in + case "$tgt_os" in linux*) - add_asflags -maltivec -mregnames -I"\$(dir \$<)linux" - ;; + add_asflags -maltivec -mregnames -I"\$(dir \$<)linux" + ;; darwin*) - darwin_arch="-arch ppc" - enabled ppc64 && darwin_arch="${darwin_arch}64" - add_cflags ${darwin_arch} -m${bits} -fasm-blocks - add_asflags ${darwin_arch} -force_cpusubtype_ALL -I"\$(dir \$<)darwin" - add_ldflags ${darwin_arch} -m${bits} - enabled altivec && add_cflags -faltivec - ;; - esac - ;; + darwin_arch="-arch ppc" + enabled ppc64 && darwin_arch="${darwin_arch}64" + add_cflags ${darwin_arch} -m${bits} -fasm-blocks + add_asflags ${darwin_arch} -force_cpusubtype_ALL -I"\$(dir \$<)darwin" + add_ldflags ${darwin_arch} -m${bits} + enabled altivec && add_cflags -faltivec + ;; + esac + ;; x86*) - case ${tgt_os} in - win*) - enabled gcc && add_cflags -fno-common - ;; - solaris*) - CC=${CC:-${CROSS}gcc} - CXX=${CXX:-${CROSS}g++} - LD=${LD:-${CROSS}gcc} - CROSS=${CROSS:-g} - ;; - os2) - AS=${AS:-nasm} - ;; - esac + case ${tgt_os} in + win*) + enabled gcc && add_cflags -fno-common + ;; + solaris*) + CC=${CC:-${CROSS}gcc} + CXX=${CXX:-${CROSS}g++} + LD=${LD:-${CROSS}gcc} + CROSS=${CROSS:-g} + ;; + os2) + AS=${AS:-nasm} + ;; + esac - AS="${alt_as:-${AS:-auto}}" - case ${tgt_cc} in - icc*) - CC=${CC:-icc} - LD=${LD:-icc} - setup_gnu_toolchain - add_cflags -use-msasm # remove -use-msasm too? - # add -no-intel-extensions to suppress warning #10237 - # refer to http://software.intel.com/en-us/forums/topic/280199 - add_ldflags -i-static -no-intel-extensions - enabled x86_64 && add_cflags -ipo -static -O3 -no-prec-div - enabled x86_64 && AR=xiar - case ${tune_cpu} in - atom*) - tune_cflags="-x" - tune_cpu="SSE3_ATOM" - ;; - *) - tune_cflags="-march=" - ;; - esac - ;; - gcc*) - link_with_cc=gcc - tune_cflags="-march=" - setup_gnu_toolchain - #for 32 bit x86 builds, -O3 did not turn on this flag - enabled optimizations && disabled gprof && check_add_cflags -fomit-frame-pointer - ;; - vs*) - # When building with Microsoft Visual Studio the assembler is - # invoked directly. Checking at configure time is unnecessary. - # Skip the check by setting AS arbitrarily - AS=msvs - msvs_arch_dir=x86-msvs - vc_version=${tgt_cc##vs} - case $vc_version in - 7|8|9|10) - echo "${tgt_cc} does not support avx/avx2, disabling....." - RTCD_OPTIONS="${RTCD_OPTIONS}--disable-avx --disable-avx2 " - soft_disable avx - soft_disable avx2 - ;; - esac - ;; - esac + AS="${alt_as:-${AS:-auto}}" + case ${tgt_cc} in + icc*) + CC=${CC:-icc} + LD=${LD:-icc} + setup_gnu_toolchain + add_cflags -use-msasm # remove -use-msasm too? + # add -no-intel-extensions to suppress warning #10237 + # refer to http://software.intel.com/en-us/forums/topic/280199 + add_ldflags -i-static -no-intel-extensions + enabled x86_64 && add_cflags -ipo -static -O3 -no-prec-div + enabled x86_64 && AR=xiar + case ${tune_cpu} in + atom*) + tune_cflags="-x" + tune_cpu="SSE3_ATOM" + ;; + *) + tune_cflags="-march=" + ;; + esac + ;; + gcc*) + link_with_cc=gcc + tune_cflags="-march=" + setup_gnu_toolchain + #for 32 bit x86 builds, -O3 did not turn on this flag + enabled optimizations && disabled gprof && check_add_cflags -fomit-frame-pointer + ;; + vs*) + # When building with Microsoft Visual Studio the assembler is + # invoked directly. Checking at configure time is unnecessary. + # Skip the check by setting AS arbitrarily + AS=msvs + msvs_arch_dir=x86-msvs + vc_version=${tgt_cc##vs} + case $vc_version in + 7|8|9|10) + echo "${tgt_cc} does not support avx/avx2, disabling....." + RTCD_OPTIONS="${RTCD_OPTIONS}--disable-avx --disable-avx2 " + soft_disable avx + soft_disable avx2 + ;; + esac + ;; + esac - bits=32 - enabled x86_64 && bits=64 - check_cpp </dev/null 2>&1 && AS=nasm - which yasm >/dev/null 2>&1 && AS=yasm - [ "${AS}" = auto ] || [ -z "${AS}" ] \ - && die "Neither yasm nor nasm have been found" - ;; - esac - log_echo " using $AS" - [ "${AS##*/}" = nasm ] && add_asflags -Ox - AS_SFX=.asm - case ${tgt_os} in - win32) - add_asflags -f win32 - enabled debug && add_asflags -g cv8 - EXE_SFX=.exe - ;; - win64) - add_asflags -f x64 - enabled debug && add_asflags -g cv8 - EXE_SFX=.exe - ;; - linux*|solaris*|android*) - add_asflags -f elf${bits} - enabled debug && [ "${AS}" = yasm ] && add_asflags -g dwarf2 - enabled debug && [ "${AS}" = nasm ] && add_asflags -g - [ "${AS##*/}" = nasm ] && check_asm_align - ;; - darwin*) - add_asflags -f macho${bits} - enabled x86 && darwin_arch="-arch i386" || darwin_arch="-arch x86_64" - add_cflags ${darwin_arch} - add_ldflags ${darwin_arch} - # -mdynamic-no-pic is still a bit of voodoo -- it was required at - # one time, but does not seem to be now, and it breaks some of the - # code that still relies on inline assembly. - # enabled icc && ! enabled pic && add_cflags -fno-pic -mdynamic-no-pic - enabled icc && ! enabled pic && add_cflags -fno-pic - ;; - iphonesimulator) - add_asflags -f macho${bits} - enabled x86 && sim_arch="-arch i386" || sim_arch="-arch x86_64" - add_cflags ${sim_arch} - add_ldflags ${sim_arch} - ;; - os2) - add_asflags -f aout - enabled debug && add_asflags -g - EXE_SFX=.exe - ;; - *) log "Warning: Unknown os $tgt_os while setting up $AS flags" - ;; - esac - ;; + case "${AS}" in + auto|"") + which nasm >/dev/null 2>&1 && AS=nasm + which yasm >/dev/null 2>&1 && AS=yasm + [ "${AS}" = auto ] || [ -z "${AS}" ] \ + && die "Neither yasm nor nasm have been found" + ;; + esac + log_echo " using $AS" + [ "${AS##*/}" = nasm ] && add_asflags -Ox + AS_SFX=.asm + case ${tgt_os} in + win32) + add_asflags -f win32 + enabled debug && add_asflags -g cv8 + EXE_SFX=.exe + ;; + win64) + add_asflags -f x64 + enabled debug && add_asflags -g cv8 + EXE_SFX=.exe + ;; + linux*|solaris*|android*) + add_asflags -f elf${bits} + enabled debug && [ "${AS}" = yasm ] && add_asflags -g dwarf2 + enabled debug && [ "${AS}" = nasm ] && add_asflags -g + [ "${AS##*/}" = nasm ] && check_asm_align + ;; + darwin*) + add_asflags -f macho${bits} + enabled x86 && darwin_arch="-arch i386" || darwin_arch="-arch x86_64" + add_cflags ${darwin_arch} + add_ldflags ${darwin_arch} + # -mdynamic-no-pic is still a bit of voodoo -- it was required at + # one time, but does not seem to be now, and it breaks some of the + # code that still relies on inline assembly. + # enabled icc && ! enabled pic && add_cflags -fno-pic -mdynamic-no-pic + enabled icc && ! enabled pic && add_cflags -fno-pic + ;; + iphonesimulator) + add_asflags -f macho${bits} + enabled x86 && sim_arch="-arch i386" || sim_arch="-arch x86_64" + add_cflags ${sim_arch} + add_ldflags ${sim_arch} + ;; + os2) + add_asflags -f aout + enabled debug && add_asflags -g + EXE_SFX=.exe + ;; + *) + log "Warning: Unknown os $tgt_os while setting up $AS flags" + ;; + esac + ;; universal*|*-gcc|generic-gnu) - link_with_cc=gcc - enable_feature gcc - setup_gnu_toolchain - ;; - esac + link_with_cc=gcc + enable_feature gcc + setup_gnu_toolchain + ;; + esac - # Try to enable CPU specific tuning - if [ -n "${tune_cpu}" ]; then - if [ -n "${tune_cflags}" ]; then - check_add_cflags ${tune_cflags}${tune_cpu} || \ - die "Requested CPU '${tune_cpu}' not supported by compiler" - fi + # Try to enable CPU specific tuning + if [ -n "${tune_cpu}" ]; then + if [ -n "${tune_cflags}" ]; then + check_add_cflags ${tune_cflags}${tune_cpu} || \ + die "Requested CPU '${tune_cpu}' not supported by compiler" + fi if [ -n "${tune_asflags}" ]; then - check_add_asflags ${tune_asflags}${tune_cpu} || \ - die "Requested CPU '${tune_cpu}' not supported by assembler" - fi + check_add_asflags ${tune_asflags}${tune_cpu} || \ + die "Requested CPU '${tune_cpu}' not supported by assembler" + fi if [ -z "${tune_cflags}${tune_asflags}" ]; then - log_echo "Warning: CPU tuning not supported by this toolchain" - fi + log_echo "Warning: CPU tuning not supported by this toolchain" fi + fi - if enabled debug; then - check_add_cflags -g && check_add_ldflags -g + if enabled debug; then + check_add_cflags -g && check_add_ldflags -g + else + check_add_cflags -DNDEBUG + fi + + enabled gprof && check_add_cflags -pg && check_add_ldflags -pg + enabled gcov && + check_add_cflags -fprofile-arcs -ftest-coverage && + check_add_ldflags -fprofile-arcs -ftest-coverage + + if enabled optimizations; then + if enabled rvct; then + enabled small && check_add_cflags -Ospace || check_add_cflags -Otime else - check_add_cflags -DNDEBUG + enabled small && check_add_cflags -O2 || check_add_cflags -O3 fi + fi - enabled gprof && check_add_cflags -pg && check_add_ldflags -pg - enabled gcov && - check_add_cflags -fprofile-arcs -ftest-coverage && - check_add_ldflags -fprofile-arcs -ftest-coverage + tgt_os_no_version=$(echo "${tgt_os}" | tr -d "[0-9]") + # Default use_x86inc to yes when we are 64 bit, non-pic, or on any + # non-Darwin target. + if [ "${tgt_isa}" = "x86_64" ] || [ "${pic}" != "yes" ] || \ + [ "${tgt_os_no_version}" != "darwin" ]; then + soft_enable use_x86inc + fi - if enabled optimizations; then - if enabled rvct; then - enabled small && check_add_cflags -Ospace || check_add_cflags -Otime - else - enabled small && check_add_cflags -O2 || check_add_cflags -O3 - fi - fi + # Position Independent Code (PIC) support, for building relocatable + # shared objects + enabled gcc && enabled pic && check_add_cflags -fPIC - tgt_os_no_version=$(echo "${tgt_os}" | tr -d "[0-9]") - # Default use_x86inc to yes when we are 64 bit, non-pic, or on any - # non-Darwin target. - if [ "${tgt_isa}" = "x86_64" ] || [ "${pic}" != "yes" ] || \ - [ "${tgt_os_no_version}" != "darwin" ]; then - soft_enable use_x86inc - fi + # Work around longjmp interception on glibc >= 2.11, to improve binary + # compatibility. See http://code.google.com/p/webm/issues/detail?id=166 + enabled linux && check_add_cflags -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=0 - # Position Independent Code (PIC) support, for building relocatable - # shared objects - enabled gcc && enabled pic && check_add_cflags -fPIC + # Check for strip utility variant + ${STRIP} -V 2>/dev/null | grep GNU >/dev/null && enable_feature gnu_strip - # Work around longjmp interception on glibc >= 2.11, to improve binary - # compatibility. See http://code.google.com/p/webm/issues/detail?id=166 - enabled linux && check_add_cflags -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=0 - - # Check for strip utility variant - ${STRIP} -V 2>/dev/null | grep GNU >/dev/null && enable_feature gnu_strip - - # Try to determine target endianness - check_cc </dev/null 2>&1 && enable_feature big_endian # Try to find which inline keywords are supported check_cc <> $makefile - fi - done - prefix="${saved_prefix}" + saved_prefix="${prefix}" + prefix=$1 + makefile=$2 + shift 2 + for cfg; do + if enabled $cfg; then + upname="`toupper $cfg`" + echo "${prefix}_${upname}=yes" >> $makefile + fi + done + prefix="${saved_prefix}" } print_config_h() { - saved_prefix="${prefix}" - prefix=$1 - header=$2 - shift 2 - for cfg; do - upname="`toupper $cfg`" - if enabled $cfg; then - echo "#define ${prefix}_${upname} 1" >> $header - else - echo "#define ${prefix}_${upname} 0" >> $header - fi - done - prefix="${saved_prefix}" + saved_prefix="${prefix}" + prefix=$1 + header=$2 + shift 2 + for cfg; do + upname="`toupper $cfg`" + if enabled $cfg; then + echo "#define ${prefix}_${upname} 1" >> $header + else + echo "#define ${prefix}_${upname} 0" >> $header + fi + done + prefix="${saved_prefix}" } print_config_vars_h() { - header=$1 - shift - while [ $# -gt 0 ]; do - upname="`toupper $1`" - echo "#define ${upname} $2" >> $header - shift 2 - done + header=$1 + shift + while [ $# -gt 0 ]; do + upname="`toupper $1`" + echo "#define ${upname} $2" >> $header + shift 2 + done } print_webm_license() { - saved_prefix="${prefix}" - destination=$1 - prefix="$2" - suffix="$3" - shift 3 - cat < ${destination} + saved_prefix="${prefix}" + destination=$1 + prefix="$2" + suffix="$3" + shift 3 + cat < ${destination} ${prefix} Copyright (c) 2011 The WebM project authors. All Rights Reserved.${suffix} ${prefix} ${suffix} ${prefix} Use of this source code is governed by a BSD-style license${suffix} @@ -1381,43 +1374,43 @@ ${prefix} tree. An additional intellectual property rights grant can be found${s ${prefix} in the file PATENTS. All contributing project authors may${suffix} ${prefix} be found in the AUTHORS file in the root of the source tree.${suffix} EOF - prefix="${saved_prefix}" + prefix="${saved_prefix}" } process_targets() { - true; + true; } process_detect() { - true; + true; } enable_feature logging logfile="config.log" self=$0 process() { - cmdline_args="$@" - process_cmdline "$@" - if enabled child; then - echo "# ${self} $@" >> ${logfile} - else - echo "# ${self} $@" > ${logfile} - fi - post_process_common_cmdline - post_process_cmdline - process_toolchain - process_detect - process_targets + cmdline_args="$@" + process_cmdline "$@" + if enabled child; then + echo "# ${self} $@" >> ${logfile} + else + echo "# ${self} $@" > ${logfile} + fi + post_process_common_cmdline + post_process_cmdline + process_toolchain + process_detect + process_targets - OOT_INSTALLS="${OOT_INSTALLS}" - if enabled source_path_used; then - # Prepare the PWD for building. - for f in ${OOT_INSTALLS}; do - install -D "${source_path}/$f" "$f" - done - fi - cp "${source_path}/build/make/Makefile" . + OOT_INSTALLS="${OOT_INSTALLS}" + if enabled source_path_used; then + # Prepare the PWD for building. + for f in ${OOT_INSTALLS}; do + install -D "${source_path}/$f" "$f" + done + fi + cp "${source_path}/build/make/Makefile" . - clean_temp_files - true + clean_temp_files + true }