| #!/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 | |
| tx64x64 | |
| ext_intra | |
| filter_intra | |
| intra_edge | |
| ext_intra_mod | |
| intrabc | |
| 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 | |
| entropy_stats | |
| masked_tx | |
| dependent_horztiles | |
| dist_8x8 | |
| palette_throughput | |
| ref_adapt | |
| lv_map | |
| ctx1d | |
| txk_sel | |
| mv_compress | |
| segment_globalmv | |
| frame_superres | |
| new_multisymbol | |
| compound_singleref | |
| aom_qm | |
| ext_comp_refs | |
| smooth_hv | |
| bgsprite | |
| var_tx_no_tx_mode | |
| simplify_tx_mode | |
| mrc_tx | |
| loopfilter_level | |
| no_frame_context_signaling | |
| txmg | |
| max_tile | |
| hash_me | |
| colorspace_headers | |
| mfmv | |
| frame_marker | |
| jnt_comp | |
| frame_sign_bias | |
| ext_skip | |
| obu | |
| add_4bytes_obusize | |
| amvr | |
| lpf_sb | |
| opt_ref_mv | |
| tmv | |
| ext_warped_motion | |
| horzonly_frame_superres | |
| simple_bwd_adapt | |
| eob_first | |
| eighth_pel_mv_only | |
| mono_video | |
| q_segmentation | |
| " | |
| 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 cdef | |
| soft_enable cdef_singlepass | |
| soft_enable ext_intra | |
| soft_enable intra_edge | |
| soft_enable mv_compress | |
| soft_enable dual_filter | |
| 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 | |
| soft_enable striped_loop_restoration | |
| soft_enable ext_intra_mod | |
| fi | |
| # Enable low-bitdepth pixel pipeline by default | |
| soft_enable lowbitdepth | |
| # Enable LBD/HBD txfm consistency tool | |
| soft_enable txmg | |
| # Enable using 8x8 TMV to realize the decoder speedup. | |
| soft_enable tmv | |
| # Fix up experiment dependencies | |
| enabled lv_map && disable_feature mrc_tx | |
| enabled eob_first && enable_feature lv_map | |
| enabled txk_sel && soft_enable lv_map | |
| enabled ctx1d && soft_enable lv_map | |
| enabled compound_round && soft_enable convolve_round | |
| enabled ext_intra_mod && enable_feature intra_edge | |
| enabled intra_edge && enable_feature ext_intra | |
| 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 | |
| enabled striped_loop_restoration && enable_feature loop_restoration | |
| 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 | |
| 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 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 |