blob: fc962332eeb82d89f2b4bb38fb19a1c7b0b26e28 [file] [log] [blame]
Guillaume Martres3526f1c2013-08-13 18:46:58 -07001#!/bin/sh
John Koleszar0ea50ce2010-05-18 11:58:33 -04002##
John Koleszar0d719652010-05-28 10:11:58 -04003## configure
John Koleszar0ea50ce2010-05-18 11:58:33 -04004##
John Koleszar0d719652010-05-28 10:11:58 -04005## This script is the front-end to the build system. It provides a similar
6## interface to standard configure scripts with some extra bits for dealing
7## with toolchains that differ from the standard POSIX interface and
8## for extracting subsets of the source tree. In theory, reusable parts
9## of this script were intended to live in build/make/configure.sh,
10## but in practice, the line is pretty blurry.
11##
12## This build system is based in part on the FFmpeg configure script.
John Koleszar0ea50ce2010-05-18 11:58:33 -040013##
14
John Koleszar0ea50ce2010-05-18 11:58:33 -040015#source_path="`dirname \"$0\"`"
16source_path=${0%/*}
17. "${source_path}/build/make/configure.sh"
18
19show_help(){
20 show_help_pre
21 cat << EOF
22Advanced options:
Johannec658122012-10-10 09:16:37 -070023 ${toggle_libs} libraries
24 ${toggle_examples} examples
Nathan E. Eggef4fa01e2016-10-11 14:20:20 -040025 ${toggle_analyzer} analyzer
Johannec658122012-10-10 09:16:37 -070026 ${toggle_docs} documentation
27 ${toggle_unit_tests} unit tests
Yue Chenc8b38b02017-01-05 11:58:32 -080028 ${toggle_tools} tools
Joshua Litta782d632013-11-15 12:29:26 -080029 ${toggle_decode_perf_tests} build decoder perf tests with unit tests
Joshua Litt83b843f2014-07-21 10:57:16 -070030 ${toggle_encode_perf_tests} build encoder perf tests with unit tests
Johann661802b2014-12-01 11:06:49 -080031 --cpu=CPU tune for the specified CPU (ARM: cortex-a8, X86: sse3)
John Koleszar0ea50ce2010-05-18 11:58:33 -040032 --libc=PATH path to alternate libc
Jim Bankoski943e4322014-07-17 06:31:50 -070033 --size-limit=WxH max size to allow in the decoder
Jan Kratochvil7be093e2010-10-05 19:15:08 +020034 --as={yasm|nasm|auto} use specified assembler [auto, yasm preferred]
Johann5d0c33b2013-11-13 14:05:27 -080035 --sdk-path=PATH path to root of sdk (android builds only)
John Koleszar0ea50ce2010-05-18 11:58:33 -040036 ${toggle_codec_srcs} in/exclude codec library source code
37 ${toggle_debug_libs} in/exclude debug version of libraries
John Koleszar0ea50ce2010-05-18 11:58:33 -040038 ${toggle_static_msvcrt} use static MSVCRT (VS builds only)
Sebastien Alaiwan71e87842017-04-12 16:03:28 +020039 ${toggle_highbitdepth} enable 16-bit generic pixel pipeline (used by high bitdepth profiles)
Sebastien Alaiwan98378132017-01-04 11:23:09 +010040 ${toggle_lowbitdepth} enable 8-bit optimized pixel pipeline
Yaowu Xuf883b422016-08-30 14:01:10 -070041 ${toggle_av1} AV1 codec support
Yaowu Xu57ad1892011-04-29 09:37:59 -070042 ${toggle_internal_stats} output of encoder internal stats for debug, if supported (encoders)
John Koleszar0ea50ce2010-05-18 11:58:33 -040043 ${toggle_postproc} postprocessing
Yunqing Wangaa7335e2011-10-25 15:14:16 -040044 ${toggle_multithread} multithreaded encoding and decoding
John Koleszar0ea50ce2010-05-18 11:58:33 -040045 ${toggle_spatial_resampling} spatial sampling (scaling) support
46 ${toggle_realtime_only} enable this option while building for real-time encoding
Yaowu Xu0a2b25d2014-07-29 13:40:55 -070047 ${toggle_coefficient_range_checking}
48 enable decoder to check if intermediate
49 transform coefficients are in valid range
John Koleszar0ea50ce2010-05-18 11:58:33 -040050 ${toggle_runtime_cpu_detect} runtime cpu detection
John Koleszar7aa97a32010-06-03 10:29:04 -040051 ${toggle_shared} shared library support
James Zern495b2412011-07-25 15:40:36 -070052 ${toggle_static} static library support
John Koleszarf9b2ca52010-09-21 10:06:41 -040053 ${toggle_small} favor smaller size over speed
Fritz Koenig647df002010-11-04 16:03:36 -070054 ${toggle_postproc_visualizer} macro block / block level visualizers
Vignesh Venkatasubramanian0ffa3832014-03-14 08:10:35 -070055 ${toggle_webm_io} enable input from and output to WebM container
Deb Mukherjee47031c02014-05-16 18:52:01 -070056 ${toggle_libyuv} enable libyuv
Michael Bebenita6048d052016-08-25 14:40:54 -070057 ${toggle_accounting} enable bit accounting
Nathan E. Egge2cf03b12017-02-22 16:19:59 -050058 ${toggle_inspection} enable bitstream inspection
John Koleszar0ea50ce2010-05-18 11:58:33 -040059
60Codecs:
61 Codecs can be selectively enabled or disabled individually, or by family:
62 --disable-<codec>
63 is equivalent to:
64 --disable-<codec>-encoder
65 --disable-<codec>-decoder
66
67 Codecs available in this distribution:
68EOF
69#restore editor state '
70
KO Myung-Hun07fa6ad2014-07-22 11:09:27 +090071 family="";
72 last_family="";
73 c="";
74 str="";
John Koleszar0ea50ce2010-05-18 11:58:33 -040075 for c in ${CODECS}; do
76 family=${c%_*}
77 if [ "${family}" != "${last_family}" ]; then
78 [ -z "${str}" ] || echo "${str}"
79 str="$(printf ' %10s:' ${family})"
80 fi
81 str="${str} $(printf '%10s' ${c#*_})"
82 last_family=${family}
83 done
84 echo "${str}"
85 show_help_post
86}
87
88##
89## BEGIN APPLICATION SPECIFIC CONFIGURATION
90##
91
92# all_platforms is a list of all supported target platforms. Maintain
93# alphabetically by architecture, generic-gnu last.
Johann2967bf32016-06-22 16:08:10 -070094all_platforms="${all_platforms} arm64-darwin-gcc"
95all_platforms="${all_platforms} arm64-linux-gcc"
Fritz Koenigd8305732012-01-06 11:50:05 -080096all_platforms="${all_platforms} armv7-android-gcc" #neon Cortex-A8
John Koleszar0ea50ce2010-05-18 11:58:33 -040097all_platforms="${all_platforms} armv7-darwin-gcc" #neon Cortex-A8
98all_platforms="${all_platforms} armv7-linux-rvct" #neon Cortex-A8
99all_platforms="${all_platforms} armv7-linux-gcc" #neon Cortex-A8
Tero Rintaluoma11a222f2011-01-24 11:21:40 +0200100all_platforms="${all_platforms} armv7-none-rvct" #neon Cortex-A8
Yaowu Xua638bdf2013-11-13 11:36:32 -0800101all_platforms="${all_platforms} armv7-win32-vs12"
Ghislain MARY3067c342015-07-28 16:37:09 +0200102all_platforms="${all_platforms} armv7-win32-vs14"
James Zernff5b2f42017-05-23 20:57:26 +0200103all_platforms="${all_platforms} armv7-win32-vs15"
Tom Finegancd2088b2014-06-10 18:52:58 -0700104all_platforms="${all_platforms} armv7s-darwin-gcc"
Johann2967bf32016-06-22 16:08:10 -0700105all_platforms="${all_platforms} armv8-linux-gcc"
John Koleszar0ea50ce2010-05-18 11:58:33 -0400106all_platforms="${all_platforms} mips32-linux-gcc"
Gordana Cmiljanovic1c31e3e2014-08-07 19:09:47 +0200107all_platforms="${all_platforms} mips64-linux-gcc"
Aaron Watry53f61ce2010-09-30 15:36:00 -0400108all_platforms="${all_platforms} sparc-solaris-gcc"
Andoni Morales Alastruey652589d2013-01-14 12:25:52 +0100109all_platforms="${all_platforms} x86-android-gcc"
John Koleszar0ea50ce2010-05-18 11:58:33 -0400110all_platforms="${all_platforms} x86-darwin8-gcc"
111all_platforms="${all_platforms} x86-darwin8-icc"
112all_platforms="${all_platforms} x86-darwin9-gcc"
113all_platforms="${all_platforms} x86-darwin9-icc"
Johann4341e5a2011-10-14 12:06:24 -0700114all_platforms="${all_platforms} x86-darwin10-gcc"
Johann101c2bd2012-04-27 11:40:04 -0700115all_platforms="${all_platforms} x86-darwin11-gcc"
116all_platforms="${all_platforms} x86-darwin12-gcc"
Morton Jonuschatfe4a5202013-07-19 21:09:23 +0200117all_platforms="${all_platforms} x86-darwin13-gcc"
Lawrence Velázquez4fe4c282015-01-22 16:46:02 -0500118all_platforms="${all_platforms} x86-darwin14-gcc"
Alex Converse080ad912015-11-02 14:05:37 -0800119all_platforms="${all_platforms} x86-darwin15-gcc"
Tom Finegan9d3076c2017-02-03 08:42:34 -0800120all_platforms="${all_platforms} x86-darwin16-gcc"
Tom Finegan4e6c5552014-06-04 18:57:25 -0700121all_platforms="${all_platforms} x86-iphonesimulator-gcc"
John Koleszar0ea50ce2010-05-18 11:58:33 -0400122all_platforms="${all_platforms} x86-linux-gcc"
123all_platforms="${all_platforms} x86-linux-icc"
KO Myung-Hun2dad8d62012-02-03 13:31:11 +0900124all_platforms="${all_platforms} x86-os2-gcc"
John Koleszar0ea50ce2010-05-18 11:58:33 -0400125all_platforms="${all_platforms} x86-solaris-gcc"
126all_platforms="${all_platforms} x86-win32-gcc"
Yaowu Xua638bdf2013-11-13 11:36:32 -0800127all_platforms="${all_platforms} x86-win32-vs12"
Ghislain MARY3067c342015-07-28 16:37:09 +0200128all_platforms="${all_platforms} x86-win32-vs14"
James Zernff5b2f42017-05-23 20:57:26 +0200129all_platforms="${all_platforms} x86-win32-vs15"
James Zern5da87e82015-07-24 14:24:20 -0700130all_platforms="${all_platforms} x86_64-android-gcc"
John Koleszar0ea50ce2010-05-18 11:58:33 -0400131all_platforms="${all_platforms} x86_64-darwin9-gcc"
tomfineganfaaa57b2010-11-16 14:52:05 -0500132all_platforms="${all_platforms} x86_64-darwin10-gcc"
Christian Duvivier82edabc2012-08-06 15:05:24 -0700133all_platforms="${all_platforms} x86_64-darwin11-gcc"
Johann101c2bd2012-04-27 11:40:04 -0700134all_platforms="${all_platforms} x86_64-darwin12-gcc"
Morton Jonuschatfe4a5202013-07-19 21:09:23 +0200135all_platforms="${all_platforms} x86_64-darwin13-gcc"
Lawrence Velázquez4fe4c282015-01-22 16:46:02 -0500136all_platforms="${all_platforms} x86_64-darwin14-gcc"
Alex Converse080ad912015-11-02 14:05:37 -0800137all_platforms="${all_platforms} x86_64-darwin15-gcc"
Tom Finegan9d3076c2017-02-03 08:42:34 -0800138all_platforms="${all_platforms} x86_64-darwin16-gcc"
Tom Finegan9b259762014-06-06 16:54:16 -0700139all_platforms="${all_platforms} x86_64-iphonesimulator-gcc"
John Koleszar0ea50ce2010-05-18 11:58:33 -0400140all_platforms="${all_platforms} x86_64-linux-gcc"
Yunqing Wang7630e362010-06-17 13:34:19 -0400141all_platforms="${all_platforms} x86_64-linux-icc"
John Koleszar0ea50ce2010-05-18 11:58:33 -0400142all_platforms="${all_platforms} x86_64-solaris-gcc"
Rafaël Carré3cad6942011-11-11 22:45:44 -0500143all_platforms="${all_platforms} x86_64-win64-gcc"
Yaowu Xua638bdf2013-11-13 11:36:32 -0800144all_platforms="${all_platforms} x86_64-win64-vs12"
Ghislain MARY3067c342015-07-28 16:37:09 +0200145all_platforms="${all_platforms} x86_64-win64-vs14"
James Zernff5b2f42017-05-23 20:57:26 +0200146all_platforms="${all_platforms} x86_64-win64-vs15"
John Koleszar0ea50ce2010-05-18 11:58:33 -0400147all_platforms="${all_platforms} generic-gnu"
148
149# all_targets is a list of all targets that can be configured
150# note that these should be in dependency order for now.
Yue Chenc8b38b02017-01-05 11:58:32 -0800151all_targets="libs examples docs tools"
John Koleszar0ea50ce2010-05-18 11:58:33 -0400152
153# all targets available are enabled, by default.
154for t in ${all_targets}; do
James Zern95735c32014-04-23 14:51:45 -0700155 [ -f "${source_path}/${t}.mk" ] && enable_feature ${t}
John Koleszar0ea50ce2010-05-18 11:58:33 -0400156done
157
Tom Finegan6499a752017-08-22 10:28:39 -0700158if ! diff --version >/dev/null; then
159 die "diff missing: Try installing diffutils via your package manager."
160fi
161
James Zern4b418002014-03-18 18:19:16 -0700162if ! perl --version >/dev/null; then
163 die "Perl is required to build"
164fi
James Zern14be7ba2014-02-28 12:24:46 -0800165
James Zern9402e252014-03-05 14:13:01 -0800166
James Zern95735c32014-04-23 14:51:45 -0700167if [ "`cd \"${source_path}\" && pwd`" != "`pwd`" ]; then
James Zern9402e252014-03-05 14:13:01 -0800168 # test to see if source_path already configured
Yaowu Xuf883b422016-08-30 14:01:10 -0700169 if [ -f "${source_path}/aom_config.h" ]; then
James Zern9402e252014-03-05 14:13:01 -0800170 die "source directory already configured; run 'make distclean' there first"
171 fi
172fi
173
John Koleszar0ea50ce2010-05-18 11:58:33 -0400174# check installed doxygen version
175doxy_version=$(doxygen --version 2>/dev/null)
176doxy_major=${doxy_version%%.*}
177if [ ${doxy_major:-0} -ge 1 ]; then
178 doxy_version=${doxy_version#*.}
179 doxy_minor=${doxy_version%%.*}
180 doxy_patch=${doxy_version##*.}
181
James Zern42ab4012013-08-21 18:11:45 -0700182 [ $doxy_major -gt 1 ] && enable_feature doxygen
183 [ $doxy_minor -gt 5 ] && enable_feature doxygen
184 [ $doxy_minor -eq 5 ] && [ $doxy_patch -ge 3 ] && enable_feature doxygen
John Koleszar0ea50ce2010-05-18 11:58:33 -0400185fi
186
Johann7875e1d2015-05-22 06:52:59 -0700187# disable codecs when their source directory does not exist
Yaowu Xuf883b422016-08-30 14:01:10 -0700188[ -d "${source_path}/av1" ] || disable_codec av1
Johann7875e1d2015-05-22 06:52:59 -0700189
John Koleszaree8bcb12010-05-24 10:16:44 -0400190# install everything except the sources, by default. sources will have
191# to be enabled when doing dist builds, since that's no longer a common
192# case.
James Zernf8630c72014-05-10 11:15:11 -0700193enabled doxygen && enable_feature install_docs
James Zern42ab4012013-08-21 18:11:45 -0700194enable_feature install_bins
195enable_feature install_libs
John Koleszar0ea50ce2010-05-18 11:58:33 -0400196
James Zern42ab4012013-08-21 18:11:45 -0700197enable_feature static
198enable_feature optimizations
James Zernaaccf652015-02-05 19:31:38 -0800199enable_feature dependency_tracking
James Zern42ab4012013-08-21 18:11:45 -0700200enable_feature spatial_resampling
201enable_feature multithread
202enable_feature os_support
Sebastien Alaiwan92400ab2017-03-14 10:39:29 +0100203enable_feature highbitdepth
John Koleszar0ea50ce2010-05-18 11:58:33 -0400204
Johann7875e1d2015-05-22 06:52:59 -0700205CODECS="
Yaowu Xuf883b422016-08-30 14:01:10 -0700206 av1_encoder
207 av1_decoder
Johann7875e1d2015-05-22 06:52:59 -0700208"
209CODEC_FAMILIES="
Yaowu Xuf883b422016-08-30 14:01:10 -0700210 av1
Johann7875e1d2015-05-22 06:52:59 -0700211"
John Koleszar0ea50ce2010-05-18 11:58:33 -0400212
213ARCH_LIST="
214 arm
215 mips
216 x86
217 x86_64
John Koleszar0ea50ce2010-05-18 11:58:33 -0400218"
James Zern6e6dbbc2015-11-17 16:14:05 -0800219ARCH_EXT_LIST_X86="
220 mmx
221 sse
222 sse2
223 sse3
224 ssse3
225 sse4_1
226 avx
227 avx2
228"
John Koleszar0ea50ce2010-05-18 11:58:33 -0400229ARCH_EXT_LIST="
Fritz Koenig89210282012-01-19 15:18:31 -0800230 neon
Johannce239312014-05-07 11:01:31 -0700231 neon_asm
John Koleszar0ea50ce2010-05-18 11:58:33 -0400232
233 mips32
Dragan Mrdjan07ff7fa2012-04-11 09:53:15 -0700234 dspr2
Parag Salasakar84ec68d2015-03-16 12:36:59 +0530235 msa
Gordana Cmiljanovic1c31e3e2014-08-07 19:09:47 +0200236 mips64
237
James Zern6e6dbbc2015-11-17 16:14:05 -0800238 ${ARCH_EXT_LIST_X86}
John Koleszar0ea50ce2010-05-18 11:58:33 -0400239"
240HAVE_LIST="
241 ${ARCH_EXT_LIST}
Yaowu Xuf883b422016-08-30 14:01:10 -0700242 aom_ports
James Zern66ee4402017-01-06 17:59:50 -0800243 fexcept
John Koleszar0ea50ce2010-05-18 11:58:33 -0400244 pthread_h
Attila Nagy297b2762011-03-25 12:53:03 +0200245 unistd_h
Alex Conversed5f51b32016-10-11 12:26:24 -0700246 wxwidgets
John Koleszar0ea50ce2010-05-18 11:58:33 -0400247"
John Koleszar0952acb2010-06-01 11:14:25 -0400248EXPERIMENT_LIST="
Pengchong Jinaaabbd62014-06-30 09:52:27 -0700249 fp_mb_stats
Jean-Marc Valin01435132017-02-18 14:12:53 -0500250 cdef
Steinar Midtskogen59782122017-07-20 08:49:43 +0200251 cdef_singlepass
Jingning Hancffcfdb2015-10-06 14:23:12 -0700252 var_tx
Debargha Mukherjeee5848de2016-07-01 12:57:14 -0700253 rect_tx
Yue Chen8a32e1a2017-05-12 13:00:44 -0700254 rect_tx_ext
Jingning Han6683a212017-01-30 12:51:07 -0800255 tpl_mv
Jingning Han39775e12016-05-02 08:55:40 -0700256 dual_filter
Angie Chiangdbfec2a2017-02-01 15:04:59 -0800257 convolve_round
Angie Chiangf87d8372017-04-21 11:23:56 -0700258 compound_round
hui sub3cc3a02015-08-24 14:37:54 -0700259 ext_tx
hui sub8a6fd62017-05-10 10:57:57 -0700260 dpcm_intra
Debargha Mukherjeefe381482016-10-18 10:24:31 -0700261 tx64x64
Yaowu Xu5a27b3b2015-10-22 12:18:52 -0700262 ext_intra
hui sueda3d762016-12-06 16:58:23 -0800263 intra_interp
hui suffcf4fb2016-10-17 16:14:27 -0700264 filter_intra
Joe Young12c0bc02017-04-09 08:12:14 -0700265 intra_edge
Alex Converse576f0652017-04-18 12:55:29 -0700266 intrabc
Debargha Mukherjee73e06f32015-11-02 09:58:58 -0800267 ext_inter
Debargha Mukherjee37f6fe62017-02-10 21:44:13 -0800268 interintra
269 wedge
Sarah Parker2f6ce752016-12-08 15:26:46 -0800270 compound_segment
Debargha Mukherjee73e06f32015-11-02 09:58:58 -0800271 ext_refs
Zoe Liud1ac0322017-06-05 13:59:12 -0700272 speed_refs
Zoe Liu5caf2c42017-06-29 05:15:18 -0700273 gf_groups
Sarah Parker091f0802016-03-23 15:24:44 -0700274 global_motion
Sarah Parker867f6642016-05-05 13:41:24 -0700275 new_quant
Debargha Mukherjee5bbacd92015-11-13 11:32:17 -0800276 supertx
Alex Converse9ffcb462015-12-16 11:16:32 -0800277 ans
Debargha Mukherjee6a5a08e2016-01-15 12:55:03 -0800278 loop_restoration
279 ext_partition
Julia Robson8bc8f272016-03-18 15:22:42 +0000280 ext_partition_types
Alex Converse55c6bde2017-01-12 15:55:31 -0800281 unpoison_partition_ctx
Debargha Mukherjee86088512016-03-08 07:17:29 -0800282 ext_tile
Yue Chencb60b182016-10-13 15:18:22 -0700283 motion_var
Yue Chenb2d26452017-01-11 16:29:19 -0800284 ncobmc
Debargha Mukherjeebcf4e0a2016-06-09 02:22:48 -0700285 warped_motion
hui su0d103572017-03-01 17:58:01 -0800286 q_adapt_probs
Angie Chiang4de81ee2016-07-26 14:14:20 -0700287 bitstream_debug
Angie Chiang08a22a62017-07-17 17:29:17 -0700288 inter_stats_only
hui sud13c24a2017-04-07 16:13:07 -0700289 palette_delta_encoding
Nathan E. Egge24f1a902017-02-14 13:29:44 -0500290 rawbits
Timothy B. Terriberryb1c57602017-02-16 10:53:39 -0800291 ec_smallmul
Yushin Cho77bba8d2016-11-04 16:36:56 -0700292 pvq
Luc Trudeauf8164152017-04-11 16:20:51 -0400293 cfl
Rostislav Pehlivanov002e7b72017-02-15 19:45:54 +0000294 xiphrc
Monty Montgomerycb55dad2017-07-11 16:59:52 -0400295 dct_only
Monty Montgomery02078a32017-07-11 21:22:29 -0400296 daala_dct4
Monty Montgomerycf18fe42017-07-11 21:33:25 -0400297 daala_dct8
Monty Montgomerycb9c1c52017-07-17 18:15:30 -0400298 daala_dct16
Monty Montgomery2cb52ba2017-07-17 18:27:27 -0400299 daala_dct32
Monty Montgomerya4e245a2017-07-22 00:48:31 -0400300 daala_dct64
Jingning Han32658e22016-08-19 10:10:14 -0700301 cb4x4
Jingning Han282f4112017-02-22 14:51:04 -0800302 chroma_2x2
Jingning Hane49c0792017-04-18 10:20:38 -0700303 chroma_sub8x8
Arild Fuldseth842e9b02016-09-02 13:00:05 +0200304 frame_size
Arild Fuldseth07441162016-08-15 15:07:52 +0200305 delta_q
Fangwen Fu6160df22017-04-24 09:45:51 -0700306 ext_delta_q
Angie Chiang8c2dc6f2016-10-20 09:19:01 -0700307 adapt_scan
Arild Fuldseth7acfabb2016-08-26 14:08:58 +0200308 filter_7bit
Ryan Lei15149482016-10-25 18:48:43 -0700309 parallel_deblocking
Ryan Lei9b02b0e2017-01-30 15:52:20 -0800310 loopfiltering_across_tiles
Fangwen Fu8d164de2016-12-14 13:40:54 -0800311 tempmv_signaling
Angie Chiang2b101282016-11-01 15:50:43 -0700312 rd_debug
Arild Fuldseth (arilfuld)5114b7b2016-11-09 13:32:54 +0100313 reference_buffer
iole moccagattaf25a4cf2016-11-11 23:57:57 -0800314 coef_interleave
Debargha Mukherjeeb878d812016-12-12 11:55:38 -0800315 entropy_stats
316 masked_tx
Fangwen Fu7b9f2b32017-01-17 14:01:52 -0800317 dependent_horztiles
Yushin Chob7b60c52017-07-14 16:18:52 -0700318 dist_8x8
Zoe Liu70ae8f02017-02-01 09:17:08 -0800319 tripred
Fangwen Fu33bcd112017-02-07 16:42:41 -0800320 palette_throughput
Zoe Liub05e5d12017-02-07 14:32:53 -0800321 ref_adapt
Angie Chiangc21acce2017-02-23 16:15:37 -0800322 lv_map
Angie Chiangcd9b03f2017-04-16 13:37:13 -0700323 txk_sel
zhipin dengeb019b82017-02-17 17:49:03 +0800324 mv_compress
Fergus Simpson6ee201d2017-03-13 15:00:52 -0700325 frame_superres
Thomas Daviese60ce832017-03-21 10:31:03 +0000326 new_multisymbol
Zoe Liu5b55c882017-04-12 16:51:40 -0700327 compound_singleref
James Zern3d56e262017-04-26 12:01:14 -0700328 aom_qm
Arild Fuldseth (arilfuld)78bfc282017-05-24 12:06:35 +0200329 one_sided_compound
Zoe Liuc082bbc2017-05-17 13:31:37 -0700330 ext_comp_refs
Urvang Joshie6ca8e82017-03-15 14:57:41 -0700331 smooth_hv
Zoe Liue1787b92017-05-24 14:44:00 -0700332 var_refs
Urvang Joshi766a3892017-03-31 14:44:47 -0700333 rect_intra_pred
Lester Lu46fd1a02017-06-12 16:00:45 -0700334 lgt
Yue Chen536e5522017-06-12 13:21:01 -0700335 sbl_symbol
Wei-Ting Lin9c6f8542017-06-23 09:26:36 -0700336 ncobmc_adapt_weight
Todd Nguyen302d0972017-06-16 16:16:29 -0700337 bgsprite
Nathan E. Eggea33304f2017-06-28 20:48:34 -0400338 var_tx_no_tx_mode
Sarah Parkerfd5ab962017-07-10 16:03:55 -0700339 mrc_tx
Cheng Chen9050c9d2017-06-14 17:58:16 -0700340 lpf_direct
Cheng Chen13fc8192017-08-19 11:49:28 -0700341 loopfilter_level
Thomas Daededa4d8b92017-06-05 15:44:14 -0700342 no_frame_context_signaling
Angie Chiangad653a32017-07-31 15:30:58 -0700343 txmg
RogerZhoucc5d35d2017-08-07 22:20:15 -0700344 hash_me
Tom Finegan01d43e12017-08-17 09:21:42 -0700345 colorspace_headers
Jingning Hanc4fcd622017-08-21 12:44:10 -0700346 mfmv
Jingning Handca98182017-08-21 12:44:58 -0700347 jnt_comp
John Koleszar0952acb2010-06-01 11:14:25 -0400348"
John Koleszar0ea50ce2010-05-18 11:58:33 -0400349CONFIG_LIST="
James Zernaaccf652015-02-05 19:31:38 -0800350 dependency_tracking
John Koleszar0ea50ce2010-05-18 11:58:33 -0400351 external_build
352 install_docs
353 install_bins
354 install_libs
355 install_srcs
356 debug
357 gprof
358 gcov
359 rvct
360 gcc
361 msvs
362 pic
363 big_endian
364
365 codec_srcs
366 debug_libs
John Koleszar0ea50ce2010-05-18 11:58:33 -0400367
John Koleszar0ea50ce2010-05-18 11:58:33 -0400368 runtime_cpu_detect
369 postproc
John Koleszar0ea50ce2010-05-18 11:58:33 -0400370 multithread
Yaowu Xu57ad1892011-04-29 09:37:59 -0700371 internal_stats
John Koleszar0ea50ce2010-05-18 11:58:33 -0400372 ${CODECS}
373 ${CODEC_FAMILIES}
John Koleszar0ea50ce2010-05-18 11:58:33 -0400374 static_msvcrt
375 spatial_resampling
376 realtime_only
John Koleszar7aa97a32010-06-03 10:29:04 -0400377 shared
James Zern495b2412011-07-25 15:40:36 -0700378 static
John Koleszarf9b2ca52010-09-21 10:06:41 -0400379 small
Fritz Koenig647df002010-11-04 16:03:36 -0700380 postproc_visualizer
Tero Rintaluoma11a222f2011-01-24 11:21:40 +0200381 os_support
James Berrya0769f72012-05-02 17:25:58 -0400382 unit_tests
Vignesh Venkatasubramanian0ffa3832014-03-14 08:10:35 -0700383 webm_io
Deb Mukherjee47031c02014-05-16 18:52:01 -0700384 libyuv
Michael Bebenita6048d052016-08-25 14:40:54 -0700385 accounting
Nathan E. Egge2cf03b12017-02-22 16:19:59 -0500386 inspection
Joshua Litta782d632013-11-15 12:29:26 -0800387 decode_perf_tests
Joshua Litt83b843f2014-07-21 10:57:16 -0700388 encode_perf_tests
Yaowu Xu0a2b25d2014-07-29 13:40:55 -0700389 coefficient_range_checking
Sebastien Alaiwan98378132017-01-04 11:23:09 +0100390 lowbitdepth
Sebastien Alaiwan71e87842017-04-12 16:03:28 +0200391 highbitdepth
John Koleszar0952acb2010-06-01 11:14:25 -0400392 experimental
Jim Bankoski943e4322014-07-17 06:31:50 -0700393 size_limit
John Koleszar0952acb2010-06-01 11:14:25 -0400394 ${EXPERIMENT_LIST}
Nathan E. Egge1a0d5ea2017-02-22 11:17:00 -0500395 analyzer
John Koleszar0ea50ce2010-05-18 11:58:33 -0400396"
397CMDLINE_SELECT="
James Zernaaccf652015-02-05 19:31:38 -0800398 dependency_tracking
John Koleszard9847632012-12-10 12:07:59 -0800399 external_build
John Koleszar0ea50ce2010-05-18 11:58:33 -0400400 extra_warnings
401 werror
402 install_docs
403 install_bins
404 install_libs
405 install_srcs
406 debug
407 gprof
408 gcov
409 pic
410 optimizations
411 ccache
412 runtime_cpu_detect
Martin Storsjo132422d2013-05-13 01:16:09 +0300413 thumb
John Koleszar0ea50ce2010-05-18 11:58:33 -0400414
415 libs
416 examples
Nathan E. Eggef4fa01e2016-10-11 14:20:20 -0400417 analyzer
Johannec658122012-10-10 09:16:37 -0700418 docs
Yue Chenc8b38b02017-01-05 11:58:32 -0800419 tools
John Koleszar0ea50ce2010-05-18 11:58:33 -0400420 libc
Jan Kratochvil7be093e2010-10-05 19:15:08 +0200421 as
Jim Bankoski943e4322014-07-17 06:31:50 -0700422 size_limit
John Koleszar0ea50ce2010-05-18 11:58:33 -0400423 codec_srcs
424 debug_libs
John Koleszar0ea50ce2010-05-18 11:58:33 -0400425
John Koleszar0ea50ce2010-05-18 11:58:33 -0400426 postproc
John Koleszar0ea50ce2010-05-18 11:58:33 -0400427 multithread
Yaowu Xu57ad1892011-04-29 09:37:59 -0700428 internal_stats
John Koleszar0ea50ce2010-05-18 11:58:33 -0400429 ${CODECS}
430 ${CODEC_FAMILIES}
431 static_msvcrt
John Koleszar0ea50ce2010-05-18 11:58:33 -0400432 spatial_resampling
433 realtime_only
John Koleszar7aa97a32010-06-03 10:29:04 -0400434 shared
James Zern495b2412011-07-25 15:40:36 -0700435 static
John Koleszarf9b2ca52010-09-21 10:06:41 -0400436 small
Fritz Koenig647df002010-11-04 16:03:36 -0700437 postproc_visualizer
James Berrya0769f72012-05-02 17:25:58 -0400438 unit_tests
Vignesh Venkatasubramanian0ffa3832014-03-14 08:10:35 -0700439 webm_io
Deb Mukherjee47031c02014-05-16 18:52:01 -0700440 libyuv
Michael Bebenita6048d052016-08-25 14:40:54 -0700441 accounting
Nathan E. Egge2cf03b12017-02-22 16:19:59 -0500442 inspection
Joshua Litta782d632013-11-15 12:29:26 -0800443 decode_perf_tests
Joshua Litt83b843f2014-07-21 10:57:16 -0700444 encode_perf_tests
Yaowu Xu0a2b25d2014-07-29 13:40:55 -0700445 coefficient_range_checking
Sebastien Alaiwan98378132017-01-04 11:23:09 +0100446 lowbitdepth
Sebastien Alaiwan71e87842017-04-12 16:03:28 +0200447 highbitdepth
Jim Bankoskia5d11f22012-05-11 08:08:12 -0700448 experimental
anorkin76fb1262017-03-22 15:12:12 -0700449 colorspace_headers
John Koleszar0ea50ce2010-05-18 11:58:33 -0400450"
451
452process_cmdline() {
453 for opt do
454 optval="${opt#*=}"
455 case "$opt" in
Johann0146fa92016-06-10 14:59:26 -0700456 --disable-codecs)
457 for c in ${CODEC_FAMILIES}; do disable_codec $c; done
458 ;;
John Koleszar0952acb2010-06-01 11:14:25 -0400459 --enable-?*|--disable-?*)
460 eval `echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g'`
Johann1de5ba72016-06-17 14:25:23 -0700461 if is_in ${option} ${EXPERIMENT_LIST}; then
John Koleszar0952acb2010-06-01 11:14:25 -0400462 if enabled experimental; then
James Zernccb6bdc2013-08-21 19:00:08 -0700463 ${action}_feature $option
John Koleszar0952acb2010-06-01 11:14:25 -0400464 else
465 log_echo "Ignoring $opt -- not in experimental mode."
466 fi
Johann0146fa92016-06-10 14:59:26 -0700467 elif is_in ${option} "${CODECS} ${CODEC_FAMILIES}"; then
468 ${action}_codec ${option}
John Koleszar0952acb2010-06-01 11:14:25 -0400469 else
Yaowu Xu7793b382011-06-22 15:07:04 -0700470 process_common_cmdline $opt
John Koleszar0952acb2010-06-01 11:14:25 -0400471 fi
472 ;;
James Berrya0769f72012-05-02 17:25:58 -0400473 *) process_common_cmdline "$opt"
Yaowu Xu7793b382011-06-22 15:07:04 -0700474 ;;
John Koleszar0ea50ce2010-05-18 11:58:33 -0400475 esac
476 done
477}
478
479post_process_cmdline() {
KO Myung-Hun07fa6ad2014-07-22 11:09:27 +0900480 c=""
John Koleszar0ea50ce2010-05-18 11:58:33 -0400481
John Koleszar0ea50ce2010-05-18 11:58:33 -0400482 # Enable all detected codecs, if they haven't been disabled
483 for c in ${CODECS}; do soft_enable $c; done
484
485 # Enable the codec family if any component of that family is enabled
486 for c in ${CODECS}; do
James Zern42ab4012013-08-21 18:11:45 -0700487 enabled $c && enable_feature ${c%_*}
John Koleszar0ea50ce2010-05-18 11:58:33 -0400488 done
489
490 # Set the {en,de}coders variable if any algorithm in that class is enabled
491 for c in ${CODECS}; do
James Zern42ab4012013-08-21 18:11:45 -0700492 enabled ${c} && enable_feature ${c##*_}s
John Koleszar0ea50ce2010-05-18 11:58:33 -0400493 done
Sarah Parkerdaa4ba82016-08-18 13:03:35 -0700494
Urvang Joshi3abc2772017-02-21 16:40:16 -0800495 # Enable adopted experiments by default
Jingning Hane335c672017-03-27 12:03:48 -0700496 soft_enable cb4x4
Jingning Hanc9c193d2017-05-23 09:24:00 -0700497 soft_enable chroma_sub8x8
Thomas Daviesf31227d2016-11-23 10:35:38 +0000498 soft_enable filter_7bit
Thomas Davies95ae0d62016-11-23 10:37:38 +0000499 soft_enable reference_buffer
Thomas Davies0090c8f2016-11-22 15:32:11 +0000500 soft_enable delta_q
Sarah Parker81915f52017-03-13 12:39:55 -0700501 soft_enable rect_tx
Sarah Parkere3c61252017-04-21 18:00:43 -0700502 soft_enable global_motion
Sarah Parkerd7b83202017-04-21 18:05:51 -0700503 soft_enable ext_tx
Jean-Marc Valin7677d432017-03-23 17:19:16 -0400504 soft_enable cdef
hui su3dfe6082017-04-13 16:45:45 -0700505 soft_enable ext_intra
zhipin deng1c25c752017-04-14 20:52:46 +0800506 soft_enable mv_compress
Zoe Liu6eeea0e2017-04-19 08:49:49 -0700507 soft_enable ext_refs
Jingning Hanb14c1792017-04-20 15:10:29 -0700508 soft_enable dual_filter
Yue Chena67c6402017-04-27 16:14:19 -0700509 soft_enable motion_var
Debargha Mukherjee1cf0b7e2017-04-28 08:58:10 -0700510 soft_enable warped_motion
Fangwen Fu4e2df092017-05-01 16:58:38 -0700511 soft_enable ext_delta_q
Ryan Leid255f4c2017-05-04 15:17:50 -0700512 soft_enable loopfiltering_across_tiles
Timothy B. Terriberry15beef52017-05-05 16:41:18 -0700513 soft_enable ec_smallmul
Jingning Handfa296e2017-05-18 14:20:04 -0700514 soft_enable var_tx
Yue Chenf03907a2017-05-31 12:04:04 -0700515 soft_enable ext_inter
516 soft_enable wedge
517 soft_enable compound_segment
518 soft_enable interintra
Arild Fuldseth (arilfuld)1c29a762017-06-16 09:12:57 +0200519 soft_enable one_sided_compound
Zoe Liu3e362472017-08-28 09:59:41 -0700520 soft_enable ext_comp_refs
Urvang Joshibda59df2017-06-27 10:53:36 -0700521 soft_enable smooth_hv
Ryan Lei2c6ca5f2017-07-11 17:31:28 -0700522 soft_enable parallel_deblocking
Urvang Joshif99e9ed2017-07-11 12:11:57 -0700523 soft_enable rect_intra_pred
Angie Chiang71ef7c22017-07-26 12:08:21 -0700524 soft_enable convolve_round
Thomas Davies181fc082017-08-09 14:26:53 +0100525 soft_enable aom_qm
Sebastien Alaiwan98378132017-01-04 11:23:09 +0100526
Jingning Han8a379342017-07-03 21:54:18 +0000527 # Enable low-bitdepth pixel pipeline by default
528 soft_enable lowbitdepth
529
Fangwen Fu2d422fb2017-04-17 22:57:42 -0700530 soft_enable palette_throughput
Fangwen Fuf2889512017-05-08 22:12:56 -0700531 soft_enable tempmv_signaling
Nathan E. Eggef0481a52016-10-12 17:16:04 -0400532
Alex Converse242558a2016-10-10 10:44:59 -0700533 # Fix up experiment dependencies
Yushin Chocd4f4a22017-07-10 18:19:05 -0700534 enabled pvq && disable_feature chroma_2x2
Yushin Choe6c1f6b2017-05-27 12:34:26 -0700535 enabled pvq && disable_feature rect_tx
536 enabled pvq && disable_feature ext_tx
537 enabled pvq && disable_feature var_tx
Yushin Chocd4f4a22017-07-10 18:19:05 -0700538 enabled pvq && disable_feature highbitdepth
539 enabled pvq && disable_feature lgt
Sarah Parker5b8e6d22017-07-24 15:30:53 -0700540 enabled pvq && disable_feature mrc_tx
Sarah Parker6692a102017-08-18 12:14:20 -0700541 enabled lv_map && disable_feature mrc_tx
542 enabled supertx && disable_feature mrc_tx
543 enabled coef_interleave && disable_feature mrc_tx
Yushin Chof01b6cc2017-08-08 12:29:54 -0700544 enabled pvq && disable_feature palette_throughput
Sarah Parker33ef8832017-08-02 20:44:26 -0700545 enabled mrc_tx && enable_feature ext_tx
Sarah Parker6692a102017-08-18 12:14:20 -0700546 enabled mrc_tx && enable_feature var_tx
Fangwen Fu6160df22017-04-24 09:45:51 -0700547 enabled ext_delta_q && soft_enable delta_q
Angie Chiangcd9b03f2017-04-16 13:37:13 -0700548 enabled txk_sel && soft_enable lv_map
Angie Chiangf87d8372017-04-21 11:23:56 -0700549 enabled compound_round && soft_enable convolve_round
Joe Young12c0bc02017-04-09 08:12:14 -0700550 enabled intra_edge && enable_feature ext_intra
Timothy B. Terriberry47868072017-05-16 14:08:52 -0700551 enabled chroma_2x2 && disable_feature chroma_sub8x8
hui sub8a6fd62017-05-10 10:57:57 -0700552 enabled dpcm_intra && enable_feature ext_tx
Jingning Hanc9c193d2017-05-23 09:24:00 -0700553 enabled chroma_sub8x8 && enable_feature cb4x4
Zoe Liu85b66462017-04-20 14:28:19 -0700554 enabled compound_singleref && enable_feature ext_inter
Wei-Ting Lin9c6f8542017-06-23 09:26:36 -0700555 enabled warped_motion && disable_feature ncobmc_adapt_weight
556 enabled ncobmc_adapt_weight && enable_feature motion_var
Todd Nguyen302d0972017-06-16 16:16:29 -0700557 enabled bgsprite && enable_feature global_motion
Zoe Liub9cfa412017-08-15 11:07:37 -0700558 enabled ext_comp_refs && enable_feature ext_refs
Zoe Liu5a978832017-08-15 16:33:34 -0700559 enabled ext_comp_refs && enable_feature one_sided_compound
Yue Chend6bdd462017-07-19 16:05:43 -0700560 enabled rect_tx_ext && enable_feature rect_tx
Luc Trudeau6e1cd782017-06-21 13:52:36 -0400561 enabled cfl && enable_feature smooth_hv
Steinar Midtskogen59782122017-07-20 08:49:43 +0200562 enabled cdef_singlepass && enable_feature cdef
Urvang Joshie6ca8e82017-03-15 14:57:41 -0700563
Fergus Simpsonffbe8532017-05-03 18:06:23 -0700564 if ! enabled delta_q && enabled ext_delta_q; then
565 log_echo "ext_delta_q requires delta_q, so disabling ext_delta_q"
566 disable_feature ext_delta_q
567 fi
Nathan E. Egge476c63c2017-05-18 18:35:16 -0400568 if enabled rawbits && enabled ans; then
569 log_echo "rawbits requires not ans, so disabling rawbits"
Nathan E. Egge24f1a902017-02-14 13:29:44 -0500570 disable_feature rawbits
571 fi
Nathan E. Egge476c63c2017-05-18 18:35:16 -0400572 if enabled ec_smallmul && enabled ans; then
573 log_echo "ec_smallmul requires not ans, so disabling ec_smallmul"
Timothy B. Terriberryb1c57602017-02-16 10:53:39 -0800574 disable_feature ec_smallmul
575 fi
Monty Montgomerya4e245a2017-07-22 00:48:31 -0400576 if enabled daala_dct64; then
577 enable_feature tx64x64
578 fi
Monty Montgomery2cb52ba2017-07-17 18:27:27 -0400579 if enabled daala_dct4 ||
580 enabled daala_dct8 ||
581 enabled daala_dct16 ||
Monty Montgomerya4e245a2017-07-22 00:48:31 -0400582 enabled daala_dct32 ||
583 enabled daala_dct64; then
Monty Montgomerycf18fe42017-07-11 21:33:25 -0400584 disable_feature rect_tx
585 disable_feature var_tx
586 disable_feature lgt
587 enable_feature lowbitdepth
588 fi
Nathan E. Eggea33304f2017-06-28 20:48:34 -0400589 if enabled var_tx_no_tx_mode && ! enabled var_tx; then
590 log_echo "var_tx_no_tx_mode requires var_tx, so disabling var_tx_no_tx_mode"
591 disable_feature var_tx_no_tx_mode
592 fi
Rupert Swarbrick93c39e92017-07-12 11:11:02 +0100593 if enabled ext_partition_types; then
594 if enabled fp_mb_stats; then
595 log_echo "ext_partition_types not compatible with fp_mb_stats;"
596 log_echo "disabling fp_mb_stats"
597 disable_feature fp_mb_stats
598 fi
599 if enabled supertx; then
600 log_echo "ext_partition_types not compatible with supertx;"
601 log_echo "disabling supertx"
602 disable_feature supertx
603 fi
Rupert Swarbrick72678572017-08-02 12:05:26 +0100604 if ! enabled rect_tx; then
605 log_echo "ext_partition_types requires rect_tx;"
606 log_echo "enabling rect_tx;"
607 enable_feature rect_tx
608 fi
Rupert Swarbrick93c39e92017-07-12 11:11:02 +0100609 fi
Nathan E. Egge2693ca52017-02-22 16:23:02 -0500610 # Enable accounting and inspection when building the analyzer
611 if enabled analyzer; then
612 soft_enable accounting
613 soft_enable inspection
614 fi
John Koleszar0ea50ce2010-05-18 11:58:33 -0400615}
616
John Koleszar0ea50ce2010-05-18 11:58:33 -0400617process_targets() {
618 enabled child || write_common_config_banner
Yaowu Xuf883b422016-08-30 14:01:10 -0700619 write_common_target_config_h ${BUILD_PFX}aom_config.h
John Koleszar0ea50ce2010-05-18 11:58:33 -0400620 write_common_config_targets
John Koleszar0ea50ce2010-05-18 11:58:33 -0400621
622 # Calculate the default distribution name, based on the enabled features
KO Myung-Hun07fa6ad2014-07-22 11:09:27 +0900623 cf=""
Yaowu Xuf883b422016-08-30 14:01:10 -0700624 DIST_DIR=aom
John Koleszar0ea50ce2010-05-18 11:58:33 -0400625 for cf in $CODEC_FAMILIES; do
626 if enabled ${cf}_encoder && enabled ${cf}_decoder; then
627 DIST_DIR="${DIST_DIR}-${cf}"
628 elif enabled ${cf}_encoder; then
629 DIST_DIR="${DIST_DIR}-${cf}cx"
630 elif enabled ${cf}_decoder; then
631 DIST_DIR="${DIST_DIR}-${cf}dx"
632 fi
633 done
634 enabled debug_libs && DIST_DIR="${DIST_DIR}-debug"
635 enabled codec_srcs && DIST_DIR="${DIST_DIR}-src"
Tom Finegan0a4bc8d2017-03-08 11:02:08 -0800636 ! enabled postproc && DIST_DIR="${DIST_DIR}-nopost"
John Koleszar0ea50ce2010-05-18 11:58:33 -0400637 ! enabled multithread && DIST_DIR="${DIST_DIR}-nomt"
John Koleszar0ea50ce2010-05-18 11:58:33 -0400638 ! enabled install_docs && DIST_DIR="${DIST_DIR}-nodocs"
639 DIST_DIR="${DIST_DIR}-${tgt_isa}-${tgt_os}"
640 case "${tgt_os}" in
641 win*) enabled static_msvcrt && DIST_DIR="${DIST_DIR}mt" || DIST_DIR="${DIST_DIR}md"
642 DIST_DIR="${DIST_DIR}-${tgt_cc}"
643 ;;
644 esac
645 if [ -f "${source_path}/build/make/version.sh" ]; then
KO Myung-Hun07fa6ad2014-07-22 11:09:27 +0900646 ver=`"$source_path/build/make/version.sh" --bare "$source_path"`
John Koleszar0ea50ce2010-05-18 11:58:33 -0400647 DIST_DIR="${DIST_DIR}-${ver}"
Ralph Giles53e99872011-03-28 11:36:53 -0700648 VERSION_STRING=${ver}
John Koleszar7aa97a32010-06-03 10:29:04 -0400649 ver=${ver%%-*}
650 VERSION_PATCH=${ver##*.}
651 ver=${ver%.*}
652 VERSION_MINOR=${ver##*.}
653 ver=${ver#v}
654 VERSION_MAJOR=${ver%.*}
John Koleszar0ea50ce2010-05-18 11:58:33 -0400655 fi
John Koleszaree8bcb12010-05-24 10:16:44 -0400656 enabled child || cat <<EOF >> config.mk
Ralph Giles607f8422011-03-28 12:04:51 -0700657
658PREFIX=${prefix}
John Koleszaree8bcb12010-05-24 10:16:44 -0400659ifeq (\$(MAKECMDGOALS),dist)
John Koleszar670af3a2010-05-26 15:57:42 -0400660DIST_DIR?=${DIST_DIR}
John Koleszaree8bcb12010-05-24 10:16:44 -0400661else
John Koleszar670af3a2010-05-26 15:57:42 -0400662DIST_DIR?=\$(DESTDIR)${prefix}
John Koleszaree8bcb12010-05-24 10:16:44 -0400663endif
John Koleszar670af3a2010-05-26 15:57:42 -0400664LIBSUBDIR=${libdir##${prefix}/}
John Koleszar7aa97a32010-06-03 10:29:04 -0400665
Ralph Giles53e99872011-03-28 11:36:53 -0700666VERSION_STRING=${VERSION_STRING}
667
John Koleszar7aa97a32010-06-03 10:29:04 -0400668VERSION_MAJOR=${VERSION_MAJOR}
669VERSION_MINOR=${VERSION_MINOR}
670VERSION_PATCH=${VERSION_PATCH}
671
John Koleszar23d68a52010-06-22 09:53:23 -0400672CONFIGURE_ARGS=${CONFIGURE_ARGS}
John Koleszaree8bcb12010-05-24 10:16:44 -0400673EOF
John Koleszar0ea50ce2010-05-18 11:58:33 -0400674 enabled child || echo "CONFIGURE_ARGS?=${CONFIGURE_ARGS}" >> config.mk
675
676 #
677 # Write makefiles for all enabled targets
678 #
Yue Chenc8b38b02017-01-05 11:58:32 -0800679 for tgt in libs examples docs tools solution; do
KO Myung-Hun07fa6ad2014-07-22 11:09:27 +0900680 tgt_fn="$tgt-$toolchain.mk"
John Koleszar0ea50ce2010-05-18 11:58:33 -0400681
682 if enabled $tgt; then
683 echo "Creating makefiles for ${toolchain} ${tgt}"
Yaowu Xuf883b422016-08-30 14:01:10 -0700684 write_common_target_config_mk $tgt_fn ${BUILD_PFX}aom_config.h
John Koleszar0ea50ce2010-05-18 11:58:33 -0400685 #write_${tgt}_config
686 fi
687 done
688
689}
690
691process_detect() {
John Koleszar7aa97a32010-06-03 10:29:04 -0400692 if enabled shared; then
693 # Can only build shared libs on a subset of platforms. Doing this check
694 # here rather than at option parse time because the target auto-detect
695 # magic happens after the command line has been parsed.
Brion Vibber992e4b72016-05-02 12:41:59 -0400696 case "${tgt_os}" in
697 linux|os2|darwin*|iphonesimulator*)
698 # Supported platforms
699 ;;
700 *)
Mike Frysingerb4ab43f2012-08-14 14:24:28 -0400701 if enabled gnu; then
702 echo "--enable-shared is only supported on ELF; assuming this is OK"
703 else
Brion Vibber992e4b72016-05-02 12:41:59 -0400704 die "--enable-shared only supported on ELF, OS/2, and Darwin for now"
Mike Frysingerb4ab43f2012-08-14 14:24:28 -0400705 fi
Brion Vibber992e4b72016-05-02 12:41:59 -0400706 ;;
707 esac
John Koleszar7aa97a32010-06-03 10:29:04 -0400708 fi
John Koleszard9847632012-12-10 12:07:59 -0800709 if [ -z "$CC" ] || enabled external_build; then
John Koleszar0ea50ce2010-05-18 11:58:33 -0400710 echo "Bypassing toolchain for environment detection."
James Zern42ab4012013-08-21 18:11:45 -0700711 enable_feature external_build
John Koleszar0ea50ce2010-05-18 11:58:33 -0400712 check_header() {
713 log fake_check_header "$@"
714 header=$1
715 shift
716 var=`echo $header | sed 's/[^A-Za-z0-9_]/_/g'`
James Zern42ab4012013-08-21 18:11:45 -0700717 disable_feature $var
John Koleszard9847632012-12-10 12:07:59 -0800718 # Headers common to all environments
John Koleszar0ea50ce2010-05-18 11:58:33 -0400719 case $header in
720 stdio.h)
721 true;
722 ;;
723 *)
KO Myung-Hun07fa6ad2014-07-22 11:09:27 +0900724 result=false
John Koleszar0ea50ce2010-05-18 11:58:33 -0400725 for d in "$@"; do
726 [ -f "${d##-I}/$header" ] && result=true && break
727 done
728 ${result:-true}
James Zern42ab4012013-08-21 18:11:45 -0700729 esac && enable_feature $var
John Koleszard9847632012-12-10 12:07:59 -0800730
731 # Specialize windows and POSIX environments.
732 case $toolchain in
733 *-win*-*)
Johann3c921442015-12-17 16:51:59 -0800734 # Don't check for any headers in Windows builds.
735 false
736 ;;
John Koleszard9847632012-12-10 12:07:59 -0800737 *)
738 case $header in
John Koleszard9847632012-12-10 12:07:59 -0800739 pthread.h) true;;
John Koleszard9847632012-12-10 12:07:59 -0800740 unistd.h) true;;
741 *) false;;
James Zern42ab4012013-08-21 18:11:45 -0700742 esac && enable_feature $var
John Koleszard9847632012-12-10 12:07:59 -0800743 esac
744 enabled $var
John Koleszar0ea50ce2010-05-18 11:58:33 -0400745 }
746 check_ld() {
747 true
748 }
749 fi
750 check_header stdio.h || die "Unable to invoke compiler: ${CC} ${CFLAGS}"
751 check_ld <<EOF || die "Toolchain is unable to link executables"
752int main(void) {return 0;}
753EOF
754 # check system headers
John Koleszar0ea50ce2010-05-18 11:58:33 -0400755 check_header pthread.h
John Koleszard9847632012-12-10 12:07:59 -0800756 check_header unistd.h # for sysconf(3) and friends.
John Koleszar0ea50ce2010-05-18 11:58:33 -0400757
Yaowu Xuf883b422016-08-30 14:01:10 -0700758 check_header aom/aom_integer.h -I${source_path} && enable_feature aom_ports
James Zern66ee4402017-01-06 17:59:50 -0800759
760 check_ld <<EOF && enable_feature fexcept
761#define _GNU_SOURCE
762#include <fenv.h>
763int main(void) { (void)feenableexcept(FE_DIVBYZERO | FE_INVALID); return 0; }
764EOF
John Koleszar0ea50ce2010-05-18 11:58:33 -0400765}
766
767process_toolchain() {
768 process_common_toolchain
769
John Koleszar0ea50ce2010-05-18 11:58:33 -0400770 # Enable some useful compiler flags
771 if enabled gcc; then
772 enabled werror && check_add_cflags -Werror
773 check_add_cflags -Wall
John Koleszar0ea50ce2010-05-18 11:58:33 -0400774 check_add_cflags -Wdisabled-optimization
James Zerna9d98482016-07-22 13:13:56 -0700775 check_add_cflags -Wfloat-conversion
John Koleszar0ea50ce2010-05-18 11:58:33 -0400776 check_add_cflags -Wpointer-arith
777 check_add_cflags -Wtype-limits
Daniel Kang2f963912012-08-13 14:18:09 -0700778 check_add_cflags -Wvla
Attila Nagy14c9fce2012-04-27 13:41:58 +0300779 check_add_cflags -Wimplicit-function-declaration
780 check_add_cflags -Wuninitialized
Urvang Joshi3212dda2016-07-14 12:45:35 -0700781 check_add_cflags -Wunused
Urvang Joshid3a75762016-07-08 16:09:36 -0700782 check_add_cflags -Wsign-compare
James Zerncab708b2017-06-23 15:59:37 -0700783 check_add_cflags -Wstring-conversion
Urvang Joshicd8ab902016-10-28 12:32:06 -0700784 check_add_cflags -Wlogical-op
Debargha Mukherjeee75f7352017-01-24 16:11:16 -0800785 check_add_cflags -Wstack-usage=320000
Urvang Joshid71a2312016-07-14 12:33:48 -0700786 # Enabling the following warning (in combination with -Wunused above)
787 # for C++ generates errors in third_party code including googletest and
788 # libyuv. So enable it only for C code.
789 check_cflags "-Wextra" && add_cflags_only "-Wextra"
Urvang Joshi4145bf02016-10-17 14:53:33 -0700790 # Enabling the following warning for C++ generates some useless warnings
791 # about some function parameters shadowing class member function names.
792 # So, only enable this warning for C code.
793 check_cflags "-Wshadow" && add_cflags_only "-Wshadow"
Yaowu Xu4d90ae42016-02-05 09:35:34 -0800794 if enabled mips || [ -z "${INLINE}" ]; then
James Zern771d2762016-02-01 20:52:16 -0800795 enabled extra_warnings || check_add_cflags -Wno-unused-function
James Zern771d2762016-02-01 20:52:16 -0800796 fi
Alex Conversece32f702017-03-22 18:08:55 -0700797 # gtest makes heavy use of undefined pre-processor symbols
798 check_cflags "-Wundef" && add_cflags_only "-Wundef"
James Zern78f4d0c2017-04-27 15:38:28 -0700799 # Avoid this warning for third_party C++ sources. Some reorganization
800 # would be needed to apply this only to test/*.cc.
801 check_cflags -Wshorten-64-to-32 && add_cflags_only -Wshorten-64-to-32
John Koleszar0ea50ce2010-05-18 11:58:33 -0400802 fi
803
804 if enabled icc; then
805 enabled werror && check_add_cflags -Werror
806 check_add_cflags -Wall
807 check_add_cflags -Wpointer-arith
808
809 # ICC has a number of floating point optimizations that we disable
810 # in favor of deterministic output WRT to other compilers
811 add_cflags -fp-model precise
812 fi
813
Tom Finegan443e6ae2017-03-09 15:32:04 -0800814 if enabled analyzer; then
815 soft_enable wxwidgets
816 if ! wx-config --version > /dev/null; then
817 die "Couldn't find wx-config"
818 fi
819
820 add_cxxflags_only $(wx-config --cppflags)
821 add_extralibs $(wx-config --libs)
822 fi
823
John Koleszar0ea50ce2010-05-18 11:58:33 -0400824 # Enable extra, harmless warnings. These might provide additional insight
825 # to what the compiler is doing and why, but in general, but they shouldn't
826 # be treated as fatal, even if we're treating warnings as errors.
827 GCC_EXTRA_WARNINGS="
828 -Wdisabled-optimization
829 -Winline
830 "
831 enabled gcc && EXTRA_WARNINGS="${GCC_EXTRA_WARNINGS}"
832 RVCT_EXTRA_WARNINGS="
833 --remarks
834 "
835 enabled rvct && EXTRA_WARNINGS="${RVCT_EXTRA_WARNINGS}"
836 if enabled extra_warnings; then
837 for w in ${EXTRA_WARNINGS}; do
838 check_add_cflags ${w}
839 enabled gcc && enabled werror && check_add_cflags -Wno-error=${w}
840 done
841 fi
842
843 # ccache only really works on gcc toolchains
844 enabled gcc || soft_disable ccache
John Koleszar0ea50ce2010-05-18 11:58:33 -0400845
846 # Enable the postbuild target if building for visual studio.
847 case "$tgt_cc" in
James Zern42ab4012013-08-21 18:11:45 -0700848 vs*) enable_feature msvs
849 enable_feature solution
John Koleszar0ea50ce2010-05-18 11:58:33 -0400850 vs_version=${tgt_cc##vs}
James Zernf8876a22016-06-27 20:08:12 -0700851 VCPROJ_SFX=vcxproj
852 gen_vcproj_cmd=${source_path}/build/make/gen_msvs_vcxproj.sh
853 enabled werror && gen_vcproj_cmd="${gen_vcproj_cmd} --enable-werror"
John Koleszar0ea50ce2010-05-18 11:58:33 -0400854 all_targets="${all_targets} solution"
Ronald S. Bultjeaac73df2013-02-06 12:45:28 -0800855 INLINE="__forceinline"
John Koleszar0ea50ce2010-05-18 11:58:33 -0400856 ;;
857 esac
858
859 # Other toolchain specific defaults
Tom Finegan3d7063d2015-05-12 15:33:40 -0700860 case $toolchain in x86*) soft_enable postproc;; esac
Fritz Koenig647df002010-11-04 16:03:36 -0700861
Fritz Koenig692b1082010-11-10 14:51:49 -0800862 if enabled postproc_visualizer; then
863 enabled postproc || die "postproc_visualizer requires postproc to be enabled"
864 fi
John Koleszar2bf62c12012-05-22 11:51:14 -0700865
Johannb46d58a2013-01-18 11:31:22 -0800866 # Enable unit tests by default if we have a working C++ compiler.
Johannd6e80de2012-06-12 08:58:11 -0700867 case "$toolchain" in
868 *-vs*)
869 soft_enable unit_tests
Vignesh Venkatasubramanian2dcbf8c2014-03-19 11:56:02 -0700870 soft_enable webm_io
Deb Mukherjee47031c02014-05-16 18:52:01 -0700871 soft_enable libyuv
Johannd6e80de2012-06-12 08:58:11 -0700872 ;;
873 *-android-*)
Vignesh Venkatasubramanian4721f9e2014-04-29 00:03:01 -0700874 soft_enable webm_io
Deb Mukherjee47031c02014-05-16 18:52:01 -0700875 soft_enable libyuv
Johannd6e80de2012-06-12 08:58:11 -0700876 # GTestLog must be modified to use Android logging utilities.
877 ;;
Johanna1d929e2012-12-13 11:35:59 -0800878 *-darwin-*)
879 # iOS/ARM builds do not work with gtest. This does not match
880 # x86 targets.
881 ;;
Tom Finegan4e6c5552014-06-04 18:57:25 -0700882 *-iphonesimulator-*)
883 soft_enable webm_io
884 soft_enable libyuv
885 ;;
James Zerne4d2c252013-06-26 18:35:11 -0700886 *-win*)
887 # Some mingw toolchains don't have pthread available by default.
888 # Treat these more like visual studio where threading in gtest
889 # would be disabled for the same reason.
890 check_cxx "$@" <<EOF && soft_enable unit_tests
891int z;
892EOF
Vignesh Venkatasubramanian2dcbf8c2014-03-19 11:56:02 -0700893 check_cxx "$@" <<EOF && soft_enable webm_io
894int z;
895EOF
Deb Mukherjee47031c02014-05-16 18:52:01 -0700896 check_cxx "$@" <<EOF && soft_enable libyuv
897int z;
898EOF
James Zerne4d2c252013-06-26 18:35:11 -0700899 ;;
John Koleszar2bf62c12012-05-22 11:51:14 -0700900 *)
James Zernf2dc3822013-06-20 12:49:15 -0700901 enabled pthread_h && check_cxx "$@" <<EOF && soft_enable unit_tests
John Koleszar2bf62c12012-05-22 11:51:14 -0700902int z;
903EOF
Vignesh Venkatasubramanian2dcbf8c2014-03-19 11:56:02 -0700904 check_cxx "$@" <<EOF && soft_enable webm_io
905int z;
906EOF
Deb Mukherjee47031c02014-05-16 18:52:01 -0700907 check_cxx "$@" <<EOF && soft_enable libyuv
908int z;
909EOF
Johannd6e80de2012-06-12 08:58:11 -0700910 ;;
John Koleszar2bf62c12012-05-22 11:51:14 -0700911 esac
Vignesh Venkatasubramanian2dcbf8c2014-03-19 11:56:02 -0700912 # libwebm needs to be linked with C++ standard library
913 enabled webm_io && LD=${CXX}
James Zern43a34552015-08-26 20:28:26 -0700914
915 # append any user defined extra cflags
916 if [ -n "${extra_cflags}" ] ; then
917 check_add_cflags ${extra_cflags} || \
918 die "Requested extra CFLAGS '${extra_cflags}' not supported by compiler"
919 fi
Yaowu Xu7c514e22015-09-28 15:55:46 -0700920 if [ -n "${extra_cxxflags}" ]; then
921 check_add_cxxflags ${extra_cxxflags} || \
922 die "Requested extra CXXFLAGS '${extra_cxxflags}' not supported by compiler"
923 fi
John Koleszar0ea50ce2010-05-18 11:58:33 -0400924}
925
926
927##
928## END APPLICATION SPECIFIC CONFIGURATION
929##
930CONFIGURE_ARGS="$@"
931process "$@"
Yaowu Xuf883b422016-08-30 14:01:10 -0700932print_webm_license ${BUILD_PFX}aom_config.c "/*" " */"
933cat <<EOF >> ${BUILD_PFX}aom_config.c
934#include "aom/aom_codec.h"
John Koleszar0ea50ce2010-05-18 11:58:33 -0400935static const char* const cfg = "$CONFIGURE_ARGS";
Yaowu Xuf883b422016-08-30 14:01:10 -0700936const char *aom_codec_build_config(void) {return cfg;}
John Koleszar0ea50ce2010-05-18 11:58:33 -0400937EOF