1*fb1b10abSAndroid Build Coastguard Worker#!/bin/sh 2*fb1b10abSAndroid Build Coastguard Worker## 3*fb1b10abSAndroid Build Coastguard Worker## configure 4*fb1b10abSAndroid Build Coastguard Worker## 5*fb1b10abSAndroid Build Coastguard Worker## This script is the front-end to the build system. It provides a similar 6*fb1b10abSAndroid Build Coastguard Worker## interface to standard configure scripts with some extra bits for dealing 7*fb1b10abSAndroid Build Coastguard Worker## with toolchains that differ from the standard POSIX interface and 8*fb1b10abSAndroid Build Coastguard Worker## for extracting subsets of the source tree. In theory, reusable parts 9*fb1b10abSAndroid Build Coastguard Worker## of this script were intended to live in build/make/configure.sh, 10*fb1b10abSAndroid Build Coastguard Worker## but in practice, the line is pretty blurry. 11*fb1b10abSAndroid Build Coastguard Worker## 12*fb1b10abSAndroid Build Coastguard Worker## This build system is based in part on the FFmpeg configure script. 13*fb1b10abSAndroid Build Coastguard Worker## 14*fb1b10abSAndroid Build Coastguard Worker 15*fb1b10abSAndroid Build Coastguard Worker#source_path="`dirname \"$0\"`" 16*fb1b10abSAndroid Build Coastguard Workersource_path=${0%/*} 17*fb1b10abSAndroid Build Coastguard Worker. "${source_path}/build/make/configure.sh" 18*fb1b10abSAndroid Build Coastguard Worker 19*fb1b10abSAndroid Build Coastguard Workershow_help(){ 20*fb1b10abSAndroid Build Coastguard Worker show_help_pre 21*fb1b10abSAndroid Build Coastguard Worker cat << EOF 22*fb1b10abSAndroid Build Coastguard WorkerAdvanced options: 23*fb1b10abSAndroid Build Coastguard Worker ${toggle_libs} libraries 24*fb1b10abSAndroid Build Coastguard Worker ${toggle_examples} examples 25*fb1b10abSAndroid Build Coastguard Worker ${toggle_tools} tools 26*fb1b10abSAndroid Build Coastguard Worker ${toggle_docs} documentation 27*fb1b10abSAndroid Build Coastguard Worker ${toggle_unit_tests} unit tests 28*fb1b10abSAndroid Build Coastguard Worker ${toggle_decode_perf_tests} build decoder perf tests with unit tests 29*fb1b10abSAndroid Build Coastguard Worker ${toggle_encode_perf_tests} build encoder perf tests with unit tests 30*fb1b10abSAndroid Build Coastguard Worker --cpu=CPU tune for the specified CPU (ARM: cortex-a8, X86: sse3) 31*fb1b10abSAndroid Build Coastguard Worker --libc=PATH path to alternate libc 32*fb1b10abSAndroid Build Coastguard Worker --size-limit=WxH max size to allow in the decoder 33*fb1b10abSAndroid Build Coastguard Worker --as={yasm|nasm|auto} use specified assembler [auto, yasm preferred] 34*fb1b10abSAndroid Build Coastguard Worker ${toggle_codec_srcs} in/exclude codec library source code 35*fb1b10abSAndroid Build Coastguard Worker ${toggle_debug_libs} in/exclude debug version of libraries 36*fb1b10abSAndroid Build Coastguard Worker ${toggle_static_msvcrt} use static MSVCRT (VS builds only) 37*fb1b10abSAndroid Build Coastguard Worker ${toggle_vp9_highbitdepth} use VP9 high bit depth (10/12) profiles 38*fb1b10abSAndroid Build Coastguard Worker ${toggle_better_hw_compatibility} 39*fb1b10abSAndroid Build Coastguard Worker enable encoder to produce streams with better 40*fb1b10abSAndroid Build Coastguard Worker hardware decoder compatibility 41*fb1b10abSAndroid Build Coastguard Worker ${toggle_vp8} VP8 codec support 42*fb1b10abSAndroid Build Coastguard Worker ${toggle_vp9} VP9 codec support 43*fb1b10abSAndroid Build Coastguard Worker ${toggle_internal_stats} output of encoder internal stats for debug, if supported (encoders) 44*fb1b10abSAndroid Build Coastguard Worker ${toggle_postproc} postprocessing 45*fb1b10abSAndroid Build Coastguard Worker ${toggle_vp9_postproc} vp9 specific postprocessing 46*fb1b10abSAndroid Build Coastguard Worker ${toggle_multithread} multithreaded encoding and decoding 47*fb1b10abSAndroid Build Coastguard Worker ${toggle_spatial_resampling} spatial sampling (scaling) support 48*fb1b10abSAndroid Build Coastguard Worker ${toggle_realtime_only} enable this option while building for real-time encoding 49*fb1b10abSAndroid Build Coastguard Worker ${toggle_onthefly_bitpacking} enable on-the-fly bitpacking in real-time encoding 50*fb1b10abSAndroid Build Coastguard Worker ${toggle_error_concealment} enable this option to get a decoder which is able to conceal losses 51*fb1b10abSAndroid Build Coastguard Worker ${toggle_coefficient_range_checking} 52*fb1b10abSAndroid Build Coastguard Worker enable decoder to check if intermediate 53*fb1b10abSAndroid Build Coastguard Worker transform coefficients are in valid range 54*fb1b10abSAndroid Build Coastguard Worker ${toggle_runtime_cpu_detect} runtime cpu detection 55*fb1b10abSAndroid Build Coastguard Worker ${toggle_shared} shared library support 56*fb1b10abSAndroid Build Coastguard Worker ${toggle_static} static library support 57*fb1b10abSAndroid Build Coastguard Worker ${toggle_small} favor smaller size over speed 58*fb1b10abSAndroid Build Coastguard Worker ${toggle_postproc_visualizer} macro block / block level visualizers 59*fb1b10abSAndroid Build Coastguard Worker ${toggle_multi_res_encoding} enable multiple-resolution encoding 60*fb1b10abSAndroid Build Coastguard Worker ${toggle_temporal_denoising} enable temporal denoising and disable the spatial denoiser 61*fb1b10abSAndroid Build Coastguard Worker ${toggle_vp9_temporal_denoising} 62*fb1b10abSAndroid Build Coastguard Worker enable vp9 temporal denoising 63*fb1b10abSAndroid Build Coastguard Worker ${toggle_webm_io} enable input from and output to WebM container 64*fb1b10abSAndroid Build Coastguard Worker ${toggle_libyuv} enable libyuv 65*fb1b10abSAndroid Build Coastguard Worker 66*fb1b10abSAndroid Build Coastguard WorkerCodecs: 67*fb1b10abSAndroid Build Coastguard Worker Codecs can be selectively enabled or disabled individually, or by family: 68*fb1b10abSAndroid Build Coastguard Worker --disable-<codec> 69*fb1b10abSAndroid Build Coastguard Worker is equivalent to: 70*fb1b10abSAndroid Build Coastguard Worker --disable-<codec>-encoder 71*fb1b10abSAndroid Build Coastguard Worker --disable-<codec>-decoder 72*fb1b10abSAndroid Build Coastguard Worker 73*fb1b10abSAndroid Build Coastguard Worker Codecs available in this distribution: 74*fb1b10abSAndroid Build Coastguard WorkerEOF 75*fb1b10abSAndroid Build Coastguard Worker#restore editor state ' 76*fb1b10abSAndroid Build Coastguard Worker 77*fb1b10abSAndroid Build Coastguard Worker family=""; 78*fb1b10abSAndroid Build Coastguard Worker last_family=""; 79*fb1b10abSAndroid Build Coastguard Worker c=""; 80*fb1b10abSAndroid Build Coastguard Worker str=""; 81*fb1b10abSAndroid Build Coastguard Worker for c in ${CODECS}; do 82*fb1b10abSAndroid Build Coastguard Worker family=${c%_*} 83*fb1b10abSAndroid Build Coastguard Worker if [ "${family}" != "${last_family}" ]; then 84*fb1b10abSAndroid Build Coastguard Worker [ -z "${str}" ] || echo "${str}" 85*fb1b10abSAndroid Build Coastguard Worker str="$(printf ' %10s:' ${family})" 86*fb1b10abSAndroid Build Coastguard Worker fi 87*fb1b10abSAndroid Build Coastguard Worker str="${str} $(printf '%10s' ${c#*_})" 88*fb1b10abSAndroid Build Coastguard Worker last_family=${family} 89*fb1b10abSAndroid Build Coastguard Worker done 90*fb1b10abSAndroid Build Coastguard Worker echo "${str}" 91*fb1b10abSAndroid Build Coastguard Worker show_help_post 92*fb1b10abSAndroid Build Coastguard Worker} 93*fb1b10abSAndroid Build Coastguard Worker 94*fb1b10abSAndroid Build Coastguard Worker## 95*fb1b10abSAndroid Build Coastguard Worker## BEGIN APPLICATION SPECIFIC CONFIGURATION 96*fb1b10abSAndroid Build Coastguard Worker## 97*fb1b10abSAndroid Build Coastguard Worker 98*fb1b10abSAndroid Build Coastguard Worker# all_platforms is a list of all supported target platforms. Maintain 99*fb1b10abSAndroid Build Coastguard Worker# alphabetically by architecture, generic-gnu last. 100*fb1b10abSAndroid Build Coastguard Workerall_platforms="${all_platforms} arm64-android-gcc" 101*fb1b10abSAndroid Build Coastguard Workerall_platforms="${all_platforms} arm64-darwin-gcc" 102*fb1b10abSAndroid Build Coastguard Workerall_platforms="${all_platforms} arm64-darwin20-gcc" 103*fb1b10abSAndroid Build Coastguard Workerall_platforms="${all_platforms} arm64-darwin21-gcc" 104*fb1b10abSAndroid Build Coastguard Workerall_platforms="${all_platforms} arm64-darwin22-gcc" 105*fb1b10abSAndroid Build Coastguard Workerall_platforms="${all_platforms} arm64-darwin23-gcc" 106*fb1b10abSAndroid Build Coastguard Workerall_platforms="${all_platforms} arm64-linux-gcc" 107*fb1b10abSAndroid Build Coastguard Workerall_platforms="${all_platforms} arm64-win64-gcc" 108*fb1b10abSAndroid Build Coastguard Workerall_platforms="${all_platforms} arm64-win64-vs15" 109*fb1b10abSAndroid Build Coastguard Workerall_platforms="${all_platforms} arm64-win64-vs16" 110*fb1b10abSAndroid Build Coastguard Workerall_platforms="${all_platforms} arm64-win64-vs16-clangcl" 111*fb1b10abSAndroid Build Coastguard Workerall_platforms="${all_platforms} arm64-win64-vs17" 112*fb1b10abSAndroid Build Coastguard Workerall_platforms="${all_platforms} arm64-win64-vs17-clangcl" 113*fb1b10abSAndroid Build Coastguard Workerall_platforms="${all_platforms} armv7-android-gcc" #neon Cortex-A8 114*fb1b10abSAndroid Build Coastguard Workerall_platforms="${all_platforms} armv7-darwin-gcc" #neon Cortex-A8 115*fb1b10abSAndroid Build Coastguard Workerall_platforms="${all_platforms} armv7-linux-rvct" #neon Cortex-A8 116*fb1b10abSAndroid Build Coastguard Workerall_platforms="${all_platforms} armv7-linux-gcc" #neon Cortex-A8 117*fb1b10abSAndroid Build Coastguard Workerall_platforms="${all_platforms} armv7-none-rvct" #neon Cortex-A8 118*fb1b10abSAndroid Build Coastguard Workerall_platforms="${all_platforms} armv7-win32-gcc" 119*fb1b10abSAndroid Build Coastguard Workerall_platforms="${all_platforms} armv7-win32-vs14" 120*fb1b10abSAndroid Build Coastguard Workerall_platforms="${all_platforms} armv7-win32-vs15" 121*fb1b10abSAndroid Build Coastguard Workerall_platforms="${all_platforms} armv7-win32-vs16" 122*fb1b10abSAndroid Build Coastguard Workerall_platforms="${all_platforms} armv7-win32-vs17" 123*fb1b10abSAndroid Build Coastguard Workerall_platforms="${all_platforms} armv7s-darwin-gcc" 124*fb1b10abSAndroid Build Coastguard Workerall_platforms="${all_platforms} armv8-linux-gcc" 125*fb1b10abSAndroid Build Coastguard Workerall_platforms="${all_platforms} loongarch32-linux-gcc" 126*fb1b10abSAndroid Build Coastguard Workerall_platforms="${all_platforms} loongarch64-linux-gcc" 127*fb1b10abSAndroid Build Coastguard Workerall_platforms="${all_platforms} mips32-linux-gcc" 128*fb1b10abSAndroid Build Coastguard Workerall_platforms="${all_platforms} mips64-linux-gcc" 129*fb1b10abSAndroid Build Coastguard Workerall_platforms="${all_platforms} ppc64le-linux-gcc" 130*fb1b10abSAndroid Build Coastguard Workerall_platforms="${all_platforms} sparc-solaris-gcc" 131*fb1b10abSAndroid Build Coastguard Workerall_platforms="${all_platforms} x86-android-gcc" 132*fb1b10abSAndroid Build Coastguard Workerall_platforms="${all_platforms} x86-darwin8-gcc" 133*fb1b10abSAndroid Build Coastguard Workerall_platforms="${all_platforms} x86-darwin8-icc" 134*fb1b10abSAndroid Build Coastguard Workerall_platforms="${all_platforms} x86-darwin9-gcc" 135*fb1b10abSAndroid Build Coastguard Workerall_platforms="${all_platforms} x86-darwin9-icc" 136*fb1b10abSAndroid Build Coastguard Workerall_platforms="${all_platforms} x86-darwin10-gcc" 137*fb1b10abSAndroid Build Coastguard Workerall_platforms="${all_platforms} x86-darwin11-gcc" 138*fb1b10abSAndroid Build Coastguard Workerall_platforms="${all_platforms} x86-darwin12-gcc" 139*fb1b10abSAndroid Build Coastguard Workerall_platforms="${all_platforms} x86-darwin13-gcc" 140*fb1b10abSAndroid Build Coastguard Workerall_platforms="${all_platforms} x86-darwin14-gcc" 141*fb1b10abSAndroid Build Coastguard Workerall_platforms="${all_platforms} x86-darwin15-gcc" 142*fb1b10abSAndroid Build Coastguard Workerall_platforms="${all_platforms} x86-darwin16-gcc" 143*fb1b10abSAndroid Build Coastguard Workerall_platforms="${all_platforms} x86-darwin17-gcc" 144*fb1b10abSAndroid Build Coastguard Workerall_platforms="${all_platforms} x86-iphonesimulator-gcc" 145*fb1b10abSAndroid Build Coastguard Workerall_platforms="${all_platforms} x86-linux-gcc" 146*fb1b10abSAndroid Build Coastguard Workerall_platforms="${all_platforms} x86-linux-icc" 147*fb1b10abSAndroid Build Coastguard Workerall_platforms="${all_platforms} x86-os2-gcc" 148*fb1b10abSAndroid Build Coastguard Workerall_platforms="${all_platforms} x86-solaris-gcc" 149*fb1b10abSAndroid Build Coastguard Workerall_platforms="${all_platforms} x86-win32-gcc" 150*fb1b10abSAndroid Build Coastguard Workerall_platforms="${all_platforms} x86-win32-vs14" 151*fb1b10abSAndroid Build Coastguard Workerall_platforms="${all_platforms} x86-win32-vs15" 152*fb1b10abSAndroid Build Coastguard Workerall_platforms="${all_platforms} x86-win32-vs16" 153*fb1b10abSAndroid Build Coastguard Workerall_platforms="${all_platforms} x86-win32-vs17" 154*fb1b10abSAndroid Build Coastguard Workerall_platforms="${all_platforms} x86_64-android-gcc" 155*fb1b10abSAndroid Build Coastguard Workerall_platforms="${all_platforms} x86_64-darwin9-gcc" 156*fb1b10abSAndroid Build Coastguard Workerall_platforms="${all_platforms} x86_64-darwin10-gcc" 157*fb1b10abSAndroid Build Coastguard Workerall_platforms="${all_platforms} x86_64-darwin11-gcc" 158*fb1b10abSAndroid Build Coastguard Workerall_platforms="${all_platforms} x86_64-darwin12-gcc" 159*fb1b10abSAndroid Build Coastguard Workerall_platforms="${all_platforms} x86_64-darwin13-gcc" 160*fb1b10abSAndroid Build Coastguard Workerall_platforms="${all_platforms} x86_64-darwin14-gcc" 161*fb1b10abSAndroid Build Coastguard Workerall_platforms="${all_platforms} x86_64-darwin15-gcc" 162*fb1b10abSAndroid Build Coastguard Workerall_platforms="${all_platforms} x86_64-darwin16-gcc" 163*fb1b10abSAndroid Build Coastguard Workerall_platforms="${all_platforms} x86_64-darwin17-gcc" 164*fb1b10abSAndroid Build Coastguard Workerall_platforms="${all_platforms} x86_64-darwin18-gcc" 165*fb1b10abSAndroid Build Coastguard Workerall_platforms="${all_platforms} x86_64-darwin19-gcc" 166*fb1b10abSAndroid Build Coastguard Workerall_platforms="${all_platforms} x86_64-darwin20-gcc" 167*fb1b10abSAndroid Build Coastguard Workerall_platforms="${all_platforms} x86_64-darwin21-gcc" 168*fb1b10abSAndroid Build Coastguard Workerall_platforms="${all_platforms} x86_64-darwin22-gcc" 169*fb1b10abSAndroid Build Coastguard Workerall_platforms="${all_platforms} x86_64-darwin23-gcc" 170*fb1b10abSAndroid Build Coastguard Workerall_platforms="${all_platforms} x86_64-iphonesimulator-gcc" 171*fb1b10abSAndroid Build Coastguard Workerall_platforms="${all_platforms} x86_64-linux-gcc" 172*fb1b10abSAndroid Build Coastguard Workerall_platforms="${all_platforms} x86_64-linux-icc" 173*fb1b10abSAndroid Build Coastguard Workerall_platforms="${all_platforms} x86_64-solaris-gcc" 174*fb1b10abSAndroid Build Coastguard Workerall_platforms="${all_platforms} x86_64-win64-gcc" 175*fb1b10abSAndroid Build Coastguard Workerall_platforms="${all_platforms} x86_64-win64-vs14" 176*fb1b10abSAndroid Build Coastguard Workerall_platforms="${all_platforms} x86_64-win64-vs15" 177*fb1b10abSAndroid Build Coastguard Workerall_platforms="${all_platforms} x86_64-win64-vs16" 178*fb1b10abSAndroid Build Coastguard Workerall_platforms="${all_platforms} x86_64-win64-vs17" 179*fb1b10abSAndroid Build Coastguard Workerall_platforms="${all_platforms} generic-gnu" 180*fb1b10abSAndroid Build Coastguard Worker 181*fb1b10abSAndroid Build Coastguard Worker# all_targets is a list of all targets that can be configured 182*fb1b10abSAndroid Build Coastguard Worker# note that these should be in dependency order for now. 183*fb1b10abSAndroid Build Coastguard Workerall_targets="libs examples tools docs" 184*fb1b10abSAndroid Build Coastguard Worker 185*fb1b10abSAndroid Build Coastguard Worker# all targets available are enabled, by default. 186*fb1b10abSAndroid Build Coastguard Workerfor t in ${all_targets}; do 187*fb1b10abSAndroid Build Coastguard Worker [ -f "${source_path}/${t}.mk" ] && enable_feature ${t} 188*fb1b10abSAndroid Build Coastguard Workerdone 189*fb1b10abSAndroid Build Coastguard Worker 190*fb1b10abSAndroid Build Coastguard Workerif ! diff --version >/dev/null; then 191*fb1b10abSAndroid Build Coastguard Worker die "diff missing: Try installing diffutils via your package manager." 192*fb1b10abSAndroid Build Coastguard Workerfi 193*fb1b10abSAndroid Build Coastguard Worker 194*fb1b10abSAndroid Build Coastguard Workerif ! perl --version >/dev/null; then 195*fb1b10abSAndroid Build Coastguard Worker die "Perl is required to build" 196*fb1b10abSAndroid Build Coastguard Workerfi 197*fb1b10abSAndroid Build Coastguard Worker 198*fb1b10abSAndroid Build Coastguard Workerif [ "`cd \"${source_path}\" && pwd`" != "`pwd`" ]; then 199*fb1b10abSAndroid Build Coastguard Worker # test to see if source_path already configured 200*fb1b10abSAndroid Build Coastguard Worker if [ -f "${source_path}/vpx_config.h" ]; then 201*fb1b10abSAndroid Build Coastguard Worker die "source directory already configured; run 'make distclean' there first" 202*fb1b10abSAndroid Build Coastguard Worker fi 203*fb1b10abSAndroid Build Coastguard Workerfi 204*fb1b10abSAndroid Build Coastguard Worker 205*fb1b10abSAndroid Build Coastguard Worker# check installed doxygen version 206*fb1b10abSAndroid Build Coastguard Workerdoxy_version=$(doxygen --version 2>/dev/null) 207*fb1b10abSAndroid Build Coastguard Workerdoxy_major=${doxy_version%%.*} 208*fb1b10abSAndroid Build Coastguard Workerif [ ${doxy_major:-0} -ge 1 ]; then 209*fb1b10abSAndroid Build Coastguard Worker doxy_version=${doxy_version#*.} 210*fb1b10abSAndroid Build Coastguard Worker doxy_minor=${doxy_version%%.*} 211*fb1b10abSAndroid Build Coastguard Worker doxy_patch=${doxy_version##*.} 212*fb1b10abSAndroid Build Coastguard Worker 213*fb1b10abSAndroid Build Coastguard Worker [ $doxy_major -gt 1 ] && enable_feature doxygen 214*fb1b10abSAndroid Build Coastguard Worker [ $doxy_minor -gt 5 ] && enable_feature doxygen 215*fb1b10abSAndroid Build Coastguard Worker [ $doxy_minor -eq 5 ] && [ $doxy_patch -ge 3 ] && enable_feature doxygen 216*fb1b10abSAndroid Build Coastguard Workerfi 217*fb1b10abSAndroid Build Coastguard Worker 218*fb1b10abSAndroid Build Coastguard Worker# disable codecs when their source directory does not exist 219*fb1b10abSAndroid Build Coastguard Worker[ -d "${source_path}/vp8" ] || disable_codec vp8 220*fb1b10abSAndroid Build Coastguard Worker[ -d "${source_path}/vp9" ] || disable_codec vp9 221*fb1b10abSAndroid Build Coastguard Worker 222*fb1b10abSAndroid Build Coastguard Worker# install everything except the sources, by default. sources will have 223*fb1b10abSAndroid Build Coastguard Worker# to be enabled when doing dist builds, since that's no longer a common 224*fb1b10abSAndroid Build Coastguard Worker# case. 225*fb1b10abSAndroid Build Coastguard Workerenabled doxygen && enable_feature install_docs 226*fb1b10abSAndroid Build Coastguard Workerenable_feature install_bins 227*fb1b10abSAndroid Build Coastguard Workerenable_feature install_libs 228*fb1b10abSAndroid Build Coastguard Worker 229*fb1b10abSAndroid Build Coastguard Workerenable_feature static 230*fb1b10abSAndroid Build Coastguard Workerenable_feature optimizations 231*fb1b10abSAndroid Build Coastguard Workerenable_feature dependency_tracking 232*fb1b10abSAndroid Build Coastguard Workerenable_feature spatial_resampling 233*fb1b10abSAndroid Build Coastguard Workerenable_feature multithread 234*fb1b10abSAndroid Build Coastguard Workerenable_feature os_support 235*fb1b10abSAndroid Build Coastguard Workerenable_feature temporal_denoising 236*fb1b10abSAndroid Build Coastguard Worker 237*fb1b10abSAndroid Build Coastguard WorkerCODECS=" 238*fb1b10abSAndroid Build Coastguard Worker vp8_encoder 239*fb1b10abSAndroid Build Coastguard Worker vp8_decoder 240*fb1b10abSAndroid Build Coastguard Worker vp9_encoder 241*fb1b10abSAndroid Build Coastguard Worker vp9_decoder 242*fb1b10abSAndroid Build Coastguard Worker" 243*fb1b10abSAndroid Build Coastguard WorkerCODEC_FAMILIES=" 244*fb1b10abSAndroid Build Coastguard Worker vp8 245*fb1b10abSAndroid Build Coastguard Worker vp9 246*fb1b10abSAndroid Build Coastguard Worker" 247*fb1b10abSAndroid Build Coastguard Worker 248*fb1b10abSAndroid Build Coastguard WorkerARCH_LIST=" 249*fb1b10abSAndroid Build Coastguard Worker arm 250*fb1b10abSAndroid Build Coastguard Worker aarch64 251*fb1b10abSAndroid Build Coastguard Worker mips 252*fb1b10abSAndroid Build Coastguard Worker x86 253*fb1b10abSAndroid Build Coastguard Worker x86_64 254*fb1b10abSAndroid Build Coastguard Worker ppc 255*fb1b10abSAndroid Build Coastguard Worker loongarch 256*fb1b10abSAndroid Build Coastguard Worker" 257*fb1b10abSAndroid Build Coastguard Worker 258*fb1b10abSAndroid Build Coastguard WorkerARCH_EXT_LIST_AARCH64=" 259*fb1b10abSAndroid Build Coastguard Worker neon 260*fb1b10abSAndroid Build Coastguard Worker neon_dotprod 261*fb1b10abSAndroid Build Coastguard Worker neon_i8mm 262*fb1b10abSAndroid Build Coastguard Worker sve 263*fb1b10abSAndroid Build Coastguard Worker sve2 264*fb1b10abSAndroid Build Coastguard Worker" 265*fb1b10abSAndroid Build Coastguard Worker 266*fb1b10abSAndroid Build Coastguard WorkerARCH_EXT_LIST_X86=" 267*fb1b10abSAndroid Build Coastguard Worker mmx 268*fb1b10abSAndroid Build Coastguard Worker sse 269*fb1b10abSAndroid Build Coastguard Worker sse2 270*fb1b10abSAndroid Build Coastguard Worker sse3 271*fb1b10abSAndroid Build Coastguard Worker ssse3 272*fb1b10abSAndroid Build Coastguard Worker sse4_1 273*fb1b10abSAndroid Build Coastguard Worker avx 274*fb1b10abSAndroid Build Coastguard Worker avx2 275*fb1b10abSAndroid Build Coastguard Worker avx512 276*fb1b10abSAndroid Build Coastguard Worker" 277*fb1b10abSAndroid Build Coastguard Worker 278*fb1b10abSAndroid Build Coastguard WorkerARCH_EXT_LIST_LOONGSON=" 279*fb1b10abSAndroid Build Coastguard Worker mmi 280*fb1b10abSAndroid Build Coastguard Worker lsx 281*fb1b10abSAndroid Build Coastguard Worker lasx 282*fb1b10abSAndroid Build Coastguard Worker" 283*fb1b10abSAndroid Build Coastguard Worker 284*fb1b10abSAndroid Build Coastguard WorkerARCH_EXT_LIST=" 285*fb1b10abSAndroid Build Coastguard Worker neon_asm 286*fb1b10abSAndroid Build Coastguard Worker ${ARCH_EXT_LIST_AARCH64} 287*fb1b10abSAndroid Build Coastguard Worker 288*fb1b10abSAndroid Build Coastguard Worker mips32 289*fb1b10abSAndroid Build Coastguard Worker dspr2 290*fb1b10abSAndroid Build Coastguard Worker msa 291*fb1b10abSAndroid Build Coastguard Worker mips64 292*fb1b10abSAndroid Build Coastguard Worker 293*fb1b10abSAndroid Build Coastguard Worker ${ARCH_EXT_LIST_X86} 294*fb1b10abSAndroid Build Coastguard Worker 295*fb1b10abSAndroid Build Coastguard Worker vsx 296*fb1b10abSAndroid Build Coastguard Worker 297*fb1b10abSAndroid Build Coastguard Worker ${ARCH_EXT_LIST_LOONGSON} 298*fb1b10abSAndroid Build Coastguard Worker" 299*fb1b10abSAndroid Build Coastguard WorkerHAVE_LIST=" 300*fb1b10abSAndroid Build Coastguard Worker ${ARCH_EXT_LIST} 301*fb1b10abSAndroid Build Coastguard Worker vpx_ports 302*fb1b10abSAndroid Build Coastguard Worker pthread_h 303*fb1b10abSAndroid Build Coastguard Worker unistd_h 304*fb1b10abSAndroid Build Coastguard Worker" 305*fb1b10abSAndroid Build Coastguard WorkerEXPERIMENT_LIST=" 306*fb1b10abSAndroid Build Coastguard Worker fp_mb_stats 307*fb1b10abSAndroid Build Coastguard Worker emulate_hardware 308*fb1b10abSAndroid Build Coastguard Worker non_greedy_mv 309*fb1b10abSAndroid Build Coastguard Worker rate_ctrl 310*fb1b10abSAndroid Build Coastguard Worker collect_component_timing 311*fb1b10abSAndroid Build Coastguard Worker" 312*fb1b10abSAndroid Build Coastguard WorkerCONFIG_LIST=" 313*fb1b10abSAndroid Build Coastguard Worker dependency_tracking 314*fb1b10abSAndroid Build Coastguard Worker external_build 315*fb1b10abSAndroid Build Coastguard Worker install_docs 316*fb1b10abSAndroid Build Coastguard Worker install_bins 317*fb1b10abSAndroid Build Coastguard Worker install_libs 318*fb1b10abSAndroid Build Coastguard Worker install_srcs 319*fb1b10abSAndroid Build Coastguard Worker debug 320*fb1b10abSAndroid Build Coastguard Worker gprof 321*fb1b10abSAndroid Build Coastguard Worker gcov 322*fb1b10abSAndroid Build Coastguard Worker rvct 323*fb1b10abSAndroid Build Coastguard Worker gcc 324*fb1b10abSAndroid Build Coastguard Worker msvs 325*fb1b10abSAndroid Build Coastguard Worker pic 326*fb1b10abSAndroid Build Coastguard Worker big_endian 327*fb1b10abSAndroid Build Coastguard Worker 328*fb1b10abSAndroid Build Coastguard Worker codec_srcs 329*fb1b10abSAndroid Build Coastguard Worker debug_libs 330*fb1b10abSAndroid Build Coastguard Worker 331*fb1b10abSAndroid Build Coastguard Worker dequant_tokens 332*fb1b10abSAndroid Build Coastguard Worker dc_recon 333*fb1b10abSAndroid Build Coastguard Worker runtime_cpu_detect 334*fb1b10abSAndroid Build Coastguard Worker postproc 335*fb1b10abSAndroid Build Coastguard Worker vp9_postproc 336*fb1b10abSAndroid Build Coastguard Worker multithread 337*fb1b10abSAndroid Build Coastguard Worker internal_stats 338*fb1b10abSAndroid Build Coastguard Worker ${CODECS} 339*fb1b10abSAndroid Build Coastguard Worker ${CODEC_FAMILIES} 340*fb1b10abSAndroid Build Coastguard Worker encoders 341*fb1b10abSAndroid Build Coastguard Worker decoders 342*fb1b10abSAndroid Build Coastguard Worker static_msvcrt 343*fb1b10abSAndroid Build Coastguard Worker spatial_resampling 344*fb1b10abSAndroid Build Coastguard Worker realtime_only 345*fb1b10abSAndroid Build Coastguard Worker onthefly_bitpacking 346*fb1b10abSAndroid Build Coastguard Worker error_concealment 347*fb1b10abSAndroid Build Coastguard Worker shared 348*fb1b10abSAndroid Build Coastguard Worker static 349*fb1b10abSAndroid Build Coastguard Worker small 350*fb1b10abSAndroid Build Coastguard Worker postproc_visualizer 351*fb1b10abSAndroid Build Coastguard Worker os_support 352*fb1b10abSAndroid Build Coastguard Worker unit_tests 353*fb1b10abSAndroid Build Coastguard Worker webm_io 354*fb1b10abSAndroid Build Coastguard Worker libyuv 355*fb1b10abSAndroid Build Coastguard Worker decode_perf_tests 356*fb1b10abSAndroid Build Coastguard Worker encode_perf_tests 357*fb1b10abSAndroid Build Coastguard Worker multi_res_encoding 358*fb1b10abSAndroid Build Coastguard Worker temporal_denoising 359*fb1b10abSAndroid Build Coastguard Worker vp9_temporal_denoising 360*fb1b10abSAndroid Build Coastguard Worker coefficient_range_checking 361*fb1b10abSAndroid Build Coastguard Worker vp9_highbitdepth 362*fb1b10abSAndroid Build Coastguard Worker better_hw_compatibility 363*fb1b10abSAndroid Build Coastguard Worker experimental 364*fb1b10abSAndroid Build Coastguard Worker size_limit 365*fb1b10abSAndroid Build Coastguard Worker always_adjust_bpm 366*fb1b10abSAndroid Build Coastguard Worker bitstream_debug 367*fb1b10abSAndroid Build Coastguard Worker mismatch_debug 368*fb1b10abSAndroid Build Coastguard Worker ${EXPERIMENT_LIST} 369*fb1b10abSAndroid Build Coastguard Worker" 370*fb1b10abSAndroid Build Coastguard WorkerCMDLINE_SELECT=" 371*fb1b10abSAndroid Build Coastguard Worker dependency_tracking 372*fb1b10abSAndroid Build Coastguard Worker external_build 373*fb1b10abSAndroid Build Coastguard Worker extra_warnings 374*fb1b10abSAndroid Build Coastguard Worker werror 375*fb1b10abSAndroid Build Coastguard Worker install_docs 376*fb1b10abSAndroid Build Coastguard Worker install_bins 377*fb1b10abSAndroid Build Coastguard Worker install_libs 378*fb1b10abSAndroid Build Coastguard Worker install_srcs 379*fb1b10abSAndroid Build Coastguard Worker debug 380*fb1b10abSAndroid Build Coastguard Worker profile 381*fb1b10abSAndroid Build Coastguard Worker gprof 382*fb1b10abSAndroid Build Coastguard Worker gcov 383*fb1b10abSAndroid Build Coastguard Worker pic 384*fb1b10abSAndroid Build Coastguard Worker optimizations 385*fb1b10abSAndroid Build Coastguard Worker ccache 386*fb1b10abSAndroid Build Coastguard Worker runtime_cpu_detect 387*fb1b10abSAndroid Build Coastguard Worker thumb 388*fb1b10abSAndroid Build Coastguard Worker 389*fb1b10abSAndroid Build Coastguard Worker libs 390*fb1b10abSAndroid Build Coastguard Worker examples 391*fb1b10abSAndroid Build Coastguard Worker tools 392*fb1b10abSAndroid Build Coastguard Worker docs 393*fb1b10abSAndroid Build Coastguard Worker libc 394*fb1b10abSAndroid Build Coastguard Worker as 395*fb1b10abSAndroid Build Coastguard Worker size_limit 396*fb1b10abSAndroid Build Coastguard Worker codec_srcs 397*fb1b10abSAndroid Build Coastguard Worker debug_libs 398*fb1b10abSAndroid Build Coastguard Worker 399*fb1b10abSAndroid Build Coastguard Worker dequant_tokens 400*fb1b10abSAndroid Build Coastguard Worker dc_recon 401*fb1b10abSAndroid Build Coastguard Worker postproc 402*fb1b10abSAndroid Build Coastguard Worker vp9_postproc 403*fb1b10abSAndroid Build Coastguard Worker multithread 404*fb1b10abSAndroid Build Coastguard Worker internal_stats 405*fb1b10abSAndroid Build Coastguard Worker ${CODECS} 406*fb1b10abSAndroid Build Coastguard Worker ${CODEC_FAMILIES} 407*fb1b10abSAndroid Build Coastguard Worker static_msvcrt 408*fb1b10abSAndroid Build Coastguard Worker spatial_resampling 409*fb1b10abSAndroid Build Coastguard Worker realtime_only 410*fb1b10abSAndroid Build Coastguard Worker onthefly_bitpacking 411*fb1b10abSAndroid Build Coastguard Worker error_concealment 412*fb1b10abSAndroid Build Coastguard Worker shared 413*fb1b10abSAndroid Build Coastguard Worker static 414*fb1b10abSAndroid Build Coastguard Worker small 415*fb1b10abSAndroid Build Coastguard Worker postproc_visualizer 416*fb1b10abSAndroid Build Coastguard Worker unit_tests 417*fb1b10abSAndroid Build Coastguard Worker webm_io 418*fb1b10abSAndroid Build Coastguard Worker libyuv 419*fb1b10abSAndroid Build Coastguard Worker decode_perf_tests 420*fb1b10abSAndroid Build Coastguard Worker encode_perf_tests 421*fb1b10abSAndroid Build Coastguard Worker multi_res_encoding 422*fb1b10abSAndroid Build Coastguard Worker temporal_denoising 423*fb1b10abSAndroid Build Coastguard Worker vp9_temporal_denoising 424*fb1b10abSAndroid Build Coastguard Worker coefficient_range_checking 425*fb1b10abSAndroid Build Coastguard Worker better_hw_compatibility 426*fb1b10abSAndroid Build Coastguard Worker vp9_highbitdepth 427*fb1b10abSAndroid Build Coastguard Worker experimental 428*fb1b10abSAndroid Build Coastguard Worker always_adjust_bpm 429*fb1b10abSAndroid Build Coastguard Worker bitstream_debug 430*fb1b10abSAndroid Build Coastguard Worker mismatch_debug 431*fb1b10abSAndroid Build Coastguard Worker" 432*fb1b10abSAndroid Build Coastguard Worker 433*fb1b10abSAndroid Build Coastguard Workerprocess_cmdline() { 434*fb1b10abSAndroid Build Coastguard Worker for opt do 435*fb1b10abSAndroid Build Coastguard Worker optval="${opt#*=}" 436*fb1b10abSAndroid Build Coastguard Worker case "$opt" in 437*fb1b10abSAndroid Build Coastguard Worker --disable-codecs) 438*fb1b10abSAndroid Build Coastguard Worker for c in ${CODEC_FAMILIES}; do disable_codec $c; done 439*fb1b10abSAndroid Build Coastguard Worker ;; 440*fb1b10abSAndroid Build Coastguard Worker --enable-?*|--disable-?*) 441*fb1b10abSAndroid Build Coastguard Worker eval `echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g'` 442*fb1b10abSAndroid Build Coastguard Worker if is_in ${option} ${EXPERIMENT_LIST}; then 443*fb1b10abSAndroid Build Coastguard Worker if enabled experimental; then 444*fb1b10abSAndroid Build Coastguard Worker ${action}_feature $option 445*fb1b10abSAndroid Build Coastguard Worker else 446*fb1b10abSAndroid Build Coastguard Worker log_echo "Ignoring $opt -- not in experimental mode." 447*fb1b10abSAndroid Build Coastguard Worker fi 448*fb1b10abSAndroid Build Coastguard Worker elif is_in ${option} "${CODECS} ${CODEC_FAMILIES}"; then 449*fb1b10abSAndroid Build Coastguard Worker ${action}_codec ${option} 450*fb1b10abSAndroid Build Coastguard Worker else 451*fb1b10abSAndroid Build Coastguard Worker process_common_cmdline $opt 452*fb1b10abSAndroid Build Coastguard Worker fi 453*fb1b10abSAndroid Build Coastguard Worker ;; 454*fb1b10abSAndroid Build Coastguard Worker *) process_common_cmdline "$opt" 455*fb1b10abSAndroid Build Coastguard Worker ;; 456*fb1b10abSAndroid Build Coastguard Worker esac 457*fb1b10abSAndroid Build Coastguard Worker done 458*fb1b10abSAndroid Build Coastguard Worker} 459*fb1b10abSAndroid Build Coastguard Worker 460*fb1b10abSAndroid Build Coastguard Workerpost_process_cmdline() { 461*fb1b10abSAndroid Build Coastguard Worker if enabled coefficient_range_checking; then 462*fb1b10abSAndroid Build Coastguard Worker echo "coefficient-range-checking is for decoders only, disabling encoders:" 463*fb1b10abSAndroid Build Coastguard Worker soft_disable vp8_encoder 464*fb1b10abSAndroid Build Coastguard Worker soft_disable vp9_encoder 465*fb1b10abSAndroid Build Coastguard Worker fi 466*fb1b10abSAndroid Build Coastguard Worker 467*fb1b10abSAndroid Build Coastguard Worker c="" 468*fb1b10abSAndroid Build Coastguard Worker 469*fb1b10abSAndroid Build Coastguard Worker # Enable all detected codecs, if they haven't been disabled 470*fb1b10abSAndroid Build Coastguard Worker for c in ${CODECS}; do soft_enable $c; done 471*fb1b10abSAndroid Build Coastguard Worker 472*fb1b10abSAndroid Build Coastguard Worker # Enable the codec family if any component of that family is enabled 473*fb1b10abSAndroid Build Coastguard Worker for c in ${CODECS}; do 474*fb1b10abSAndroid Build Coastguard Worker enabled $c && enable_feature ${c%_*} 475*fb1b10abSAndroid Build Coastguard Worker done 476*fb1b10abSAndroid Build Coastguard Worker 477*fb1b10abSAndroid Build Coastguard Worker # Set the {en,de}coders variable if any algorithm in that class is enabled 478*fb1b10abSAndroid Build Coastguard Worker for c in ${CODECS}; do 479*fb1b10abSAndroid Build Coastguard Worker enabled ${c} && enable_feature ${c##*_}s 480*fb1b10abSAndroid Build Coastguard Worker done 481*fb1b10abSAndroid Build Coastguard Worker} 482*fb1b10abSAndroid Build Coastguard Worker 483*fb1b10abSAndroid Build Coastguard Worker 484*fb1b10abSAndroid Build Coastguard Workerprocess_targets() { 485*fb1b10abSAndroid Build Coastguard Worker enabled child || write_common_config_banner 486*fb1b10abSAndroid Build Coastguard Worker write_common_target_config_h ${BUILD_PFX}vpx_config.h 487*fb1b10abSAndroid Build Coastguard Worker write_common_config_targets 488*fb1b10abSAndroid Build Coastguard Worker enabled win_arm64_neon_h_workaround && write_win_arm64_neon_h_workaround ${BUILD_PFX}arm_neon.h 489*fb1b10abSAndroid Build Coastguard Worker 490*fb1b10abSAndroid Build Coastguard Worker # Calculate the default distribution name, based on the enabled features 491*fb1b10abSAndroid Build Coastguard Worker cf="" 492*fb1b10abSAndroid Build Coastguard Worker DIST_DIR=vpx 493*fb1b10abSAndroid Build Coastguard Worker for cf in $CODEC_FAMILIES; do 494*fb1b10abSAndroid Build Coastguard Worker if enabled ${cf}_encoder && enabled ${cf}_decoder; then 495*fb1b10abSAndroid Build Coastguard Worker DIST_DIR="${DIST_DIR}-${cf}" 496*fb1b10abSAndroid Build Coastguard Worker elif enabled ${cf}_encoder; then 497*fb1b10abSAndroid Build Coastguard Worker DIST_DIR="${DIST_DIR}-${cf}cx" 498*fb1b10abSAndroid Build Coastguard Worker elif enabled ${cf}_decoder; then 499*fb1b10abSAndroid Build Coastguard Worker DIST_DIR="${DIST_DIR}-${cf}dx" 500*fb1b10abSAndroid Build Coastguard Worker fi 501*fb1b10abSAndroid Build Coastguard Worker done 502*fb1b10abSAndroid Build Coastguard Worker enabled debug_libs && DIST_DIR="${DIST_DIR}-debug" 503*fb1b10abSAndroid Build Coastguard Worker enabled codec_srcs && DIST_DIR="${DIST_DIR}-src" 504*fb1b10abSAndroid Build Coastguard Worker ! enabled postproc && ! enabled vp9_postproc && DIST_DIR="${DIST_DIR}-nopost" 505*fb1b10abSAndroid Build Coastguard Worker ! enabled multithread && DIST_DIR="${DIST_DIR}-nomt" 506*fb1b10abSAndroid Build Coastguard Worker ! enabled install_docs && DIST_DIR="${DIST_DIR}-nodocs" 507*fb1b10abSAndroid Build Coastguard Worker DIST_DIR="${DIST_DIR}-${tgt_isa}-${tgt_os}" 508*fb1b10abSAndroid Build Coastguard Worker case "${tgt_os}" in 509*fb1b10abSAndroid Build Coastguard Worker win*) enabled static_msvcrt && DIST_DIR="${DIST_DIR}mt" || DIST_DIR="${DIST_DIR}md" 510*fb1b10abSAndroid Build Coastguard Worker DIST_DIR="${DIST_DIR}-${tgt_cc}" 511*fb1b10abSAndroid Build Coastguard Worker ;; 512*fb1b10abSAndroid Build Coastguard Worker esac 513*fb1b10abSAndroid Build Coastguard Worker if [ -f "${source_path}/build/make/version.sh" ]; then 514*fb1b10abSAndroid Build Coastguard Worker ver=`"$source_path/build/make/version.sh" --bare "$source_path"` 515*fb1b10abSAndroid Build Coastguard Worker DIST_DIR="${DIST_DIR}-${ver}" 516*fb1b10abSAndroid Build Coastguard Worker VERSION_STRING=${ver} 517*fb1b10abSAndroid Build Coastguard Worker ver=${ver%%-*} 518*fb1b10abSAndroid Build Coastguard Worker VERSION_PATCH=${ver##*.} 519*fb1b10abSAndroid Build Coastguard Worker ver=${ver%.*} 520*fb1b10abSAndroid Build Coastguard Worker VERSION_MINOR=${ver##*.} 521*fb1b10abSAndroid Build Coastguard Worker ver=${ver#v} 522*fb1b10abSAndroid Build Coastguard Worker VERSION_MAJOR=${ver%.*} 523*fb1b10abSAndroid Build Coastguard Worker fi 524*fb1b10abSAndroid Build Coastguard Worker enabled child || cat <<EOF >> config.mk 525*fb1b10abSAndroid Build Coastguard Worker 526*fb1b10abSAndroid Build Coastguard WorkerPREFIX=${prefix} 527*fb1b10abSAndroid Build Coastguard Workerifeq (\$(MAKECMDGOALS),dist) 528*fb1b10abSAndroid Build Coastguard WorkerDIST_DIR?=${DIST_DIR} 529*fb1b10abSAndroid Build Coastguard Workerelse 530*fb1b10abSAndroid Build Coastguard WorkerDIST_DIR?=\$(DESTDIR)${prefix} 531*fb1b10abSAndroid Build Coastguard Workerendif 532*fb1b10abSAndroid Build Coastguard WorkerLIBSUBDIR=${libdir##${prefix}/} 533*fb1b10abSAndroid Build Coastguard Worker 534*fb1b10abSAndroid Build Coastguard WorkerVERSION_STRING=${VERSION_STRING} 535*fb1b10abSAndroid Build Coastguard Worker 536*fb1b10abSAndroid Build Coastguard WorkerVERSION_MAJOR=${VERSION_MAJOR} 537*fb1b10abSAndroid Build Coastguard WorkerVERSION_MINOR=${VERSION_MINOR} 538*fb1b10abSAndroid Build Coastguard WorkerVERSION_PATCH=${VERSION_PATCH} 539*fb1b10abSAndroid Build Coastguard Worker 540*fb1b10abSAndroid Build Coastguard WorkerCONFIGURE_ARGS=${CONFIGURE_ARGS} 541*fb1b10abSAndroid Build Coastguard WorkerEOF 542*fb1b10abSAndroid Build Coastguard Worker enabled child || echo "CONFIGURE_ARGS?=${CONFIGURE_ARGS}" >> config.mk 543*fb1b10abSAndroid Build Coastguard Worker 544*fb1b10abSAndroid Build Coastguard Worker # 545*fb1b10abSAndroid Build Coastguard Worker # Write makefiles for all enabled targets 546*fb1b10abSAndroid Build Coastguard Worker # 547*fb1b10abSAndroid Build Coastguard Worker for tgt in libs examples tools docs solution; do 548*fb1b10abSAndroid Build Coastguard Worker tgt_fn="$tgt-$toolchain.mk" 549*fb1b10abSAndroid Build Coastguard Worker 550*fb1b10abSAndroid Build Coastguard Worker if enabled $tgt; then 551*fb1b10abSAndroid Build Coastguard Worker echo "Creating makefiles for ${toolchain} ${tgt}" 552*fb1b10abSAndroid Build Coastguard Worker write_common_target_config_mk $tgt_fn ${BUILD_PFX}vpx_config.h 553*fb1b10abSAndroid Build Coastguard Worker #write_${tgt}_config 554*fb1b10abSAndroid Build Coastguard Worker fi 555*fb1b10abSAndroid Build Coastguard Worker done 556*fb1b10abSAndroid Build Coastguard Worker 557*fb1b10abSAndroid Build Coastguard Worker} 558*fb1b10abSAndroid Build Coastguard Worker 559*fb1b10abSAndroid Build Coastguard Workerprocess_detect() { 560*fb1b10abSAndroid Build Coastguard Worker if enabled shared; then 561*fb1b10abSAndroid Build Coastguard Worker # Can only build shared libs on a subset of platforms. Doing this check 562*fb1b10abSAndroid Build Coastguard Worker # here rather than at option parse time because the target auto-detect 563*fb1b10abSAndroid Build Coastguard Worker # magic happens after the command line has been parsed. 564*fb1b10abSAndroid Build Coastguard Worker case "${tgt_os}" in 565*fb1b10abSAndroid Build Coastguard Worker linux|os2|solaris|darwin*|iphonesimulator*) 566*fb1b10abSAndroid Build Coastguard Worker # Supported platforms 567*fb1b10abSAndroid Build Coastguard Worker ;; 568*fb1b10abSAndroid Build Coastguard Worker *) 569*fb1b10abSAndroid Build Coastguard Worker if enabled gnu; then 570*fb1b10abSAndroid Build Coastguard Worker echo "--enable-shared is only supported on ELF; assuming this is OK" 571*fb1b10abSAndroid Build Coastguard Worker else 572*fb1b10abSAndroid Build Coastguard Worker die "--enable-shared only supported on ELF, OS/2, and Darwin for now" 573*fb1b10abSAndroid Build Coastguard Worker fi 574*fb1b10abSAndroid Build Coastguard Worker ;; 575*fb1b10abSAndroid Build Coastguard Worker esac 576*fb1b10abSAndroid Build Coastguard Worker fi 577*fb1b10abSAndroid Build Coastguard Worker if [ -z "$CC" ] || enabled external_build; then 578*fb1b10abSAndroid Build Coastguard Worker echo "Bypassing toolchain for environment detection." 579*fb1b10abSAndroid Build Coastguard Worker enable_feature external_build 580*fb1b10abSAndroid Build Coastguard Worker check_header() { 581*fb1b10abSAndroid Build Coastguard Worker log fake_check_header "$@" 582*fb1b10abSAndroid Build Coastguard Worker header=$1 583*fb1b10abSAndroid Build Coastguard Worker shift 584*fb1b10abSAndroid Build Coastguard Worker var=`echo $header | sed 's/[^A-Za-z0-9_]/_/g'` 585*fb1b10abSAndroid Build Coastguard Worker disable_feature $var 586*fb1b10abSAndroid Build Coastguard Worker # Headers common to all environments 587*fb1b10abSAndroid Build Coastguard Worker case $header in 588*fb1b10abSAndroid Build Coastguard Worker stdio.h) 589*fb1b10abSAndroid Build Coastguard Worker true; 590*fb1b10abSAndroid Build Coastguard Worker ;; 591*fb1b10abSAndroid Build Coastguard Worker *) 592*fb1b10abSAndroid Build Coastguard Worker result=false 593*fb1b10abSAndroid Build Coastguard Worker for d in "$@"; do 594*fb1b10abSAndroid Build Coastguard Worker [ -f "${d##-I}/$header" ] && result=true && break 595*fb1b10abSAndroid Build Coastguard Worker done 596*fb1b10abSAndroid Build Coastguard Worker ${result:-true} 597*fb1b10abSAndroid Build Coastguard Worker esac && enable_feature $var 598*fb1b10abSAndroid Build Coastguard Worker 599*fb1b10abSAndroid Build Coastguard Worker # Specialize windows and POSIX environments. 600*fb1b10abSAndroid Build Coastguard Worker case $toolchain in 601*fb1b10abSAndroid Build Coastguard Worker *-win*-*) 602*fb1b10abSAndroid Build Coastguard Worker # Don't check for any headers in Windows builds. 603*fb1b10abSAndroid Build Coastguard Worker false 604*fb1b10abSAndroid Build Coastguard Worker ;; 605*fb1b10abSAndroid Build Coastguard Worker *) 606*fb1b10abSAndroid Build Coastguard Worker case $header in 607*fb1b10abSAndroid Build Coastguard Worker pthread.h) true;; 608*fb1b10abSAndroid Build Coastguard Worker unistd.h) true;; 609*fb1b10abSAndroid Build Coastguard Worker *) false;; 610*fb1b10abSAndroid Build Coastguard Worker esac && enable_feature $var 611*fb1b10abSAndroid Build Coastguard Worker esac 612*fb1b10abSAndroid Build Coastguard Worker enabled $var 613*fb1b10abSAndroid Build Coastguard Worker } 614*fb1b10abSAndroid Build Coastguard Worker check_ld() { 615*fb1b10abSAndroid Build Coastguard Worker true 616*fb1b10abSAndroid Build Coastguard Worker } 617*fb1b10abSAndroid Build Coastguard Worker check_lib() { 618*fb1b10abSAndroid Build Coastguard Worker true 619*fb1b10abSAndroid Build Coastguard Worker } 620*fb1b10abSAndroid Build Coastguard Worker fi 621*fb1b10abSAndroid Build Coastguard Worker check_header stdio.h || die "Unable to invoke compiler: ${CC} ${CFLAGS}" 622*fb1b10abSAndroid Build Coastguard Worker check_ld <<EOF || die "Toolchain is unable to link executables" 623*fb1b10abSAndroid Build Coastguard Workerint main(void) {return 0;} 624*fb1b10abSAndroid Build Coastguard WorkerEOF 625*fb1b10abSAndroid Build Coastguard Worker # check system headers 626*fb1b10abSAndroid Build Coastguard Worker 627*fb1b10abSAndroid Build Coastguard Worker # Use both check_header and check_lib here, since check_lib 628*fb1b10abSAndroid Build Coastguard Worker # could be a stub that always returns true. 629*fb1b10abSAndroid Build Coastguard Worker check_header pthread.h && check_lib -lpthread <<EOF || disable_feature pthread_h 630*fb1b10abSAndroid Build Coastguard Worker#include <pthread.h> 631*fb1b10abSAndroid Build Coastguard Worker#include <stddef.h> 632*fb1b10abSAndroid Build Coastguard Workerint main(void) { return pthread_create(NULL, NULL, NULL, NULL); } 633*fb1b10abSAndroid Build Coastguard WorkerEOF 634*fb1b10abSAndroid Build Coastguard Worker check_header unistd.h # for sysconf(3) and friends. 635*fb1b10abSAndroid Build Coastguard Worker 636*fb1b10abSAndroid Build Coastguard Worker check_header vpx/vpx_integer.h -I${source_path} && enable_feature vpx_ports 637*fb1b10abSAndroid Build Coastguard Worker 638*fb1b10abSAndroid Build Coastguard Worker if enabled neon && ! enabled external_build; then 639*fb1b10abSAndroid Build Coastguard Worker check_header arm_neon.h || die "Unable to find arm_neon.h" 640*fb1b10abSAndroid Build Coastguard Worker fi 641*fb1b10abSAndroid Build Coastguard Worker} 642*fb1b10abSAndroid Build Coastguard Worker 643*fb1b10abSAndroid Build Coastguard Workerprocess_toolchain() { 644*fb1b10abSAndroid Build Coastguard Worker process_common_toolchain 645*fb1b10abSAndroid Build Coastguard Worker 646*fb1b10abSAndroid Build Coastguard Worker # Enable some useful compiler flags 647*fb1b10abSAndroid Build Coastguard Worker if enabled gcc; then 648*fb1b10abSAndroid Build Coastguard Worker enabled werror && check_add_cflags -Werror 649*fb1b10abSAndroid Build Coastguard Worker check_add_cflags -Wall 650*fb1b10abSAndroid Build Coastguard Worker check_add_cflags -Wdisabled-optimization 651*fb1b10abSAndroid Build Coastguard Worker check_add_cflags -Wextra-semi 652*fb1b10abSAndroid Build Coastguard Worker check_add_cflags -Wextra-semi-stmt 653*fb1b10abSAndroid Build Coastguard Worker check_add_cflags -Wfloat-conversion 654*fb1b10abSAndroid Build Coastguard Worker check_add_cflags -Wformat=2 655*fb1b10abSAndroid Build Coastguard Worker check_add_cflags -Wparentheses-equality 656*fb1b10abSAndroid Build Coastguard Worker check_add_cflags -Wpointer-arith 657*fb1b10abSAndroid Build Coastguard Worker check_add_cflags -Wtype-limits 658*fb1b10abSAndroid Build Coastguard Worker check_add_cflags -Wcast-qual 659*fb1b10abSAndroid Build Coastguard Worker check_add_cflags -Wvla 660*fb1b10abSAndroid Build Coastguard Worker check_add_cflags -Wimplicit-function-declaration 661*fb1b10abSAndroid Build Coastguard Worker check_add_cflags -Wmissing-declarations 662*fb1b10abSAndroid Build Coastguard Worker check_add_cflags -Wmissing-prototypes 663*fb1b10abSAndroid Build Coastguard Worker check_add_cflags -Wshadow 664*fb1b10abSAndroid Build Coastguard Worker check_add_cflags -Wstrict-prototypes 665*fb1b10abSAndroid Build Coastguard Worker check_add_cflags -Wuninitialized 666*fb1b10abSAndroid Build Coastguard Worker check_add_cflags -Wunreachable-code-aggressive 667*fb1b10abSAndroid Build Coastguard Worker check_add_cflags -Wunused 668*fb1b10abSAndroid Build Coastguard Worker check_add_cflags -Wextra 669*fb1b10abSAndroid Build Coastguard Worker # check_add_cflags also adds to cxxflags. gtest does not do well with 670*fb1b10abSAndroid Build Coastguard Worker # these flags so add them explicitly to CFLAGS only. 671*fb1b10abSAndroid Build Coastguard Worker check_cflags -Wundef && add_cflags_only -Wundef 672*fb1b10abSAndroid Build Coastguard Worker check_cflags -Wframe-larger-than=52000 && \ 673*fb1b10abSAndroid Build Coastguard Worker add_cflags_only -Wframe-larger-than=52000 674*fb1b10abSAndroid Build Coastguard Worker if enabled mips || [ -z "${INLINE}" ]; then 675*fb1b10abSAndroid Build Coastguard Worker enabled extra_warnings || check_add_cflags -Wno-unused-function 676*fb1b10abSAndroid Build Coastguard Worker fi 677*fb1b10abSAndroid Build Coastguard Worker # Enforce C99 for C files. Allow GNU extensions. 678*fb1b10abSAndroid Build Coastguard Worker check_cflags -std=gnu99 && add_cflags_only -std=gnu99 679*fb1b10abSAndroid Build Coastguard Worker # Avoid this warning for third_party C++ sources. Some reorganization 680*fb1b10abSAndroid Build Coastguard Worker # would be needed to apply this only to test/*.cc. 681*fb1b10abSAndroid Build Coastguard Worker check_cflags -Wshorten-64-to-32 && add_cflags_only -Wshorten-64-to-32 682*fb1b10abSAndroid Build Coastguard Worker 683*fb1b10abSAndroid Build Coastguard Worker # Do not allow implicit vector type conversions on Clang builds (this 684*fb1b10abSAndroid Build Coastguard Worker # is already the default on GCC builds). 685*fb1b10abSAndroid Build Coastguard Worker check_add_cflags -flax-vector-conversions=none 686*fb1b10abSAndroid Build Coastguard Worker 687*fb1b10abSAndroid Build Coastguard Worker # Quiet gcc 6 vs 7 abi warnings: 688*fb1b10abSAndroid Build Coastguard Worker # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=77728 689*fb1b10abSAndroid Build Coastguard Worker if enabled arm; then 690*fb1b10abSAndroid Build Coastguard Worker check_add_cxxflags -Wno-psabi 691*fb1b10abSAndroid Build Coastguard Worker fi 692*fb1b10abSAndroid Build Coastguard Worker 693*fb1b10abSAndroid Build Coastguard Worker # Enforce C++11 compatibility. 694*fb1b10abSAndroid Build Coastguard Worker check_add_cxxflags -Wc++14-extensions 695*fb1b10abSAndroid Build Coastguard Worker check_add_cxxflags -Wc++17-extensions 696*fb1b10abSAndroid Build Coastguard Worker check_add_cxxflags -Wc++20-extensions 697*fb1b10abSAndroid Build Coastguard Worker check_add_cxxflags -Wnon-virtual-dtor 698*fb1b10abSAndroid Build Coastguard Worker 699*fb1b10abSAndroid Build Coastguard Worker # disable some warnings specific to libyuv / libwebm. 700*fb1b10abSAndroid Build Coastguard Worker check_cxxflags -Wno-missing-declarations \ 701*fb1b10abSAndroid Build Coastguard Worker && LIBYUV_CXXFLAGS="${LIBYUV_CXXFLAGS} -Wno-missing-declarations" 702*fb1b10abSAndroid Build Coastguard Worker check_cxxflags -Wno-missing-prototypes \ 703*fb1b10abSAndroid Build Coastguard Worker && LIBYUV_CXXFLAGS="${LIBYUV_CXXFLAGS} -Wno-missing-prototypes" 704*fb1b10abSAndroid Build Coastguard Worker check_cxxflags -Wno-pass-failed \ 705*fb1b10abSAndroid Build Coastguard Worker && LIBYUV_CXXFLAGS="${LIBYUV_CXXFLAGS} -Wno-pass-failed" 706*fb1b10abSAndroid Build Coastguard Worker check_cxxflags -Wno-shadow \ 707*fb1b10abSAndroid Build Coastguard Worker && LIBWEBM_CXXFLAGS="${LIBWEBM_CXXFLAGS} -Wno-shadow" \ 708*fb1b10abSAndroid Build Coastguard Worker && LIBYUV_CXXFLAGS="${LIBYUV_CXXFLAGS} -Wno-shadow" 709*fb1b10abSAndroid Build Coastguard Worker check_cxxflags -Wno-unused-parameter \ 710*fb1b10abSAndroid Build Coastguard Worker && LIBYUV_CXXFLAGS="${LIBYUV_CXXFLAGS} -Wno-unused-parameter" 711*fb1b10abSAndroid Build Coastguard Worker fi 712*fb1b10abSAndroid Build Coastguard Worker 713*fb1b10abSAndroid Build Coastguard Worker if enabled icc; then 714*fb1b10abSAndroid Build Coastguard Worker enabled werror && check_add_cflags -Werror 715*fb1b10abSAndroid Build Coastguard Worker check_add_cflags -Wall 716*fb1b10abSAndroid Build Coastguard Worker check_add_cflags -Wpointer-arith 717*fb1b10abSAndroid Build Coastguard Worker 718*fb1b10abSAndroid Build Coastguard Worker # ICC has a number of floating point optimizations that we disable 719*fb1b10abSAndroid Build Coastguard Worker # in favor of deterministic output WRT to other compilers 720*fb1b10abSAndroid Build Coastguard Worker add_cflags -fp-model precise 721*fb1b10abSAndroid Build Coastguard Worker fi 722*fb1b10abSAndroid Build Coastguard Worker 723*fb1b10abSAndroid Build Coastguard Worker # Enable extra, harmless warnings. These might provide additional insight 724*fb1b10abSAndroid Build Coastguard Worker # to what the compiler is doing and why, but in general, but they shouldn't 725*fb1b10abSAndroid Build Coastguard Worker # be treated as fatal, even if we're treating warnings as errors. 726*fb1b10abSAndroid Build Coastguard Worker GCC_EXTRA_WARNINGS=" 727*fb1b10abSAndroid Build Coastguard Worker -Wdisabled-optimization 728*fb1b10abSAndroid Build Coastguard Worker -Winline 729*fb1b10abSAndroid Build Coastguard Worker " 730*fb1b10abSAndroid Build Coastguard Worker enabled gcc && EXTRA_WARNINGS="${GCC_EXTRA_WARNINGS}" 731*fb1b10abSAndroid Build Coastguard Worker RVCT_EXTRA_WARNINGS=" 732*fb1b10abSAndroid Build Coastguard Worker --remarks 733*fb1b10abSAndroid Build Coastguard Worker " 734*fb1b10abSAndroid Build Coastguard Worker enabled rvct && EXTRA_WARNINGS="${RVCT_EXTRA_WARNINGS}" 735*fb1b10abSAndroid Build Coastguard Worker if enabled extra_warnings; then 736*fb1b10abSAndroid Build Coastguard Worker for w in ${EXTRA_WARNINGS}; do 737*fb1b10abSAndroid Build Coastguard Worker check_add_cflags ${w} 738*fb1b10abSAndroid Build Coastguard Worker enabled gcc && enabled werror && check_add_cflags -Wno-error=${w} 739*fb1b10abSAndroid Build Coastguard Worker done 740*fb1b10abSAndroid Build Coastguard Worker fi 741*fb1b10abSAndroid Build Coastguard Worker 742*fb1b10abSAndroid Build Coastguard Worker # ccache only really works on gcc toolchains 743*fb1b10abSAndroid Build Coastguard Worker enabled gcc || soft_disable ccache 744*fb1b10abSAndroid Build Coastguard Worker if enabled mips; then 745*fb1b10abSAndroid Build Coastguard Worker enable_feature dequant_tokens 746*fb1b10abSAndroid Build Coastguard Worker enable_feature dc_recon 747*fb1b10abSAndroid Build Coastguard Worker fi 748*fb1b10abSAndroid Build Coastguard Worker 749*fb1b10abSAndroid Build Coastguard Worker if enabled internal_stats; then 750*fb1b10abSAndroid Build Coastguard Worker enable_feature vp9_postproc 751*fb1b10abSAndroid Build Coastguard Worker fi 752*fb1b10abSAndroid Build Coastguard Worker 753*fb1b10abSAndroid Build Coastguard Worker # Enable the postbuild target if building for visual studio. 754*fb1b10abSAndroid Build Coastguard Worker case "$tgt_cc" in 755*fb1b10abSAndroid Build Coastguard Worker vs*) enable_feature msvs 756*fb1b10abSAndroid Build Coastguard Worker enable_feature solution 757*fb1b10abSAndroid Build Coastguard Worker vs_version=${tgt_cc##vs} 758*fb1b10abSAndroid Build Coastguard Worker VCPROJ_SFX=vcxproj 759*fb1b10abSAndroid Build Coastguard Worker gen_vcproj_cmd=${source_path}/build/make/gen_msvs_vcxproj.sh 760*fb1b10abSAndroid Build Coastguard Worker enabled werror && gen_vcproj_cmd="${gen_vcproj_cmd} --enable-werror" 761*fb1b10abSAndroid Build Coastguard Worker all_targets="${all_targets} solution" 762*fb1b10abSAndroid Build Coastguard Worker INLINE="__inline" 763*fb1b10abSAndroid Build Coastguard Worker ;; 764*fb1b10abSAndroid Build Coastguard Worker esac 765*fb1b10abSAndroid Build Coastguard Worker 766*fb1b10abSAndroid Build Coastguard Worker # Other toolchain specific defaults 767*fb1b10abSAndroid Build Coastguard Worker case $toolchain in x86*) soft_enable postproc;; esac 768*fb1b10abSAndroid Build Coastguard Worker 769*fb1b10abSAndroid Build Coastguard Worker if enabled postproc_visualizer; then 770*fb1b10abSAndroid Build Coastguard Worker enabled postproc || die "postproc_visualizer requires postproc to be enabled" 771*fb1b10abSAndroid Build Coastguard Worker fi 772*fb1b10abSAndroid Build Coastguard Worker 773*fb1b10abSAndroid Build Coastguard Worker # Enable unit tests by default if we have a working C++ compiler. 774*fb1b10abSAndroid Build Coastguard Worker case "$toolchain" in 775*fb1b10abSAndroid Build Coastguard Worker *-vs*) 776*fb1b10abSAndroid Build Coastguard Worker soft_enable unit_tests 777*fb1b10abSAndroid Build Coastguard Worker soft_enable webm_io 778*fb1b10abSAndroid Build Coastguard Worker soft_enable libyuv 779*fb1b10abSAndroid Build Coastguard Worker ;; 780*fb1b10abSAndroid Build Coastguard Worker *-android-*) 781*fb1b10abSAndroid Build Coastguard Worker check_add_cxxflags -std=gnu++11 && soft_enable webm_io 782*fb1b10abSAndroid Build Coastguard Worker soft_enable libyuv 783*fb1b10abSAndroid Build Coastguard Worker # GTestLog must be modified to use Android logging utilities. 784*fb1b10abSAndroid Build Coastguard Worker ;; 785*fb1b10abSAndroid Build Coastguard Worker *-darwin-*) 786*fb1b10abSAndroid Build Coastguard Worker check_add_cxxflags -std=gnu++11 787*fb1b10abSAndroid Build Coastguard Worker # iOS/ARM builds do not work with gtest. This does not match 788*fb1b10abSAndroid Build Coastguard Worker # x86 targets. 789*fb1b10abSAndroid Build Coastguard Worker ;; 790*fb1b10abSAndroid Build Coastguard Worker *-iphonesimulator-*) 791*fb1b10abSAndroid Build Coastguard Worker check_add_cxxflags -std=gnu++11 && soft_enable webm_io 792*fb1b10abSAndroid Build Coastguard Worker soft_enable libyuv 793*fb1b10abSAndroid Build Coastguard Worker ;; 794*fb1b10abSAndroid Build Coastguard Worker *-win*) 795*fb1b10abSAndroid Build Coastguard Worker # Some mingw toolchains don't have pthread available by default. 796*fb1b10abSAndroid Build Coastguard Worker # Treat these more like visual studio where threading in gtest 797*fb1b10abSAndroid Build Coastguard Worker # would be disabled for the same reason. 798*fb1b10abSAndroid Build Coastguard Worker check_add_cxxflags -std=gnu++11 && soft_enable unit_tests \ 799*fb1b10abSAndroid Build Coastguard Worker && soft_enable webm_io 800*fb1b10abSAndroid Build Coastguard Worker check_cxx "$@" <<EOF && soft_enable libyuv 801*fb1b10abSAndroid Build Coastguard Workerint z; 802*fb1b10abSAndroid Build Coastguard WorkerEOF 803*fb1b10abSAndroid Build Coastguard Worker ;; 804*fb1b10abSAndroid Build Coastguard Worker *) 805*fb1b10abSAndroid Build Coastguard Worker enabled pthread_h && check_add_cxxflags -std=gnu++11 \ 806*fb1b10abSAndroid Build Coastguard Worker && soft_enable unit_tests 807*fb1b10abSAndroid Build Coastguard Worker check_add_cxxflags -std=gnu++11 && soft_enable webm_io 808*fb1b10abSAndroid Build Coastguard Worker check_cxx "$@" <<EOF && soft_enable libyuv 809*fb1b10abSAndroid Build Coastguard Workerint z; 810*fb1b10abSAndroid Build Coastguard WorkerEOF 811*fb1b10abSAndroid Build Coastguard Worker ;; 812*fb1b10abSAndroid Build Coastguard Worker esac 813*fb1b10abSAndroid Build Coastguard Worker # libwebm needs to be linked with C++ standard library 814*fb1b10abSAndroid Build Coastguard Worker enabled webm_io && LD=${CXX} 815*fb1b10abSAndroid Build Coastguard Worker 816*fb1b10abSAndroid Build Coastguard Worker # append any user defined extra cflags 817*fb1b10abSAndroid Build Coastguard Worker if [ -n "${extra_cflags}" ] ; then 818*fb1b10abSAndroid Build Coastguard Worker check_add_cflags ${extra_cflags} || \ 819*fb1b10abSAndroid Build Coastguard Worker die "Requested extra CFLAGS '${extra_cflags}' not supported by compiler" 820*fb1b10abSAndroid Build Coastguard Worker fi 821*fb1b10abSAndroid Build Coastguard Worker if [ -n "${extra_cxxflags}" ]; then 822*fb1b10abSAndroid Build Coastguard Worker check_add_cxxflags ${extra_cxxflags} || \ 823*fb1b10abSAndroid Build Coastguard Worker die "Requested extra CXXFLAGS '${extra_cxxflags}' not supported by compiler" 824*fb1b10abSAndroid Build Coastguard Worker fi 825*fb1b10abSAndroid Build Coastguard Worker} 826*fb1b10abSAndroid Build Coastguard Worker 827*fb1b10abSAndroid Build Coastguard Worker 828*fb1b10abSAndroid Build Coastguard Worker## 829*fb1b10abSAndroid Build Coastguard Worker## END APPLICATION SPECIFIC CONFIGURATION 830*fb1b10abSAndroid Build Coastguard Worker## 831*fb1b10abSAndroid Build Coastguard WorkerCONFIGURE_ARGS="$@" 832*fb1b10abSAndroid Build Coastguard Workerprocess "$@" 833*fb1b10abSAndroid Build Coastguard Workerprint_webm_license ${BUILD_PFX}vpx_config.c "/*" " */" 834*fb1b10abSAndroid Build Coastguard Workercat <<EOF >> ${BUILD_PFX}vpx_config.c 835*fb1b10abSAndroid Build Coastguard Worker#include "vpx/vpx_codec.h" 836*fb1b10abSAndroid Build Coastguard Workerstatic const char* const cfg = "$CONFIGURE_ARGS"; 837*fb1b10abSAndroid Build Coastguard Workerconst char *vpx_codec_build_config(void) {return cfg;} 838*fb1b10abSAndroid Build Coastguard WorkerEOF 839