| #!/bin/sh |
| ## |
| ## configure |
| ## |
| ## This script is the front-end to the build system. It provides a similar |
| ## interface to standard configure scripts with some extra bits for dealing |
| ## with toolchains that differ from the standard POSIX interface and |
| ## for extracting subsets of the source tree. In theory, reusable parts |
| ## of this script were intended to live in build/make/configure.sh, |
| ## but in practice, the line is pretty blurry. |
| ## |
| ## This build system is based in part on the FFmpeg configure script. |
| ## |
| |
| #source_path="`dirname \"$0\"`" |
| source_path=${0%/*} |
| . "${source_path}/build/make/configure.sh" |
| |
| show_help(){ |
| show_help_pre |
| cat << EOF |
| Advanced options: |
| ${toggle_libs} libraries |
| ${toggle_examples} examples |
| ${toggle_analyzer} analyzer |
| ${toggle_docs} documentation |
| ${toggle_unit_tests} unit tests |
| ${toggle_tools} tools |
| ${toggle_decode_perf_tests} build decoder perf tests with unit tests |
| ${toggle_encode_perf_tests} build encoder perf tests with unit tests |
| --cpu=CPU tune for the specified CPU (ARM: cortex-a8, X86: sse3) |
| --libc=PATH path to alternate libc |
| --size-limit=WxH max size to allow in the decoder |
| --as={yasm|nasm|auto} use specified assembler [auto, yasm preferred] |
| --sdk-path=PATH path to root of sdk (android builds only) |
| ${toggle_codec_srcs} in/exclude codec library source code |
| ${toggle_debug_libs} in/exclude debug version of libraries |
| ${toggle_static_msvcrt} use static MSVCRT (VS builds only) |
| ${toggle_highbitdepth} enable 16-bit generic pixel pipeline (used by high bitdepth profiles) |
| ${toggle_lowbitdepth} enable 8-bit optimized pixel pipeline |
| ${toggle_av1} AV1 codec support |
| ${toggle_internal_stats} output of encoder internal stats for debug, if supported (encoders) |
| ${toggle_postproc} postprocessing |
| ${toggle_multithread} multithreaded encoding and decoding |
| ${toggle_spatial_resampling} spatial sampling (scaling) support |
| ${toggle_realtime_only} enable this option while building for real-time encoding |
| ${toggle_coefficient_range_checking} |
| enable decoder to check if intermediate |
| transform coefficients are in valid range |
| ${toggle_runtime_cpu_detect} runtime cpu detection |
| ${toggle_shared} shared library support |
| ${toggle_static} static library support |
| ${toggle_small} favor smaller size over speed |
| ${toggle_postproc_visualizer} macro block / block level visualizers |
| ${toggle_webm_io} enable input from and output to WebM container |
| ${toggle_libyuv} enable libyuv |
| ${toggle_accounting} enable bit accounting |
| ${toggle_inspection} enable bitstream inspection |
| |
| Codecs: |
| Codecs can be selectively enabled or disabled individually, or by family: |
| --disable-<codec> |
| is equivalent to: |
| --disable-<codec>-encoder |
| --disable-<codec>-decoder |
| |
| Codecs available in this distribution: |
| EOF |
| #restore editor state ' |
| |
| family=""; |
| last_family=""; |
| c=""; |
| str=""; |
| for c in ${CODECS}; do |
| family=${c%_*} |
| if [ "${family}" != "${last_family}" ]; then |
| [ -z "${str}" ] || echo "${str}" |
| str="$(printf ' %10s:' ${family})" |
| fi |
| str="${str} $(printf '%10s' ${c#*_})" |
| last_family=${family} |
| done |
| echo "${str}" |
| show_help_post |
| } |
| |
| ## |
| ## BEGIN APPLICATION SPECIFIC CONFIGURATION |
| ## |
| |
| # all_platforms is a list of all supported target platforms. Maintain |
| # alphabetically by architecture, generic-gnu last. |
| all_platforms="${all_platforms} arm64-darwin-gcc" |
| all_platforms="${all_platforms} arm64-linux-gcc" |
| all_platforms="${all_platforms} armv7-android-gcc" #neon Cortex-A8 |
| all_platforms="${all_platforms} armv7-darwin-gcc" #neon Cortex-A8 |
| all_platforms="${all_platforms} armv7-linux-rvct" #neon Cortex-A8 |
| all_platforms="${all_platforms} armv7-linux-gcc" #neon Cortex-A8 |
| all_platforms="${all_platforms} armv7-none-rvct" #neon Cortex-A8 |
| all_platforms="${all_platforms} armv7-win32-vs12" |
| all_platforms="${all_platforms} armv7-win32-vs14" |
| all_platforms="${all_platforms} armv7-win32-vs15" |
| all_platforms="${all_platforms} armv7s-darwin-gcc" |
| all_platforms="${all_platforms} armv8-linux-gcc" |
| all_platforms="${all_platforms} mips32-linux-gcc" |
| all_platforms="${all_platforms} mips64-linux-gcc" |
| all_platforms="${all_platforms} sparc-solaris-gcc" |
| all_platforms="${all_platforms} x86-android-gcc" |
| all_platforms="${all_platforms} x86-darwin8-gcc" |
| all_platforms="${all_platforms} x86-darwin8-icc" |
| all_platforms="${all_platforms} x86-darwin9-gcc" |
| all_platforms="${all_platforms} x86-darwin9-icc" |
| all_platforms="${all_platforms} x86-darwin10-gcc" |
| all_platforms="${all_platforms} x86-darwin11-gcc" |
| all_platforms="${all_platforms} x86-darwin12-gcc" |
| all_platforms="${all_platforms} x86-darwin13-gcc" |
| all_platforms="${all_platforms} x86-darwin14-gcc" |
| all_platforms="${all_platforms} x86-darwin15-gcc" |
| all_platforms="${all_platforms} x86-darwin16-gcc" |
| all_platforms="${all_platforms} x86-iphonesimulator-gcc" |
| all_platforms="${all_platforms} x86-linux-gcc" |
| all_platforms="${all_platforms} x86-linux-icc" |
| all_platforms="${all_platforms} x86-os2-gcc" |
| all_platforms="${all_platforms} x86-solaris-gcc" |
| all_platforms="${all_platforms} x86-win32-gcc" |
| all_platforms="${all_platforms} x86-win32-vs12" |
| all_platforms="${all_platforms} x86-win32-vs14" |
| all_platforms="${all_platforms} x86-win32-vs15" |
| all_platforms="${all_platforms} x86_64-android-gcc" |
| all_platforms="${all_platforms} x86_64-darwin9-gcc" |
| all_platforms="${all_platforms} x86_64-darwin10-gcc" |
| all_platforms="${all_platforms} x86_64-darwin11-gcc" |
| all_platforms="${all_platforms} x86_64-darwin12-gcc" |
| all_platforms="${all_platforms} x86_64-darwin13-gcc" |
| all_platforms="${all_platforms} x86_64-darwin14-gcc" |
| all_platforms="${all_platforms} x86_64-darwin15-gcc" |
| all_platforms="${all_platforms} x86_64-darwin16-gcc" |
| all_platforms="${all_platforms} x86_64-iphonesimulator-gcc" |
| all_platforms="${all_platforms} x86_64-linux-gcc" |
| all_platforms="${all_platforms} x86_64-linux-icc" |
| all_platforms="${all_platforms} x86_64-solaris-gcc" |
| all_platforms="${all_platforms} x86_64-win64-gcc" |
| all_platforms="${all_platforms} x86_64-win64-vs12" |
| all_platforms="${all_platforms} x86_64-win64-vs14" |
| all_platforms="${all_platforms} x86_64-win64-vs15" |
| all_platforms="${all_platforms} generic-gnu" |
| |
| # all_targets is a list of all targets that can be configured |
| # note that these should be in dependency order for now. |
| all_targets="libs examples docs tools" |
| |
| # all targets available are enabled, by default. |
| for t in ${all_targets}; do |
| [ -f "${source_path}/${t}.mk" ] && enable_feature ${t} |
| done |
| |
| if ! diff --version >/dev/null; then |
| die "diff missing: Try installing diffutils via your package manager." |
| fi |
| |
| if ! perl --version >/dev/null; then |
| die "Perl is required to build" |
| fi |
| |
| |
| if [ "`cd \"${source_path}\" && pwd`" != "`pwd`" ]; then |
| # test to see if source_path already configured |
| if [ -f "${source_path}/aom_config.h" ]; then |
| die "source directory already configured; run 'make distclean' there first" |
| fi |
| fi |
| |
| # check installed doxygen version |
| doxy_version=$(doxygen --version 2>/dev/null) |
| doxy_major=${doxy_version%%.*} |
| if [ ${doxy_major:-0} -ge 1 ]; then |
| doxy_version=${doxy_version#*.} |
| doxy_minor=${doxy_version%%.*} |
| doxy_patch=${doxy_version##*.} |
| |
| [ $doxy_major -gt 1 ] && enable_feature doxygen |
| [ $doxy_minor -gt 5 ] && enable_feature doxygen |
| [ $doxy_minor -eq 5 ] && [ $doxy_patch -ge 3 ] && enable_feature doxygen |
| fi |
| |
| # disable codecs when their source directory does not exist |
| [ -d "${source_path}/av1" ] || disable_codec av1 |
| |
| # install everything except the sources, by default. sources will have |
| # to be enabled when doing dist builds, since that's no longer a common |
| # case. |
| enabled doxygen && enable_feature install_docs |
| enable_feature install_bins |
| enable_feature install_libs |
| |
| enable_feature static |
| enable_feature optimizations |
| enable_feature dependency_tracking |
| enable_feature spatial_resampling |
| enable_feature multithread |
| enable_feature os_support |
| enable_feature highbitdepth |
| |
| CODECS=" |
| av1_encoder |
| av1_decoder |
| " |
| CODEC_FAMILIES=" |
| av1 |
| " |
| |
| ARCH_LIST=" |
| arm |
| mips |
| x86 |
| x86_64 |
| " |
| ARCH_EXT_LIST_X86=" |
| mmx |
| sse |
| sse2 |
| sse3 |
| ssse3 |
| sse4_1 |
| avx |
| avx2 |
| " |
| ARCH_EXT_LIST=" |
| neon |
| neon_asm |
| |
| mips32 |
| dspr2 |
| msa |
| mips64 |
| |
| ${ARCH_EXT_LIST_X86} |
| " |
| HAVE_LIST=" |
| ${ARCH_EXT_LIST} |
| aom_ports |
| fexcept |
| pthread_h |
| unistd_h |
| wxwidgets |
| " |
| EXPERIMENT_LIST=" |
| fp_mb_stats |
| cdef |
| cdef_singlepass |
| rect_tx_ext |
| tpl_mv |
| short_filter |
| dual_filter |
| convolve_round |
| compound_round |
| ext_tx |
| tx64x64 |
| ext_intra |
| filter_intra |
| intra_edge |
| ext_intra_mod |
| intrabc |
| interintra |
| new_quant |
| ans |
| loop_restoration |
| striped_loop_restoration |
| ext_partition |
| ext_partition_types |
| ext_partition_types_ab |
| unpoison_partition_ctx |
| ext_tile |
| ncobmc |
| q_adapt_probs |
| inter_stats_only |
| palette_delta_encoding |
| rawbits |
| kf_ctx |
| cfl |
| xiphrc |
| dct_only |
| daala_tx |
| daala_tx4 |
| daala_tx8 |
| daala_tx16 |
| daala_tx32 |
| daala_tx64 |
| frame_size |
| ext_delta_q |
| adapt_scan |
| parallel_deblocking |
| deblock_13tap |
| loopfiltering_across_tiles |
| tempmv_signaling |
| rd_debug |
| reference_buffer |
| coef_interleave |
| entropy_stats |
| masked_tx |
| dependent_horztiles |
| dist_8x8 |
| palette_throughput |
| ref_adapt |
| lv_map |
| ctx1d |
| txk_sel |
| mv_compress |
| segment_zeromv |
| frame_superres |
| new_multisymbol |
| compound_singleref |
| aom_qm |
| one_sided_compound |
| ext_comp_refs |
| smooth_hv |
| var_refs |
| lgt |
| lgt_from_pred |
| ncobmc_adapt_weight |
| bgsprite |
| var_tx_no_tx_mode |
| mrc_tx |
| lpf_direct |
| loopfilter_level |
| no_frame_context_signaling |
| txmg |
| max_tile |
| hash_me |
| colorspace_headers |
| mfmv |
| frame_marker |
| jnt_comp |
| frame_sign_bias |
| ext_skip |
| obu |
| amvr |
| lpf_sb |
| opt_ref_mv |
| tmv |
| ext_warped_motion |
| horzonly_frame_superres |
| simple_bwd_adapt |
| eob_first |
| " |
| CONFIG_LIST=" |
| dependency_tracking |
| external_build |
| install_docs |
| install_bins |
| install_libs |
| install_srcs |
| debug |
| gprof |
| gcov |
| rvct |
| gcc |
| msvs |
| pic |
| big_endian |
| |
| codec_srcs |
| debug_libs |
| |
| runtime_cpu_detect |
| postproc |
| multithread |
| internal_stats |
| ${CODECS} |
| ${CODEC_FAMILIES} |
| static_msvcrt |
| spatial_resampling |
| realtime_only |
| shared |
| static |
| small |
| postproc_visualizer |
| os_support |
| unit_tests |
| webm_io |
| libyuv |
| accounting |
| inspection |
| decode_perf_tests |
| encode_perf_tests |
| bitstream_debug |
| symbolrate |
| coefficient_range_checking |
| lowbitdepth |
| highbitdepth |
| experimental |
| size_limit |
| ${EXPERIMENT_LIST} |
| analyzer |
| " |
| CMDLINE_SELECT=" |
| dependency_tracking |
| external_build |
| extra_warnings |
| werror |
| install_docs |
| install_bins |
| install_libs |
| install_srcs |
| debug |
| gprof |
| gcov |
| pic |
| optimizations |
| ccache |
| runtime_cpu_detect |
| thumb |
| |
| libs |
| examples |
| analyzer |
| docs |
| tools |
| libc |
| as |
| size_limit |
| codec_srcs |
| debug_libs |
| |
| postproc |
| multithread |
| internal_stats |
| ${CODECS} |
| ${CODEC_FAMILIES} |
| static_msvcrt |
| spatial_resampling |
| realtime_only |
| shared |
| static |
| small |
| postproc_visualizer |
| unit_tests |
| webm_io |
| libyuv |
| accounting |
| inspection |
| decode_perf_tests |
| encode_perf_tests |
| coefficient_range_checking |
| bitstream_debug |
| symbolrate |
| lowbitdepth |
| highbitdepth |
| experimental |
| adopted_experiments |
| colorspace_headers |
| " |
| |
| process_cmdline() { |
| for opt do |
| optval="${opt#*=}" |
| case "$opt" in |
| --disable-codecs) |
| for c in ${CODEC_FAMILIES}; do disable_codec $c; done |
| ;; |
| --enable-?*|--disable-?*) |
| eval `echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g'` |
| if is_in ${option} ${EXPERIMENT_LIST}; then |
| if enabled experimental; then |
| ${action}_feature $option |
| else |
| log_echo "Ignoring $opt -- not in experimental mode." |
| fi |
| elif is_in ${option} "${CODECS} ${CODEC_FAMILIES}"; then |
| ${action}_codec ${option} |
| else |
| process_common_cmdline $opt |
| fi |
| ;; |
| *) process_common_cmdline "$opt" |
| ;; |
| esac |
| done |
| } |
| |
| post_process_cmdline() { |
| c="" |
| |
| # Enable all detected codecs, if they haven't been disabled |
| for c in ${CODECS}; do soft_enable $c; done |
| |
| # Enable the codec family if any component of that family is enabled |
| for c in ${CODECS}; do |
| enabled $c && enable_feature ${c%_*} |
| done |
| |
| # Set the {en,de}coders variable if any algorithm in that class is enabled |
| for c in ${CODECS}; do |
| enabled ${c} && enable_feature ${c##*_}s |
| done |
| |
| # Enable adopted experiments by default |
| soft_enable adopted_experiments |
| if enabled adopted_experiments; then |
| soft_enable ext_tx |
| soft_enable cdef |
| soft_enable ext_intra |
| soft_enable intra_edge |
| soft_enable mv_compress |
| soft_enable dual_filter |
| soft_enable interintra |
| soft_enable one_sided_compound |
| soft_enable convolve_round |
| soft_enable aom_qm |
| soft_enable dist_8x8 |
| soft_enable loop_restoration |
| soft_enable ext_partition |
| soft_enable ext_partition_types |
| soft_enable new_multisymbol |
| |
| # Provisional adopted |
| soft_enable reference_buffer |
| soft_enable loopfiltering_across_tiles |
| soft_enable palette_throughput |
| soft_enable smooth_hv |
| soft_enable tempmv_signaling |
| soft_enable ext_comp_refs |
| soft_enable ext_delta_q |
| soft_enable parallel_deblocking |
| soft_enable simple_bwd_adapt |
| soft_enable loopfilter_level |
| soft_enable cfl |
| soft_enable deblock_13tap |
| soft_enable frame_marker |
| soft_enable kf_ctx |
| fi |
| |
| # Enable low-bitdepth pixel pipeline by default |
| soft_enable lowbitdepth |
| |
| # Enable LBD/HBD txfm consistency tool |
| soft_enable txmg |
| |
| # Fix up experiment dependencies |
| enabled lv_map && disable_feature mrc_tx |
| enabled eob_first && enable_feature lv_map |
| enabled eob_first && enable_feature ext_tx |
| enabled coef_interleave && disable_feature mrc_tx |
| enabled mrc_tx && enable_feature ext_tx |
| enabled txk_sel && soft_enable lv_map |
| enabled ctx1d && soft_enable lv_map |
| enabled ctx1d && soft_enable ext_tx |
| enabled compound_round && soft_enable convolve_round |
| enabled ext_intra_mod && enable_feature intra_edge |
| enabled intra_edge && enable_feature ext_intra |
| enabled ext_comp_refs && enable_feature one_sided_compound |
| enabled lgt_from_pred && enable_feature ext_tx |
| enabled lgt_from_pred && disable_feature mrc_tx |
| enabled cfl && enable_feature smooth_hv |
| enabled cdef_singlepass && enable_feature cdef |
| enabled mfmv && enable_feature frame_marker |
| enabled jnt_comp && enable_feature frame_marker |
| enabled frame_sign_bias && enable_feature frame_marker |
| enabled txmg && enable_feature highbitdepth |
| enabled ext_skip && enable_feature frame_marker |
| enabled horzonly_frame_superres && enable_feature frame_superres |
| enabled loopfilter_level && enable_feature parallel_deblocking |
| enabled loopfilter_level && enable_feature ext_delta_q |
| |
| if enabled rawbits && enabled ans; then |
| log_echo "rawbits requires not ans, so disabling rawbits" |
| disable_feature rawbits |
| fi |
| if enabled daala_tx; then |
| enable_feature daala_tx4 |
| enable_feature daala_tx8 |
| enable_feature daala_tx16 |
| enable_feature daala_tx32 |
| enable_feature daala_tx64 |
| fi |
| if enabled daala_tx64 && ! enabled tx64x64; then |
| log_echo "daala_tx64 requires tx64x64, so disabling daala_tx64" |
| disable_feature daala_tx64 |
| fi |
| if enabled daala_tx4 || enabled daala_tx8 || enabled daala_tx16 || |
| enabled daala_tx32 || enabled daala_tx64; then |
| disable_feature txmg |
| disable_feature lgt |
| enable_feature lowbitdepth |
| fi |
| if enabled ext_partition_types; then |
| if enabled fp_mb_stats; then |
| log_echo "ext_partition_types not compatible with fp_mb_stats;" |
| log_echo "disabling fp_mb_stats" |
| disable_feature fp_mb_stats |
| fi |
| fi |
| # Enable accounting and inspection when building the analyzer |
| if enabled analyzer; then |
| soft_enable accounting |
| soft_enable inspection |
| fi |
| # Enable hash_me if amvr is enabled |
| if enabled amvr; then |
| log_echo "amvr requires hash_me" |
| enable_feature hash_me |
| fi |
| |
| if enabled striped_loop_restoration && ! enabled loop_restoration ; then |
| log_echo "striped_loop_restoration requires loop_restoration" |
| log_echo "enable loop_restoration" |
| enable_feature loop_restoration |
| fi |
| if enabled striped_loop_restoration && enabled frame_superres ; then |
| log_echo "striped_loop_restoration not compatible with frame_superres" |
| log_echo "disabling striped_loop_restoration" |
| disable_feature striped_loop_restoration |
| fi |
| if enabled lpf_sb; then |
| log_echo "lpf_sb can't work with loopfilter_level yet." |
| log_echo "disabling loopfilter_level" |
| disable_feature loopfilter_level |
| fi |
| } |
| |
| process_targets() { |
| enabled child || write_common_config_banner |
| write_common_target_config_h ${BUILD_PFX}aom_config.h |
| write_common_config_targets |
| |
| # Calculate the default distribution name, based on the enabled features |
| cf="" |
| DIST_DIR=aom |
| for cf in $CODEC_FAMILIES; do |
| if enabled ${cf}_encoder && enabled ${cf}_decoder; then |
| DIST_DIR="${DIST_DIR}-${cf}" |
| elif enabled ${cf}_encoder; then |
| DIST_DIR="${DIST_DIR}-${cf}cx" |
| elif enabled ${cf}_decoder; then |
| DIST_DIR="${DIST_DIR}-${cf}dx" |
| fi |
| done |
| enabled debug_libs && DIST_DIR="${DIST_DIR}-debug" |
| enabled codec_srcs && DIST_DIR="${DIST_DIR}-src" |
| ! enabled postproc && DIST_DIR="${DIST_DIR}-nopost" |
| ! enabled multithread && DIST_DIR="${DIST_DIR}-nomt" |
| ! enabled install_docs && DIST_DIR="${DIST_DIR}-nodocs" |
| DIST_DIR="${DIST_DIR}-${tgt_isa}-${tgt_os}" |
| case "${tgt_os}" in |
| win*) enabled static_msvcrt && DIST_DIR="${DIST_DIR}mt" || DIST_DIR="${DIST_DIR}md" |
| DIST_DIR="${DIST_DIR}-${tgt_cc}" |
| ;; |
| esac |
| if [ -f "${source_path}/build/make/version.sh" ]; then |
| ver=`"$source_path/build/make/version.sh" --bare "$source_path"` |
| DIST_DIR="${DIST_DIR}-${ver}" |
| VERSION_STRING=${ver} |
| ver=${ver%%-*} |
| VERSION_PATCH=${ver##*.} |
| ver=${ver%.*} |
| VERSION_MINOR=${ver##*.} |
| ver=${ver#v} |
| VERSION_MAJOR=${ver%.*} |
| fi |
| enabled child || cat <<EOF >> config.mk |
| |
| PREFIX=${prefix} |
| ifeq (\$(MAKECMDGOALS),dist) |
| DIST_DIR?=${DIST_DIR} |
| else |
| DIST_DIR?=\$(DESTDIR)${prefix} |
| endif |
| LIBSUBDIR=${libdir##${prefix}/} |
| |
| VERSION_STRING=${VERSION_STRING} |
| |
| VERSION_MAJOR=${VERSION_MAJOR} |
| VERSION_MINOR=${VERSION_MINOR} |
| VERSION_PATCH=${VERSION_PATCH} |
| |
| CONFIGURE_ARGS=${CONFIGURE_ARGS} |
| EOF |
| enabled child || echo "CONFIGURE_ARGS?=${CONFIGURE_ARGS}" >> config.mk |
| |
| # |
| # Write makefiles for all enabled targets |
| # |
| for tgt in libs examples docs tools solution; do |
| tgt_fn="$tgt-$toolchain.mk" |
| |
| if enabled $tgt; then |
| echo "Creating makefiles for ${toolchain} ${tgt}" |
| write_common_target_config_mk $tgt_fn ${BUILD_PFX}aom_config.h |
| #write_${tgt}_config |
| fi |
| done |
| |
| } |
| |
| process_detect() { |
| if enabled shared; then |
| # Can only build shared libs on a subset of platforms. Doing this check |
| # here rather than at option parse time because the target auto-detect |
| # magic happens after the command line has been parsed. |
| case "${tgt_os}" in |
| linux|os2|darwin*|iphonesimulator*) |
| # Supported platforms |
| ;; |
| *) |
| if enabled gnu; then |
| echo "--enable-shared is only supported on ELF; assuming this is OK" |
| else |
| die "--enable-shared only supported on ELF, OS/2, and Darwin for now" |
| fi |
| ;; |
| esac |
| fi |
| if [ -z "$CC" ] || enabled external_build; then |
| echo "Bypassing toolchain for environment detection." |
| enable_feature external_build |
| check_header() { |
| log fake_check_header "$@" |
| header=$1 |
| shift |
| var=`echo $header | sed 's/[^A-Za-z0-9_]/_/g'` |
| disable_feature $var |
| # Headers common to all environments |
| case $header in |
| stdio.h) |
| true; |
| ;; |
| *) |
| result=false |
| for d in "$@"; do |
| [ -f "${d##-I}/$header" ] && result=true && break |
| done |
| ${result:-true} |
| esac && enable_feature $var |
| |
| # Specialize windows and POSIX environments. |
| case $toolchain in |
| *-win*-*) |
| # Don't check for any headers in Windows builds. |
| false |
| ;; |
| *) |
| case $header in |
| pthread.h) true;; |
| unistd.h) true;; |
| *) false;; |
| esac && enable_feature $var |
| esac |
| enabled $var |
| } |
| check_ld() { |
| true |
| } |
| fi |
| check_header stdio.h || die "Unable to invoke compiler: ${CC} ${CFLAGS}" |
| check_ld <<EOF || die "Toolchain is unable to link executables" |
| int main(void) {return 0;} |
| EOF |
| # check system headers |
| check_header pthread.h |
| check_header unistd.h # for sysconf(3) and friends. |
| |
| check_header aom/aom_integer.h -I${source_path} && enable_feature aom_ports |
| |
| check_ld <<EOF && enable_feature fexcept |
| #define _GNU_SOURCE |
| #include <fenv.h> |
| int main(void) { (void)feenableexcept(FE_DIVBYZERO | FE_INVALID); return 0; } |
| EOF |
| } |
| |
| process_toolchain() { |
| process_common_toolchain |
| |
| # Enable some useful compiler flags |
| if enabled gcc; then |
| enabled werror && check_add_cflags -Werror |
| check_add_cflags -Wall |
| check_add_cflags -Wdisabled-optimization |
| check_add_cflags -Wfloat-conversion |
| check_add_cflags -Wpointer-arith |
| check_add_cflags -Wtype-limits |
| check_add_cflags -Wvla |
| check_add_cflags -Wimplicit-function-declaration |
| check_add_cflags -Wuninitialized |
| check_add_cflags -Wunused |
| check_add_cflags -Wsign-compare |
| check_add_cflags -Wstring-conversion |
| check_add_cflags -Wlogical-op |
| check_add_cflags -Wstack-usage=320000 |
| # Enabling the following warning (in combination with -Wunused above) |
| # for C++ generates errors in third_party code including googletest and |
| # libyuv. So enable it only for C code. |
| check_cflags "-Wextra" && add_cflags_only "-Wextra" |
| # Enabling the following warning for C++ generates some useless warnings |
| # about some function parameters shadowing class member function names. |
| # So, only enable this warning for C code. |
| check_cflags "-Wshadow" && add_cflags_only "-Wshadow" |
| if enabled mips || [ -z "${INLINE}" ]; then |
| enabled extra_warnings || check_add_cflags -Wno-unused-function |
| fi |
| # gtest makes heavy use of undefined pre-processor symbols |
| check_cflags "-Wundef" && add_cflags_only "-Wundef" |
| # Avoid this warning for third_party C++ sources. Some reorganization |
| # would be needed to apply this only to test/*.cc. |
| check_cflags -Wshorten-64-to-32 && add_cflags_only -Wshorten-64-to-32 |
| fi |
| |
| if enabled icc; then |
| enabled werror && check_add_cflags -Werror |
| check_add_cflags -Wall |
| check_add_cflags -Wpointer-arith |
| |
| # ICC has a number of floating point optimizations that we disable |
| # in favor of deterministic output WRT to other compilers |
| add_cflags -fp-model precise |
| fi |
| |
| if enabled analyzer; then |
| soft_enable wxwidgets |
| if ! wx-config --version > /dev/null; then |
| die "Couldn't find wx-config" |
| fi |
| |
| add_cxxflags_only $(wx-config --cppflags) |
| add_extralibs $(wx-config --libs) |
| fi |
| |
| # Enable extra, harmless warnings. These might provide additional insight |
| # to what the compiler is doing and why, but in general, but they shouldn't |
| # be treated as fatal, even if we're treating warnings as errors. |
| GCC_EXTRA_WARNINGS=" |
| -Wdisabled-optimization |
| -Winline |
| " |
| enabled gcc && EXTRA_WARNINGS="${GCC_EXTRA_WARNINGS}" |
| RVCT_EXTRA_WARNINGS=" |
| --remarks |
| " |
| enabled rvct && EXTRA_WARNINGS="${RVCT_EXTRA_WARNINGS}" |
| if enabled extra_warnings; then |
| for w in ${EXTRA_WARNINGS}; do |
| check_add_cflags ${w} |
| enabled gcc && enabled werror && check_add_cflags -Wno-error=${w} |
| done |
| fi |
| |
| # ccache only really works on gcc toolchains |
| enabled gcc || soft_disable ccache |
| |
| # Enable the postbuild target if building for visual studio. |
| case "$tgt_cc" in |
| vs*) enable_feature msvs |
| enable_feature solution |
| vs_version=${tgt_cc##vs} |
| VCPROJ_SFX=vcxproj |
| gen_vcproj_cmd=${source_path}/build/make/gen_msvs_vcxproj.sh |
| enabled werror && gen_vcproj_cmd="${gen_vcproj_cmd} --enable-werror" |
| all_targets="${all_targets} solution" |
| INLINE="__forceinline" |
| ;; |
| esac |
| |
| # Other toolchain specific defaults |
| case $toolchain in x86*) soft_enable postproc;; esac |
| |
| if enabled postproc_visualizer; then |
| enabled postproc || die "postproc_visualizer requires postproc to be enabled" |
| fi |
| |
| # Enable unit tests by default if we have a working C++ compiler. |
| case "$toolchain" in |
| *-vs*) |
| soft_enable unit_tests |
| soft_enable webm_io |
| soft_enable libyuv |
| ;; |
| *-android-*) |
| soft_enable webm_io |
| soft_enable libyuv |
| # GTestLog must be modified to use Android logging utilities. |
| ;; |
| *-darwin-*) |
| # iOS/ARM builds do not work with gtest. This does not match |
| # x86 targets. |
| ;; |
| *-iphonesimulator-*) |
| soft_enable webm_io |
| soft_enable libyuv |
| ;; |
| *-win*) |
| # Some mingw toolchains don't have pthread available by default. |
| # Treat these more like visual studio where threading in gtest |
| # would be disabled for the same reason. |
| check_cxx "$@" <<EOF && soft_enable unit_tests |
| int z; |
| EOF |
| check_cxx "$@" <<EOF && soft_enable webm_io |
| int z; |
| EOF |
| check_cxx "$@" <<EOF && soft_enable libyuv |
| int z; |
| EOF |
| ;; |
| *) |
| enabled pthread_h && check_cxx "$@" <<EOF && soft_enable unit_tests |
| int z; |
| EOF |
| check_cxx "$@" <<EOF && soft_enable webm_io |
| int z; |
| EOF |
| check_cxx "$@" <<EOF && soft_enable libyuv |
| int z; |
| EOF |
| ;; |
| esac |
| # libwebm needs to be linked with C++ standard library |
| enabled webm_io && LD=${CXX} |
| |
| # append any user defined extra cflags |
| if [ -n "${extra_cflags}" ] ; then |
| check_add_cflags ${extra_cflags} || \ |
| die "Requested extra CFLAGS '${extra_cflags}' not supported by compiler" |
| fi |
| if [ -n "${extra_cxxflags}" ]; then |
| check_add_cxxflags ${extra_cxxflags} || \ |
| die "Requested extra CXXFLAGS '${extra_cxxflags}' not supported by compiler" |
| fi |
| } |
| |
| |
| ## |
| ## END APPLICATION SPECIFIC CONFIGURATION |
| ## |
| CONFIGURE_ARGS="$@" |
| process "$@" |
| print_webm_license ${BUILD_PFX}aom_config.c "/*" " */" |
| cat <<EOF >> ${BUILD_PFX}aom_config.c |
| #include "aom/aom_codec.h" |
| static const char* const cfg = "$CONFIGURE_ARGS"; |
| const char *aom_codec_build_config(void) {return cfg;} |
| EOF |