| #!/bin/sh | |
| ## | |
| ## configure.sh | |
| ## | |
| ## This script is sourced by the main configure script and contains | |
| ## utility functions and other common bits that aren't strictly libaom | |
| ## related. | |
| ## | |
| ## This build system is based in part on the FFmpeg configure script. | |
| ## | |
| # | |
| # Logging / Output Functions | |
| # | |
| die_unknown(){ | |
| 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 | |
| } | |
| log(){ | |
| echo "$@" >>$logfile | |
| } | |
| log_file(){ | |
| log BEGIN $1 | |
| cat -n $1 >>$logfile | |
| log END $1 | |
| } | |
| log_echo() { | |
| echo "$@" | |
| log "$@" | |
| } | |
| fwrite () { | |
| 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 | |
| cat <<EOF | |
| Usage: configure [options] | |
| Options: | |
| Build options: | |
| --help print this message | |
| --log=yes|no|FILE file configure log is written to [config.log] | |
| --target=TARGET target platform tuple [generic-gnu] | |
| --cpu=CPU optimize for a specific cpu rather than a family | |
| --extra-cflags=ECFLAGS add ECFLAGS to CFLAGS [$CFLAGS] | |
| --extra-cxxflags=ECXXFLAGS add ECXXFLAGS to CXXFLAGS [$CXXFLAGS] | |
| ${toggle_extra_warnings} emit harmless warnings (always non-fatal) | |
| ${toggle_werror} treat warnings as errors, if possible | |
| (not available with all compilers) | |
| ${toggle_optimizations} turn on/off compiler optimization flags | |
| ${toggle_pic} turn on/off Position Independent Code | |
| ${toggle_ccache} turn on/off compiler cache | |
| ${toggle_debug} enable/disable debug mode | |
| ${toggle_gprof} enable/disable gprof profiling instrumentation | |
| ${toggle_gcov} enable/disable gcov coverage instrumentation | |
| ${toggle_thumb} enable/disable building arm assembly in thumb mode | |
| ${toggle_dependency_tracking} | |
| disable to speed up one-time build | |
| Install options: | |
| ${toggle_install_docs} control whether docs are installed | |
| ${toggle_install_bins} control whether binaries are installed | |
| ${toggle_install_libs} control whether libraries are installed | |
| ${toggle_install_srcs} control whether sources are installed | |
| EOF | |
| } | |
| show_help_post(){ | |
| cat <<EOF | |
| NOTES: | |
| Object files are built at the place where configure is launched. | |
| All boolean options can be negated. The default value is the opposite | |
| of that shown above. If the option --disable-foo is listed, then | |
| the default value for foo is enabled. | |
| Supported targets: | |
| EOF | |
| show_targets ${all_platforms} | |
| echo | |
| exit 1 | |
| } | |
| show_targets() { | |
| while [ -n "$*" ]; do | |
| if [ "${1%%-*}" = "${2%%-*}" ]; then | |
| if [ "${2%%-*}" = "${3%%-*}" ]; then | |
| printf " %-24s %-24s %-24s\n" "$1" "$2" "$3" | |
| shift; shift; shift | |
| else | |
| printf " %-24s %-24s\n" "$1" "$2" | |
| shift; shift | |
| fi | |
| else | |
| printf " %-24s\n" "$1" | |
| shift | |
| fi | |
| done | |
| } | |
| show_help() { | |
| show_help_pre | |
| show_help_post | |
| } | |
| # | |
| # List Processing Functions | |
| # | |
| set_all(){ | |
| value=$1 | |
| shift | |
| for var in $*; do | |
| eval $var=$value | |
| done | |
| } | |
| is_in(){ | |
| value=$1 | |
| shift | |
| for var in $*; do | |
| [ $var = $value ] && return 0 | |
| done | |
| return 1 | |
| } | |
| add_cflags() { | |
| CFLAGS="${CFLAGS} $@" | |
| CXXFLAGS="${CXXFLAGS} $@" | |
| } | |
| add_cflags_only() { | |
| CFLAGS="${CFLAGS} $@" | |
| } | |
| add_cxxflags_only() { | |
| CXXFLAGS="${CXXFLAGS} $@" | |
| } | |
| add_ldflags() { | |
| LDFLAGS="${LDFLAGS} $@" | |
| } | |
| add_asflags() { | |
| ASFLAGS="${ASFLAGS} $@" | |
| } | |
| add_extralibs() { | |
| extralibs="${extralibs} $@" | |
| } | |
| # | |
| # Boolean Manipulation Functions | |
| # | |
| enable_feature(){ | |
| set_all yes $* | |
| } | |
| disable_feature(){ | |
| set_all no $* | |
| } | |
| enabled(){ | |
| eval test "x\$$1" = "xyes" | |
| } | |
| disabled(){ | |
| eval test "x\$$1" = "xno" | |
| } | |
| enable_codec(){ | |
| enabled "${1}" || echo " enabling ${1}" | |
| enable_feature "${1}" | |
| is_in "${1}" av1 && enable_feature "${1}_encoder" "${1}_decoder" | |
| } | |
| disable_codec(){ | |
| disabled "${1}" || echo " disabling ${1}" | |
| disable_feature "${1}" | |
| is_in "${1}" av1 && disable_feature "${1}_encoder" "${1}_decoder" | |
| } | |
| # Iterates through positional parameters, checks to confirm the parameter has | |
| # not been explicitly (force) disabled, and enables the setting controlled by | |
| # the parameter when the setting is not disabled. | |
| # Note: Does NOT alter RTCD generation options ($RTCD_OPTIONS). | |
| soft_enable() { | |
| for var in $*; do | |
| if ! disabled $var; then | |
| enabled $var || log_echo " enabling $var" | |
| enable_feature $var | |
| fi | |
| done | |
| } | |
| # Iterates through positional parameters, checks to confirm the parameter has | |
| # not been explicitly (force) enabled, and disables the setting controlled by | |
| # the parameter when the setting is not enabled. | |
| # Note: Does NOT alter RTCD generation options ($RTCD_OPTIONS). | |
| soft_disable() { | |
| for var in $*; do | |
| if ! enabled $var; then | |
| disabled $var || log_echo " disabling $var" | |
| disable_feature $var | |
| fi | |
| done | |
| } | |
| # | |
| # Text Processing Functions | |
| # | |
| toupper(){ | |
| echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ | |
| } | |
| tolower(){ | |
| echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | |
| } | |
| # | |
| # Temporary File Functions | |
| # | |
| source_path=${0%/*} | |
| enable_feature source_path_used | |
| if [ -z "$source_path" ] || [ "$source_path" = "." ]; then | |
| source_path="`pwd`" | |
| disable_feature source_path_used | |
| fi | |
| if test ! -z "$TMPDIR" ; then | |
| TMPDIRx="${TMPDIR}" | |
| elif test ! -z "$TEMPDIR" ; then | |
| TMPDIRx="${TEMPDIR}" | |
| else | |
| TMPDIRx="/tmp" | |
| fi | |
| RAND=$(awk 'BEGIN { srand(); printf "%d\n",(rand() * 32768)}') | |
| TMP_H="${TMPDIRx}/aom-conf-$$-${RAND}.h" | |
| TMP_C="${TMPDIRx}/aom-conf-$$-${RAND}.c" | |
| TMP_CC="${TMPDIRx}/aom-conf-$$-${RAND}.cc" | |
| TMP_O="${TMPDIRx}/aom-conf-$$-${RAND}.o" | |
| TMP_X="${TMPDIRx}/aom-conf-$$-${RAND}.x" | |
| TMP_ASM="${TMPDIRx}/aom-conf-$$-${RAND}.asm" | |
| clean_temp_files() { | |
| rm -f ${TMP_C} ${TMP_CC} ${TMP_H} ${TMP_O} ${TMP_X} ${TMP_ASM} | |
| enabled gcov && rm -f ${TMP_C%.c}.gcno ${TMP_CC%.cc}.gcno | |
| } | |
| # | |
| # Toolchain Check Functions | |
| # | |
| check_cmd() { | |
| 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} | |
| } | |
| check_cxx() { | |
| 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} | |
| } | |
| check_ld() { | |
| 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 "$@" <<EOF && enable_feature $var | |
| #include "$header" | |
| int x; | |
| EOF | |
| } | |
| check_cflags() { | |
| log check_cflags "$@" | |
| check_cc -Werror "$@" <<EOF | |
| int x; | |
| EOF | |
| } | |
| check_cxxflags() { | |
| log check_cxxflags "$@" | |
| # Catch CFLAGS that trigger CXX warnings | |
| case "$CXX" in | |
| *c++-analyzer|*clang++|*g++*) | |
| check_cxx -Werror "$@" <<EOF | |
| int x; | |
| EOF | |
| ;; | |
| *) | |
| check_cxx -Werror "$@" <<EOF | |
| int x; | |
| EOF | |
| ;; | |
| esac | |
| } | |
| check_add_cflags() { | |
| check_cxxflags "$@" && add_cxxflags_only "$@" | |
| check_cflags "$@" && add_cflags_only "$@" | |
| } | |
| check_add_cxxflags() { | |
| check_cxxflags "$@" && add_cxxflags_only "$@" | |
| } | |
| check_add_asflags() { | |
| log add_asflags "$@" | |
| add_asflags "$@" | |
| } | |
| check_add_ldflags() { | |
| log add_ldflags "$@" | |
| add_ldflags "$@" | |
| } | |
| check_asm_align() { | |
| log check_asm_align "$@" | |
| cat >${TMP_ASM} <<EOF | |
| section .rodata | |
| align 16 | |
| EOF | |
| 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" | |
| 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 | |
| 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 child; then | |
| fwrite config.mk "ALL_TARGETS += ${t}-${toolchain}" | |
| else | |
| fwrite config.mk "ALL_TARGETS += ${t}" | |
| fi | |
| fi | |
| 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 "##" "" | |
| cat >> $1 << EOF | |
| # This file automatically generated by configure. Do not edit! | |
| SRC_PATH="$source_path" | |
| SRC_PATH_BARE=$source_path | |
| BUILD_PFX=${BUILD_PFX} | |
| TOOLCHAIN=${toolchain} | |
| ASM_CONVERSION=${asm_conversion_cmd:-${source_path}/build/make/ads2gas.pl} | |
| GEN_VCPROJ=${gen_vcproj_cmd} | |
| MSVS_ARCH_DIR=${msvs_arch_dir} | |
| CC=${CC} | |
| CXX=${CXX} | |
| AR=${AR} | |
| LD=${LD} | |
| AS=${AS} | |
| STRIP=${STRIP} | |
| NM=${NM} | |
| CFLAGS = ${CFLAGS} | |
| CXXFLAGS = ${CXXFLAGS} | |
| ARFLAGS = crs\$(if \$(quiet),,v) | |
| LDFLAGS = ${LDFLAGS} | |
| ASFLAGS = ${ASFLAGS} | |
| extralibs = ${extralibs} | |
| AS_SFX = ${AS_SFX:-.asm} | |
| EXE_SFX = ${EXE_SFX} | |
| VCPROJ_SFX = ${VCPROJ_SFX} | |
| RTCD_OPTIONS = ${RTCD_OPTIONS} | |
| WX_CXXFLAGS = ${WX_CXXFLAGS} | |
| WX_LDFLAGS = ${WX_LDFLAGS} | |
| EOF | |
| if enabled rvct; then cat >> $1 << EOF | |
| fmt_deps = sed -e 's;^__image.axf;\${@:.d=.o} \$@;' #hide | |
| EOF | |
| else cat >> $1 << EOF | |
| fmt_deps = sed -e 's;^\([a-zA-Z0-9_]*\)\.o;\${@:.d=.o} \$@;' | |
| EOF | |
| 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 | |
| enabled msvs && echo "CONFIG_VS_VERSION=${vs_version}" >> "${1}" | |
| CC="${saved_CC}" | |
| CXX="${saved_CXX}" | |
| } | |
| write_common_target_config_h() { | |
| print_webm_license ${TMP_H} "/*" " */" | |
| cat >> ${TMP_H} << EOF | |
| /* This file automatically generated by configure. Do not edit! */ | |
| #ifndef AOM_CONFIG_H | |
| #define AOM_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 /* AOM_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 | |
| ;; | |
| --log*) | |
| logging="$optval" | |
| if ! disabled logging ; then | |
| enabled logging || logfile="$logging" | |
| else | |
| logfile=/dev/null | |
| fi | |
| ;; | |
| --target=*) | |
| toolchain="${toolchain:-${optval}}" | |
| ;; | |
| --force-target=*) | |
| toolchain="${toolchain:-${optval}}" | |
| enable_feature force_toolchain | |
| ;; | |
| --cpu=*) | |
| tune_cpu="$optval" | |
| ;; | |
| --extra-cflags=*) | |
| extra_cflags="${optval}" | |
| ;; | |
| --extra-cxxflags=*) | |
| extra_cxxflags="${optval}" | |
| ;; | |
| --enable-?*|--disable-?*) | |
| eval `echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g'` | |
| if is_in ${option} ${ARCH_EXT_LIST}; then | |
| [ $action = "disable" ] && RTCD_OPTIONS="${RTCD_OPTIONS}--disable-${option} " | |
| elif [ $action = "disable" ] && ! disabled $option ; then | |
| is_in ${option} ${CMDLINE_SELECT} || die_unknown $opt | |
| log_echo " disabling $option" | |
| elif [ $action = "enable" ] && ! enabled $option ; then | |
| is_in ${option} ${CMDLINE_SELECT} || die_unknown $opt | |
| log_echo " enabling $option" | |
| fi | |
| ${action}_feature $option | |
| ;; | |
| --require-?*) | |
| eval `echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g'` | |
| if is_in ${option} ${ARCH_EXT_LIST}; then | |
| RTCD_OPTIONS="${RTCD_OPTIONS}${opt} " | |
| else | |
| die_unknown $opt | |
| fi | |
| ;; | |
| --force-enable-?*|--force-disable-?*) | |
| eval `echo "$opt" | sed 's/--force-/action=/;s/-/ option=/;s/-/_/g'` | |
| ${action}_feature $option | |
| ;; | |
| --libc=*) | |
| [ -d "${optval}" ] || die "Not a directory: ${optval}" | |
| disable_feature builtin_libc | |
| alt_libc="${optval}" | |
| ;; | |
| --as=*) | |
| [ "${optval}" = yasm ] || [ "${optval}" = nasm ] \ | |
| || [ "${optval}" = auto ] \ | |
| || die "Must be yasm, nasm or auto: ${optval}" | |
| alt_as="${optval}" | |
| ;; | |
| --size-limit=*) | |
| w="${optval%%x*}" | |
| h="${optval##*x}" | |
| VAR_LIST="DECODE_WIDTH_LIMIT ${w} DECODE_HEIGHT_LIMIT ${h}" | |
| [ ${w} -gt 0 ] && [ ${h} -gt 0 ] || die "Invalid size-limit: too small." | |
| [ ${w} -lt 65536 ] && [ ${h} -lt 65536 ] \ | |
| || die "Invalid size-limit: too big." | |
| enable_feature size_limit | |
| ;; | |
| --prefix=*) | |
| prefix="${optval}" | |
| ;; | |
| --libdir=*) | |
| libdir="${optval}" | |
| ;; | |
| --sdk-path=*) | |
| [ -d "${optval}" ] || die "Not a directory: ${optval}" | |
| sdk_path="${optval}" | |
| ;; | |
| --libc|--as|--prefix|--libdir|--sdk-path) | |
| die "Option ${opt} requires argument" | |
| ;; | |
| --help|-h) | |
| show_help | |
| ;; | |
| *) | |
| die_unknown $opt | |
| ;; | |
| esac | |
| done | |
| } | |
| process_cmdline() { | |
| for opt do | |
| optval="${opt#*=}" | |
| case "$opt" in | |
| *) | |
| process_common_cmdline $opt | |
| ;; | |
| 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 | |
| } | |
| post_process_cmdline() { | |
| 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= | |
| } | |
| # Reliably find the newest available Darwin SDKs. (Older versions of | |
| # xcrun don't support --show-sdk-path.) | |
| show_darwin_sdk_path() { | |
| xcrun --sdk $1 --show-sdk-path 2>/dev/null || | |
| xcodebuild -sdk $1 -version Path 2>/dev/null | |
| } | |
| # Print the major version number of the Darwin SDK specified by $1. | |
| show_darwin_sdk_major_version() { | |
| xcrun --sdk $1 --show-sdk-version 2>/dev/null | cut -d. -f1 | |
| } | |
| # Print the Xcode version. | |
| show_xcode_version() { | |
| xcodebuild -version | head -n1 | cut -d' ' -f2 | |
| } | |
| # Fails when Xcode version is less than 6.3. | |
| check_xcode_minimum_version() { | |
| xcode_major=$(show_xcode_version | cut -f1 -d.) | |
| xcode_minor=$(show_xcode_version | cut -f2 -d.) | |
| xcode_min_major=6 | |
| xcode_min_minor=3 | |
| if [ ${xcode_major} -lt ${xcode_min_major} ]; then | |
| return 1 | |
| fi | |
| if [ ${xcode_major} -eq ${xcode_min_major} ] \ | |
| && [ ${xcode_minor} -lt ${xcode_min_minor} ]; then | |
| return 1 | |
| fi | |
| } | |
| process_common_toolchain() { | |
| case "$toolchain" in | |
| *-vs*) ;; | |
| *) add_cflags_only -std=c99 ;; | |
| esac | |
| if [ -z "$toolchain" ]; then | |
| gcctarget="${CHOST:-$(gcc -dumpmachine 2> /dev/null)}" | |
| # detect tgt_isa | |
| case "$gcctarget" in | |
| aarch64*) | |
| tgt_isa=arm64 | |
| ;; | |
| armv7*-hardfloat* | armv7*-gnueabihf | arm-*-gnueabihf) | |
| 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 | |
| ;; | |
| *sparc*) | |
| tgt_isa=sparc | |
| ;; | |
| esac | |
| # detect tgt_os | |
| case "$gcctarget" in | |
| *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 | |
| ;; | |
| *darwin14*) | |
| tgt_isa=x86_64 | |
| tgt_os=darwin14 | |
| ;; | |
| *darwin15*) | |
| tgt_isa=x86_64 | |
| tgt_os=darwin15 | |
| ;; | |
| *darwin16*) | |
| tgt_isa=x86_64 | |
| tgt_os=darwin16 | |
| ;; | |
| 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 | |
| fi | |
| toolchain=${toolchain:-generic-gnu} | |
| is_in ${toolchain} ${all_platforms} || enabled force_toolchain \ | |
| || die "Unrecognized toolchain '${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}') | |
| # 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). | |
| # Shared library framework builds are only possible on iOS 8 and later. | |
| if enabled shared; then | |
| IOS_VERSION_OPTIONS="--enable-shared" | |
| IOS_VERSION_MIN="8.0" | |
| else | |
| IOS_VERSION_OPTIONS="" | |
| IOS_VERSION_MIN="6.0" | |
| fi | |
| # Handle darwin variants. Newer SDKs allow targeting older | |
| # platforms, so use the newest one available. | |
| case ${toolchain} in | |
| arm*-darwin*) | |
| add_cflags "-miphoneos-version-min=${IOS_VERSION_MIN}" | |
| iphoneos_sdk_dir="$(show_darwin_sdk_path iphoneos)" | |
| if [ -d "${iphoneos_sdk_dir}" ]; then | |
| add_cflags "-isysroot ${iphoneos_sdk_dir}" | |
| add_ldflags "-isysroot ${iphoneos_sdk_dir}" | |
| fi | |
| ;; | |
| x86*-darwin*) | |
| osx_sdk_dir="$(show_darwin_sdk_path macosx)" | |
| if [ -d "${osx_sdk_dir}" ]; then | |
| add_cflags "-isysroot ${osx_sdk_dir}" | |
| add_ldflags "-isysroot ${osx_sdk_dir}" | |
| fi | |
| ;; | |
| esac | |
| 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" | |
| ;; | |
| *-darwin14-*) | |
| add_cflags "-mmacosx-version-min=10.10" | |
| add_ldflags "-mmacosx-version-min=10.10" | |
| ;; | |
| *-darwin15-*) | |
| add_cflags "-mmacosx-version-min=10.11" | |
| add_ldflags "-mmacosx-version-min=10.11" | |
| ;; | |
| *-darwin16-*) | |
| add_cflags "-mmacosx-version-min=10.12" | |
| add_ldflags "-mmacosx-version-min=10.12" | |
| ;; | |
| *-iphonesimulator-*) | |
| add_cflags "-miphoneos-version-min=${IOS_VERSION_MIN}" | |
| add_ldflags "-miphoneos-version-min=${IOS_VERSION_MIN}" | |
| iossim_sdk_dir="$(show_darwin_sdk_path iphonesimulator)" | |
| if [ -d "${iossim_sdk_dir}" ]; then | |
| add_cflags "-isysroot ${iossim_sdk_dir}" | |
| add_ldflags "-isysroot ${iossim_sdk_dir}" | |
| fi | |
| ;; | |
| esac | |
| # Handle Solaris variants. Solaris 10 needs -lposix4 | |
| case ${toolchain} in | |
| sparc-solaris-*) | |
| add_extralibs -lposix4 | |
| ;; | |
| *-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 | |
| ;; | |
| armv7|armv7s) | |
| soft_enable neon | |
| # Only enable neon_asm when neon is also enabled. | |
| enabled neon && soft_enable neon_asm | |
| # If someone tries to force it through, die. | |
| if disabled neon && enabled neon_asm; then | |
| die "Disabling neon while keeping neon-asm is not supported" | |
| fi | |
| esac | |
| asm_conversion_cmd="cat" | |
| case ${tgt_cc} in | |
| gcc) | |
| 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 <<EOF && float_abi=hard || float_abi=softfp | |
| #ifndef __ARM_PCS_VFP | |
| #error "not hardfp" | |
| #endif | |
| EOF | |
| fi | |
| check_add_cflags -march=armv7-a -mfloat-abi=${float_abi} | |
| check_add_asflags -march=armv7-a -mfloat-abi=${float_abi} | |
| if enabled neon || enabled neon_asm; then | |
| check_add_cflags -mfpu=neon #-ftree-vectorize | |
| check_add_asflags -mfpu=neon | |
| fi | |
| elif [ ${tgt_isa} = "arm64" ] || [ ${tgt_isa} = "armv8" ]; then | |
| check_add_cflags -march=armv8-a | |
| check_add_asflags -march=armv8-a | |
| else | |
| check_add_cflags -march=${tgt_isa} | |
| check_add_asflags -march=${tgt_isa} | |
| fi | |
| enabled debug && add_asflags -g | |
| asm_conversion_cmd="${source_path}/build/make/ads2gas.pl" | |
| if enabled thumb; then | |
| asm_conversion_cmd="$asm_conversion_cmd -thumb" | |
| check_add_cflags -mthumb | |
| check_add_asflags -mthumb -mimplicit-it=always | |
| fi | |
| ;; | |
| vs*) | |
| asm_conversion_cmd="${source_path}/build/make/ads2armasm_ms.pl" | |
| AS_SFX=.s | |
| msvs_arch_dir=arm-msvs | |
| disable_feature multithread | |
| disable_feature unit_tests | |
| vs_version=${tgt_cc##vs} | |
| # MSVC 2013 doesn't allow doing plain .exe projects for ARM, | |
| # only "AppContainerApplication" which requires an AppxManifest. | |
| # Therefore disable the examples, just build the library. | |
| disable_feature examples | |
| ;; | |
| rvct) | |
| CC=armcc | |
| AR=armar | |
| AS=armasm | |
| LD="${source_path}/build/make/armlink_adapter.sh" | |
| STRIP=arm-none-linux-gnueabi-strip | |
| NM=arm-none-linux-gnueabi-nm | |
| tune_cflags="--cpu=" | |
| tune_asflags="--cpu=" | |
| if [ -z "${tune_cpu}" ]; then | |
| if [ ${tgt_isa} = "armv7" ]; then | |
| if enabled neon || enabled neon_asm | |
| then | |
| check_add_cflags --fpu=softvfp+vfpv3 | |
| check_add_asflags --fpu=softvfp+vfpv3 | |
| fi | |
| check_add_cflags --cpu=Cortex-A8 | |
| check_add_asflags --cpu=Cortex-A8 | |
| else | |
| check_add_cflags --cpu=${tgt_isa##armv} | |
| check_add_asflags --cpu=${tgt_isa##armv} | |
| fi | |
| fi | |
| arch_int=${tgt_isa##armv} | |
| arch_int=${arch_int%%te} | |
| check_add_asflags --pd "\"ARCHITECTURE SETA ${arch_int}\"" | |
| enabled debug && add_asflags -g | |
| add_cflags --gnu | |
| add_cflags --enum_is_int | |
| add_cflags --wchar32 | |
| ;; | |
| esac | |
| case ${tgt_os} in | |
| none*) | |
| disable_feature multithread | |
| disable_feature os_support | |
| ;; | |
| android*) | |
| if [ -z "${sdk_path}" ]; then | |
| die "Must specify --sdk-path for Android builds." | |
| fi | |
| SDK_PATH=${sdk_path} | |
| COMPILER_LOCATION=`find "${SDK_PATH}" \ | |
| -name "arm-linux-androideabi-gcc*" -print -quit` | |
| TOOLCHAIN_PATH=${COMPILER_LOCATION%/*}/arm-linux-androideabi- | |
| CC=${TOOLCHAIN_PATH}gcc | |
| CXX=${TOOLCHAIN_PATH}g++ | |
| AR=${TOOLCHAIN_PATH}ar | |
| LD=${TOOLCHAIN_PATH}gcc | |
| AS=${TOOLCHAIN_PATH}as | |
| STRIP=${TOOLCHAIN_PATH}strip | |
| NM=${TOOLCHAIN_PATH}nm | |
| if [ -z "${alt_libc}" ]; then | |
| alt_libc=`find "${SDK_PATH}" -name arch-arm -print | \ | |
| awk '{n = split($0,a,"/"); \ | |
| split(a[n-1],b,"-"); \ | |
| print $0 " " b[2]}' | \ | |
| sort -g -k 2 | \ | |
| awk '{ print $1 }' | tail -1` | |
| fi | |
| if [ -d "${alt_libc}" ]; then | |
| add_cflags "--sysroot=${alt_libc}" | |
| add_ldflags "--sysroot=${alt_libc}" | |
| fi | |
| # linker flag that routes around a CPU bug in some | |
| # Cortex-A8 implementations (NDK Dev Guide) | |
| add_ldflags "-Wl,--fix-cortex-a8" | |
| enable_feature pic | |
| soft_enable realtime_only | |
| if [ ${tgt_isa} = "armv7" ]; then | |
| soft_enable runtime_cpu_detect | |
| fi | |
| if enabled runtime_cpu_detect; then | |
| add_cflags "-I${SDK_PATH}/sources/android/cpufeatures" | |
| fi | |
| ;; | |
| darwin*) | |
| XCRUN_FIND="xcrun --sdk iphoneos --find" | |
| CXX="$(${XCRUN_FIND} clang++)" | |
| CC="$(${XCRUN_FIND} clang)" | |
| AR="$(${XCRUN_FIND} ar)" | |
| AS="$(${XCRUN_FIND} as)" | |
| STRIP="$(${XCRUN_FIND} strip)" | |
| NM="$(${XCRUN_FIND} nm)" | |
| RANLIB="$(${XCRUN_FIND} ranlib)" | |
| AS_SFX=.s | |
| LD="${CXX:-$(${XCRUN_FIND} ld)}" | |
| # ASFLAGS is written here instead of using check_add_asflags | |
| # because we need to overwrite all of ASFLAGS and purge the | |
| # options that were put in above | |
| ASFLAGS="-arch ${tgt_isa} -g" | |
| add_cflags -arch ${tgt_isa} | |
| add_ldflags -arch ${tgt_isa} | |
| alt_libc="$(show_darwin_sdk_path iphoneos)" | |
| if [ -d "${alt_libc}" ]; then | |
| add_cflags -isysroot ${alt_libc} | |
| fi | |
| if [ "${LD}" = "${CXX}" ]; then | |
| add_ldflags -miphoneos-version-min="${IOS_VERSION_MIN}" | |
| else | |
| add_ldflags -ios_version_min "${IOS_VERSION_MIN}" | |
| fi | |
| for d in lib usr/lib usr/lib/system; do | |
| try_dir="${alt_libc}/${d}" | |
| [ -d "${try_dir}" ] && add_ldflags -L"${try_dir}" | |
| done | |
| case ${tgt_isa} in | |
| armv7|armv7s|armv8|arm64) | |
| if enabled neon && ! check_xcode_minimum_version; then | |
| soft_disable neon | |
| log_echo " neon disabled: upgrade Xcode (need v6.3+)." | |
| if enabled neon_asm; then | |
| soft_disable neon_asm | |
| log_echo " neon_asm disabled: upgrade Xcode (need v6.3+)." | |
| fi | |
| fi | |
| ;; | |
| esac | |
| asm_conversion_cmd="${source_path}/build/make/ads2gas_apple.pl" | |
| if [ "$(show_darwin_sdk_major_version iphoneos)" -gt 8 ]; then | |
| check_add_cflags -fembed-bitcode | |
| check_add_asflags -fembed-bitcode | |
| check_add_ldflags -fembed-bitcode | |
| fi | |
| ;; | |
| linux*) | |
| enable_feature linux | |
| if enabled rvct; then | |
| # Check if we have CodeSourcery GCC in PATH. Needed for | |
| # libraries | |
| which 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" | |
| # 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 | |
| ;; | |
| mips*) | |
| link_with_cc=gcc | |
| setup_gnu_toolchain | |
| tune_cflags="-mtune=" | |
| if enabled dspr2; then | |
| check_add_cflags -mips32r2 -mdspr2 | |
| fi | |
| if enabled runtime_cpu_detect; then | |
| disable_feature runtime_cpu_detect | |
| fi | |
| if [ -n "${tune_cpu}" ]; then | |
| case ${tune_cpu} in | |
| p5600) | |
| check_add_cflags -mips32r5 -mload-store-pairs | |
| check_add_cflags -msched-weight -mhard-float -mfp64 | |
| check_add_asflags -mips32r5 -mhard-float -mfp64 | |
| check_add_ldflags -mfp64 | |
| ;; | |
| i6400|p6600) | |
| check_add_cflags -mips64r6 -mabi=64 -msched-weight | |
| check_add_cflags -mload-store-pairs -mhard-float -mfp64 | |
| check_add_asflags -mips64r6 -mabi=64 -mhard-float -mfp64 | |
| check_add_ldflags -mips64r6 -mabi=64 -mfp64 | |
| ;; | |
| esac | |
| if enabled msa; then | |
| add_cflags -mmsa | |
| add_asflags -mmsa | |
| add_ldflags -mmsa | |
| fi | |
| fi | |
| check_add_cflags -march=${tgt_isa} | |
| check_add_asflags -march=${tgt_isa} | |
| check_add_asflags -KPIC | |
| ;; | |
| 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) | |
| disable_feature pic | |
| AS=${AS:-nasm} | |
| add_ldflags -Zhigh-mem | |
| ;; | |
| 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} | |
| ;; | |
| esac | |
| bits=32 | |
| enabled x86_64 && bits=64 | |
| check_cpp <<EOF && bits=x32 | |
| #if !defined(__ILP32__) || !defined(__x86_64__) | |
| #error "not x32" | |
| #endif | |
| EOF | |
| case ${tgt_cc} in | |
| gcc*) | |
| add_cflags -m${bits} | |
| add_ldflags -m${bits} | |
| ;; | |
| esac | |
| soft_enable runtime_cpu_detect | |
| # We can't use 'check_cflags' until the compiler is configured and CC is | |
| # populated. | |
| for ext in ${ARCH_EXT_LIST_X86}; do | |
| # disable higher order extensions to simplify asm dependencies | |
| if [ "$disable_exts" = "yes" ]; then | |
| if ! disabled $ext; then | |
| RTCD_OPTIONS="${RTCD_OPTIONS}--disable-${ext} " | |
| disable_feature $ext | |
| fi | |
| elif disabled $ext; then | |
| disable_exts="yes" | |
| else | |
| # use the shortened version for the flag: sse4_1 -> sse4 | |
| check_gcc_machine_option ${ext%_*} $ext | |
| fi | |
| done | |
| if enabled external_build; then | |
| log_echo " skipping assembler detection" | |
| else | |
| case "${AS}" in | |
| auto|"") | |
| which nasm >/dev/null 2>&1 && AS=nasm | |
| which yasm >/dev/null 2>&1 && AS=yasm | |
| if [ "${AS}" = nasm ] ; then | |
| # Apple ships version 0.98 of nasm through at least Xcode 6. Revisit | |
| # this check if they start shipping a compatible version. | |
| apple=`nasm -v | grep "Apple"` | |
| [ -n "${apple}" ] \ | |
| && echo "Unsupported version of nasm: ${apple}" \ | |
| && AS="" | |
| fi | |
| [ "${AS}" = auto ] || [ -z "${AS}" ] \ | |
| && die "Neither yasm nor nasm have been found." \ | |
| "See the prerequisites section in the README for more info." | |
| ;; | |
| esac | |
| log_echo " using $AS" | |
| fi | |
| 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 win64 | |
| 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} | |
| if [ "$(show_darwin_sdk_major_version iphonesimulator)" -gt 8 ]; then | |
| # yasm v1.3.0 doesn't know what -fembed-bitcode means, so turning it | |
| # on is pointless (unless building a C-only lib). Warn the user, but | |
| # do nothing here. | |
| log "Warning: Bitcode embed disabled for simulator targets." | |
| fi | |
| ;; | |
| 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 | |
| ;; | |
| *-gcc|generic-gnu) | |
| 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 | |
| if [ -n "${tune_asflags}" ]; then | |
| 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 | |
| fi | |
| 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 | |
| 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 | |
| # 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 <<EOF | |
| unsigned int e = 'O'<<24 | '2'<<16 | 'B'<<8 | 'E'; | |
| EOF | |
| [ -f "${TMP_O}" ] && od -A n -t x1 "${TMP_O}" | tr -d '\n' | | |
| grep '4f *32 *42 *45' >/dev/null 2>&1 && enable_feature big_endian | |
| # Try to find which inline keywords are supported | |
| check_cc <<EOF && INLINE="inline" | |
| static inline function() {} | |
| EOF | |
| # Almost every platform uses pthreads. | |
| if enabled multithread; then | |
| case ${toolchain} in | |
| *-win*-vs*) | |
| ;; | |
| *-android-gcc) | |
| ;; | |
| *) | |
| check_header pthread.h && add_extralibs -lpthread | |
| ;; | |
| esac | |
| fi | |
| # only for MIPS platforms | |
| case ${toolchain} in | |
| mips*) | |
| if enabled big_endian; then | |
| if enabled dspr2; then | |
| echo "dspr2 optimizations are available only for little endian platforms" | |
| disable_feature dspr2 | |
| fi | |
| if enabled msa; then | |
| echo "msa optimizations are available only for little endian platforms" | |
| disable_feature msa | |
| fi | |
| fi | |
| ;; | |
| esac | |
| # glibc needs these | |
| if enabled linux || [ "$toolchain" = "generic-gnu" ]; then | |
| add_cflags -D_LARGEFILE_SOURCE | |
| add_cflags -D_FILE_OFFSET_BITS=64 | |
| fi | |
| } | |
| process_toolchain() { | |
| process_common_toolchain | |
| } | |
| print_config_mk() { | |
| 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}" | |
| } | |
| print_config_vars_h() { | |
| 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 <<EOF > ${destination} | |
| ${prefix} Copyright (c) 2016, Alliance for Open Media. All rights reserved.${suffix} | |
| ${prefix} ${suffix} | |
| ${prefix} This source code is subject to the terms of the BSD 2 Clause License and${suffix} | |
| ${prefix} the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License${suffix} | |
| ${prefix} was not distributed with this source code in the LICENSE file, you can${suffix} | |
| ${prefix} obtain it at www.aomedia.org/license/software. If the Alliance for Open${suffix} | |
| ${prefix} Media Patent License 1.0 was not distributed with this source code in the${suffix} | |
| ${prefix} PATENTS file, you can obtain it at www.aomedia.org/license/patent.${suffix} | |
| EOF | |
| prefix="${saved_prefix}" | |
| } | |
| process_targets() { | |
| true; | |
| } | |
| process_detect() { | |
| 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 | |
| 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 | |
| } |