Home | History | Annotate | Download | only in libvpx
      1 #!/bin/bash -e
      2 #
      3 # Copyright (c) 2012 The Chromium Authors. All rights reserved.
      4 # Use of this source code is governed by a BSD-style license that can be
      5 # found in the LICENSE file.
      6 
      7 # This script is used to generate .gypi, .gni files and files in the
      8 # config/platform directories needed to build libvpx.
      9 # Every time libvpx source code is updated just run this script.
     10 #
     11 # For example:
     12 # $ ./generate_gypi.sh
     13 #
     14 # And this will update all the .gypi, .gni and config files needed.
     15 #
     16 # !!! It's highly recommended to install yasm before running this script.
     17 
     18 export LC_ALL=C
     19 BASE_DIR=$(pwd)
     20 LIBVPX_SRC_DIR="source/libvpx"
     21 LIBVPX_CONFIG_DIR="source/config"
     22 
     23 # Print license header.
     24 # $1 - Output base name
     25 function write_license {
     26   echo "# This file is generated. Do not edit." >> $1
     27   echo "# Copyright (c) 2014 The Chromium Authors. All rights reserved." >> $1
     28   echo "# Use of this source code is governed by a BSD-style license that can be" >> $1
     29   echo "# found in the LICENSE file." >> $1
     30   echo "" >> $1
     31 }
     32 
     33 # Print gypi boilerplate header.
     34 # $1 - Output base name
     35 function write_gypi_header {
     36   echo "{" >> $1
     37 }
     38 
     39 # Print gypi boilerplate footer.
     40 # $1 - Output base name
     41 function write_gypi_footer {
     42   echo "}" >> $1
     43 }
     44 
     45 # Generate a gypi with a list of source files.
     46 # $1 - Array name for file list. This is processed with 'declare' below to
     47 #      regenerate the array locally.
     48 # $2 - Output file
     49 function write_gypi {
     50   # Convert the first argument back in to an array.
     51   local readonly file_list=(${!1})
     52 
     53   rm -rf "$2"
     54   write_license "$2"
     55   write_gypi_header "$2"
     56 
     57   echo "  'sources': [" >> "$2"
     58   for f in ${file_list[@]}
     59   do
     60     echo "    '<(libvpx_source)/$f'," >> "$2"
     61   done
     62   echo "  ]," >> "$2"
     63 
     64   write_gypi_footer "$2"
     65 }
     66 
     67 # Generate a gni with a list of source files.
     68 # $1 - Array name for file list. This is processed with 'declare' below to
     69 #      regenerate the array locally.
     70 # $2 - GN variable name.
     71 # $3 - Output file.
     72 function write_gni {
     73   # Convert the first argument back in to an array.
     74   declare -a file_list=("${!1}")
     75 
     76   echo "$2 = [" >> "$3"
     77   for f in $file_list
     78   do
     79     echo "  \"//third_party/libvpx/source/libvpx/$f\"," >> "$3"
     80   done
     81   echo "]" >> "$3"
     82 }
     83 
     84 # Target template function
     85 # $1 - Array name for file list.
     86 # $2 - Output file
     87 # $3 - Target name
     88 # $4 - Compiler flag
     89 function write_target_definition {
     90   declare -a sources_list=("${!1}")
     91 
     92   echo "    {" >> "$2"
     93   echo "      'target_name': '$3'," >> "$2"
     94   echo "      'type': 'static_library'," >> "$2"
     95   echo "      'include_dirs': [" >> "$2"
     96   echo "        'source/config/<(OS_CATEGORY)/<(target_arch_full)'," >> "$2"
     97   echo "        '<(libvpx_source)'," >> "$2"
     98   echo "      ]," >> "$2"
     99   echo "      'sources': [" >> "$2"
    100   for f in $sources_list
    101   do
    102     echo "        '<(libvpx_source)/$f'," >> $2
    103   done
    104   echo "      ]," >> "$2"
    105   if [[ $4 == fpu=neon ]]; then
    106   echo "      'cflags!': [ '-mfpu=vfpv3-d16' ]," >> "$2"
    107   echo "      'conditions': [" >> $2
    108   echo "        # Disable LTO in neon targets due to compiler bug" >> "$2"
    109   echo "        # crbug.com/408997" >> "$2"
    110   echo "        ['use_lto==1', {" >> "$2"
    111   echo "          'cflags!': [" >> "$2"
    112   echo "            '-flto'," >> "$2"
    113   echo "            '-ffat-lto-objects'," >> "$2"
    114   echo "          ]," >> "$2"
    115   echo "        }]," >> "$2"
    116   echo "      ]," >> "$2"
    117   fi
    118   echo "      'cflags': [ '-m$4', ]," >> "$2"
    119   echo "      'xcode_settings': { 'OTHER_CFLAGS': [ '-m$4' ] }," >> "$2"
    120   if [[ $4 == avx* ]]; then
    121   echo "      'msvs_settings': {" >> "$2"
    122   echo "        'VCCLCompilerTool': {" >> "$2"
    123   echo "          'EnableEnhancedInstructionSet': '3', # /arch:AVX" >> "$2"
    124   echo "        }," >> "$2"
    125   echo "      }," >> "$2"
    126   elif [[ $4 == ssse3 || $4 == sse4.1 ]]; then
    127   echo "      'conditions': [" >> "$2"
    128   echo "        ['OS==\"win\" and clang==1', {" >> "$2"
    129   echo "          # cl.exe's /arch flag doesn't have a setting for SSSE3/4, and cl.exe" >> "$2"
    130   echo "          # doesn't need it for intrinsics. clang-cl does need it, though." >> "$2"
    131   echo "          'msvs_settings': {" >> "$2"
    132   echo "            'VCCLCompilerTool': { 'AdditionalOptions': [ '-m$4' ] }," >> "$2"
    133   echo "          }," >> "$2"
    134   echo "        }]," >> "$2"
    135   echo "      ]," >> "$2"
    136   fi
    137   echo "    }," >> "$2"
    138 }
    139 
    140 
    141 # Generate a gypi which applies additional compiler flags based on the file
    142 # name.
    143 # $1 - Array name for file list.
    144 # $2 - Output file
    145 function write_intrinsics_gypi {
    146   declare -a file_list=("${!1}")
    147 
    148   local mmx_sources=$(echo "$file_list" | grep '_mmx\.c$')
    149   local sse2_sources=$(echo "$file_list" | grep '_sse2\.c$')
    150   local sse3_sources=$(echo "$file_list" | grep '_sse3\.c$')
    151   local ssse3_sources=$(echo "$file_list" | grep '_ssse3\.c$')
    152   local sse4_1_sources=$(echo "$file_list" | grep '_sse4\.c$')
    153   local avx_sources=$(echo "$file_list" | grep '_avx\.c$')
    154   local avx2_sources=$(echo "$file_list" | grep '_avx2\.c$')
    155   local neon_sources=$(echo "$file_list" | grep '_neon\.c$')
    156 
    157   # Intrinsic functions and files are in flux. We can selectively generate them
    158   # but we can not selectively include them in libvpx.gyp. Throw some errors
    159   # when new targets are needed.
    160 
    161   rm -rf "$2"
    162   write_license "$2"
    163   write_gypi_header "$2"
    164 
    165   echo "  'targets': [" >> "$2"
    166 
    167   # x86[_64]
    168   if [ 0 -ne ${#mmx_sources} ]; then
    169     write_target_definition mmx_sources[@] "$2" libvpx_intrinsics_mmx mmx
    170   fi
    171   if [ 0 -ne ${#sse2_sources} ]; then
    172     write_target_definition sse2_sources[@] "$2" libvpx_intrinsics_sse2 sse2
    173   fi
    174   if [ 0 -ne ${#sse3_sources} ]; then
    175     #write_target_definition sse3_sources[@] "$2" libvpx_intrinsics_sse3 sse3
    176     echo "ERROR: Uncomment sse3 sections in libvpx.gyp"
    177     exit 1
    178   fi
    179   if [ 0 -ne ${#ssse3_sources} ]; then
    180     write_target_definition ssse3_sources[@] "$2" libvpx_intrinsics_ssse3 ssse3
    181   fi
    182   if [ 0 -ne ${#sse4_1_sources} ]; then
    183     write_target_definition sse4_1_sources[@] "$2" libvpx_intrinsics_sse4_1 sse4.1
    184   fi
    185   if [ 0 -ne ${#avx_sources} ]; then
    186     #write_target_definition avx_sources[@] "$2" libvpx_intrinsics_avx avx
    187     echo "ERROR: Uncomment avx sections in libvpx.gyp"
    188     exit 1
    189   fi
    190   if [ 0 -ne ${#avx2_sources} ]; then
    191     #write_target_definition avx2_sources[@] "$2" libvpx_intrinsics_avx2 avx2
    192     echo "ERROR: Uncomment avx2 sections in libvpx.gyp"
    193     exit 1
    194   fi
    195 
    196   # arm neon
    197   if [ 0 -ne ${#neon_sources} ]; then
    198     write_target_definition neon_sources[@] "$2" libvpx_intrinsics_neon fpu=neon
    199   fi
    200 
    201   echo "  ]," >> "$2"
    202 
    203   write_gypi_footer "$2"
    204 }
    205 
    206 # Convert a list of source files into gypi and gni files.
    207 # $1 - Input file.
    208 # $2 - Output gypi file base. Will generate additional .gypi files when
    209 #      different compilation flags are required.
    210 function convert_srcs_to_project_files {
    211   # Do the following here:
    212   # 1. Filter .c, .h, .s, .S and .asm files.
    213   # 2. Move certain files to a separate include to allow applying different
    214   #    compiler options.
    215   # 3. Replace .asm.s to .asm because gyp will do the conversion.
    216 
    217   local source_list=$(grep -E '(\.c|\.h|\.S|\.s|\.asm)$' $1)
    218 
    219   # _offsets are used in pre-processing to generate files for assembly. They are
    220   # not part of the compiled library.
    221   source_list=$(echo "$source_list" | grep -v '_offsets\.c')
    222 
    223   # Not sure why vpx_config is not included.
    224   source_list=$(echo "$source_list" | grep -v 'vpx_config\.c')
    225 
    226   # The actual ARM files end in .asm. We have rules to translate them to .S
    227   source_list=$(echo "$source_list" | sed s/\.asm\.s$/.asm/)
    228 
    229   # Select all x86 files ending with .c
    230   local intrinsic_list=$(echo "$source_list" | \
    231     egrep 'vp[89]/(encoder|decoder|common)/x86/'  | \
    232     egrep '(mmx|sse2|sse3|ssse3|sse4|avx|avx2).c$')
    233 
    234   # Select all neon files ending in C but only when building in RTCD mode
    235   if [ "libvpx_srcs_arm_neon_cpu_detect" == "$2" ]; then
    236     # Select all arm neon files ending in _neon.c
    237     # the pattern may need to be updated if vpx_scale gets intrinics
    238     local intrinsic_list=$(echo "$source_list" | \
    239       egrep 'vp[89]/(encoder|decoder|common)/arm/neon/'  | \
    240       egrep '_neon.c$')
    241   fi
    242 
    243   # Remove these files from the main list.
    244   source_list=$(comm -23 <(echo "$source_list") <(echo "$intrinsic_list"))
    245 
    246   local x86_list=$(echo "$source_list" | egrep '/x86/')
    247 
    248   write_gypi source_list "$BASE_DIR/$2.gypi"
    249 
    250   # All the files are in a single "element." Check if the first element has
    251   # length 0.
    252   if [ 0 -ne ${#intrinsic_list} ]; then
    253     write_intrinsics_gypi intrinsic_list[@] "$BASE_DIR/$2_intrinsics.gypi"
    254   fi
    255 
    256   # Write a single .gni file that includes all source files for all archs.
    257   if [ 0 -ne ${#x86_list} ]; then
    258     local c_sources=$(echo "$source_list" | egrep '.(c|h)$')
    259     local assembly_sources=$(echo "$source_list" | egrep '.asm$')
    260     local mmx_sources=$(echo "$intrinsic_list" | grep '_mmx\.c$')
    261     local sse2_sources=$(echo "$intrinsic_list" | grep '_sse2\.c$')
    262     local sse3_sources=$(echo "$intrinsic_list" | grep '_sse3\.c$')
    263     local ssse3_sources=$(echo "$intrinsic_list" | grep '_ssse3\.c$')
    264     local sse4_1_sources=$(echo "$intrinsic_list" | grep '_sse4\.c$')
    265     local avx_sources=$(echo "$intrinsic_list" | grep '_avx\.c$')
    266     local avx2_sources=$(echo "$intrinsic_list" | grep '_avx2\.c$')
    267 
    268     write_gni c_sources $2 "$BASE_DIR/libvpx_srcs.gni"
    269     write_gni assembly_sources $2_assembly "$BASE_DIR/libvpx_srcs.gni"
    270     write_gni mmx_sources $2_mmx "$BASE_DIR/libvpx_srcs.gni"
    271     write_gni sse2_sources $2_sse2 "$BASE_DIR/libvpx_srcs.gni"
    272     write_gni sse3_sources $2_sse3 "$BASE_DIR/libvpx_srcs.gni"
    273     write_gni ssse3_sources $2_ssse3 "$BASE_DIR/libvpx_srcs.gni"
    274     write_gni sse4_1_sources $2_sse4_1 "$BASE_DIR/libvpx_srcs.gni"
    275     write_gni avx_sources $2_avx "$BASE_DIR/libvpx_srcs.gni"
    276     write_gni avx2_sources $2_avx2 "$BASE_DIR/libvpx_srcs.gni"
    277   else
    278     local c_sources=$(echo "$source_list" | egrep '.(c|h)$')
    279     local assembly_sources=$(echo "$source_list" | egrep '.asm$')
    280     local neon_sources=$(echo "$intrinsic_list" | grep '_neon\.c$')
    281     write_gni c_sources $2 "$BASE_DIR/libvpx_srcs.gni"
    282     write_gni assembly_sources $2_assembly "$BASE_DIR/libvpx_srcs.gni"
    283     if [ 0 -ne ${#neon_sources} ]; then
    284       write_gni neon_sources $2_neon "$BASE_DIR/libvpx_srcs.gni"
    285     fi
    286   fi
    287 }
    288 
    289 # Clean files from previous make.
    290 function make_clean {
    291   make clean > /dev/null
    292   rm -f libvpx_srcs.txt
    293 }
    294 
    295 # Lint a pair of vpx_config.h and vpx_config.asm to make sure they match.
    296 # $1 - Header file directory.
    297 function lint_config {
    298   # mips does not contain any assembly so the header does not need to be
    299   # compared to the asm.
    300   if [[ "$1" != *mipsel && "$1" != *mips64el ]]; then
    301     $BASE_DIR/lint_config.sh \
    302       -h $BASE_DIR/$LIBVPX_CONFIG_DIR/$1/vpx_config.h \
    303       -a $BASE_DIR/$LIBVPX_CONFIG_DIR/$1/vpx_config.asm
    304   fi
    305 }
    306 
    307 # Print the configuration.
    308 # $1 - Header file directory.
    309 function print_config {
    310   $BASE_DIR/lint_config.sh -p \
    311     -h $BASE_DIR/$LIBVPX_CONFIG_DIR/$1/vpx_config.h \
    312     -a $BASE_DIR/$LIBVPX_CONFIG_DIR/$1/vpx_config.asm
    313 }
    314 
    315 # Print the configuration from Header file.
    316 # This function is an abridged version of print_config which does not use
    317 # lint_config and it does not require existence of vpx_config.asm.
    318 # $1 - Header file directory.
    319 function print_config_basic {
    320   combined_config="$(cat $BASE_DIR/$LIBVPX_CONFIG_DIR/$1/vpx_config.h \
    321                    | grep -E ' +[01] *$')"
    322   combined_config="$(echo "$combined_config" | grep -v DO1STROUNDING)"
    323   combined_config="$(echo "$combined_config" | sed 's/[ \t]//g')"
    324   combined_config="$(echo "$combined_config" | sed 's/.*define//')"
    325   combined_config="$(echo "$combined_config" | sed 's/0$/=no/')"
    326   combined_config="$(echo "$combined_config" | sed 's/1$/=yes/')"
    327   echo "$combined_config" | sort | uniq
    328 }
    329 
    330 # Generate *_rtcd.h files.
    331 # $1 - Header file directory.
    332 # $2 - Architecture.
    333 function gen_rtcd_header {
    334   echo "Generate $LIBVPX_CONFIG_DIR/$1/*_rtcd.h files."
    335 
    336   rm -rf $BASE_DIR/$TEMP_DIR/libvpx.config
    337   if [[ "$2" == "mipsel" || "$2" == "mips64el" ]]; then
    338     print_config_basic $1 > $BASE_DIR/$TEMP_DIR/libvpx.config
    339   else
    340     $BASE_DIR/lint_config.sh -p \
    341       -h $BASE_DIR/$LIBVPX_CONFIG_DIR/$1/vpx_config.h \
    342       -a $BASE_DIR/$LIBVPX_CONFIG_DIR/$1/vpx_config.asm \
    343       -o $BASE_DIR/$TEMP_DIR/libvpx.config
    344   fi
    345 
    346   $BASE_DIR/$LIBVPX_SRC_DIR/build/make/rtcd.pl \
    347     --arch=$2 \
    348     --sym=vp8_rtcd \
    349     --config=$BASE_DIR/$TEMP_DIR/libvpx.config \
    350     --disable-avx2 \
    351     $BASE_DIR/$LIBVPX_SRC_DIR/vp8/common/rtcd_defs.pl \
    352     > $BASE_DIR/$LIBVPX_CONFIG_DIR/$1/vp8_rtcd.h
    353 
    354   $BASE_DIR/$LIBVPX_SRC_DIR/build/make/rtcd.pl \
    355     --arch=$2 \
    356     --sym=vp9_rtcd \
    357     --config=$BASE_DIR/$TEMP_DIR/libvpx.config \
    358     --disable-avx2 \
    359     $BASE_DIR/$LIBVPX_SRC_DIR/vp9/common/vp9_rtcd_defs.pl \
    360     > $BASE_DIR/$LIBVPX_CONFIG_DIR/$1/vp9_rtcd.h
    361 
    362   $BASE_DIR/$LIBVPX_SRC_DIR/build/make/rtcd.pl \
    363     --arch=$2 \
    364     --sym=vpx_scale_rtcd \
    365     --config=$BASE_DIR/$TEMP_DIR/libvpx.config \
    366     --disable-avx2 \
    367     $BASE_DIR/$LIBVPX_SRC_DIR/vpx_scale/vpx_scale_rtcd.pl \
    368     > $BASE_DIR/$LIBVPX_CONFIG_DIR/$1/vpx_scale_rtcd.h
    369 
    370   rm -rf $BASE_DIR/$TEMP_DIR/libvpx.config
    371 }
    372 
    373 # Generate Config files. "--enable-external-build" must be set to skip
    374 # detection of capabilities on specific targets.
    375 # $1 - Header file directory.
    376 # $2 - Config command line.
    377 function gen_config_files {
    378   ./configure $2  > /dev/null
    379 
    380   # Generate vpx_config.asm. Do not create one for mips.
    381   if [[ "$1" != *mipsel && "$1" != *mips64el ]]; then
    382     if [[ "$1" == *x64* ]] || [[ "$1" == *ia32* ]]; then
    383       egrep "#define [A-Z0-9_]+ [01]" vpx_config.h | awk '{print "%define " $2 " " $3}' > vpx_config.asm
    384     else
    385       egrep "#define [A-Z0-9_]+ [01]" vpx_config.h | awk '{print $2 " EQU " $3}' | perl $BASE_DIR/$LIBVPX_SRC_DIR/build/make/ads2gas.pl > vpx_config.asm
    386     fi
    387   fi
    388 
    389   cp vpx_config.* $BASE_DIR/$LIBVPX_CONFIG_DIR/$1
    390   make_clean
    391   rm -rf vpx_config.*
    392 }
    393 
    394 echo "Create temporary directory."
    395 TEMP_DIR="$LIBVPX_SRC_DIR.temp"
    396 rm -rf $TEMP_DIR
    397 cp -R $LIBVPX_SRC_DIR $TEMP_DIR
    398 cd $TEMP_DIR
    399 
    400 echo "Generate config files."
    401 # TODO(joeyparrish) Enable AVX2 when broader VS2013 support is available
    402 all_platforms="--enable-external-build --enable-postproc --disable-install-srcs --enable-multi-res-encoding --enable-temporal-denoising --disable-unit-tests --disable-install-docs --disable-examples --disable-avx2"
    403 gen_config_files linux/ia32 "--target=x86-linux-gcc --disable-ccache --enable-pic --enable-realtime-only ${all_platforms}"
    404 gen_config_files linux/x64 "--target=x86_64-linux-gcc --disable-ccache --enable-pic --enable-realtime-only ${all_platforms}"
    405 gen_config_files linux/arm "--target=armv6-linux-gcc --enable-pic --enable-realtime-only --disable-install-bins --disable-install-libs --disable-edsp ${all_platforms}"
    406 gen_config_files linux/arm-neon "--target=armv7-linux-gcc --enable-pic --enable-realtime-only --disable-edsp ${all_platforms}"
    407 gen_config_files linux/arm-neon-cpu-detect "--target=armv7-linux-gcc --enable-pic --enable-realtime-only --enable-runtime-cpu-detect --disable-edsp ${all_platforms}"
    408 gen_config_files linux/arm64 "--force-target=armv8-linux-gcc --enable-pic --enable-realtime-only --disable-edsp ${all_platforms}"
    409 gen_config_files linux/mipsel "--target=mips32-linux-gcc --disable-fast-unaligned ${all_platforms}"
    410 gen_config_files linux/mips64el "--target=mips64-linux-gcc --disable-fast-unaligned ${all_platforms}"
    411 gen_config_files linux/generic "--target=generic-gnu --enable-pic --enable-realtime-only ${all_platforms}"
    412 gen_config_files win/ia32 "--target=x86-win32-vs12 --enable-realtime-only ${all_platforms}"
    413 gen_config_files win/x64 "--target=x86_64-win64-vs12 --enable-realtime-only ${all_platforms}"
    414 gen_config_files mac/ia32 "--target=x86-darwin9-gcc --enable-pic --enable-realtime-only ${all_platforms}"
    415 gen_config_files mac/x64 "--target=x86_64-darwin9-gcc --enable-pic --enable-realtime-only ${all_platforms}"
    416 gen_config_files nacl "--target=generic-gnu --enable-pic --enable-realtime-only ${all_platforms}"
    417 
    418 echo "Remove temporary directory."
    419 cd $BASE_DIR
    420 rm -rf $TEMP_DIR
    421 
    422 echo "Lint libvpx configuration."
    423 lint_config linux/ia32
    424 lint_config linux/x64
    425 lint_config linux/arm
    426 lint_config linux/arm-neon
    427 lint_config linux/arm-neon-cpu-detect
    428 lint_config linux/arm64
    429 lint_config linux/mipsel
    430 lint_config linux/mips64el
    431 lint_config linux/generic
    432 lint_config win/ia32
    433 lint_config win/x64
    434 lint_config mac/ia32
    435 lint_config mac/x64
    436 lint_config nacl
    437 
    438 echo "Create temporary directory."
    439 TEMP_DIR="$LIBVPX_SRC_DIR.temp"
    440 rm -rf $TEMP_DIR
    441 cp -R $LIBVPX_SRC_DIR $TEMP_DIR
    442 cd $TEMP_DIR
    443 
    444 gen_rtcd_header linux/ia32 x86
    445 gen_rtcd_header linux/x64 x86_64
    446 gen_rtcd_header linux/arm armv6
    447 gen_rtcd_header linux/arm-neon armv7
    448 gen_rtcd_header linux/arm-neon-cpu-detect armv7
    449 gen_rtcd_header linux/arm64 armv8
    450 gen_rtcd_header linux/mipsel mipsel
    451 gen_rtcd_header linux/mips64el mips64el
    452 gen_rtcd_header linux/generic generic
    453 gen_rtcd_header win/ia32 x86
    454 gen_rtcd_header win/x64 x86_64
    455 gen_rtcd_header mac/ia32 x86
    456 gen_rtcd_header mac/x64 x86_64
    457 gen_rtcd_header nacl nacl
    458 
    459 echo "Prepare Makefile."
    460 ./configure --target=generic-gnu > /dev/null
    461 make_clean
    462 
    463 # Remove existing .gni file.
    464 rm -rf $BASE_DIR/libvpx_srcs.gni
    465 write_license $BASE_DIR/libvpx_srcs.gni
    466 
    467 echo "Generate X86 source list."
    468 config=$(print_config linux/ia32)
    469 make_clean
    470 make libvpx_srcs.txt target=libs $config > /dev/null
    471 convert_srcs_to_project_files libvpx_srcs.txt libvpx_srcs_x86
    472 
    473 # Copy vpx_version.h. The file should be the same for all platforms.
    474 cp vpx_version.h $BASE_DIR/$LIBVPX_CONFIG_DIR
    475 
    476 echo "Generate X86_64 source list."
    477 config=$(print_config linux/x64)
    478 make_clean
    479 make libvpx_srcs.txt target=libs $config > /dev/null
    480 convert_srcs_to_project_files libvpx_srcs.txt libvpx_srcs_x86_64
    481 
    482 echo "Generate ARM source list."
    483 config=$(print_config linux/arm)
    484 make_clean
    485 make libvpx_srcs.txt target=libs $config > /dev/null
    486 convert_srcs_to_project_files libvpx_srcs.txt libvpx_srcs_arm
    487 
    488 echo "Generate ARM NEON source list."
    489 config=$(print_config linux/arm-neon)
    490 make_clean
    491 make libvpx_srcs.txt target=libs $config > /dev/null
    492 convert_srcs_to_project_files libvpx_srcs.txt libvpx_srcs_arm_neon
    493 
    494 echo "Generate ARM NEON CPU DETECT source list."
    495 config=$(print_config linux/arm-neon-cpu-detect)
    496 make_clean
    497 make libvpx_srcs.txt target=libs $config > /dev/null
    498 convert_srcs_to_project_files libvpx_srcs.txt libvpx_srcs_arm_neon_cpu_detect
    499 
    500 echo "Generate ARM64 source list."
    501 config=$(print_config linux/arm64)
    502 make_clean
    503 make libvpx_srcs.txt target=libs $config > /dev/null
    504 convert_srcs_to_project_files libvpx_srcs.txt libvpx_srcs_arm64
    505 
    506 echo "Generate MIPS source list."
    507 config=$(print_config_basic linux/mipsel)
    508 make_clean
    509 make libvpx_srcs.txt target=libs $config > /dev/null
    510 convert_srcs_to_project_files libvpx_srcs.txt libvpx_srcs_mips
    511 
    512 echo "MIPS64 source list is identical to MIPS source list. No need to generate it."
    513 
    514 echo "Generate NaCl source list."
    515 config=$(print_config_basic nacl)
    516 make_clean
    517 make libvpx_srcs.txt target=libs $config > /dev/null
    518 convert_srcs_to_project_files libvpx_srcs.txt libvpx_srcs_nacl
    519 
    520 echo "Generate GENERIC source list."
    521 config=$(print_config_basic linux/generic)
    522 make_clean
    523 make libvpx_srcs.txt target=libs $config > /dev/null
    524 convert_srcs_to_project_files libvpx_srcs.txt libvpx_srcs_generic
    525 
    526 echo "Remove temporary directory."
    527 cd $BASE_DIR
    528 rm -rf $TEMP_DIR
    529 
    530 # TODO(fgalligan): Is "--disable-fast-unaligned" needed on mipsel?
    531 # TODO(fgalligan): Can we turn on "--enable-realtime-only" for mipsel?
    532