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