Upstream version 5.34.104.0
[platform/framework/web/crosswalk.git] / src / third_party / libvpx / source / libvpx / build / make / configure.sh
1 #!/bin/sh
2 ##
3 ##  configure.sh
4 ##
5 ##  This script is sourced by the main configure script and contains
6 ##  utility functions and other common bits that aren't strictly libvpx
7 ##  related.
8 ##
9 ##  This build system is based in part on the FFmpeg configure script.
10 ##
11
12
13 #
14 # Logging / Output Functions
15 #
16 die_unknown(){
17     echo "Unknown option \"$1\"."
18     echo "See $0 --help for available options."
19     clean_temp_files
20     exit 1
21 }
22
23
24 die() {
25     echo "$@"
26     echo
27     echo "Configuration failed. This could reflect a misconfiguration of your"
28     echo "toolchains, improper options selected, or another problem. If you"
29     echo "don't see any useful error messages above, the next step is to look"
30     echo "at the configure error log file ($logfile) to determine what"
31     echo "configure was trying to do when it died."
32     clean_temp_files
33     exit 1
34 }
35
36
37 log(){
38     echo "$@" >>$logfile
39 }
40
41
42 log_file(){
43     log BEGIN $1
44     pr -n -t $1 >>$logfile
45     log END $1
46 }
47
48
49 log_echo() {
50     echo "$@"
51     log "$@"
52 }
53
54
55 fwrite () {
56     outfile=$1
57     shift
58     echo "$@" >> ${outfile}
59 }
60
61
62 show_help_pre(){
63     for opt in ${CMDLINE_SELECT}; do
64         opt2=`echo $opt | sed -e 's;_;-;g'`
65         if enabled $opt; then
66             eval "toggle_${opt}=\"--disable-${opt2}\""
67         else
68             eval "toggle_${opt}=\"--enable-${opt2} \""
69         fi
70     done
71
72     cat <<EOF
73 Usage: configure [options]
74 Options:
75
76 Build options:
77   --help                      print this message
78   --log=yes|no|FILE           file configure log is written to [config.log]
79   --target=TARGET             target platform tuple [generic-gnu]
80   --cpu=CPU                   optimize for a specific cpu rather than a family
81   --extra-cflags=ECFLAGS      add ECFLAGS to CFLAGS [$CFLAGS]
82   ${toggle_extra_warnings}    emit harmless warnings (always non-fatal)
83   ${toggle_werror}            treat warnings as errors, if possible
84                               (not available with all compilers)
85   ${toggle_optimizations}     turn on/off compiler optimization flags
86   ${toggle_pic}               turn on/off Position Independent Code
87   ${toggle_ccache}            turn on/off compiler cache
88   ${toggle_debug}             enable/disable debug mode
89   ${toggle_gprof}             enable/disable gprof profiling instrumentation
90   ${toggle_gcov}              enable/disable gcov coverage instrumentation
91   ${toggle_thumb}             enable/disable building arm assembly in thumb mode
92
93 Install options:
94   ${toggle_install_docs}      control whether docs are installed
95   ${toggle_install_bins}      control whether binaries are installed
96   ${toggle_install_libs}      control whether libraries are installed
97   ${toggle_install_srcs}      control whether sources are installed
98
99
100 EOF
101 }
102
103
104 show_help_post(){
105     cat <<EOF
106
107
108 NOTES:
109     Object files are built at the place where configure is launched.
110
111     All boolean options can be negated. The default value is the opposite
112     of that shown above. If the option --disable-foo is listed, then
113     the default value for foo is enabled.
114
115 Supported targets:
116 EOF
117   show_targets ${all_platforms}
118   echo
119   exit 1
120 }
121
122
123 show_targets() {
124     while [ -n "$*" ]; do
125         if [ "${1%%-*}" = "${2%%-*}" ]; then
126             if [ "${2%%-*}" = "${3%%-*}" ]; then
127                 printf "    %-24s %-24s %-24s\n" "$1" "$2" "$3"
128                 shift; shift; shift
129             else
130                 printf "    %-24s %-24s\n" "$1" "$2"
131                 shift; shift
132             fi
133         else
134             printf "    %-24s\n" "$1"
135             shift
136         fi
137     done
138 }
139
140
141 show_help() {
142     show_help_pre
143     show_help_post
144 }
145
146 #
147 # List Processing Functions
148 #
149 set_all(){
150     value=$1
151     shift
152     for var in $*; do
153         eval $var=$value
154     done
155 }
156
157
158 is_in(){
159     value=$1
160     shift
161     for var in $*; do
162         [ $var = $value ] && return 0
163     done
164     return 1
165 }
166
167
168 add_cflags() {
169     CFLAGS="${CFLAGS} $@"
170     CXXFLAGS="${CXXFLAGS} $@"
171 }
172
173
174 add_cflags_only() {
175     CFLAGS="${CFLAGS} $@"
176 }
177
178
179 add_cxxflags_only() {
180     CXXFLAGS="${CXXFLAGS} $@"
181 }
182
183
184 add_ldflags() {
185     LDFLAGS="${LDFLAGS} $@"
186 }
187
188
189 add_asflags() {
190     ASFLAGS="${ASFLAGS} $@"
191 }
192
193
194 add_extralibs() {
195     extralibs="${extralibs} $@"
196 }
197
198 #
199 # Boolean Manipulation Functions
200 #
201 enable_feature(){
202     set_all yes $*
203 }
204
205 disable_feature(){
206     set_all no $*
207 }
208
209 enabled(){
210     eval test "x\$$1" = "xyes"
211 }
212
213 disabled(){
214     eval test "x\$$1" = "xno"
215 }
216
217
218 soft_enable() {
219     for var in $*; do
220         if ! disabled $var; then
221             log_echo "  enabling $var"
222             enable_feature $var
223         fi
224     done
225 }
226
227 soft_disable() {
228     for var in $*; do
229         if ! enabled $var; then
230             log_echo "  disabling $var"
231             disable_feature $var
232         fi
233     done
234 }
235
236
237 #
238 # Text Processing Functions
239 #
240 toupper(){
241     echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
242 }
243
244
245 tolower(){
246     echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
247 }
248
249
250 #
251 # Temporary File Functions
252 #
253 source_path=${0%/*}
254 enable_feature source_path_used
255 if test -z "$source_path" -o "$source_path" = "." ; then
256     source_path="`pwd`"
257     disable_feature source_path_used
258 fi
259
260 if test ! -z "$TMPDIR" ; then
261     TMPDIRx="${TMPDIR}"
262 elif test ! -z "$TEMPDIR" ; then
263     TMPDIRx="${TEMPDIR}"
264 else
265     TMPDIRx="/tmp"
266 fi
267 RAND=$(awk 'BEGIN { srand(); printf "%d\n",(rand() * 32768)}')
268 TMP_H="${TMPDIRx}/vpx-conf-$$-${RAND}.h"
269 TMP_C="${TMPDIRx}/vpx-conf-$$-${RAND}.c"
270 TMP_CC="${TMPDIRx}/vpx-conf-$$-${RAND}.cc"
271 TMP_O="${TMPDIRx}/vpx-conf-$$-${RAND}.o"
272 TMP_X="${TMPDIRx}/vpx-conf-$$-${RAND}.x"
273 TMP_ASM="${TMPDIRx}/vpx-conf-$$-${RAND}.asm"
274
275 clean_temp_files() {
276     rm -f ${TMP_C} ${TMP_CC} ${TMP_H} ${TMP_O} ${TMP_X} ${TMP_ASM}
277 }
278
279 #
280 # Toolchain Check Functions
281 #
282 check_cmd() {
283     enabled external_build && return
284     log "$@"
285     "$@" >>${logfile} 2>&1
286 }
287
288 check_cc() {
289     log check_cc "$@"
290     cat >${TMP_C}
291     log_file ${TMP_C}
292     check_cmd ${CC} ${CFLAGS} "$@" -c -o ${TMP_O} ${TMP_C}
293 }
294
295 check_cxx() {
296     log check_cxx "$@"
297     cat >${TMP_CC}
298     log_file ${TMP_CC}
299     check_cmd ${CXX} ${CXXFLAGS} "$@" -c -o ${TMP_O} ${TMP_CC}
300 }
301
302 check_cpp() {
303     log check_cpp "$@"
304     cat > ${TMP_C}
305     log_file ${TMP_C}
306     check_cmd ${CC} ${CFLAGS} "$@" -E -o ${TMP_O} ${TMP_C}
307 }
308
309 check_ld() {
310     log check_ld "$@"
311     check_cc $@ \
312         && check_cmd ${LD} ${LDFLAGS} "$@" -o ${TMP_X} ${TMP_O} ${extralibs}
313 }
314
315 check_header(){
316     log check_header "$@"
317     header=$1
318     shift
319     var=`echo $header | sed 's/[^A-Za-z0-9_]/_/g'`
320     disable_feature $var
321     check_cpp "$@" <<EOF && enable_feature $var
322 #include "$header"
323 int x;
324 EOF
325 }
326
327
328 check_cflags() {
329     log check_cflags "$@"
330     check_cc "$@" <<EOF
331 int x;
332 EOF
333 }
334
335 check_cxxflags() {
336     log check_cxxflags "$@"
337
338     # Catch CFLAGS that trigger CXX warnings
339     case "$CXX" in
340       *c++-analyzer|*clang++|*g++*) check_cxx -Werror "$@" <<EOF
341 int x;
342 EOF
343       ;;
344       *) check_cxx "$@" <<EOF
345 int x;
346 EOF
347       ;;
348     esac
349 }
350
351 check_add_cflags() {
352     check_cxxflags "$@" && add_cxxflags_only "$@"
353     check_cflags "$@" && add_cflags_only "$@"
354 }
355
356 check_add_asflags() {
357     log add_asflags "$@"
358     add_asflags "$@"
359 }
360
361 check_add_ldflags() {
362     log add_ldflags "$@"
363     add_ldflags "$@"
364 }
365
366 check_asm_align() {
367     log check_asm_align "$@"
368     cat >${TMP_ASM} <<EOF
369 section .rodata
370 align 16
371 EOF
372     log_file ${TMP_ASM}
373     check_cmd ${AS} ${ASFLAGS} -o ${TMP_O} ${TMP_ASM}
374     readelf -WS ${TMP_O} >${TMP_X}
375     log_file ${TMP_X}
376     if ! grep -q '\.rodata .* 16$' ${TMP_X}; then
377         die "${AS} ${ASFLAGS} does not support section alignment (nasm <=2.08?)"
378     fi
379 }
380
381 write_common_config_banner() {
382     print_webm_license config.mk "##" ""
383     echo '# This file automatically generated by configure. Do not edit!' >> config.mk
384     echo "TOOLCHAIN := ${toolchain}" >> config.mk
385
386     case ${toolchain} in
387         *-linux-rvct)
388             echo "ALT_LIBC := ${alt_libc}" >> config.mk
389             ;;
390     esac
391 }
392
393 write_common_config_targets() {
394     for t in ${all_targets}; do
395         if enabled ${t}; then
396             if enabled universal || enabled child; then
397                 fwrite config.mk "ALL_TARGETS += ${t}-${toolchain}"
398             else
399                 fwrite config.mk "ALL_TARGETS += ${t}"
400             fi
401         fi
402     true;
403     done
404 true
405 }
406
407 write_common_target_config_mk() {
408     local CC=${CC}
409     local CXX=${CXX}
410     enabled ccache && CC="ccache ${CC}"
411     enabled ccache && CXX="ccache ${CXX}"
412     print_webm_license $1 "##" ""
413
414     cat >> $1 << EOF
415 # This file automatically generated by configure. Do not edit!
416 SRC_PATH="$source_path"
417 SRC_PATH_BARE=$source_path
418 BUILD_PFX=${BUILD_PFX}
419 TOOLCHAIN=${toolchain}
420 ASM_CONVERSION=${asm_conversion_cmd:-${source_path}/build/make/ads2gas.pl}
421 GEN_VCPROJ=${gen_vcproj_cmd}
422 MSVS_ARCH_DIR=${msvs_arch_dir}
423
424 CC=${CC}
425 CXX=${CXX}
426 AR=${AR}
427 LD=${LD}
428 AS=${AS}
429 STRIP=${STRIP}
430 NM=${NM}
431
432 CFLAGS  = ${CFLAGS}
433 CXXFLAGS  = ${CXXFLAGS}
434 ARFLAGS = -rus\$(if \$(quiet),c,v)
435 LDFLAGS = ${LDFLAGS}
436 ASFLAGS = ${ASFLAGS}
437 extralibs = ${extralibs}
438 AS_SFX    = ${AS_SFX:-.asm}
439 EXE_SFX   = ${EXE_SFX}
440 VCPROJ_SFX = ${VCPROJ_SFX}
441 RTCD_OPTIONS = ${RTCD_OPTIONS}
442 EOF
443
444     if enabled rvct; then cat >> $1 << EOF
445 fmt_deps = sed -e 's;^__image.axf;\${@:.d=.o} \$@;' #hide
446 EOF
447     else cat >> $1 << EOF
448 fmt_deps = sed -e 's;^\([a-zA-Z0-9_]*\)\.o;\${@:.d=.o} \$@;'
449 EOF
450     fi
451
452     print_config_mk ARCH   "${1}" ${ARCH_LIST}
453     print_config_mk HAVE   "${1}" ${HAVE_LIST}
454     print_config_mk CONFIG "${1}" ${CONFIG_LIST}
455     print_config_mk HAVE   "${1}" gnu_strip
456
457     enabled msvs && echo "CONFIG_VS_VERSION=${vs_version}" >> "${1}"
458
459 }
460
461
462 write_common_target_config_h() {
463     print_webm_license ${TMP_H} "/*" " */"
464     cat >> ${TMP_H} << EOF
465 /* This file automatically generated by configure. Do not edit! */
466 #ifndef VPX_CONFIG_H
467 #define VPX_CONFIG_H
468 #define RESTRICT    ${RESTRICT}
469 #define INLINE      ${INLINE}
470 EOF
471     print_config_h ARCH   "${TMP_H}" ${ARCH_LIST}
472     print_config_h HAVE   "${TMP_H}" ${HAVE_LIST}
473     print_config_h CONFIG "${TMP_H}" ${CONFIG_LIST}
474     echo "#endif /* VPX_CONFIG_H */" >> ${TMP_H}
475     mkdir -p `dirname "$1"`
476     cmp "$1" ${TMP_H} >/dev/null 2>&1 || mv ${TMP_H} "$1"
477 }
478
479 process_common_cmdline() {
480     for opt in "$@"; do
481         optval="${opt#*=}"
482         case "$opt" in
483         --child) enable_feature child
484         ;;
485         --log*)
486         logging="$optval"
487         if ! disabled logging ; then
488             enabled logging || logfile="$logging"
489         else
490             logfile=/dev/null
491         fi
492         ;;
493         --target=*) toolchain="${toolchain:-${optval}}"
494         ;;
495         --force-target=*) toolchain="${toolchain:-${optval}}"; enable_feature force_toolchain
496         ;;
497         --cpu)
498         ;;
499         --cpu=*) tune_cpu="$optval"
500         ;;
501         --extra-cflags=*)
502         extra_cflags="${optval}"
503         ;;
504         --enable-?*|--disable-?*)
505         eval `echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g'`
506         if echo "${ARCH_EXT_LIST}" | grep "^ *$option\$" >/dev/null; then
507             [ $action = "disable" ] && RTCD_OPTIONS="${RTCD_OPTIONS}${opt} "
508         elif [ $action = "disable" ] && ! disabled $option ; then
509           echo "${CMDLINE_SELECT}" | grep "^ *$option\$" >/dev/null ||
510             die_unknown $opt
511         elif [ $action = "enable" ] && ! enabled $option ; then
512           echo "${CMDLINE_SELECT}" | grep "^ *$option\$" >/dev/null ||
513             die_unknown $opt
514         fi
515         ${action}_feature $option
516         ;;
517         --require-?*)
518         eval `echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g'`
519         if echo "${ARCH_EXT_LIST}" none | grep "^ *$option\$" >/dev/null; then
520             RTCD_OPTIONS="${RTCD_OPTIONS}${opt} "
521         else
522             die_unknown $opt
523         fi
524         ;;
525         --force-enable-?*|--force-disable-?*)
526         eval `echo "$opt" | sed 's/--force-/action=/;s/-/ option=/;s/-/_/g'`
527         ${action}_feature $option
528         ;;
529         --libc=*)
530         [ -d "${optval}" ] || die "Not a directory: ${optval}"
531         disable_feature builtin_libc
532         alt_libc="${optval}"
533         ;;
534         --as=*)
535         [ "${optval}" = yasm -o "${optval}" = nasm -o "${optval}" = auto ] \
536             || die "Must be yasm, nasm or auto: ${optval}"
537         alt_as="${optval}"
538         ;;
539         --prefix=*)
540         prefix="${optval}"
541         ;;
542         --libdir=*)
543         libdir="${optval}"
544         ;;
545         --sdk-path=*)
546         [ -d "${optval}" ] || die "Not a directory: ${optval}"
547         sdk_path="${optval}"
548         ;;
549         --libc|--as|--prefix|--libdir|--sdk-path)
550         die "Option ${opt} requires argument"
551         ;;
552         --help|-h) show_help
553         ;;
554         *) die_unknown $opt
555         ;;
556         esac
557     done
558 }
559
560 process_cmdline() {
561     for opt do
562         optval="${opt#*=}"
563         case "$opt" in
564         *) process_common_cmdline $opt
565         ;;
566         esac
567     done
568 }
569
570
571 post_process_common_cmdline() {
572     prefix="${prefix:-/usr/local}"
573     prefix="${prefix%/}"
574     libdir="${libdir:-${prefix}/lib}"
575     libdir="${libdir%/}"
576     if [ "${libdir#${prefix}}" = "${libdir}" ]; then
577         die "Libdir ${libdir} must be a subdirectory of ${prefix}"
578     fi
579 }
580
581
582 post_process_cmdline() {
583     true;
584 }
585
586 setup_gnu_toolchain() {
587         CC=${CC:-${CROSS}gcc}
588         CXX=${CXX:-${CROSS}g++}
589         AR=${AR:-${CROSS}ar}
590         LD=${LD:-${CROSS}${link_with_cc:-ld}}
591         AS=${AS:-${CROSS}as}
592     STRIP=${STRIP:-${CROSS}strip}
593     NM=${NM:-${CROSS}nm}
594         AS_SFX=.s
595         EXE_SFX=
596 }
597
598 process_common_toolchain() {
599     if [ -z "$toolchain" ]; then
600         gcctarget="${CHOST:-$(gcc -dumpmachine 2> /dev/null)}"
601
602         # detect tgt_isa
603         case "$gcctarget" in
604             armv6*)
605                 tgt_isa=armv6
606                 ;;
607             armv7*-hardfloat*)
608                 tgt_isa=armv7
609                 float_abi=hard
610                 ;;
611             armv7*)
612                 tgt_isa=armv7
613                 float_abi=softfp
614                 ;;
615             armv5te*)
616                 tgt_isa=armv5te
617                 ;;
618             *x86_64*|*amd64*)
619                 tgt_isa=x86_64
620                 ;;
621             *i[3456]86*)
622                 tgt_isa=x86
623                 ;;
624             *powerpc64*)
625                 tgt_isa=ppc64
626                 ;;
627             *powerpc*)
628                 tgt_isa=ppc32
629                 ;;
630             *sparc*)
631                 tgt_isa=sparc
632                 ;;
633         esac
634
635         # detect tgt_os
636         case "$gcctarget" in
637             *darwin8*)
638                 tgt_isa=universal
639                 tgt_os=darwin8
640                 ;;
641             *darwin9*)
642                 tgt_isa=universal
643                 tgt_os=darwin9
644                 ;;
645             *darwin10*)
646                 tgt_isa=x86_64
647                 tgt_os=darwin10
648                 ;;
649             *darwin11*)
650                 tgt_isa=x86_64
651                 tgt_os=darwin11
652                 ;;
653             *darwin12*)
654                 tgt_isa=x86_64
655                 tgt_os=darwin12
656                 ;;
657             *darwin13*)
658                 tgt_isa=x86_64
659                 tgt_os=darwin13
660                 ;;
661             x86_64*mingw32*)
662                 tgt_os=win64
663                 ;;
664             *mingw32*|*cygwin*)
665                 [ -z "$tgt_isa" ] && tgt_isa=x86
666                 tgt_os=win32
667                 ;;
668             *linux*|*bsd*)
669                 tgt_os=linux
670                 ;;
671             *solaris2.10)
672                 tgt_os=solaris
673                 ;;
674             *os2*)
675                 tgt_os=os2
676                 ;;
677         esac
678
679         if [ -n "$tgt_isa" ] && [ -n "$tgt_os" ]; then
680             toolchain=${tgt_isa}-${tgt_os}-gcc
681         fi
682     fi
683
684     toolchain=${toolchain:-generic-gnu}
685
686     is_in ${toolchain} ${all_platforms} || enabled force_toolchain \
687         || die "Unrecognized toolchain '${toolchain}'"
688
689     enabled child || log_echo "Configuring for target '${toolchain}'"
690
691     #
692     # Set up toolchain variables
693     #
694     tgt_isa=$(echo ${toolchain} | awk 'BEGIN{FS="-"}{print $1}')
695     tgt_os=$(echo ${toolchain} | awk 'BEGIN{FS="-"}{print $2}')
696     tgt_cc=$(echo ${toolchain} | awk 'BEGIN{FS="-"}{print $3}')
697
698     # Mark the specific ISA requested as enabled
699     soft_enable ${tgt_isa}
700     enable_feature ${tgt_os}
701     enable_feature ${tgt_cc}
702
703     # Enable the architecture family
704     case ${tgt_isa} in
705         arm*) enable_feature arm;;
706         mips*) enable_feature mips;;
707     esac
708
709     # PIC is probably what we want when building shared libs
710     enabled shared && soft_enable pic
711
712     # Handle darwin variants. Newer SDKs allow targeting older
713     # platforms, so find the newest SDK available.
714     case ${toolchain} in
715         *-darwin*)
716             if [ -z "${DEVELOPER_DIR}" ]; then
717                 DEVELOPER_DIR=`xcode-select -print-path 2> /dev/null`
718                 [ $? -ne 0 ] && OSX_SKIP_DIR_CHECK=1
719             fi
720             if [ -z "${OSX_SKIP_DIR_CHECK}" ]; then
721                 OSX_SDK_ROOTS="${DEVELOPER_DIR}/SDKs"
722                 OSX_SDK_VERSIONS="MacOSX10.4u.sdk MacOSX10.5.sdk MacOSX10.6.sdk"
723                 OSX_SDK_VERSIONS="${OSX_SDK_VERSIONS} MacOSX10.7.sdk"
724                 for v in ${OSX_SDK_VERSIONS}; do
725                     if [ -d "${OSX_SDK_ROOTS}/${v}" ]; then
726                         osx_sdk_dir="${OSX_SDK_ROOTS}/${v}"
727                     fi
728                 done
729             fi
730             ;;
731     esac
732
733     if [ -d "${osx_sdk_dir}" ]; then
734         add_cflags  "-isysroot ${osx_sdk_dir}"
735         add_ldflags "-isysroot ${osx_sdk_dir}"
736     fi
737
738     case ${toolchain} in
739         *-darwin8-*)
740             add_cflags  "-mmacosx-version-min=10.4"
741             add_ldflags "-mmacosx-version-min=10.4"
742             ;;
743         *-darwin9-*)
744             add_cflags  "-mmacosx-version-min=10.5"
745             add_ldflags "-mmacosx-version-min=10.5"
746             ;;
747         *-darwin10-*)
748             add_cflags  "-mmacosx-version-min=10.6"
749             add_ldflags "-mmacosx-version-min=10.6"
750             ;;
751         *-darwin11-*)
752             add_cflags  "-mmacosx-version-min=10.7"
753             add_ldflags "-mmacosx-version-min=10.7"
754             ;;
755         *-darwin12-*)
756             add_cflags  "-mmacosx-version-min=10.8"
757             add_ldflags "-mmacosx-version-min=10.8"
758             ;;
759         *-darwin13-*)
760             add_cflags  "-mmacosx-version-min=10.9"
761             add_ldflags "-mmacosx-version-min=10.9"
762             ;;
763     esac
764
765     # Handle Solaris variants. Solaris 10 needs -lposix4
766     case ${toolchain} in
767         sparc-solaris-*)
768             add_extralibs -lposix4
769             disable_feature fast_unaligned
770             ;;
771         *-solaris-*)
772             add_extralibs -lposix4
773             ;;
774     esac
775
776     # Process ARM architecture variants
777     case ${toolchain} in
778     arm*)
779         # on arm, isa versions are supersets
780         case ${tgt_isa} in
781         armv7)
782             soft_enable neon
783             soft_enable media
784             soft_enable edsp
785             soft_enable fast_unaligned
786             ;;
787         armv6)
788             soft_enable media
789             soft_enable edsp
790             soft_enable fast_unaligned
791             ;;
792         armv5te)
793             soft_enable edsp
794             disable_feature fast_unaligned
795             ;;
796         esac
797
798         asm_conversion_cmd="cat"
799
800         case ${tgt_cc} in
801         gcc)
802             CROSS=${CROSS:-arm-none-linux-gnueabi-}
803             link_with_cc=gcc
804             setup_gnu_toolchain
805             arch_int=${tgt_isa##armv}
806             arch_int=${arch_int%%te}
807             check_add_asflags --defsym ARCHITECTURE=${arch_int}
808             tune_cflags="-mtune="
809             if [ ${tgt_isa} = "armv7" ]; then
810                 if [ -z "${float_abi}" ]; then
811                     check_cpp <<EOF && float_abi=hard || float_abi=softfp
812 #ifndef __ARM_PCS_VFP
813 #error "not hardfp"
814 #endif
815 EOF
816                 fi
817                 check_add_cflags  -march=armv7-a -mfloat-abi=${float_abi}
818                 check_add_asflags -march=armv7-a -mfloat-abi=${float_abi}
819
820                 if enabled neon
821                 then
822                     check_add_cflags -mfpu=neon #-ftree-vectorize
823                     check_add_asflags -mfpu=neon
824                 fi
825
826                 if [ -z "${tune_cpu}" ]; then
827                     tune_cpu=cortex-a8
828                 fi
829             else
830                 check_add_cflags -march=${tgt_isa}
831                 check_add_asflags -march=${tgt_isa}
832             fi
833
834             enabled debug && add_asflags -g
835             asm_conversion_cmd="${source_path}/build/make/ads2gas.pl"
836             if enabled thumb; then
837                 asm_conversion_cmd="$asm_conversion_cmd -thumb"
838                 check_add_cflags -mthumb
839                 check_add_asflags -mthumb -mimplicit-it=always
840             fi
841             ;;
842         vs*)
843             asm_conversion_cmd="${source_path}/build/make/ads2armasm_ms.pl"
844             AS_SFX=.s
845             msvs_arch_dir=arm-msvs
846             disable_feature multithread
847             disable_feature unit_tests
848             ;;
849         rvct)
850             CC=armcc
851             AR=armar
852             AS=armasm
853             LD=${source_path}/build/make/armlink_adapter.sh
854             STRIP=arm-none-linux-gnueabi-strip
855             NM=arm-none-linux-gnueabi-nm
856             tune_cflags="--cpu="
857             tune_asflags="--cpu="
858             if [ -z "${tune_cpu}" ]; then
859                 if [ ${tgt_isa} = "armv7" ]; then
860                     if enabled neon
861                     then
862                         check_add_cflags --fpu=softvfp+vfpv3
863                         check_add_asflags --fpu=softvfp+vfpv3
864                     fi
865                     check_add_cflags --cpu=Cortex-A8
866                     check_add_asflags --cpu=Cortex-A8
867                 else
868                     check_add_cflags --cpu=${tgt_isa##armv}
869                     check_add_asflags --cpu=${tgt_isa##armv}
870                 fi
871             fi
872             arch_int=${tgt_isa##armv}
873             arch_int=${arch_int%%te}
874             check_add_asflags --pd "\"ARCHITECTURE SETA ${arch_int}\""
875             enabled debug && add_asflags -g
876             add_cflags --gnu
877             add_cflags --enum_is_int
878             add_cflags --wchar32
879         ;;
880         esac
881
882         case ${tgt_os} in
883         none*)
884             disable_feature multithread
885             disable_feature os_support
886             ;;
887
888         android*)
889             SDK_PATH=${sdk_path}
890             COMPILER_LOCATION=`find "${SDK_PATH}" \
891                                -name "arm-linux-androideabi-gcc*" -print -quit`
892             TOOLCHAIN_PATH=${COMPILER_LOCATION%/*}/arm-linux-androideabi-
893             CC=${TOOLCHAIN_PATH}gcc
894             CXX=${TOOLCHAIN_PATH}g++
895             AR=${TOOLCHAIN_PATH}ar
896             LD=${TOOLCHAIN_PATH}gcc
897             AS=${TOOLCHAIN_PATH}as
898             STRIP=${TOOLCHAIN_PATH}strip
899             NM=${TOOLCHAIN_PATH}nm
900
901             if [ -z "${alt_libc}" ]; then
902                 alt_libc=`find "${SDK_PATH}" -name arch-arm -print | \
903                           awk '{n = split($0,a,"/"); \
904                                 split(a[n-1],b,"-"); \
905                                 print $0 " " b[2]}' | \
906                           sort -g -k 2 | \
907                           awk '{ print $1 }' | tail -1`
908             fi
909
910             add_cflags "--sysroot=${alt_libc}"
911             add_ldflags "--sysroot=${alt_libc}"
912
913             # linker flag that routes around a CPU bug in some
914             # Cortex-A8 implementations (NDK Dev Guide)
915             add_ldflags "-Wl,--fix-cortex-a8"
916
917             enable_feature pic
918             soft_enable realtime_only
919             if [ ${tgt_isa} = "armv7" ]; then
920                 soft_enable runtime_cpu_detect
921             fi
922             if enabled runtime_cpu_detect; then
923                 add_cflags "-I${SDK_PATH}/sources/android/cpufeatures"
924             fi
925           ;;
926
927         darwin*)
928
929             XCRUN_FIND="xcrun --sdk iphoneos -find"
930             CXX="$(${XCRUN_FIND} clang++)"
931             CC="$(${XCRUN_FIND} clang)"
932             AR="$(${XCRUN_FIND} ar)"
933             LD="$(${XCRUN_FIND} ld)"
934             AS="$(${XCRUN_FIND} as)"
935             STRIP="$(${XCRUN_FIND} strip)"
936             NM="$(${XCRUN_FIND} nm)"
937             RANLIB="$(${XCRUN_FIND} ranlib)"
938             AS_SFX=.s
939
940             # ASFLAGS is written here instead of using check_add_asflags
941             # because we need to overwrite all of ASFLAGS and purge the
942             # options that were put in above
943             ASFLAGS="-arch ${tgt_isa} -g"
944
945             alt_libc="$(xcrun --sdk iphoneos --show-sdk-path)"
946             add_cflags -arch ${tgt_isa} -isysroot ${alt_libc}
947             add_ldflags -arch ${tgt_isa} -ios_version_min 7.0
948
949             for d in lib usr/lib usr/lib/system; do
950                 try_dir="${alt_libc}/${d}"
951                 [ -d "${try_dir}" ] && add_ldflags -L"${try_dir}"
952             done
953
954             asm_conversion_cmd="${source_path}/build/make/ads2gas_apple.pl"
955          ;;
956
957         linux*)
958             enable_feature linux
959             if enabled rvct; then
960                 # Check if we have CodeSourcery GCC in PATH. Needed for
961                 # libraries
962                 hash arm-none-linux-gnueabi-gcc 2>&- || \
963                   die "Couldn't find CodeSourcery GCC from PATH"
964
965                 # Use armcc as a linker to enable translation of
966                 # some gcc specific options such as -lm and -lpthread.
967                 LD="armcc --translate_gcc"
968
969                 # create configuration file (uses path to CodeSourcery GCC)
970                 armcc --arm_linux_configure --arm_linux_config_file=arm_linux.cfg
971
972                 add_cflags --arm_linux_paths --arm_linux_config_file=arm_linux.cfg
973                 add_asflags --no_hide_all --apcs=/interwork
974                 add_ldflags --arm_linux_paths --arm_linux_config_file=arm_linux.cfg
975                 enabled pic && add_cflags --apcs=/fpic
976                 enabled pic && add_asflags --apcs=/fpic
977                 enabled shared && add_cflags --shared
978             fi
979         ;;
980
981         esac
982     ;;
983     mips*)
984         link_with_cc=gcc
985         setup_gnu_toolchain
986         tune_cflags="-mtune="
987         if enabled dspr2; then
988             check_add_cflags -mips32r2 -mdspr2
989             disable_feature fast_unaligned
990         fi
991         check_add_cflags -march=${tgt_isa}
992         check_add_asflags -march=${tgt_isa}
993         check_add_asflags -KPIC
994     ;;
995     ppc*)
996         enable_feature ppc
997         bits=${tgt_isa##ppc}
998         link_with_cc=gcc
999         setup_gnu_toolchain
1000         add_asflags -force_cpusubtype_ALL -I"\$(dir \$<)darwin"
1001         soft_enable altivec
1002         enabled altivec && add_cflags -maltivec
1003
1004         case "$tgt_os" in
1005         linux*)
1006             add_asflags -maltivec -mregnames -I"\$(dir \$<)linux"
1007         ;;
1008         darwin*)
1009             darwin_arch="-arch ppc"
1010             enabled ppc64 && darwin_arch="${darwin_arch}64"
1011             add_cflags  ${darwin_arch} -m${bits} -fasm-blocks
1012             add_asflags ${darwin_arch} -force_cpusubtype_ALL -I"\$(dir \$<)darwin"
1013             add_ldflags ${darwin_arch} -m${bits}
1014             enabled altivec && add_cflags -faltivec
1015         ;;
1016         esac
1017     ;;
1018     x86*)
1019         bits=32
1020         enabled x86_64 && bits=64
1021         check_cpp <<EOF && bits=x32
1022 #ifndef __ILP32__
1023 #error "not x32"
1024 #endif
1025 EOF
1026
1027         case  ${tgt_os} in
1028             win*)
1029                 enabled gcc && add_cflags -fno-common
1030                 ;;
1031             solaris*)
1032                 CC=${CC:-${CROSS}gcc}
1033                 CXX=${CXX:-${CROSS}g++}
1034                 LD=${LD:-${CROSS}gcc}
1035                 CROSS=${CROSS:-g}
1036                 ;;
1037             os2)
1038                 AS=${AS:-nasm}
1039                 ;;
1040         esac
1041
1042         AS="${alt_as:-${AS:-auto}}"
1043         case  ${tgt_cc} in
1044             icc*)
1045                 CC=${CC:-icc}
1046                 LD=${LD:-icc}
1047                 setup_gnu_toolchain
1048                 add_cflags -use-msasm  # remove -use-msasm too?
1049                 # add -no-intel-extensions to suppress warning #10237
1050                 # refer to http://software.intel.com/en-us/forums/topic/280199
1051                 add_ldflags -i-static -no-intel-extensions
1052                 enabled x86_64 && add_cflags -ipo -static -O3 -no-prec-div
1053                 enabled x86_64 && AR=xiar
1054                 case ${tune_cpu} in
1055                     atom*)
1056                         tune_cflags="-x"
1057                         tune_cpu="SSE3_ATOM"
1058                     ;;
1059                     *)
1060                         tune_cflags="-march="
1061                     ;;
1062                 esac
1063             ;;
1064             gcc*)
1065                 add_cflags -m${bits}
1066                 add_ldflags -m${bits}
1067                 link_with_cc=gcc
1068                 tune_cflags="-march="
1069                 setup_gnu_toolchain
1070                 #for 32 bit x86 builds, -O3 did not turn on this flag
1071                 enabled optimizations && disabled gprof && check_add_cflags -fomit-frame-pointer
1072             ;;
1073             vs*)
1074                 # When building with Microsoft Visual Studio the assembler is
1075                 # invoked directly. Checking at configure time is unnecessary.
1076                 # Skip the check by setting AS arbitrarily
1077                 AS=msvs
1078                 msvs_arch_dir=x86-msvs
1079                 vc_version=${tgt_cc##vs}
1080                 case $vc_version in
1081                     7|8|9|10)
1082                          echo "${tgt_cc} does not support avx/avx2, disabling....."
1083                          RTCD_OPTIONS="${RTCD_OPTIONS}--disable-avx --disable-avx2 "
1084                          soft_disable avx
1085                          soft_disable avx2
1086                     ;;
1087                 esac
1088             ;;
1089         esac
1090
1091         soft_enable runtime_cpu_detect
1092         soft_enable mmx
1093         soft_enable sse
1094         soft_enable sse2
1095         soft_enable sse3
1096         soft_enable ssse3
1097         # We can't use 'check_cflags' until the compiler is configured and CC is
1098         # populated.
1099         if enabled gcc && ! disabled sse4_1 && ! check_cflags -msse4; then
1100             RTCD_OPTIONS="${RTCD_OPTIONS}--disable-sse4_1 "
1101         else
1102             soft_enable sse4_1
1103         fi
1104
1105         if enabled gcc && ! disabled avx && ! check_cflags -mavx; then
1106             RTCD_OPTIONS="${RTCD_OPTIONS}--disable-avx "
1107         else
1108             soft_enable avx
1109         fi
1110
1111         if enabled gcc && ! disabled avx2 && ! check_cflags -mavx2; then
1112             RTCD_OPTIONS="${RTCD_OPTIONS}--disable-avx2 "
1113         else
1114             soft_enable avx2
1115         fi
1116
1117         case "${AS}" in
1118             auto|"")
1119                 which nasm >/dev/null 2>&1 && AS=nasm
1120                 which yasm >/dev/null 2>&1 && AS=yasm
1121                 [ "${AS}" = auto -o -z "${AS}" ] \
1122                     && die "Neither yasm nor nasm have been found"
1123             ;;
1124         esac
1125         log_echo "  using $AS"
1126         [ "${AS##*/}" = nasm ] && add_asflags -Ox
1127         AS_SFX=.asm
1128         case  ${tgt_os} in
1129             win32)
1130                 add_asflags -f win32
1131                 enabled debug && add_asflags -g cv8
1132                 EXE_SFX=.exe
1133             ;;
1134             win64)
1135                 add_asflags -f x64
1136                 enabled debug && add_asflags -g cv8
1137                 EXE_SFX=.exe
1138             ;;
1139             linux*|solaris*|android*)
1140                 add_asflags -f elf${bits}
1141                 enabled debug && [ "${AS}" = yasm ] && add_asflags -g dwarf2
1142                 enabled debug && [ "${AS}" = nasm ] && add_asflags -g
1143                 [ "${AS##*/}" = nasm ] && check_asm_align
1144             ;;
1145             darwin*)
1146                 add_asflags -f macho${bits}
1147                 enabled x86 && darwin_arch="-arch i386" || darwin_arch="-arch x86_64"
1148                 add_cflags  ${darwin_arch}
1149                 add_ldflags ${darwin_arch}
1150                 # -mdynamic-no-pic is still a bit of voodoo -- it was required at
1151                 # one time, but does not seem to be now, and it breaks some of the
1152                 # code that still relies on inline assembly.
1153                 # enabled icc && ! enabled pic && add_cflags -fno-pic -mdynamic-no-pic
1154                 enabled icc && ! enabled pic && add_cflags -fno-pic
1155             ;;
1156             os2)
1157                 add_asflags -f aout
1158                 enabled debug && add_asflags -g
1159                 EXE_SFX=.exe
1160             ;;
1161             *) log "Warning: Unknown os $tgt_os while setting up $AS flags"
1162             ;;
1163         esac
1164     ;;
1165     universal*|*-gcc|generic-gnu)
1166         link_with_cc=gcc
1167         enable_feature gcc
1168     setup_gnu_toolchain
1169     ;;
1170     esac
1171
1172     # Try to enable CPU specific tuning
1173     if [ -n "${tune_cpu}" ]; then
1174         if [ -n "${tune_cflags}" ]; then
1175             check_add_cflags ${tune_cflags}${tune_cpu} || \
1176                 die "Requested CPU '${tune_cpu}' not supported by compiler"
1177         fi
1178     if [ -n "${tune_asflags}" ]; then
1179             check_add_asflags ${tune_asflags}${tune_cpu} || \
1180                 die "Requested CPU '${tune_cpu}' not supported by assembler"
1181         fi
1182     if [ -z "${tune_cflags}${tune_asflags}" ]; then
1183             log_echo "Warning: CPU tuning not supported by this toolchain"
1184         fi
1185     fi
1186
1187     enabled debug && check_add_cflags -g && check_add_ldflags -g
1188     enabled gprof && check_add_cflags -pg && check_add_ldflags -pg
1189     enabled gcov &&
1190         check_add_cflags -fprofile-arcs -ftest-coverage &&
1191         check_add_ldflags -fprofile-arcs -ftest-coverage
1192
1193     if enabled optimizations; then
1194         if enabled rvct; then
1195             enabled small && check_add_cflags -Ospace || check_add_cflags -Otime
1196         else
1197             enabled small && check_add_cflags -O2 ||  check_add_cflags -O3
1198         fi
1199     fi
1200
1201     # default use_x86inc to yes if pic is no or 64bit or we are not on darwin
1202     echo "  checking here for x86inc \"${tgt_isa}\" \"$pic\" "
1203     if [ ${tgt_isa} = x86_64 -o ! "$pic" = "yes" -o "${tgt_os#darwin}" = "${tgt_os}"  ]; then
1204       soft_enable use_x86inc
1205     fi
1206
1207     # Position Independent Code (PIC) support, for building relocatable
1208     # shared objects
1209     enabled gcc && enabled pic && check_add_cflags -fPIC
1210
1211     # Work around longjmp interception on glibc >= 2.11, to improve binary
1212     # compatibility. See http://code.google.com/p/webm/issues/detail?id=166
1213     enabled linux && check_add_cflags -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=0
1214
1215     # Check for strip utility variant
1216     ${STRIP} -V 2>/dev/null | grep GNU >/dev/null && enable_feature gnu_strip
1217
1218     # Try to determine target endianness
1219     check_cc <<EOF
1220     unsigned int e = 'O'<<24 | '2'<<16 | 'B'<<8 | 'E';
1221 EOF
1222     [ -f "${TMP_O}" ] && od -A n -t x1 "${TMP_O}" | tr -d '\n' |
1223         grep '4f *32 *42 *45' >/dev/null 2>&1 && enable_feature big_endian
1224
1225     # Try to find which inline keywords are supported
1226     check_cc <<EOF && INLINE="inline"
1227     static inline function() {}
1228 EOF
1229     check_cc <<EOF && INLINE="__inline__ __attribute__((always_inline))"
1230     static __attribute__((always_inline)) function() {}
1231 EOF
1232
1233     # Almost every platform uses pthreads.
1234     if enabled multithread; then
1235         case ${toolchain} in
1236             *-win*-vs*);;
1237             *-android-gcc);;
1238             *) check_header pthread.h && add_extralibs -lpthread
1239         esac
1240     fi
1241
1242     # only for MIPS platforms
1243     case ${toolchain} in
1244         mips*)
1245             if enabled dspr2; then
1246                 if enabled big_endian; then
1247                     echo "dspr2 optimizations are available only for little endian platforms"
1248                     disable_feature dspr2
1249                 fi
1250             fi
1251         ;;
1252     esac
1253
1254     # glibc needs these
1255     if enabled linux; then
1256         add_cflags -D_LARGEFILE_SOURCE
1257         add_cflags -D_FILE_OFFSET_BITS=64
1258     fi
1259
1260     # append any user defined extra cflags
1261     if [ -n "${extra_cflags}" ] ; then
1262         check_add_cflags ${extra_cflags} || \
1263         die "Requested extra CFLAGS '${extra_cflags}' not supported by compiler"
1264     fi
1265 }
1266
1267 process_toolchain() {
1268     process_common_toolchain
1269 }
1270
1271 print_config_mk() {
1272     local prefix=$1
1273     local makefile=$2
1274     shift 2
1275     for cfg; do
1276         upname="`toupper $cfg`"
1277         if enabled $cfg; then
1278             echo "${prefix}_${upname}=yes" >> $makefile
1279         fi
1280     done
1281 }
1282
1283 print_config_h() {
1284     local prefix=$1
1285     local header=$2
1286     shift 2
1287     for cfg; do
1288         upname="`toupper $cfg`"
1289         if enabled $cfg; then
1290             echo "#define ${prefix}_${upname} 1" >> $header
1291         else
1292             echo "#define ${prefix}_${upname} 0" >> $header
1293         fi
1294     done
1295 }
1296
1297 print_webm_license() {
1298     local destination=$1
1299     local prefix="$2"
1300     local suffix="$3"
1301     shift 3
1302     cat <<EOF > ${destination}
1303 ${prefix} Copyright (c) 2011 The WebM project authors. All Rights Reserved.${suffix}
1304 ${prefix} ${suffix}
1305 ${prefix} Use of this source code is governed by a BSD-style license${suffix}
1306 ${prefix} that can be found in the LICENSE file in the root of the source${suffix}
1307 ${prefix} tree. An additional intellectual property rights grant can be found${suffix}
1308 ${prefix} in the file PATENTS.  All contributing project authors may${suffix}
1309 ${prefix} be found in the AUTHORS file in the root of the source tree.${suffix}
1310 EOF
1311 }
1312
1313 process_targets() {
1314     true;
1315 }
1316
1317 process_detect() {
1318     true;
1319 }
1320
1321 enable_feature logging
1322 logfile="config.log"
1323 self=$0
1324 process() {
1325     cmdline_args="$@"
1326     process_cmdline "$@"
1327     if enabled child; then
1328         echo "# ${self} $@" >> ${logfile}
1329     else
1330         echo "# ${self} $@" > ${logfile}
1331     fi
1332     post_process_common_cmdline
1333     post_process_cmdline
1334     process_toolchain
1335     process_detect
1336     process_targets
1337
1338     OOT_INSTALLS="${OOT_INSTALLS}"
1339     if enabled source_path_used; then
1340     # Prepare the PWD for building.
1341     for f in ${OOT_INSTALLS}; do
1342             install -D ${source_path}/$f $f
1343     done
1344     fi
1345     cp ${source_path}/build/make/Makefile .
1346
1347     clean_temp_files
1348     true
1349 }