blob: 93492fbe3087d7a6571977d1ca47bb8ad24a0cec [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
Yue Chen8a32e1a2017-05-12 13:00:44 -0700252 rect_tx_ext
Jingning Han6683a212017-01-30 12:51:07 -0800253 tpl_mv
Zhijie Yangf02f8ae2017-10-26 17:58:29 -0700254 short_filter
Jingning Han39775e12016-05-02 08:55:40 -0700255 dual_filter
Angie Chiangdbfec2a2017-02-01 15:04:59 -0800256 convolve_round
Angie Chiangf87d8372017-04-21 11:23:56 -0700257 compound_round
Debargha Mukherjeefe381482016-10-18 10:24:31 -0700258 tx64x64
Yaowu Xu5a27b3b2015-10-22 12:18:52 -0700259 ext_intra
hui suffcf4fb2016-10-17 16:14:27 -0700260 filter_intra
Joe Young12c0bc02017-04-09 08:12:14 -0700261 intra_edge
Joe Young3ca43bf2017-10-06 15:12:46 -0700262 ext_intra_mod
Alex Converse576f0652017-04-18 12:55:29 -0700263 intrabc
Sarah Parker867f6642016-05-05 13:41:24 -0700264 new_quant
Alex Converse9ffcb462015-12-16 11:16:32 -0800265 ans
Debargha Mukherjee6a5a08e2016-01-15 12:55:03 -0800266 loop_restoration
Ola Hugosson1e7f2d02017-09-22 21:36:26 +0200267 striped_loop_restoration
Debargha Mukherjee6a5a08e2016-01-15 12:55:03 -0800268 ext_partition
Julia Robson8bc8f272016-03-18 15:22:42 +0000269 ext_partition_types
Debargha Mukherjeede5bdca2017-09-22 09:48:41 -0700270 ext_partition_types_ab
Alex Converse55c6bde2017-01-12 15:55:31 -0800271 unpoison_partition_ctx
Debargha Mukherjee86088512016-03-08 07:17:29 -0800272 ext_tile
Yue Chenb2d26452017-01-11 16:29:19 -0800273 ncobmc
hui su0d103572017-03-01 17:58:01 -0800274 q_adapt_probs
Angie Chiang08a22a62017-07-17 17:29:17 -0700275 inter_stats_only
hui sud13c24a2017-04-07 16:13:07 -0700276 palette_delta_encoding
Nathan E. Egge24f1a902017-02-14 13:29:44 -0500277 rawbits
Jingning Han72c37c62017-10-05 09:37:29 -0700278 kf_ctx
Luc Trudeauf8164152017-04-11 16:20:51 -0400279 cfl
Rostislav Pehlivanov002e7b72017-02-15 19:45:54 +0000280 xiphrc
Monty Montgomerycb55dad2017-07-11 16:59:52 -0400281 dct_only
Nathan E. Egge4e884042017-09-13 12:05:29 -0400282 daala_tx
Nathan E. Eggee554f362017-10-04 14:44:38 -0400283 daala_tx4
284 daala_tx8
285 daala_tx16
286 daala_tx32
287 daala_tx64
Arild Fuldseth842e9b02016-09-02 13:00:05 +0200288 frame_size
Fangwen Fu6160df22017-04-24 09:45:51 -0700289 ext_delta_q
Angie Chiang8c2dc6f2016-10-20 09:19:01 -0700290 adapt_scan
Ryan Lei15149482016-10-25 18:48:43 -0700291 parallel_deblocking
Ola Hugosson4ce85212017-09-12 14:53:13 +0200292 deblock_13tap
Ryan Lei9b02b0e2017-01-30 15:52:20 -0800293 loopfiltering_across_tiles
Fangwen Fu8d164de2016-12-14 13:40:54 -0800294 tempmv_signaling
Angie Chiang2b101282016-11-01 15:50:43 -0700295 rd_debug
Arild Fuldseth (arilfuld)5114b7b2016-11-09 13:32:54 +0100296 reference_buffer
Debargha Mukherjeeb878d812016-12-12 11:55:38 -0800297 entropy_stats
298 masked_tx
Fangwen Fu7b9f2b32017-01-17 14:01:52 -0800299 dependent_horztiles
Yushin Chob7b60c52017-07-14 16:18:52 -0700300 dist_8x8
Fangwen Fu33bcd112017-02-07 16:42:41 -0800301 palette_throughput
Zoe Liub05e5d12017-02-07 14:32:53 -0800302 ref_adapt
Angie Chiangc21acce2017-02-23 16:15:37 -0800303 lv_map
Angie Chiangf12cc4a2017-08-28 15:42:33 -0700304 ctx1d
Angie Chiangcd9b03f2017-04-16 13:37:13 -0700305 txk_sel
zhipin dengeb019b82017-02-17 17:49:03 +0800306 mv_compress
Sarah Parker2b9ec2e2017-10-30 17:34:08 -0700307 segment_globalmv
Fergus Simpson6ee201d2017-03-13 15:00:52 -0700308 frame_superres
Thomas Daviese60ce832017-03-21 10:31:03 +0000309 new_multisymbol
Zoe Liu5b55c882017-04-12 16:51:40 -0700310 compound_singleref
James Zern3d56e262017-04-26 12:01:14 -0700311 aom_qm
Arild Fuldseth (arilfuld)78bfc282017-05-24 12:06:35 +0200312 one_sided_compound
Zoe Liuc082bbc2017-05-17 13:31:37 -0700313 ext_comp_refs
Urvang Joshie6ca8e82017-03-15 14:57:41 -0700314 smooth_hv
Lester Lu46fd1a02017-06-12 16:00:45 -0700315 lgt
Lester Lu432012f2017-08-17 14:39:29 -0700316 lgt_from_pred
Wei-Ting Lin9c6f8542017-06-23 09:26:36 -0700317 ncobmc_adapt_weight
Todd Nguyen302d0972017-06-16 16:16:29 -0700318 bgsprite
Nathan E. Eggea33304f2017-06-28 20:48:34 -0400319 var_tx_no_tx_mode
Sarah Parkerfd5ab962017-07-10 16:03:55 -0700320 mrc_tx
Cheng Chen9050c9d2017-06-14 17:58:16 -0700321 lpf_direct
Cheng Chen13fc8192017-08-19 11:49:28 -0700322 loopfilter_level
Thomas Daededa4d8b92017-06-05 15:44:14 -0700323 no_frame_context_signaling
Angie Chiangad653a32017-07-31 15:30:58 -0700324 txmg
Dominic Symesdb5d66f2017-08-18 18:11:34 +0200325 max_tile
RogerZhoucc5d35d2017-08-07 22:20:15 -0700326 hash_me
Tom Finegan01d43e12017-08-17 09:21:42 -0700327 colorspace_headers
Jingning Hanc4fcd622017-08-21 12:44:10 -0700328 mfmv
Jingning Han1033ca02017-09-29 07:58:48 -0700329 frame_marker
Jingning Handca98182017-08-21 12:44:58 -0700330 jnt_comp
Zoe Liu51f1b7d2017-10-06 08:39:04 -0700331 frame_sign_bias
Zoe Liua3c5b9d2017-10-02 16:55:59 -0700332 ext_skip
Soo-Chul Han65c00ae2017-09-07 13:12:35 -0400333 obu
Soo-Chul Han38427e82017-09-27 15:06:13 -0400334 add_4bytes_obusize
RogerZhou3b635242017-09-19 10:06:46 -0700335 amvr
Cheng Chenf572cd32017-08-25 18:34:51 -0700336 lpf_sb
Jingning Han1727fac2017-09-22 08:53:56 -0700337 opt_ref_mv
Yunqing Wangd1d511f2017-10-05 08:44:46 -0700338 tmv
Yunqing Wang97d6a372017-10-09 14:15:15 -0700339 ext_warped_motion
Urvang Joshi3d8bcb22017-10-09 12:18:59 -0700340 horzonly_frame_superres
Thomas Davies4822e142017-10-10 11:30:36 +0100341 simple_bwd_adapt
Dake Hea47cd6c2017-10-13 18:09:58 -0700342 eob_first
Debargha Mukherjeeb2147752017-11-01 07:00:45 -0700343 eighth_pel_mv_only
John Koleszar0952acb2010-06-01 11:14:25 -0400344"
John Koleszar0ea50ce2010-05-18 11:58:33 -0400345CONFIG_LIST="
James Zernaaccf652015-02-05 19:31:38 -0800346 dependency_tracking
John Koleszar0ea50ce2010-05-18 11:58:33 -0400347 external_build
348 install_docs
349 install_bins
350 install_libs
351 install_srcs
352 debug
353 gprof
354 gcov
355 rvct
356 gcc
357 msvs
358 pic
359 big_endian
360
361 codec_srcs
362 debug_libs
John Koleszar0ea50ce2010-05-18 11:58:33 -0400363
John Koleszar0ea50ce2010-05-18 11:58:33 -0400364 runtime_cpu_detect
365 postproc
John Koleszar0ea50ce2010-05-18 11:58:33 -0400366 multithread
Yaowu Xu57ad1892011-04-29 09:37:59 -0700367 internal_stats
John Koleszar0ea50ce2010-05-18 11:58:33 -0400368 ${CODECS}
369 ${CODEC_FAMILIES}
John Koleszar0ea50ce2010-05-18 11:58:33 -0400370 static_msvcrt
371 spatial_resampling
372 realtime_only
John Koleszar7aa97a32010-06-03 10:29:04 -0400373 shared
James Zern495b2412011-07-25 15:40:36 -0700374 static
John Koleszarf9b2ca52010-09-21 10:06:41 -0400375 small
Fritz Koenig647df002010-11-04 16:03:36 -0700376 postproc_visualizer
Tero Rintaluoma11a222f2011-01-24 11:21:40 +0200377 os_support
James Berrya0769f72012-05-02 17:25:58 -0400378 unit_tests
Vignesh Venkatasubramanian0ffa3832014-03-14 08:10:35 -0700379 webm_io
Deb Mukherjee47031c02014-05-16 18:52:01 -0700380 libyuv
Michael Bebenita6048d052016-08-25 14:40:54 -0700381 accounting
Nathan E. Egge2cf03b12017-02-22 16:19:59 -0500382 inspection
Joshua Litta782d632013-11-15 12:29:26 -0800383 decode_perf_tests
Joshua Litt83b843f2014-07-21 10:57:16 -0700384 encode_perf_tests
James Zern4ac9a602017-09-26 23:03:21 -0700385 bitstream_debug
Angie Chiang85e3b962017-10-01 16:04:43 -0700386 symbolrate
Yaowu Xu0a2b25d2014-07-29 13:40:55 -0700387 coefficient_range_checking
Sebastien Alaiwan98378132017-01-04 11:23:09 +0100388 lowbitdepth
Sebastien Alaiwan71e87842017-04-12 16:03:28 +0200389 highbitdepth
John Koleszar0952acb2010-06-01 11:14:25 -0400390 experimental
Jim Bankoski943e4322014-07-17 06:31:50 -0700391 size_limit
John Koleszar0952acb2010-06-01 11:14:25 -0400392 ${EXPERIMENT_LIST}
Nathan E. Egge1a0d5ea2017-02-22 11:17:00 -0500393 analyzer
John Koleszar0ea50ce2010-05-18 11:58:33 -0400394"
395CMDLINE_SELECT="
James Zernaaccf652015-02-05 19:31:38 -0800396 dependency_tracking
John Koleszard9847632012-12-10 12:07:59 -0800397 external_build
John Koleszar0ea50ce2010-05-18 11:58:33 -0400398 extra_warnings
399 werror
400 install_docs
401 install_bins
402 install_libs
403 install_srcs
404 debug
405 gprof
406 gcov
407 pic
408 optimizations
409 ccache
410 runtime_cpu_detect
Martin Storsjo132422d2013-05-13 01:16:09 +0300411 thumb
John Koleszar0ea50ce2010-05-18 11:58:33 -0400412
413 libs
414 examples
Nathan E. Eggef4fa01e2016-10-11 14:20:20 -0400415 analyzer
Johannec658122012-10-10 09:16:37 -0700416 docs
Yue Chenc8b38b02017-01-05 11:58:32 -0800417 tools
John Koleszar0ea50ce2010-05-18 11:58:33 -0400418 libc
Jan Kratochvil7be093e2010-10-05 19:15:08 +0200419 as
Jim Bankoski943e4322014-07-17 06:31:50 -0700420 size_limit
John Koleszar0ea50ce2010-05-18 11:58:33 -0400421 codec_srcs
422 debug_libs
John Koleszar0ea50ce2010-05-18 11:58:33 -0400423
John Koleszar0ea50ce2010-05-18 11:58:33 -0400424 postproc
John Koleszar0ea50ce2010-05-18 11:58:33 -0400425 multithread
Yaowu Xu57ad1892011-04-29 09:37:59 -0700426 internal_stats
John Koleszar0ea50ce2010-05-18 11:58:33 -0400427 ${CODECS}
428 ${CODEC_FAMILIES}
429 static_msvcrt
John Koleszar0ea50ce2010-05-18 11:58:33 -0400430 spatial_resampling
431 realtime_only
John Koleszar7aa97a32010-06-03 10:29:04 -0400432 shared
James Zern495b2412011-07-25 15:40:36 -0700433 static
John Koleszarf9b2ca52010-09-21 10:06:41 -0400434 small
Fritz Koenig647df002010-11-04 16:03:36 -0700435 postproc_visualizer
James Berrya0769f72012-05-02 17:25:58 -0400436 unit_tests
Vignesh Venkatasubramanian0ffa3832014-03-14 08:10:35 -0700437 webm_io
Deb Mukherjee47031c02014-05-16 18:52:01 -0700438 libyuv
Michael Bebenita6048d052016-08-25 14:40:54 -0700439 accounting
Nathan E. Egge2cf03b12017-02-22 16:19:59 -0500440 inspection
Joshua Litta782d632013-11-15 12:29:26 -0800441 decode_perf_tests
Joshua Litt83b843f2014-07-21 10:57:16 -0700442 encode_perf_tests
Yaowu Xu0a2b25d2014-07-29 13:40:55 -0700443 coefficient_range_checking
James Zern4ac9a602017-09-26 23:03:21 -0700444 bitstream_debug
Angie Chiang85e3b962017-10-01 16:04:43 -0700445 symbolrate
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
Johann388947b2017-09-29 13:41:23 -0700449 adopted_experiments
anorkin76fb1262017-03-22 15:12:12 -0700450 colorspace_headers
John Koleszar0ea50ce2010-05-18 11:58:33 -0400451"
452
453process_cmdline() {
454 for opt do
455 optval="${opt#*=}"
456 case "$opt" in
Johann0146fa92016-06-10 14:59:26 -0700457 --disable-codecs)
458 for c in ${CODEC_FAMILIES}; do disable_codec $c; done
459 ;;
John Koleszar0952acb2010-06-01 11:14:25 -0400460 --enable-?*|--disable-?*)
461 eval `echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g'`
Johann1de5ba72016-06-17 14:25:23 -0700462 if is_in ${option} ${EXPERIMENT_LIST}; then
John Koleszar0952acb2010-06-01 11:14:25 -0400463 if enabled experimental; then
James Zernccb6bdc2013-08-21 19:00:08 -0700464 ${action}_feature $option
John Koleszar0952acb2010-06-01 11:14:25 -0400465 else
466 log_echo "Ignoring $opt -- not in experimental mode."
467 fi
Johann0146fa92016-06-10 14:59:26 -0700468 elif is_in ${option} "${CODECS} ${CODEC_FAMILIES}"; then
469 ${action}_codec ${option}
John Koleszar0952acb2010-06-01 11:14:25 -0400470 else
Yaowu Xu7793b382011-06-22 15:07:04 -0700471 process_common_cmdline $opt
John Koleszar0952acb2010-06-01 11:14:25 -0400472 fi
473 ;;
James Berrya0769f72012-05-02 17:25:58 -0400474 *) process_common_cmdline "$opt"
Yaowu Xu7793b382011-06-22 15:07:04 -0700475 ;;
John Koleszar0ea50ce2010-05-18 11:58:33 -0400476 esac
477 done
478}
479
480post_process_cmdline() {
KO Myung-Hun07fa6ad2014-07-22 11:09:27 +0900481 c=""
John Koleszar0ea50ce2010-05-18 11:58:33 -0400482
John Koleszar0ea50ce2010-05-18 11:58:33 -0400483 # Enable all detected codecs, if they haven't been disabled
484 for c in ${CODECS}; do soft_enable $c; done
485
486 # Enable the codec family if any component of that family is enabled
487 for c in ${CODECS}; do
James Zern42ab4012013-08-21 18:11:45 -0700488 enabled $c && enable_feature ${c%_*}
John Koleszar0ea50ce2010-05-18 11:58:33 -0400489 done
490
491 # Set the {en,de}coders variable if any algorithm in that class is enabled
492 for c in ${CODECS}; do
James Zern42ab4012013-08-21 18:11:45 -0700493 enabled ${c} && enable_feature ${c##*_}s
John Koleszar0ea50ce2010-05-18 11:58:33 -0400494 done
Sarah Parkerdaa4ba82016-08-18 13:03:35 -0700495
Urvang Joshi3abc2772017-02-21 16:40:16 -0800496 # Enable adopted experiments by default
Johann388947b2017-09-29 13:41:23 -0700497 soft_enable adopted_experiments
498 if enabled adopted_experiments; then
Johann388947b2017-09-29 13:41:23 -0700499 soft_enable cdef
Steinar Midtskogence9ddab2017-10-31 09:35:50 +0000500 soft_enable cdef_singlepass
Johann388947b2017-09-29 13:41:23 -0700501 soft_enable ext_intra
502 soft_enable intra_edge
503 soft_enable mv_compress
Johann388947b2017-09-29 13:41:23 -0700504 soft_enable dual_filter
Johann388947b2017-09-29 13:41:23 -0700505 soft_enable one_sided_compound
Johann388947b2017-09-29 13:41:23 -0700506 soft_enable convolve_round
507 soft_enable aom_qm
508 soft_enable dist_8x8
Debargha Mukherjee6f03dcb2017-10-03 09:05:33 -0700509 soft_enable loop_restoration
Debargha Mukherjeeb3d7ee12017-10-03 09:23:10 -0700510 soft_enable ext_partition
511 soft_enable ext_partition_types
Johanndc186222017-10-16 09:58:09 -0700512 soft_enable new_multisymbol
Yi Luo783d7e12017-10-03 09:16:44 -0700513
514 # Provisional adopted
515 soft_enable reference_buffer
516 soft_enable loopfiltering_across_tiles
517 soft_enable palette_throughput
518 soft_enable smooth_hv
519 soft_enable tempmv_signaling
520 soft_enable ext_comp_refs
521 soft_enable ext_delta_q
522 soft_enable parallel_deblocking
Yaowu Xu6656a552017-10-30 07:55:39 -0700523 soft_enable simple_bwd_adapt
Cheng Chen9ac7a0f2017-10-17 20:36:46 -0700524 soft_enable loopfilter_level
Luc Trudeau0cab6862017-08-24 13:30:14 -0400525 soft_enable cfl
Ola Hugosson88f0dd62017-10-27 20:43:52 +0200526 soft_enable deblock_13tap
Jingning Han6b922352017-10-30 16:54:48 -0700527 soft_enable frame_marker
Jingning Han42e7a332017-10-30 16:56:07 -0700528 soft_enable kf_ctx
Johann388947b2017-09-29 13:41:23 -0700529 fi
Sebastien Alaiwan98378132017-01-04 11:23:09 +0100530
Jingning Han8a379342017-07-03 21:54:18 +0000531 # Enable low-bitdepth pixel pipeline by default
532 soft_enable lowbitdepth
533
Yi Luo783d7e12017-10-03 09:16:44 -0700534 # Enable LBD/HBD txfm consistency tool
535 soft_enable txmg
Nathan E. Eggef0481a52016-10-12 17:16:04 -0400536
Alex Converse242558a2016-10-10 10:44:59 -0700537 # Fix up experiment dependencies
Sarah Parker6692a102017-08-18 12:14:20 -0700538 enabled lv_map && disable_feature mrc_tx
Dake Hea47cd6c2017-10-13 18:09:58 -0700539 enabled eob_first && enable_feature lv_map
Angie Chiangcd9b03f2017-04-16 13:37:13 -0700540 enabled txk_sel && soft_enable lv_map
Angie Chiangf12cc4a2017-08-28 15:42:33 -0700541 enabled ctx1d && soft_enable lv_map
Angie Chiangf87d8372017-04-21 11:23:56 -0700542 enabled compound_round && soft_enable convolve_round
Joe Young3ca43bf2017-10-06 15:12:46 -0700543 enabled ext_intra_mod && enable_feature intra_edge
Joe Young12c0bc02017-04-09 08:12:14 -0700544 enabled intra_edge && enable_feature ext_intra
Zoe Liu5a978832017-08-15 16:33:34 -0700545 enabled ext_comp_refs && enable_feature one_sided_compound
Lester Lu432012f2017-08-17 14:39:29 -0700546 enabled lgt_from_pred && disable_feature mrc_tx
Luc Trudeau6e1cd782017-06-21 13:52:36 -0400547 enabled cfl && enable_feature smooth_hv
Steinar Midtskogen59782122017-07-20 08:49:43 +0200548 enabled cdef_singlepass && enable_feature cdef
Jingning Han1033ca02017-09-29 07:58:48 -0700549 enabled mfmv && enable_feature frame_marker
550 enabled jnt_comp && enable_feature frame_marker
Zoe Liu51f1b7d2017-10-06 08:39:04 -0700551 enabled frame_sign_bias && enable_feature frame_marker
Sebastien Alaiwanf601f212017-10-04 14:58:46 +0200552 enabled txmg && enable_feature highbitdepth
Zoe Liua3c5b9d2017-10-02 16:55:59 -0700553 enabled ext_skip && enable_feature frame_marker
Urvang Joshi3d8bcb22017-10-09 12:18:59 -0700554 enabled horzonly_frame_superres && enable_feature frame_superres
Cheng Chene5cfa6f2017-10-20 19:17:35 -0700555 enabled loopfilter_level && enable_feature parallel_deblocking
556 enabled loopfilter_level && enable_feature ext_delta_q
Urvang Joshie6ca8e82017-03-15 14:57:41 -0700557
Nathan E. Egge476c63c2017-05-18 18:35:16 -0400558 if enabled rawbits && enabled ans; then
559 log_echo "rawbits requires not ans, so disabling rawbits"
Nathan E. Egge24f1a902017-02-14 13:29:44 -0500560 disable_feature rawbits
561 fi
Nathan E. Egge4e884042017-09-13 12:05:29 -0400562 if enabled daala_tx; then
Nathan E. Eggee554f362017-10-04 14:44:38 -0400563 enable_feature daala_tx4
564 enable_feature daala_tx8
565 enable_feature daala_tx16
566 enable_feature daala_tx32
567 enable_feature daala_tx64
Nathan E. Egge4e884042017-09-13 12:05:29 -0400568 fi
Nathan E. Eggee554f362017-10-04 14:44:38 -0400569 if enabled daala_tx64 && ! enabled tx64x64; then
570 log_echo "daala_tx64 requires tx64x64, so disabling daala_tx64"
571 disable_feature daala_tx64
Monty Montgomerya4e245a2017-07-22 00:48:31 -0400572 fi
Nathan E. Eggee554f362017-10-04 14:44:38 -0400573 if enabled daala_tx4 || enabled daala_tx8 || enabled daala_tx16 ||
574 enabled daala_tx32 || enabled daala_tx64; then
Nathan E. Egge77ea41c2017-10-04 15:28:22 -0400575 disable_feature txmg
Monty Montgomerycf18fe42017-07-11 21:33:25 -0400576 disable_feature lgt
577 enable_feature lowbitdepth
578 fi
Rupert Swarbrick93c39e92017-07-12 11:11:02 +0100579 if enabled ext_partition_types; then
580 if enabled fp_mb_stats; then
581 log_echo "ext_partition_types not compatible with fp_mb_stats;"
582 log_echo "disabling fp_mb_stats"
583 disable_feature fp_mb_stats
584 fi
Rupert Swarbrick93c39e92017-07-12 11:11:02 +0100585 fi
Nathan E. Egge2693ca52017-02-22 16:23:02 -0500586 # Enable accounting and inspection when building the analyzer
587 if enabled analyzer; then
588 soft_enable accounting
589 soft_enable inspection
590 fi
RogerZhou3b635242017-09-19 10:06:46 -0700591 # Enable hash_me if amvr is enabled
592 if enabled amvr; then
593 log_echo "amvr requires hash_me"
594 enable_feature hash_me
595 fi
Ola Hugosson1e7f2d02017-09-22 21:36:26 +0200596
597 if enabled striped_loop_restoration && ! enabled loop_restoration ; then
598 log_echo "striped_loop_restoration requires loop_restoration"
599 log_echo "enable loop_restoration"
600 enable_feature loop_restoration
601 fi
602 if enabled striped_loop_restoration && enabled frame_superres ; then
603 log_echo "striped_loop_restoration not compatible with frame_superres"
604 log_echo "disabling striped_loop_restoration"
605 disable_feature striped_loop_restoration
606 fi
Cheng Chen9ac7a0f2017-10-17 20:36:46 -0700607 if enabled lpf_sb; then
608 log_echo "lpf_sb can't work with loopfilter_level yet."
609 log_echo "disabling loopfilter_level"
610 disable_feature loopfilter_level
611 fi
John Koleszar0ea50ce2010-05-18 11:58:33 -0400612}
613
John Koleszar0ea50ce2010-05-18 11:58:33 -0400614process_targets() {
615 enabled child || write_common_config_banner
Yaowu Xuf883b422016-08-30 14:01:10 -0700616 write_common_target_config_h ${BUILD_PFX}aom_config.h
John Koleszar0ea50ce2010-05-18 11:58:33 -0400617 write_common_config_targets
John Koleszar0ea50ce2010-05-18 11:58:33 -0400618
619 # Calculate the default distribution name, based on the enabled features
KO Myung-Hun07fa6ad2014-07-22 11:09:27 +0900620 cf=""
Yaowu Xuf883b422016-08-30 14:01:10 -0700621 DIST_DIR=aom
John Koleszar0ea50ce2010-05-18 11:58:33 -0400622 for cf in $CODEC_FAMILIES; do
623 if enabled ${cf}_encoder && enabled ${cf}_decoder; then
624 DIST_DIR="${DIST_DIR}-${cf}"
625 elif enabled ${cf}_encoder; then
626 DIST_DIR="${DIST_DIR}-${cf}cx"
627 elif enabled ${cf}_decoder; then
628 DIST_DIR="${DIST_DIR}-${cf}dx"
629 fi
630 done
631 enabled debug_libs && DIST_DIR="${DIST_DIR}-debug"
632 enabled codec_srcs && DIST_DIR="${DIST_DIR}-src"
Tom Finegan0a4bc8d2017-03-08 11:02:08 -0800633 ! enabled postproc && DIST_DIR="${DIST_DIR}-nopost"
John Koleszar0ea50ce2010-05-18 11:58:33 -0400634 ! enabled multithread && DIST_DIR="${DIST_DIR}-nomt"
John Koleszar0ea50ce2010-05-18 11:58:33 -0400635 ! enabled install_docs && DIST_DIR="${DIST_DIR}-nodocs"
636 DIST_DIR="${DIST_DIR}-${tgt_isa}-${tgt_os}"
637 case "${tgt_os}" in
638 win*) enabled static_msvcrt && DIST_DIR="${DIST_DIR}mt" || DIST_DIR="${DIST_DIR}md"
639 DIST_DIR="${DIST_DIR}-${tgt_cc}"
640 ;;
641 esac
642 if [ -f "${source_path}/build/make/version.sh" ]; then
KO Myung-Hun07fa6ad2014-07-22 11:09:27 +0900643 ver=`"$source_path/build/make/version.sh" --bare "$source_path"`
John Koleszar0ea50ce2010-05-18 11:58:33 -0400644 DIST_DIR="${DIST_DIR}-${ver}"
Ralph Giles53e99872011-03-28 11:36:53 -0700645 VERSION_STRING=${ver}
John Koleszar7aa97a32010-06-03 10:29:04 -0400646 ver=${ver%%-*}
647 VERSION_PATCH=${ver##*.}
648 ver=${ver%.*}
649 VERSION_MINOR=${ver##*.}
650 ver=${ver#v}
651 VERSION_MAJOR=${ver%.*}
John Koleszar0ea50ce2010-05-18 11:58:33 -0400652 fi
John Koleszaree8bcb12010-05-24 10:16:44 -0400653 enabled child || cat <<EOF >> config.mk
Ralph Giles607f8422011-03-28 12:04:51 -0700654
655PREFIX=${prefix}
John Koleszaree8bcb12010-05-24 10:16:44 -0400656ifeq (\$(MAKECMDGOALS),dist)
John Koleszar670af3a2010-05-26 15:57:42 -0400657DIST_DIR?=${DIST_DIR}
John Koleszaree8bcb12010-05-24 10:16:44 -0400658else
John Koleszar670af3a2010-05-26 15:57:42 -0400659DIST_DIR?=\$(DESTDIR)${prefix}
John Koleszaree8bcb12010-05-24 10:16:44 -0400660endif
John Koleszar670af3a2010-05-26 15:57:42 -0400661LIBSUBDIR=${libdir##${prefix}/}
John Koleszar7aa97a32010-06-03 10:29:04 -0400662
Ralph Giles53e99872011-03-28 11:36:53 -0700663VERSION_STRING=${VERSION_STRING}
664
John Koleszar7aa97a32010-06-03 10:29:04 -0400665VERSION_MAJOR=${VERSION_MAJOR}
666VERSION_MINOR=${VERSION_MINOR}
667VERSION_PATCH=${VERSION_PATCH}
668
John Koleszar23d68a52010-06-22 09:53:23 -0400669CONFIGURE_ARGS=${CONFIGURE_ARGS}
John Koleszaree8bcb12010-05-24 10:16:44 -0400670EOF
John Koleszar0ea50ce2010-05-18 11:58:33 -0400671 enabled child || echo "CONFIGURE_ARGS?=${CONFIGURE_ARGS}" >> config.mk
672
673 #
674 # Write makefiles for all enabled targets
675 #
Yue Chenc8b38b02017-01-05 11:58:32 -0800676 for tgt in libs examples docs tools solution; do
KO Myung-Hun07fa6ad2014-07-22 11:09:27 +0900677 tgt_fn="$tgt-$toolchain.mk"
John Koleszar0ea50ce2010-05-18 11:58:33 -0400678
679 if enabled $tgt; then
680 echo "Creating makefiles for ${toolchain} ${tgt}"
Yaowu Xuf883b422016-08-30 14:01:10 -0700681 write_common_target_config_mk $tgt_fn ${BUILD_PFX}aom_config.h
John Koleszar0ea50ce2010-05-18 11:58:33 -0400682 #write_${tgt}_config
683 fi
684 done
685
686}
687
688process_detect() {
John Koleszar7aa97a32010-06-03 10:29:04 -0400689 if enabled shared; then
690 # Can only build shared libs on a subset of platforms. Doing this check
691 # here rather than at option parse time because the target auto-detect
692 # magic happens after the command line has been parsed.
Brion Vibber992e4b72016-05-02 12:41:59 -0400693 case "${tgt_os}" in
694 linux|os2|darwin*|iphonesimulator*)
695 # Supported platforms
696 ;;
697 *)
Mike Frysingerb4ab43f2012-08-14 14:24:28 -0400698 if enabled gnu; then
699 echo "--enable-shared is only supported on ELF; assuming this is OK"
700 else
Brion Vibber992e4b72016-05-02 12:41:59 -0400701 die "--enable-shared only supported on ELF, OS/2, and Darwin for now"
Mike Frysingerb4ab43f2012-08-14 14:24:28 -0400702 fi
Brion Vibber992e4b72016-05-02 12:41:59 -0400703 ;;
704 esac
John Koleszar7aa97a32010-06-03 10:29:04 -0400705 fi
John Koleszard9847632012-12-10 12:07:59 -0800706 if [ -z "$CC" ] || enabled external_build; then
John Koleszar0ea50ce2010-05-18 11:58:33 -0400707 echo "Bypassing toolchain for environment detection."
James Zern42ab4012013-08-21 18:11:45 -0700708 enable_feature external_build
John Koleszar0ea50ce2010-05-18 11:58:33 -0400709 check_header() {
710 log fake_check_header "$@"
711 header=$1
712 shift
713 var=`echo $header | sed 's/[^A-Za-z0-9_]/_/g'`
James Zern42ab4012013-08-21 18:11:45 -0700714 disable_feature $var
John Koleszard9847632012-12-10 12:07:59 -0800715 # Headers common to all environments
John Koleszar0ea50ce2010-05-18 11:58:33 -0400716 case $header in
717 stdio.h)
718 true;
719 ;;
720 *)
KO Myung-Hun07fa6ad2014-07-22 11:09:27 +0900721 result=false
John Koleszar0ea50ce2010-05-18 11:58:33 -0400722 for d in "$@"; do
723 [ -f "${d##-I}/$header" ] && result=true && break
724 done
725 ${result:-true}
James Zern42ab4012013-08-21 18:11:45 -0700726 esac && enable_feature $var
John Koleszard9847632012-12-10 12:07:59 -0800727
728 # Specialize windows and POSIX environments.
729 case $toolchain in
730 *-win*-*)
Johann3c921442015-12-17 16:51:59 -0800731 # Don't check for any headers in Windows builds.
732 false
733 ;;
John Koleszard9847632012-12-10 12:07:59 -0800734 *)
735 case $header in
John Koleszard9847632012-12-10 12:07:59 -0800736 pthread.h) true;;
John Koleszard9847632012-12-10 12:07:59 -0800737 unistd.h) true;;
738 *) false;;
James Zern42ab4012013-08-21 18:11:45 -0700739 esac && enable_feature $var
John Koleszard9847632012-12-10 12:07:59 -0800740 esac
741 enabled $var
John Koleszar0ea50ce2010-05-18 11:58:33 -0400742 }
743 check_ld() {
744 true
745 }
746 fi
747 check_header stdio.h || die "Unable to invoke compiler: ${CC} ${CFLAGS}"
748 check_ld <<EOF || die "Toolchain is unable to link executables"
749int main(void) {return 0;}
750EOF
751 # check system headers
John Koleszar0ea50ce2010-05-18 11:58:33 -0400752 check_header pthread.h
John Koleszard9847632012-12-10 12:07:59 -0800753 check_header unistd.h # for sysconf(3) and friends.
John Koleszar0ea50ce2010-05-18 11:58:33 -0400754
Yaowu Xuf883b422016-08-30 14:01:10 -0700755 check_header aom/aom_integer.h -I${source_path} && enable_feature aom_ports
James Zern66ee4402017-01-06 17:59:50 -0800756
757 check_ld <<EOF && enable_feature fexcept
758#define _GNU_SOURCE
759#include <fenv.h>
760int main(void) { (void)feenableexcept(FE_DIVBYZERO | FE_INVALID); return 0; }
761EOF
John Koleszar0ea50ce2010-05-18 11:58:33 -0400762}
763
764process_toolchain() {
765 process_common_toolchain
766
John Koleszar0ea50ce2010-05-18 11:58:33 -0400767 # Enable some useful compiler flags
768 if enabled gcc; then
769 enabled werror && check_add_cflags -Werror
770 check_add_cflags -Wall
John Koleszar0ea50ce2010-05-18 11:58:33 -0400771 check_add_cflags -Wdisabled-optimization
James Zerna9d98482016-07-22 13:13:56 -0700772 check_add_cflags -Wfloat-conversion
John Koleszar0ea50ce2010-05-18 11:58:33 -0400773 check_add_cflags -Wpointer-arith
774 check_add_cflags -Wtype-limits
Daniel Kang2f963912012-08-13 14:18:09 -0700775 check_add_cflags -Wvla
Attila Nagy14c9fce2012-04-27 13:41:58 +0300776 check_add_cflags -Wimplicit-function-declaration
777 check_add_cflags -Wuninitialized
Urvang Joshi3212dda2016-07-14 12:45:35 -0700778 check_add_cflags -Wunused
Urvang Joshid3a75762016-07-08 16:09:36 -0700779 check_add_cflags -Wsign-compare
James Zerncab708b2017-06-23 15:59:37 -0700780 check_add_cflags -Wstring-conversion
Urvang Joshicd8ab902016-10-28 12:32:06 -0700781 check_add_cflags -Wlogical-op
Debargha Mukherjeee75f7352017-01-24 16:11:16 -0800782 check_add_cflags -Wstack-usage=320000
Urvang Joshid71a2312016-07-14 12:33:48 -0700783 # Enabling the following warning (in combination with -Wunused above)
784 # for C++ generates errors in third_party code including googletest and
785 # libyuv. So enable it only for C code.
786 check_cflags "-Wextra" && add_cflags_only "-Wextra"
Urvang Joshi4145bf02016-10-17 14:53:33 -0700787 # Enabling the following warning for C++ generates some useless warnings
788 # about some function parameters shadowing class member function names.
789 # So, only enable this warning for C code.
790 check_cflags "-Wshadow" && add_cflags_only "-Wshadow"
Yaowu Xu4d90ae42016-02-05 09:35:34 -0800791 if enabled mips || [ -z "${INLINE}" ]; then
James Zern771d2762016-02-01 20:52:16 -0800792 enabled extra_warnings || check_add_cflags -Wno-unused-function
James Zern771d2762016-02-01 20:52:16 -0800793 fi
Alex Conversece32f702017-03-22 18:08:55 -0700794 # gtest makes heavy use of undefined pre-processor symbols
795 check_cflags "-Wundef" && add_cflags_only "-Wundef"
James Zern78f4d0c2017-04-27 15:38:28 -0700796 # Avoid this warning for third_party C++ sources. Some reorganization
797 # would be needed to apply this only to test/*.cc.
798 check_cflags -Wshorten-64-to-32 && add_cflags_only -Wshorten-64-to-32
John Koleszar0ea50ce2010-05-18 11:58:33 -0400799 fi
800
801 if enabled icc; then
802 enabled werror && check_add_cflags -Werror
803 check_add_cflags -Wall
804 check_add_cflags -Wpointer-arith
805
806 # ICC has a number of floating point optimizations that we disable
807 # in favor of deterministic output WRT to other compilers
808 add_cflags -fp-model precise
809 fi
810
Tom Finegan443e6ae2017-03-09 15:32:04 -0800811 if enabled analyzer; then
812 soft_enable wxwidgets
813 if ! wx-config --version > /dev/null; then
814 die "Couldn't find wx-config"
815 fi
816
817 add_cxxflags_only $(wx-config --cppflags)
818 add_extralibs $(wx-config --libs)
819 fi
820
John Koleszar0ea50ce2010-05-18 11:58:33 -0400821 # Enable extra, harmless warnings. These might provide additional insight
822 # to what the compiler is doing and why, but in general, but they shouldn't
823 # be treated as fatal, even if we're treating warnings as errors.
824 GCC_EXTRA_WARNINGS="
825 -Wdisabled-optimization
826 -Winline
827 "
828 enabled gcc && EXTRA_WARNINGS="${GCC_EXTRA_WARNINGS}"
829 RVCT_EXTRA_WARNINGS="
830 --remarks
831 "
832 enabled rvct && EXTRA_WARNINGS="${RVCT_EXTRA_WARNINGS}"
833 if enabled extra_warnings; then
834 for w in ${EXTRA_WARNINGS}; do
835 check_add_cflags ${w}
836 enabled gcc && enabled werror && check_add_cflags -Wno-error=${w}
837 done
838 fi
839
840 # ccache only really works on gcc toolchains
841 enabled gcc || soft_disable ccache
John Koleszar0ea50ce2010-05-18 11:58:33 -0400842
843 # Enable the postbuild target if building for visual studio.
844 case "$tgt_cc" in
James Zern42ab4012013-08-21 18:11:45 -0700845 vs*) enable_feature msvs
846 enable_feature solution
John Koleszar0ea50ce2010-05-18 11:58:33 -0400847 vs_version=${tgt_cc##vs}
James Zernf8876a22016-06-27 20:08:12 -0700848 VCPROJ_SFX=vcxproj
849 gen_vcproj_cmd=${source_path}/build/make/gen_msvs_vcxproj.sh
850 enabled werror && gen_vcproj_cmd="${gen_vcproj_cmd} --enable-werror"
John Koleszar0ea50ce2010-05-18 11:58:33 -0400851 all_targets="${all_targets} solution"
Ronald S. Bultjeaac73df2013-02-06 12:45:28 -0800852 INLINE="__forceinline"
John Koleszar0ea50ce2010-05-18 11:58:33 -0400853 ;;
854 esac
855
856 # Other toolchain specific defaults
Tom Finegan3d7063d2015-05-12 15:33:40 -0700857 case $toolchain in x86*) soft_enable postproc;; esac
Fritz Koenig647df002010-11-04 16:03:36 -0700858
Fritz Koenig692b1082010-11-10 14:51:49 -0800859 if enabled postproc_visualizer; then
860 enabled postproc || die "postproc_visualizer requires postproc to be enabled"
861 fi
John Koleszar2bf62c12012-05-22 11:51:14 -0700862
Johannb46d58a2013-01-18 11:31:22 -0800863 # Enable unit tests by default if we have a working C++ compiler.
Johannd6e80de2012-06-12 08:58:11 -0700864 case "$toolchain" in
865 *-vs*)
866 soft_enable unit_tests
Vignesh Venkatasubramanian2dcbf8c2014-03-19 11:56:02 -0700867 soft_enable webm_io
Deb Mukherjee47031c02014-05-16 18:52:01 -0700868 soft_enable libyuv
Johannd6e80de2012-06-12 08:58:11 -0700869 ;;
870 *-android-*)
Vignesh Venkatasubramanian4721f9e2014-04-29 00:03:01 -0700871 soft_enable webm_io
Deb Mukherjee47031c02014-05-16 18:52:01 -0700872 soft_enable libyuv
Johannd6e80de2012-06-12 08:58:11 -0700873 # GTestLog must be modified to use Android logging utilities.
874 ;;
Johanna1d929e2012-12-13 11:35:59 -0800875 *-darwin-*)
876 # iOS/ARM builds do not work with gtest. This does not match
877 # x86 targets.
878 ;;
Tom Finegan4e6c5552014-06-04 18:57:25 -0700879 *-iphonesimulator-*)
880 soft_enable webm_io
881 soft_enable libyuv
882 ;;
James Zerne4d2c252013-06-26 18:35:11 -0700883 *-win*)
884 # Some mingw toolchains don't have pthread available by default.
885 # Treat these more like visual studio where threading in gtest
886 # would be disabled for the same reason.
887 check_cxx "$@" <<EOF && soft_enable unit_tests
888int z;
889EOF
Vignesh Venkatasubramanian2dcbf8c2014-03-19 11:56:02 -0700890 check_cxx "$@" <<EOF && soft_enable webm_io
891int z;
892EOF
Deb Mukherjee47031c02014-05-16 18:52:01 -0700893 check_cxx "$@" <<EOF && soft_enable libyuv
894int z;
895EOF
James Zerne4d2c252013-06-26 18:35:11 -0700896 ;;
John Koleszar2bf62c12012-05-22 11:51:14 -0700897 *)
James Zernf2dc3822013-06-20 12:49:15 -0700898 enabled pthread_h && check_cxx "$@" <<EOF && soft_enable unit_tests
John Koleszar2bf62c12012-05-22 11:51:14 -0700899int z;
900EOF
Vignesh Venkatasubramanian2dcbf8c2014-03-19 11:56:02 -0700901 check_cxx "$@" <<EOF && soft_enable webm_io
902int z;
903EOF
Deb Mukherjee47031c02014-05-16 18:52:01 -0700904 check_cxx "$@" <<EOF && soft_enable libyuv
905int z;
906EOF
Johannd6e80de2012-06-12 08:58:11 -0700907 ;;
John Koleszar2bf62c12012-05-22 11:51:14 -0700908 esac
Vignesh Venkatasubramanian2dcbf8c2014-03-19 11:56:02 -0700909 # libwebm needs to be linked with C++ standard library
910 enabled webm_io && LD=${CXX}
James Zern43a34552015-08-26 20:28:26 -0700911
912 # append any user defined extra cflags
913 if [ -n "${extra_cflags}" ] ; then
914 check_add_cflags ${extra_cflags} || \
915 die "Requested extra CFLAGS '${extra_cflags}' not supported by compiler"
916 fi
Yaowu Xu7c514e22015-09-28 15:55:46 -0700917 if [ -n "${extra_cxxflags}" ]; then
918 check_add_cxxflags ${extra_cxxflags} || \
919 die "Requested extra CXXFLAGS '${extra_cxxflags}' not supported by compiler"
920 fi
John Koleszar0ea50ce2010-05-18 11:58:33 -0400921}
922
923
924##
925## END APPLICATION SPECIFIC CONFIGURATION
926##
927CONFIGURE_ARGS="$@"
928process "$@"
Yaowu Xuf883b422016-08-30 14:01:10 -0700929print_webm_license ${BUILD_PFX}aom_config.c "/*" " */"
930cat <<EOF >> ${BUILD_PFX}aom_config.c
931#include "aom/aom_codec.h"
John Koleszar0ea50ce2010-05-18 11:58:33 -0400932static const char* const cfg = "$CONFIGURE_ARGS";
Yaowu Xuf883b422016-08-30 14:01:10 -0700933const char *aom_codec_build_config(void) {return cfg;}
John Koleszar0ea50ce2010-05-18 11:58:33 -0400934EOF