blob: c0eae77b7cbd7a768ed940a475b16e3cb7924128 [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
Yushin Cho77bba8d2016-11-04 16:36:56 -0700291 pvq
Luc Trudeauf8164152017-04-11 16:20:51 -0400292 cfl
Rostislav Pehlivanov002e7b72017-02-15 19:45:54 +0000293 xiphrc
Monty Montgomerycb55dad2017-07-11 16:59:52 -0400294 dct_only
Nathan E. Egge4e884042017-09-13 12:05:29 -0400295 daala_tx
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
Soo-Chul Hana752d1d2017-09-08 11:21:25 -0400325 segment_zeromv
Fergus Simpson6ee201d2017-03-13 15:00:52 -0700326 frame_superres
Thomas Daviese60ce832017-03-21 10:31:03 +0000327 new_multisymbol
Zoe Liu5b55c882017-04-12 16:51:40 -0700328 compound_singleref
James Zern3d56e262017-04-26 12:01:14 -0700329 aom_qm
Arild Fuldseth (arilfuld)78bfc282017-05-24 12:06:35 +0200330 one_sided_compound
Zoe Liuc082bbc2017-05-17 13:31:37 -0700331 ext_comp_refs
Urvang Joshie6ca8e82017-03-15 14:57:41 -0700332 smooth_hv
Zoe Liue1787b92017-05-24 14:44:00 -0700333 var_refs
Urvang Joshi766a3892017-03-31 14:44:47 -0700334 rect_intra_pred
Lester Lu46fd1a02017-06-12 16:00:45 -0700335 lgt
Yue Chen536e5522017-06-12 13:21:01 -0700336 sbl_symbol
Wei-Ting Lin9c6f8542017-06-23 09:26:36 -0700337 ncobmc_adapt_weight
Todd Nguyen302d0972017-06-16 16:16:29 -0700338 bgsprite
Nathan E. Eggea33304f2017-06-28 20:48:34 -0400339 var_tx_no_tx_mode
Sarah Parkerfd5ab962017-07-10 16:03:55 -0700340 mrc_tx
Cheng Chen9050c9d2017-06-14 17:58:16 -0700341 lpf_direct
Cheng Chen13fc8192017-08-19 11:49:28 -0700342 loopfilter_level
Thomas Daededa4d8b92017-06-05 15:44:14 -0700343 no_frame_context_signaling
Angie Chiangad653a32017-07-31 15:30:58 -0700344 txmg
RogerZhoucc5d35d2017-08-07 22:20:15 -0700345 hash_me
Tom Finegan01d43e12017-08-17 09:21:42 -0700346 colorspace_headers
Jingning Hanc4fcd622017-08-21 12:44:10 -0700347 mfmv
Jingning Handca98182017-08-21 12:44:58 -0700348 jnt_comp
John Koleszar0952acb2010-06-01 11:14:25 -0400349"
John Koleszar0ea50ce2010-05-18 11:58:33 -0400350CONFIG_LIST="
James Zernaaccf652015-02-05 19:31:38 -0800351 dependency_tracking
John Koleszar0ea50ce2010-05-18 11:58:33 -0400352 external_build
353 install_docs
354 install_bins
355 install_libs
356 install_srcs
357 debug
358 gprof
359 gcov
360 rvct
361 gcc
362 msvs
363 pic
364 big_endian
365
366 codec_srcs
367 debug_libs
John Koleszar0ea50ce2010-05-18 11:58:33 -0400368
John Koleszar0ea50ce2010-05-18 11:58:33 -0400369 runtime_cpu_detect
370 postproc
John Koleszar0ea50ce2010-05-18 11:58:33 -0400371 multithread
Yaowu Xu57ad1892011-04-29 09:37:59 -0700372 internal_stats
John Koleszar0ea50ce2010-05-18 11:58:33 -0400373 ${CODECS}
374 ${CODEC_FAMILIES}
John Koleszar0ea50ce2010-05-18 11:58:33 -0400375 static_msvcrt
376 spatial_resampling
377 realtime_only
John Koleszar7aa97a32010-06-03 10:29:04 -0400378 shared
James Zern495b2412011-07-25 15:40:36 -0700379 static
John Koleszarf9b2ca52010-09-21 10:06:41 -0400380 small
Fritz Koenig647df002010-11-04 16:03:36 -0700381 postproc_visualizer
Tero Rintaluoma11a222f2011-01-24 11:21:40 +0200382 os_support
James Berrya0769f72012-05-02 17:25:58 -0400383 unit_tests
Vignesh Venkatasubramanian0ffa3832014-03-14 08:10:35 -0700384 webm_io
Deb Mukherjee47031c02014-05-16 18:52:01 -0700385 libyuv
Michael Bebenita6048d052016-08-25 14:40:54 -0700386 accounting
Nathan E. Egge2cf03b12017-02-22 16:19:59 -0500387 inspection
Joshua Litta782d632013-11-15 12:29:26 -0800388 decode_perf_tests
Joshua Litt83b843f2014-07-21 10:57:16 -0700389 encode_perf_tests
Yaowu Xu0a2b25d2014-07-29 13:40:55 -0700390 coefficient_range_checking
Sebastien Alaiwan98378132017-01-04 11:23:09 +0100391 lowbitdepth
Sebastien Alaiwan71e87842017-04-12 16:03:28 +0200392 highbitdepth
John Koleszar0952acb2010-06-01 11:14:25 -0400393 experimental
Jim Bankoski943e4322014-07-17 06:31:50 -0700394 size_limit
John Koleszar0952acb2010-06-01 11:14:25 -0400395 ${EXPERIMENT_LIST}
Nathan E. Egge1a0d5ea2017-02-22 11:17:00 -0500396 analyzer
John Koleszar0ea50ce2010-05-18 11:58:33 -0400397"
398CMDLINE_SELECT="
James Zernaaccf652015-02-05 19:31:38 -0800399 dependency_tracking
John Koleszard9847632012-12-10 12:07:59 -0800400 external_build
John Koleszar0ea50ce2010-05-18 11:58:33 -0400401 extra_warnings
402 werror
403 install_docs
404 install_bins
405 install_libs
406 install_srcs
407 debug
408 gprof
409 gcov
410 pic
411 optimizations
412 ccache
413 runtime_cpu_detect
Martin Storsjo132422d2013-05-13 01:16:09 +0300414 thumb
John Koleszar0ea50ce2010-05-18 11:58:33 -0400415
416 libs
417 examples
Nathan E. Eggef4fa01e2016-10-11 14:20:20 -0400418 analyzer
Johannec658122012-10-10 09:16:37 -0700419 docs
Yue Chenc8b38b02017-01-05 11:58:32 -0800420 tools
John Koleszar0ea50ce2010-05-18 11:58:33 -0400421 libc
Jan Kratochvil7be093e2010-10-05 19:15:08 +0200422 as
Jim Bankoski943e4322014-07-17 06:31:50 -0700423 size_limit
John Koleszar0ea50ce2010-05-18 11:58:33 -0400424 codec_srcs
425 debug_libs
John Koleszar0ea50ce2010-05-18 11:58:33 -0400426
John Koleszar0ea50ce2010-05-18 11:58:33 -0400427 postproc
John Koleszar0ea50ce2010-05-18 11:58:33 -0400428 multithread
Yaowu Xu57ad1892011-04-29 09:37:59 -0700429 internal_stats
John Koleszar0ea50ce2010-05-18 11:58:33 -0400430 ${CODECS}
431 ${CODEC_FAMILIES}
432 static_msvcrt
John Koleszar0ea50ce2010-05-18 11:58:33 -0400433 spatial_resampling
434 realtime_only
John Koleszar7aa97a32010-06-03 10:29:04 -0400435 shared
James Zern495b2412011-07-25 15:40:36 -0700436 static
John Koleszarf9b2ca52010-09-21 10:06:41 -0400437 small
Fritz Koenig647df002010-11-04 16:03:36 -0700438 postproc_visualizer
James Berrya0769f72012-05-02 17:25:58 -0400439 unit_tests
Vignesh Venkatasubramanian0ffa3832014-03-14 08:10:35 -0700440 webm_io
Deb Mukherjee47031c02014-05-16 18:52:01 -0700441 libyuv
Michael Bebenita6048d052016-08-25 14:40:54 -0700442 accounting
Nathan E. Egge2cf03b12017-02-22 16:19:59 -0500443 inspection
Joshua Litta782d632013-11-15 12:29:26 -0800444 decode_perf_tests
Joshua Litt83b843f2014-07-21 10:57:16 -0700445 encode_perf_tests
Yaowu Xu0a2b25d2014-07-29 13:40:55 -0700446 coefficient_range_checking
Sebastien Alaiwan98378132017-01-04 11:23:09 +0100447 lowbitdepth
Sebastien Alaiwan71e87842017-04-12 16:03:28 +0200448 highbitdepth
Jim Bankoskia5d11f22012-05-11 08:08:12 -0700449 experimental
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
Jingning Hane335c672017-03-27 12:03:48 -0700497 soft_enable cb4x4
Jingning Hanc9c193d2017-05-23 09:24:00 -0700498 soft_enable chroma_sub8x8
Thomas Daviesf31227d2016-11-23 10:35:38 +0000499 soft_enable filter_7bit
Thomas Davies95ae0d62016-11-23 10:37:38 +0000500 soft_enable reference_buffer
Thomas Davies0090c8f2016-11-22 15:32:11 +0000501 soft_enable delta_q
Sarah Parker81915f52017-03-13 12:39:55 -0700502 soft_enable rect_tx
Sarah Parkere3c61252017-04-21 18:00:43 -0700503 soft_enable global_motion
Sarah Parkerd7b83202017-04-21 18:05:51 -0700504 soft_enable ext_tx
Jean-Marc Valin7677d432017-03-23 17:19:16 -0400505 soft_enable cdef
hui su3dfe6082017-04-13 16:45:45 -0700506 soft_enable ext_intra
zhipin deng1c25c752017-04-14 20:52:46 +0800507 soft_enable mv_compress
Zoe Liu6eeea0e2017-04-19 08:49:49 -0700508 soft_enable ext_refs
Jingning Hanb14c1792017-04-20 15:10:29 -0700509 soft_enable dual_filter
Yue Chena67c6402017-04-27 16:14:19 -0700510 soft_enable motion_var
Debargha Mukherjee1cf0b7e2017-04-28 08:58:10 -0700511 soft_enable warped_motion
Fangwen Fu4e2df092017-05-01 16:58:38 -0700512 soft_enable ext_delta_q
Ryan Leid255f4c2017-05-04 15:17:50 -0700513 soft_enable loopfiltering_across_tiles
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
Yushin Cho255ff992017-09-12 12:52:57 -0700526 soft_enable dist_8x8
Sebastien Alaiwan98378132017-01-04 11:23:09 +0100527
Jingning Han8a379342017-07-03 21:54:18 +0000528 # Enable low-bitdepth pixel pipeline by default
529 soft_enable lowbitdepth
530
Fangwen Fu2d422fb2017-04-17 22:57:42 -0700531 soft_enable palette_throughput
Fangwen Fuf2889512017-05-08 22:12:56 -0700532 soft_enable tempmv_signaling
Nathan E. Eggef0481a52016-10-12 17:16:04 -0400533
Alex Converse242558a2016-10-10 10:44:59 -0700534 # Fix up experiment dependencies
Yushin Chocd4f4a22017-07-10 18:19:05 -0700535 enabled pvq && disable_feature chroma_2x2
Yushin Choe6c1f6b2017-05-27 12:34:26 -0700536 enabled pvq && disable_feature rect_tx
537 enabled pvq && disable_feature ext_tx
538 enabled pvq && disable_feature var_tx
Yushin Chocd4f4a22017-07-10 18:19:05 -0700539 enabled pvq && disable_feature highbitdepth
540 enabled pvq && disable_feature lgt
Sarah Parker5b8e6d22017-07-24 15:30:53 -0700541 enabled pvq && disable_feature mrc_tx
Sarah Parker6692a102017-08-18 12:14:20 -0700542 enabled lv_map && disable_feature mrc_tx
543 enabled supertx && disable_feature mrc_tx
544 enabled coef_interleave && disable_feature mrc_tx
Yushin Chof01b6cc2017-08-08 12:29:54 -0700545 enabled pvq && disable_feature palette_throughput
Sarah Parker33ef8832017-08-02 20:44:26 -0700546 enabled mrc_tx && enable_feature ext_tx
Sarah Parker6692a102017-08-18 12:14:20 -0700547 enabled mrc_tx && enable_feature var_tx
Fangwen Fu6160df22017-04-24 09:45:51 -0700548 enabled ext_delta_q && soft_enable delta_q
Angie Chiangcd9b03f2017-04-16 13:37:13 -0700549 enabled txk_sel && soft_enable lv_map
Angie Chiangf87d8372017-04-21 11:23:56 -0700550 enabled compound_round && soft_enable convolve_round
Joe Young12c0bc02017-04-09 08:12:14 -0700551 enabled intra_edge && enable_feature ext_intra
Timothy B. Terriberry47868072017-05-16 14:08:52 -0700552 enabled chroma_2x2 && disable_feature chroma_sub8x8
hui sub8a6fd62017-05-10 10:57:57 -0700553 enabled dpcm_intra && enable_feature ext_tx
Jingning Hanc9c193d2017-05-23 09:24:00 -0700554 enabled chroma_sub8x8 && enable_feature cb4x4
Zoe Liu85b66462017-04-20 14:28:19 -0700555 enabled compound_singleref && enable_feature ext_inter
Wei-Ting Lin9c6f8542017-06-23 09:26:36 -0700556 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. Egge4e884042017-09-13 12:05:29 -0400572 if enabled daala_tx; then
573 enable_feature daala_dct4
574 enable_feature daala_dct8
575 enable_feature daala_dct16
576 enable_feature daala_dct32
577 enable_feature daala_dct64
578 fi
Nathan E. Egge72e0f782017-09-13 12:01:26 -0400579 if enabled daala_dct64 && ! enabled tx64x64; then
580 log_echo "daala_dct64 requires tx64x64, so disabling daala_dct64"
581 disable_feature daala_dct64
Monty Montgomerya4e245a2017-07-22 00:48:31 -0400582 fi
Nathan E. Egge22fe4a12017-09-13 12:06:03 -0400583 if enabled daala_dct4 || enabled daala_dct8 || enabled daala_dct16 ||
584 enabled daala_dct32 || enabled daala_dct64; then
Monty Montgomerycf18fe42017-07-11 21:33:25 -0400585 disable_feature rect_tx
586 disable_feature var_tx
587 disable_feature lgt
588 enable_feature lowbitdepth
589 fi
Nathan E. Eggea33304f2017-06-28 20:48:34 -0400590 if enabled var_tx_no_tx_mode && ! enabled var_tx; then
591 log_echo "var_tx_no_tx_mode requires var_tx, so disabling var_tx_no_tx_mode"
592 disable_feature var_tx_no_tx_mode
593 fi
Rupert Swarbrick93c39e92017-07-12 11:11:02 +0100594 if enabled ext_partition_types; then
595 if enabled fp_mb_stats; then
596 log_echo "ext_partition_types not compatible with fp_mb_stats;"
597 log_echo "disabling fp_mb_stats"
598 disable_feature fp_mb_stats
599 fi
600 if enabled supertx; then
601 log_echo "ext_partition_types not compatible with supertx;"
602 log_echo "disabling supertx"
603 disable_feature supertx
604 fi
Rupert Swarbrick72678572017-08-02 12:05:26 +0100605 if ! enabled rect_tx; then
606 log_echo "ext_partition_types requires rect_tx;"
607 log_echo "enabling rect_tx;"
608 enable_feature rect_tx
609 fi
Rupert Swarbrick93c39e92017-07-12 11:11:02 +0100610 fi
Nathan E. Egge2693ca52017-02-22 16:23:02 -0500611 # Enable accounting and inspection when building the analyzer
612 if enabled analyzer; then
613 soft_enable accounting
614 soft_enable inspection
615 fi
John Koleszar0ea50ce2010-05-18 11:58:33 -0400616}
617
John Koleszar0ea50ce2010-05-18 11:58:33 -0400618process_targets() {
619 enabled child || write_common_config_banner
Yaowu Xuf883b422016-08-30 14:01:10 -0700620 write_common_target_config_h ${BUILD_PFX}aom_config.h
John Koleszar0ea50ce2010-05-18 11:58:33 -0400621 write_common_config_targets
John Koleszar0ea50ce2010-05-18 11:58:33 -0400622
623 # Calculate the default distribution name, based on the enabled features
KO Myung-Hun07fa6ad2014-07-22 11:09:27 +0900624 cf=""
Yaowu Xuf883b422016-08-30 14:01:10 -0700625 DIST_DIR=aom
John Koleszar0ea50ce2010-05-18 11:58:33 -0400626 for cf in $CODEC_FAMILIES; do
627 if enabled ${cf}_encoder && enabled ${cf}_decoder; then
628 DIST_DIR="${DIST_DIR}-${cf}"
629 elif enabled ${cf}_encoder; then
630 DIST_DIR="${DIST_DIR}-${cf}cx"
631 elif enabled ${cf}_decoder; then
632 DIST_DIR="${DIST_DIR}-${cf}dx"
633 fi
634 done
635 enabled debug_libs && DIST_DIR="${DIST_DIR}-debug"
636 enabled codec_srcs && DIST_DIR="${DIST_DIR}-src"
Tom Finegan0a4bc8d2017-03-08 11:02:08 -0800637 ! enabled postproc && DIST_DIR="${DIST_DIR}-nopost"
John Koleszar0ea50ce2010-05-18 11:58:33 -0400638 ! enabled multithread && DIST_DIR="${DIST_DIR}-nomt"
John Koleszar0ea50ce2010-05-18 11:58:33 -0400639 ! enabled install_docs && DIST_DIR="${DIST_DIR}-nodocs"
640 DIST_DIR="${DIST_DIR}-${tgt_isa}-${tgt_os}"
641 case "${tgt_os}" in
642 win*) enabled static_msvcrt && DIST_DIR="${DIST_DIR}mt" || DIST_DIR="${DIST_DIR}md"
643 DIST_DIR="${DIST_DIR}-${tgt_cc}"
644 ;;
645 esac
646 if [ -f "${source_path}/build/make/version.sh" ]; then
KO Myung-Hun07fa6ad2014-07-22 11:09:27 +0900647 ver=`"$source_path/build/make/version.sh" --bare "$source_path"`
John Koleszar0ea50ce2010-05-18 11:58:33 -0400648 DIST_DIR="${DIST_DIR}-${ver}"
Ralph Giles53e99872011-03-28 11:36:53 -0700649 VERSION_STRING=${ver}
John Koleszar7aa97a32010-06-03 10:29:04 -0400650 ver=${ver%%-*}
651 VERSION_PATCH=${ver##*.}
652 ver=${ver%.*}
653 VERSION_MINOR=${ver##*.}
654 ver=${ver#v}
655 VERSION_MAJOR=${ver%.*}
John Koleszar0ea50ce2010-05-18 11:58:33 -0400656 fi
John Koleszaree8bcb12010-05-24 10:16:44 -0400657 enabled child || cat <<EOF >> config.mk
Ralph Giles607f8422011-03-28 12:04:51 -0700658
659PREFIX=${prefix}
John Koleszaree8bcb12010-05-24 10:16:44 -0400660ifeq (\$(MAKECMDGOALS),dist)
John Koleszar670af3a2010-05-26 15:57:42 -0400661DIST_DIR?=${DIST_DIR}
John Koleszaree8bcb12010-05-24 10:16:44 -0400662else
John Koleszar670af3a2010-05-26 15:57:42 -0400663DIST_DIR?=\$(DESTDIR)${prefix}
John Koleszaree8bcb12010-05-24 10:16:44 -0400664endif
John Koleszar670af3a2010-05-26 15:57:42 -0400665LIBSUBDIR=${libdir##${prefix}/}
John Koleszar7aa97a32010-06-03 10:29:04 -0400666
Ralph Giles53e99872011-03-28 11:36:53 -0700667VERSION_STRING=${VERSION_STRING}
668
John Koleszar7aa97a32010-06-03 10:29:04 -0400669VERSION_MAJOR=${VERSION_MAJOR}
670VERSION_MINOR=${VERSION_MINOR}
671VERSION_PATCH=${VERSION_PATCH}
672
John Koleszar23d68a52010-06-22 09:53:23 -0400673CONFIGURE_ARGS=${CONFIGURE_ARGS}
John Koleszaree8bcb12010-05-24 10:16:44 -0400674EOF
John Koleszar0ea50ce2010-05-18 11:58:33 -0400675 enabled child || echo "CONFIGURE_ARGS?=${CONFIGURE_ARGS}" >> config.mk
676
677 #
678 # Write makefiles for all enabled targets
679 #
Yue Chenc8b38b02017-01-05 11:58:32 -0800680 for tgt in libs examples docs tools solution; do
KO Myung-Hun07fa6ad2014-07-22 11:09:27 +0900681 tgt_fn="$tgt-$toolchain.mk"
John Koleszar0ea50ce2010-05-18 11:58:33 -0400682
683 if enabled $tgt; then
684 echo "Creating makefiles for ${toolchain} ${tgt}"
Yaowu Xuf883b422016-08-30 14:01:10 -0700685 write_common_target_config_mk $tgt_fn ${BUILD_PFX}aom_config.h
John Koleszar0ea50ce2010-05-18 11:58:33 -0400686 #write_${tgt}_config
687 fi
688 done
689
690}
691
692process_detect() {
John Koleszar7aa97a32010-06-03 10:29:04 -0400693 if enabled shared; then
694 # Can only build shared libs on a subset of platforms. Doing this check
695 # here rather than at option parse time because the target auto-detect
696 # magic happens after the command line has been parsed.
Brion Vibber992e4b72016-05-02 12:41:59 -0400697 case "${tgt_os}" in
698 linux|os2|darwin*|iphonesimulator*)
699 # Supported platforms
700 ;;
701 *)
Mike Frysingerb4ab43f2012-08-14 14:24:28 -0400702 if enabled gnu; then
703 echo "--enable-shared is only supported on ELF; assuming this is OK"
704 else
Brion Vibber992e4b72016-05-02 12:41:59 -0400705 die "--enable-shared only supported on ELF, OS/2, and Darwin for now"
Mike Frysingerb4ab43f2012-08-14 14:24:28 -0400706 fi
Brion Vibber992e4b72016-05-02 12:41:59 -0400707 ;;
708 esac
John Koleszar7aa97a32010-06-03 10:29:04 -0400709 fi
John Koleszard9847632012-12-10 12:07:59 -0800710 if [ -z "$CC" ] || enabled external_build; then
John Koleszar0ea50ce2010-05-18 11:58:33 -0400711 echo "Bypassing toolchain for environment detection."
James Zern42ab4012013-08-21 18:11:45 -0700712 enable_feature external_build
John Koleszar0ea50ce2010-05-18 11:58:33 -0400713 check_header() {
714 log fake_check_header "$@"
715 header=$1
716 shift
717 var=`echo $header | sed 's/[^A-Za-z0-9_]/_/g'`
James Zern42ab4012013-08-21 18:11:45 -0700718 disable_feature $var
John Koleszard9847632012-12-10 12:07:59 -0800719 # Headers common to all environments
John Koleszar0ea50ce2010-05-18 11:58:33 -0400720 case $header in
721 stdio.h)
722 true;
723 ;;
724 *)
KO Myung-Hun07fa6ad2014-07-22 11:09:27 +0900725 result=false
John Koleszar0ea50ce2010-05-18 11:58:33 -0400726 for d in "$@"; do
727 [ -f "${d##-I}/$header" ] && result=true && break
728 done
729 ${result:-true}
James Zern42ab4012013-08-21 18:11:45 -0700730 esac && enable_feature $var
John Koleszard9847632012-12-10 12:07:59 -0800731
732 # Specialize windows and POSIX environments.
733 case $toolchain in
734 *-win*-*)
Johann3c921442015-12-17 16:51:59 -0800735 # Don't check for any headers in Windows builds.
736 false
737 ;;
John Koleszard9847632012-12-10 12:07:59 -0800738 *)
739 case $header in
John Koleszard9847632012-12-10 12:07:59 -0800740 pthread.h) true;;
John Koleszard9847632012-12-10 12:07:59 -0800741 unistd.h) true;;
742 *) false;;
James Zern42ab4012013-08-21 18:11:45 -0700743 esac && enable_feature $var
John Koleszard9847632012-12-10 12:07:59 -0800744 esac
745 enabled $var
John Koleszar0ea50ce2010-05-18 11:58:33 -0400746 }
747 check_ld() {
748 true
749 }
750 fi
751 check_header stdio.h || die "Unable to invoke compiler: ${CC} ${CFLAGS}"
752 check_ld <<EOF || die "Toolchain is unable to link executables"
753int main(void) {return 0;}
754EOF
755 # check system headers
John Koleszar0ea50ce2010-05-18 11:58:33 -0400756 check_header pthread.h
John Koleszard9847632012-12-10 12:07:59 -0800757 check_header unistd.h # for sysconf(3) and friends.
John Koleszar0ea50ce2010-05-18 11:58:33 -0400758
Yaowu Xuf883b422016-08-30 14:01:10 -0700759 check_header aom/aom_integer.h -I${source_path} && enable_feature aom_ports
James Zern66ee4402017-01-06 17:59:50 -0800760
761 check_ld <<EOF && enable_feature fexcept
762#define _GNU_SOURCE
763#include <fenv.h>
764int main(void) { (void)feenableexcept(FE_DIVBYZERO | FE_INVALID); return 0; }
765EOF
John Koleszar0ea50ce2010-05-18 11:58:33 -0400766}
767
768process_toolchain() {
769 process_common_toolchain
770
John Koleszar0ea50ce2010-05-18 11:58:33 -0400771 # Enable some useful compiler flags
772 if enabled gcc; then
773 enabled werror && check_add_cflags -Werror
774 check_add_cflags -Wall
John Koleszar0ea50ce2010-05-18 11:58:33 -0400775 check_add_cflags -Wdisabled-optimization
James Zerna9d98482016-07-22 13:13:56 -0700776 check_add_cflags -Wfloat-conversion
John Koleszar0ea50ce2010-05-18 11:58:33 -0400777 check_add_cflags -Wpointer-arith
778 check_add_cflags -Wtype-limits
Daniel Kang2f963912012-08-13 14:18:09 -0700779 check_add_cflags -Wvla
Attila Nagy14c9fce2012-04-27 13:41:58 +0300780 check_add_cflags -Wimplicit-function-declaration
781 check_add_cflags -Wuninitialized
Urvang Joshi3212dda2016-07-14 12:45:35 -0700782 check_add_cflags -Wunused
Urvang Joshid3a75762016-07-08 16:09:36 -0700783 check_add_cflags -Wsign-compare
James Zerncab708b2017-06-23 15:59:37 -0700784 check_add_cflags -Wstring-conversion
Urvang Joshicd8ab902016-10-28 12:32:06 -0700785 check_add_cflags -Wlogical-op
Debargha Mukherjeee75f7352017-01-24 16:11:16 -0800786 check_add_cflags -Wstack-usage=320000
Urvang Joshid71a2312016-07-14 12:33:48 -0700787 # Enabling the following warning (in combination with -Wunused above)
788 # for C++ generates errors in third_party code including googletest and
789 # libyuv. So enable it only for C code.
790 check_cflags "-Wextra" && add_cflags_only "-Wextra"
Urvang Joshi4145bf02016-10-17 14:53:33 -0700791 # Enabling the following warning for C++ generates some useless warnings
792 # about some function parameters shadowing class member function names.
793 # So, only enable this warning for C code.
794 check_cflags "-Wshadow" && add_cflags_only "-Wshadow"
Yaowu Xu4d90ae42016-02-05 09:35:34 -0800795 if enabled mips || [ -z "${INLINE}" ]; then
James Zern771d2762016-02-01 20:52:16 -0800796 enabled extra_warnings || check_add_cflags -Wno-unused-function
James Zern771d2762016-02-01 20:52:16 -0800797 fi
Alex Conversece32f702017-03-22 18:08:55 -0700798 # gtest makes heavy use of undefined pre-processor symbols
799 check_cflags "-Wundef" && add_cflags_only "-Wundef"
James Zern78f4d0c2017-04-27 15:38:28 -0700800 # Avoid this warning for third_party C++ sources. Some reorganization
801 # would be needed to apply this only to test/*.cc.
802 check_cflags -Wshorten-64-to-32 && add_cflags_only -Wshorten-64-to-32
John Koleszar0ea50ce2010-05-18 11:58:33 -0400803 fi
804
805 if enabled icc; then
806 enabled werror && check_add_cflags -Werror
807 check_add_cflags -Wall
808 check_add_cflags -Wpointer-arith
809
810 # ICC has a number of floating point optimizations that we disable
811 # in favor of deterministic output WRT to other compilers
812 add_cflags -fp-model precise
813 fi
814
Tom Finegan443e6ae2017-03-09 15:32:04 -0800815 if enabled analyzer; then
816 soft_enable wxwidgets
817 if ! wx-config --version > /dev/null; then
818 die "Couldn't find wx-config"
819 fi
820
821 add_cxxflags_only $(wx-config --cppflags)
822 add_extralibs $(wx-config --libs)
823 fi
824
John Koleszar0ea50ce2010-05-18 11:58:33 -0400825 # Enable extra, harmless warnings. These might provide additional insight
826 # to what the compiler is doing and why, but in general, but they shouldn't
827 # be treated as fatal, even if we're treating warnings as errors.
828 GCC_EXTRA_WARNINGS="
829 -Wdisabled-optimization
830 -Winline
831 "
832 enabled gcc && EXTRA_WARNINGS="${GCC_EXTRA_WARNINGS}"
833 RVCT_EXTRA_WARNINGS="
834 --remarks
835 "
836 enabled rvct && EXTRA_WARNINGS="${RVCT_EXTRA_WARNINGS}"
837 if enabled extra_warnings; then
838 for w in ${EXTRA_WARNINGS}; do
839 check_add_cflags ${w}
840 enabled gcc && enabled werror && check_add_cflags -Wno-error=${w}
841 done
842 fi
843
844 # ccache only really works on gcc toolchains
845 enabled gcc || soft_disable ccache
John Koleszar0ea50ce2010-05-18 11:58:33 -0400846
847 # Enable the postbuild target if building for visual studio.
848 case "$tgt_cc" in
James Zern42ab4012013-08-21 18:11:45 -0700849 vs*) enable_feature msvs
850 enable_feature solution
John Koleszar0ea50ce2010-05-18 11:58:33 -0400851 vs_version=${tgt_cc##vs}
James Zernf8876a22016-06-27 20:08:12 -0700852 VCPROJ_SFX=vcxproj
853 gen_vcproj_cmd=${source_path}/build/make/gen_msvs_vcxproj.sh
854 enabled werror && gen_vcproj_cmd="${gen_vcproj_cmd} --enable-werror"
John Koleszar0ea50ce2010-05-18 11:58:33 -0400855 all_targets="${all_targets} solution"
Ronald S. Bultjeaac73df2013-02-06 12:45:28 -0800856 INLINE="__forceinline"
John Koleszar0ea50ce2010-05-18 11:58:33 -0400857 ;;
858 esac
859
860 # Other toolchain specific defaults
Tom Finegan3d7063d2015-05-12 15:33:40 -0700861 case $toolchain in x86*) soft_enable postproc;; esac
Fritz Koenig647df002010-11-04 16:03:36 -0700862
Fritz Koenig692b1082010-11-10 14:51:49 -0800863 if enabled postproc_visualizer; then
864 enabled postproc || die "postproc_visualizer requires postproc to be enabled"
865 fi
John Koleszar2bf62c12012-05-22 11:51:14 -0700866
Johannb46d58a2013-01-18 11:31:22 -0800867 # Enable unit tests by default if we have a working C++ compiler.
Johannd6e80de2012-06-12 08:58:11 -0700868 case "$toolchain" in
869 *-vs*)
870 soft_enable unit_tests
Vignesh Venkatasubramanian2dcbf8c2014-03-19 11:56:02 -0700871 soft_enable webm_io
Deb Mukherjee47031c02014-05-16 18:52:01 -0700872 soft_enable libyuv
Johannd6e80de2012-06-12 08:58:11 -0700873 ;;
874 *-android-*)
Vignesh Venkatasubramanian4721f9e2014-04-29 00:03:01 -0700875 soft_enable webm_io
Deb Mukherjee47031c02014-05-16 18:52:01 -0700876 soft_enable libyuv
Johannd6e80de2012-06-12 08:58:11 -0700877 # GTestLog must be modified to use Android logging utilities.
878 ;;
Johanna1d929e2012-12-13 11:35:59 -0800879 *-darwin-*)
880 # iOS/ARM builds do not work with gtest. This does not match
881 # x86 targets.
882 ;;
Tom Finegan4e6c5552014-06-04 18:57:25 -0700883 *-iphonesimulator-*)
884 soft_enable webm_io
885 soft_enable libyuv
886 ;;
James Zerne4d2c252013-06-26 18:35:11 -0700887 *-win*)
888 # Some mingw toolchains don't have pthread available by default.
889 # Treat these more like visual studio where threading in gtest
890 # would be disabled for the same reason.
891 check_cxx "$@" <<EOF && soft_enable unit_tests
892int z;
893EOF
Vignesh Venkatasubramanian2dcbf8c2014-03-19 11:56:02 -0700894 check_cxx "$@" <<EOF && soft_enable webm_io
895int z;
896EOF
Deb Mukherjee47031c02014-05-16 18:52:01 -0700897 check_cxx "$@" <<EOF && soft_enable libyuv
898int z;
899EOF
James Zerne4d2c252013-06-26 18:35:11 -0700900 ;;
John Koleszar2bf62c12012-05-22 11:51:14 -0700901 *)
James Zernf2dc3822013-06-20 12:49:15 -0700902 enabled pthread_h && check_cxx "$@" <<EOF && soft_enable unit_tests
John Koleszar2bf62c12012-05-22 11:51:14 -0700903int z;
904EOF
Vignesh Venkatasubramanian2dcbf8c2014-03-19 11:56:02 -0700905 check_cxx "$@" <<EOF && soft_enable webm_io
906int z;
907EOF
Deb Mukherjee47031c02014-05-16 18:52:01 -0700908 check_cxx "$@" <<EOF && soft_enable libyuv
909int z;
910EOF
Johannd6e80de2012-06-12 08:58:11 -0700911 ;;
John Koleszar2bf62c12012-05-22 11:51:14 -0700912 esac
Vignesh Venkatasubramanian2dcbf8c2014-03-19 11:56:02 -0700913 # libwebm needs to be linked with C++ standard library
914 enabled webm_io && LD=${CXX}
James Zern43a34552015-08-26 20:28:26 -0700915
916 # append any user defined extra cflags
917 if [ -n "${extra_cflags}" ] ; then
918 check_add_cflags ${extra_cflags} || \
919 die "Requested extra CFLAGS '${extra_cflags}' not supported by compiler"
920 fi
Yaowu Xu7c514e22015-09-28 15:55:46 -0700921 if [ -n "${extra_cxxflags}" ]; then
922 check_add_cxxflags ${extra_cxxflags} || \
923 die "Requested extra CXXFLAGS '${extra_cxxflags}' not supported by compiler"
924 fi
John Koleszar0ea50ce2010-05-18 11:58:33 -0400925}
926
927
928##
929## END APPLICATION SPECIFIC CONFIGURATION
930##
931CONFIGURE_ARGS="$@"
932process "$@"
Yaowu Xuf883b422016-08-30 14:01:10 -0700933print_webm_license ${BUILD_PFX}aom_config.c "/*" " */"
934cat <<EOF >> ${BUILD_PFX}aom_config.c
935#include "aom/aom_codec.h"
John Koleszar0ea50ce2010-05-18 11:58:33 -0400936static const char* const cfg = "$CONFIGURE_ARGS";
Yaowu Xuf883b422016-08-30 14:01:10 -0700937const char *aom_codec_build_config(void) {return cfg;}
John Koleszar0ea50ce2010-05-18 11:58:33 -0400938EOF