1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582 |
- #!/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 libvpx
- ## 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}" vp8 vp9 && enable_feature "${1}_encoder" "${1}_decoder"
- }
- disable_codec(){
- disabled "${1}" || echo " disabling ${1}"
- disable_feature "${1}"
- is_in "${1}" vp8 vp9 && 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}/vpx-conf-$$-${RAND}.h"
- TMP_C="${TMPDIRx}/vpx-conf-$$-${RAND}.c"
- TMP_CC="${TMPDIRx}/vpx-conf-$$-${RAND}.cc"
- TMP_O="${TMPDIRx}/vpx-conf-$$-${RAND}.o"
- TMP_X="${TMPDIRx}/vpx-conf-$$-${RAND}.x"
- TMP_ASM="${TMPDIRx}/vpx-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_lib() {
- log check_lib "$@"
- 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
- }
- # tests for -m$2, -m$3, -m$4... toggling the feature given in $1.
- check_gcc_machine_options() {
- feature="$1"
- shift
- flags="-m$1"
- shift
- for opt in $*; do
- flags="$flags -m$opt"
- done
- if enabled gcc && ! disabled "$feature" && ! check_cflags $flags; then
- RTCD_OPTIONS="${RTCD_OPTIONS}--disable-$feature "
- else
- soft_enable "$feature"
- fi
- }
- check_gcc_avx512_compiles() {
- if disabled gcc; then
- return
- fi
- check_cc -mavx512f <<EOF
- #include <immintrin.h>
- void f(void) {
- __m512i x = _mm512_set1_epi16(0);
- (void)x;
- }
- EOF
- compile_result=$?
- if [ ${compile_result} -ne 0 ]; then
- log_echo " disabling avx512: not supported by compiler"
- disable_feature avx512
- RTCD_OPTIONS="${RTCD_OPTIONS}--disable-avx512 "
- 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}
- LIBYUV_CXXFLAGS = ${LIBYUV_CXXFLAGS}
- 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 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"
- }
- write_win_arm64_neon_h_workaround() {
- print_webm_license ${TMP_H} "/*" " */"
- cat >> ${TMP_H} << EOF
- /* This file automatically generated by configure. Do not edit! */
- #ifndef VPX_WIN_ARM_NEON_H_WORKAROUND
- #define VPX_WIN_ARM_NEON_H_WORKAROUND
- /* The Windows SDK has arm_neon.h, but unlike on other platforms it is
- * ARM32-only. ARM64 NEON support is provided by arm64_neon.h, a proper
- * superset of arm_neon.h. Work around this by providing a more local
- * arm_neon.h that simply #includes arm64_neon.h.
- */
- #include <arm64_neon.h>
- #endif /* VPX_WIN_ARM_NEON_H_WORKAROUND */
- EOF
- 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}"
- ;;
- --libc|--as|--prefix|--libdir)
- 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() {
- 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
- ;;
- power*64le*-*)
- tgt_isa=ppc64le
- ;;
- *mips64el*)
- tgt_isa=mips64
- ;;
- *mips32el*)
- tgt_isa=mips32
- ;;
- esac
- # detect tgt_os
- case "$gcctarget" in
- *darwin*)
- tgt_isa=x86_64
- tgt_os=darwin
- ;;
- x86_64*mingw32*)
- tgt_os=win64
- ;;
- x86_64*cygwin*)
- 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
- ;;
- ppc*)
- enable_feature ppc
- ;;
- 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="7.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
- *-darwin-*)
- mvmin=$(sw_vers -productVersion)
- if [[ $mvmin == 10.* ]]; then
- mvmin="-mmacosx-version-min=""${mvmin%.*}"
- else
- mvmin="-mmacosx-version-min=""${mvmin%%.*}"
- fi
- add_cflags $mvmin
- add_ldflags $mvmin
- ;;
- *-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}
- 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"
- case ${tgt_os} in
- win*)
- asm_conversion_cmd="$asm_conversion_cmd -noelf"
- AS="$CC -c"
- EXE_SFX=.exe
- enable_feature thumb
- ;;
- esac
- if enabled thumb; then
- asm_conversion_cmd="$asm_conversion_cmd -thumb"
- check_add_cflags -mthumb
- check_add_asflags -mthumb -mimplicit-it=always
- fi
- ;;
- vs*)
- # A number of ARM-based Windows platforms are constrained by their
- # respective SDKs' limitations. Fortunately, these are all 32-bit ABIs
- # and so can be selected as 'win32'.
- if [ ${tgt_os} = "win32" ]; then
- 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
- if [ ${tgt_cc##vs} -ge 12 ]; then
- # MSVC 2013 doesn't allow doing plain .exe projects for ARM32,
- # only "AppContainerApplication" which requires an AppxManifest.
- # Therefore disable the examples, just build the library.
- disable_feature examples
- disable_feature tools
- fi
- else
- # Windows 10 on ARM, on the other hand, has full Windows SDK support
- # for building Win32 ARM64 applications in addition to ARM64
- # Windows Store apps. It is the only 64-bit ARM ABI that
- # Windows supports, so it is the default definition of 'win64'.
- # ARM64 build support officially shipped in Visual Studio 15.9.0.
- # Because the ARM64 Windows SDK's arm_neon.h is ARM32-specific
- # while LLVM's is not, probe its validity.
- if enabled neon; then
- if [ -n "${CC}" ]; then
- check_header arm_neon.h || check_header arm64_neon.h && \
- enable_feature win_arm64_neon_h_workaround
- else
- # If a probe is not possible, assume this is the pure Windows
- # SDK and so the workaround is necessary.
- enable_feature win_arm64_neon_h_workaround
- fi
- fi
- fi
- ;;
- 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}
- 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*)
- echo "Assuming standalone build with NDK toolchain."
- echo "See build/make/Android.mk for details."
- check_add_ldflags -static
- soft_enable unit_tests
- ;;
- 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
- # TODO(libyuv:793)
- # The new mips functions in libyuv do not build
- # with the toolchains we currently use for testing.
- soft_disable libyuv
- add_cflags -mmsa
- add_asflags -mmsa
- add_ldflags -mmsa
- fi
- fi
- if enabled mmi; then
- tgt_isa=loongson3a
- check_add_ldflags -march=loongson3a
- fi
- check_add_cflags -march=${tgt_isa}
- check_add_asflags -march=${tgt_isa}
- check_add_asflags -KPIC
- ;;
- ppc64le*)
- link_with_cc=gcc
- setup_gnu_toolchain
- # Do not enable vsx by default.
- # https://bugs.chromium.org/p/webm/issues/detail?id=1522
- enabled vsx || RTCD_OPTIONS="${RTCD_OPTIONS}--disable-vsx "
- if [ -n "${tune_cpu}" ]; then
- case ${tune_cpu} in
- power?)
- tune_cflags="-mcpu="
- ;;
- esac
- fi
- ;;
- x86*)
- case ${tgt_os} in
- android)
- soft_enable realtime_only
- ;;
- 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
- case ${tgt_cc##vs} in
- 14)
- echo "${tgt_cc} does not support avx512, disabling....."
- RTCD_OPTIONS="${RTCD_OPTIONS}--disable-avx512 "
- soft_disable avx512
- ;;
- esac
- ;;
- 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
- if [ "$ext" = "avx512" ]; then
- check_gcc_machine_options $ext avx512f avx512cd avx512bw avx512dq avx512vl
- check_gcc_avx512_compiles
- else
- # use the shortened version for the flag: sse4_1 -> sse4
- check_gcc_machine_option ${ext%_*} $ext
- fi
- 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 [ "$(disabled external_build)" ] &&
- [ "$(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)
- # bionic includes basic pthread functionality, obviating -lpthread.
- ;;
- *)
- check_header pthread.h && check_lib -lpthread <<EOF && add_extralibs -lpthread || disable_feature pthread_h
- #include <pthread.h>
- #include <stddef.h>
- void *thread_check (void *);
- void *thread_check (void *obj){ return obj;};
- int main(void) { pthread_t thread_id; return pthread_create(&thread_id, NULL, thread_check, NULL); }
- EOF
- ;;
- 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
- if enabled mmi; then
- echo "mmi optimizations are available only for little endian platforms"
- disable_feature mmi
- fi
- fi
- ;;
- esac
- # glibc needs these
- if enabled linux; 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) 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}
- ${prefix} that can be found in the LICENSE file in the root of the source${suffix}
- ${prefix} tree. An additional intellectual property rights grant can be found${suffix}
- ${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}"
- }
- 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
- }
|