11184aebb761cbeac9124c37189a80a1a58f04b6bhkuang#!/bin/sh
290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber##
3f71323e297a928af368937089d3ed71239786f86Andreas Huber##  configure.sh
490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber##
5f71323e297a928af368937089d3ed71239786f86Andreas Huber##  This script is sourced by the main configure script and contains
6f71323e297a928af368937089d3ed71239786f86Andreas Huber##  utility functions and other common bits that aren't strictly libvpx
7f71323e297a928af368937089d3ed71239786f86Andreas Huber##  related.
8f71323e297a928af368937089d3ed71239786f86Andreas Huber##
9f71323e297a928af368937089d3ed71239786f86Andreas Huber##  This build system is based in part on the FFmpeg configure script.
1090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber##
1190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
1290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
1390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#
1490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# Logging / Output Functions
1590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#
1690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberdie_unknown(){
17da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  echo "Unknown option \"$1\"."
18da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  echo "See $0 --help for available options."
19da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  clean_temp_files
20da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  exit 1
2190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
2290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
2390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberdie() {
24da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  echo "$@"
25da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  echo
26da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  echo "Configuration failed. This could reflect a misconfiguration of your"
27da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  echo "toolchains, improper options selected, or another problem. If you"
28da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  echo "don't see any useful error messages above, the next step is to look"
29da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  echo "at the configure error log file ($logfile) to determine what"
30da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  echo "configure was trying to do when it died."
31da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  clean_temp_files
32da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  exit 1
3390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
3490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
3590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberlog(){
36da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  echo "$@" >>$logfile
3790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
3890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
3990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberlog_file(){
40da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  log BEGIN $1
41da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  cat -n $1 >>$logfile
42da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  log END $1
4390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
4490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
4590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberlog_echo() {
46da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  echo "$@"
47da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  log "$@"
4890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
4990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
5090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberfwrite () {
51da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  outfile=$1
52da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  shift
53da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  echo "$@" >> ${outfile}
5490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
5590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
5690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubershow_help_pre(){
57da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  for opt in ${CMDLINE_SELECT}; do
58da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian    opt2=`echo $opt | sed -e 's;_;-;g'`
59da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian    if enabled $opt; then
60da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      eval "toggle_${opt}=\"--disable-${opt2}\""
61da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian    else
62da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      eval "toggle_${opt}=\"--enable-${opt2} \""
63da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian    fi
64da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  done
6590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
66da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  cat <<EOF
6790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberUsage: configure [options]
6890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberOptions:
6990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
7090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberBuild options:
7190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber  --help                      print this message
7291037db265ecdd914a26e056cf69207b4f50924ehkuang  --log=yes|no|FILE           file configure log is written to [config.log]
7390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber  --target=TARGET             target platform tuple [generic-gnu]
7490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber  --cpu=CPU                   optimize for a specific cpu rather than a family
7579f15823c34ae1e423108295e416213200bb280fAndreas Huber  --extra-cflags=ECFLAGS      add ECFLAGS to CFLAGS [$CFLAGS]
762263fc984bdc858ee931d3e35c87c404de923950Johann  --extra-cxxflags=ECXXFLAGS  add ECXXFLAGS to CXXFLAGS [$CXXFLAGS]
7790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber  ${toggle_extra_warnings}    emit harmless warnings (always non-fatal)
7890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber  ${toggle_werror}            treat warnings as errors, if possible
7990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                              (not available with all compilers)
8090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber  ${toggle_optimizations}     turn on/off compiler optimization flags
8179f15823c34ae1e423108295e416213200bb280fAndreas Huber  ${toggle_pic}               turn on/off Position Independent Code
8290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber  ${toggle_ccache}            turn on/off compiler cache
8390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber  ${toggle_debug}             enable/disable debug mode
8490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber  ${toggle_gprof}             enable/disable gprof profiling instrumentation
8590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber  ${toggle_gcov}              enable/disable gcov coverage instrumentation
86ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang  ${toggle_thumb}             enable/disable building arm assembly in thumb mode
87da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  ${toggle_dependency_tracking}
88da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian                              disable to speed up one-time build
8990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
9090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberInstall options:
9190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber  ${toggle_install_docs}      control whether docs are installed
9290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber  ${toggle_install_bins}      control whether binaries are installed
9390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber  ${toggle_install_libs}      control whether libraries are installed
9490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber  ${toggle_install_srcs}      control whether sources are installed
9590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
9690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
9790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberEOF
9890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
9990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
10090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubershow_help_post(){
101da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  cat <<EOF
10290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
10390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
10490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberNOTES:
10590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    Object files are built at the place where configure is launched.
10690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
10790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    All boolean options can be negated. The default value is the opposite
10890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    of that shown above. If the option --disable-foo is listed, then
10990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    the default value for foo is enabled.
11090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
11190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberSupported targets:
11290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberEOF
11390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber  show_targets ${all_platforms}
11490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber  echo
11590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber  exit 1
11690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
11790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
11890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubershow_targets() {
119da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  while [ -n "$*" ]; do
120da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian    if [ "${1%%-*}" = "${2%%-*}" ]; then
121da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      if [ "${2%%-*}" = "${3%%-*}" ]; then
122da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian        printf "    %-24s %-24s %-24s\n" "$1" "$2" "$3"
123da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian        shift; shift; shift
124da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      else
125da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian        printf "    %-24s %-24s\n" "$1" "$2"
126da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian        shift; shift
127da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      fi
128da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian    else
129da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      printf "    %-24s\n" "$1"
130da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      shift
131da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian    fi
132da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  done
13390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
13490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
13590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubershow_help() {
136da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  show_help_pre
137da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  show_help_post
13890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
13990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
14090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#
14190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# List Processing Functions
14290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#
14390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberset_all(){
144da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  value=$1
145da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  shift
146da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  for var in $*; do
147da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian    eval $var=$value
148da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  done
14990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
15090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
15190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberis_in(){
152da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  value=$1
153da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  shift
154da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  for var in $*; do
155da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian    [ $var = $value ] && return 0
156da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  done
157da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  return 1
15890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
15990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
16090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberadd_cflags() {
161da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  CFLAGS="${CFLAGS} $@"
162da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  CXXFLAGS="${CXXFLAGS} $@"
1631b362b15af34006e6a11974088a46d42b903418eJohann}
1641b362b15af34006e6a11974088a46d42b903418eJohann
1651b362b15af34006e6a11974088a46d42b903418eJohannadd_cflags_only() {
166da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  CFLAGS="${CFLAGS} $@"
1671b362b15af34006e6a11974088a46d42b903418eJohann}
1681b362b15af34006e6a11974088a46d42b903418eJohann
1691b362b15af34006e6a11974088a46d42b903418eJohannadd_cxxflags_only() {
170da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  CXXFLAGS="${CXXFLAGS} $@"
17190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
17290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
17390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberadd_ldflags() {
174da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  LDFLAGS="${LDFLAGS} $@"
17590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
17690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
17790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberadd_asflags() {
178da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  ASFLAGS="${ASFLAGS} $@"
17990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
18090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
18190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberadd_extralibs() {
182da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  extralibs="${extralibs} $@"
18390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
18490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
18590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#
18690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# Boolean Manipulation Functions
18790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#
1881184aebb761cbeac9124c37189a80a1a58f04b6bhkuangenable_feature(){
189da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  set_all yes $*
19090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
19190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
1921184aebb761cbeac9124c37189a80a1a58f04b6bhkuangdisable_feature(){
193da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  set_all no $*
19490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
19590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
19690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberenabled(){
197da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  eval test "x\$$1" = "xyes"
19890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
19990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
20090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberdisabled(){
201da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  eval test "x\$$1" = "xno"
20290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
20390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
2042263fc984bdc858ee931d3e35c87c404de923950Johann# Iterates through positional parameters, checks to confirm the parameter has
2052263fc984bdc858ee931d3e35c87c404de923950Johann# not been explicitly (force) disabled, and enables the setting controlled by
2062263fc984bdc858ee931d3e35c87c404de923950Johann# the parameter when the setting is not disabled.
2072263fc984bdc858ee931d3e35c87c404de923950Johann# Note: Does NOT alter RTCD generation options ($RTCD_OPTIONS).
20890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubersoft_enable() {
209da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  for var in $*; do
210da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian    if ! disabled $var; then
211da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      enabled $var || log_echo "  enabling $var"
212da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      enable_feature $var
213da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian    fi
214da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  done
21590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
21690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
2172263fc984bdc858ee931d3e35c87c404de923950Johann# Iterates through positional parameters, checks to confirm the parameter has
2182263fc984bdc858ee931d3e35c87c404de923950Johann# not been explicitly (force) enabled, and disables the setting controlled by
2192263fc984bdc858ee931d3e35c87c404de923950Johann# the parameter when the setting is not enabled.
2202263fc984bdc858ee931d3e35c87c404de923950Johann# Note: Does NOT alter RTCD generation options ($RTCD_OPTIONS).
22190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubersoft_disable() {
222da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  for var in $*; do
223da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian    if ! enabled $var; then
224da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      disabled $var || log_echo "  disabling $var"
225da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      disable_feature $var
226da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian    fi
227da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  done
22890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
22990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
23090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#
23190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# Text Processing Functions
23290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#
23390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubertoupper(){
234da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
23590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
23690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
23790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubertolower(){
238da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
23990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
24090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
24190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#
24290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# Temporary File Functions
24390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#
24490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubersource_path=${0%/*}
2451184aebb761cbeac9124c37189a80a1a58f04b6bhkuangenable_feature source_path_used
246ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianif [ -z "$source_path" ] || [ "$source_path" = "." ]; then
247da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  source_path="`pwd`"
248da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  disable_feature source_path_used
24990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberfi
25090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
25190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberif test ! -z "$TMPDIR" ; then
252da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  TMPDIRx="${TMPDIR}"
25390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberelif test ! -z "$TEMPDIR" ; then
254da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  TMPDIRx="${TEMPDIR}"
25590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberelse
256da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  TMPDIRx="/tmp"
25790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberfi
2581184aebb761cbeac9124c37189a80a1a58f04b6bhkuangRAND=$(awk 'BEGIN { srand(); printf "%d\n",(rand() * 32768)}')
2591184aebb761cbeac9124c37189a80a1a58f04b6bhkuangTMP_H="${TMPDIRx}/vpx-conf-$$-${RAND}.h"
2601184aebb761cbeac9124c37189a80a1a58f04b6bhkuangTMP_C="${TMPDIRx}/vpx-conf-$$-${RAND}.c"
2611184aebb761cbeac9124c37189a80a1a58f04b6bhkuangTMP_CC="${TMPDIRx}/vpx-conf-$$-${RAND}.cc"
2621184aebb761cbeac9124c37189a80a1a58f04b6bhkuangTMP_O="${TMPDIRx}/vpx-conf-$$-${RAND}.o"
2631184aebb761cbeac9124c37189a80a1a58f04b6bhkuangTMP_X="${TMPDIRx}/vpx-conf-$$-${RAND}.x"
2641184aebb761cbeac9124c37189a80a1a58f04b6bhkuangTMP_ASM="${TMPDIRx}/vpx-conf-$$-${RAND}.asm"
26590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
26690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberclean_temp_files() {
267da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  rm -f ${TMP_C} ${TMP_CC} ${TMP_H} ${TMP_O} ${TMP_X} ${TMP_ASM}
268da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  enabled gcov && rm -f ${TMP_C%.c}.gcno ${TMP_CC%.cc}.gcno
26990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
27090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
27190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#
27290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# Toolchain Check Functions
27390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#
27490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubercheck_cmd() {
275da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  enabled external_build && return
276da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  log "$@"
277da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  "$@" >>${logfile} 2>&1
27890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
27990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
28090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubercheck_cc() {
281da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  log check_cc "$@"
282da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  cat >${TMP_C}
283da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  log_file ${TMP_C}
284da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  check_cmd ${CC} ${CFLAGS} "$@" -c -o ${TMP_O} ${TMP_C}
28590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
28690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
2871b362b15af34006e6a11974088a46d42b903418eJohanncheck_cxx() {
288da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  log check_cxx "$@"
289da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  cat >${TMP_CC}
290da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  log_file ${TMP_CC}
291da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  check_cmd ${CXX} ${CXXFLAGS} "$@" -c -o ${TMP_O} ${TMP_CC}
2921b362b15af34006e6a11974088a46d42b903418eJohann}
2931b362b15af34006e6a11974088a46d42b903418eJohann
29490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubercheck_cpp() {
295da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  log check_cpp "$@"
296da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  cat > ${TMP_C}
297da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  log_file ${TMP_C}
298da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  check_cmd ${CC} ${CFLAGS} "$@" -E -o ${TMP_O} ${TMP_C}
29990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
30090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
30190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubercheck_ld() {
302da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  log check_ld "$@"
303da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  check_cc $@ \
304da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian    && check_cmd ${LD} ${LDFLAGS} "$@" -o ${TMP_X} ${TMP_O} ${extralibs}
30590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
30690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
30790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubercheck_header(){
308da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  log check_header "$@"
309da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  header=$1
310da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  shift
311da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  var=`echo $header | sed 's/[^A-Za-z0-9_]/_/g'`
312da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  disable_feature $var
313da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  check_cpp "$@" <<EOF && enable_feature $var
31490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#include "$header"
31590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberint x;
31690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberEOF
31790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
31890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
31990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubercheck_cflags() {
320da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian log check_cflags "$@"
321da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian check_cc -Werror "$@" <<EOF
32290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberint x;
32390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberEOF
32490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
32590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
3261b362b15af34006e6a11974088a46d42b903418eJohanncheck_cxxflags() {
327da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  log check_cxxflags "$@"
3281b362b15af34006e6a11974088a46d42b903418eJohann
329da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  # Catch CFLAGS that trigger CXX warnings
330da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  case "$CXX" in
331da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian    *c++-analyzer|*clang++|*g++*)
332da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      check_cxx -Werror "$@" <<EOF
3331b362b15af34006e6a11974088a46d42b903418eJohannint x;
3341b362b15af34006e6a11974088a46d42b903418eJohannEOF
3351b362b15af34006e6a11974088a46d42b903418eJohann      ;;
336da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian    *)
337da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      check_cxx -Werror "$@" <<EOF
3381b362b15af34006e6a11974088a46d42b903418eJohannint x;
3391b362b15af34006e6a11974088a46d42b903418eJohannEOF
3401b362b15af34006e6a11974088a46d42b903418eJohann      ;;
3411b362b15af34006e6a11974088a46d42b903418eJohann    esac
3421b362b15af34006e6a11974088a46d42b903418eJohann}
3431b362b15af34006e6a11974088a46d42b903418eJohann
34490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubercheck_add_cflags() {
345da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  check_cxxflags "$@" && add_cxxflags_only "$@"
346da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  check_cflags "$@" && add_cflags_only "$@"
34790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
34890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
3492263fc984bdc858ee931d3e35c87c404de923950Johanncheck_add_cxxflags() {
3502263fc984bdc858ee931d3e35c87c404de923950Johann  check_cxxflags "$@" && add_cxxflags_only "$@"
3512263fc984bdc858ee931d3e35c87c404de923950Johann}
3522263fc984bdc858ee931d3e35c87c404de923950Johann
35390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubercheck_add_asflags() {
354da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  log add_asflags "$@"
355da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  add_asflags "$@"
35690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
35790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
35890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubercheck_add_ldflags() {
359da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  log add_ldflags "$@"
360da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  add_ldflags "$@"
36190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
36290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
363538f6170b788de7408b06efc6613dc98579aa6a6Andreas Hubercheck_asm_align() {
364da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  log check_asm_align "$@"
365da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  cat >${TMP_ASM} <<EOF
366538f6170b788de7408b06efc6613dc98579aa6a6Andreas Hubersection .rodata
367538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huberalign 16
368538f6170b788de7408b06efc6613dc98579aa6a6Andreas HuberEOF
369da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  log_file ${TMP_ASM}
370da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  check_cmd ${AS} ${ASFLAGS} -o ${TMP_O} ${TMP_ASM}
371da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  readelf -WS ${TMP_O} >${TMP_X}
372da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  log_file ${TMP_X}
373da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  if ! grep -q '\.rodata .* 16$' ${TMP_X}; then
374da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian    die "${AS} ${ASFLAGS} does not support section alignment (nasm <=2.08?)"
375da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  fi
376538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber}
377538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber
3782ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian# tests for -m$1 toggling the feature given in $2. If $2 is empty $1 is used.
3792ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramaniancheck_gcc_machine_option() {
380da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  opt="$1"
381da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  feature="$2"
382da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  [ -n "$feature" ] || feature="$opt"
383da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian
384da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  if enabled gcc && ! disabled "$feature" && ! check_cflags "-m$opt"; then
385da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian    RTCD_OPTIONS="${RTCD_OPTIONS}--disable-$feature "
386da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  else
387da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian    soft_enable "$feature"
388da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  fi
3892ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian}
3902ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian
39190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberwrite_common_config_banner() {
392da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  print_webm_license config.mk "##" ""
393da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  echo '# This file automatically generated by configure. Do not edit!' >> config.mk
394da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  echo "TOOLCHAIN := ${toolchain}" >> config.mk
39590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
396da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  case ${toolchain} in
397da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian    *-linux-rvct)
398da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      echo "ALT_LIBC := ${alt_libc}" >> config.mk
399da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      ;;
400da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  esac
40190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
40290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
40390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberwrite_common_config_targets() {
404da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  for t in ${all_targets}; do
405da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian    if enabled ${t}; then
406da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      if enabled child; then
407da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian        fwrite config.mk "ALL_TARGETS += ${t}-${toolchain}"
408da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      else
409da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian        fwrite config.mk "ALL_TARGETS += ${t}"
410da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      fi
411da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian    fi
41290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    true;
413da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  done
414da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  true
41590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
41690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
41790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberwrite_common_target_config_mk() {
418da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  saved_CC="${CC}"
419da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  saved_CXX="${CXX}"
420da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  enabled ccache && CC="ccache ${CC}"
421da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  enabled ccache && CXX="ccache ${CXX}"
422da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  print_webm_license $1 "##" ""
42390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
424da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  cat >> $1 << EOF
42590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# This file automatically generated by configure. Do not edit!
42690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberSRC_PATH="$source_path"
42790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberSRC_PATH_BARE=$source_path
42890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberBUILD_PFX=${BUILD_PFX}
42990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberTOOLCHAIN=${toolchain}
43090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberASM_CONVERSION=${asm_conversion_cmd:-${source_path}/build/make/ads2gas.pl}
431ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangGEN_VCPROJ=${gen_vcproj_cmd}
432ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangMSVS_ARCH_DIR=${msvs_arch_dir}
43390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
43490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberCC=${CC}
4351b362b15af34006e6a11974088a46d42b903418eJohannCXX=${CXX}
43690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberAR=${AR}
43790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberLD=${LD}
43890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberAS=${AS}
43990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberSTRIP=${STRIP}
44090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberNM=${NM}
44190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
442f71323e297a928af368937089d3ed71239786f86Andreas HuberCFLAGS  = ${CFLAGS}
4431b362b15af34006e6a11974088a46d42b903418eJohannCXXFLAGS  = ${CXXFLAGS}
4442263fc984bdc858ee931d3e35c87c404de923950JohannARFLAGS = -crs\$(if \$(quiet),,v)
44590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberLDFLAGS = ${LDFLAGS}
44690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberASFLAGS = ${ASFLAGS}
44790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberextralibs = ${extralibs}
44890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberAS_SFX    = ${AS_SFX:-.asm}
4491b362b15af34006e6a11974088a46d42b903418eJohannEXE_SFX   = ${EXE_SFX}
450ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangVCPROJ_SFX = ${VCPROJ_SFX}
4511b362b15af34006e6a11974088a46d42b903418eJohannRTCD_OPTIONS = ${RTCD_OPTIONS}
45290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberEOF
45390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
454da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  if enabled rvct; then cat >> $1 << EOF
455ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangfmt_deps = sed -e 's;^__image.axf;\${@:.d=.o} \$@;' #hide
45690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberEOF
457da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  else cat >> $1 << EOF
458ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangfmt_deps = sed -e 's;^\([a-zA-Z0-9_]*\)\.o;\${@:.d=.o} \$@;'
45990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberEOF
460da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  fi
46190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
462da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  print_config_mk ARCH   "${1}" ${ARCH_LIST}
463da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  print_config_mk HAVE   "${1}" ${HAVE_LIST}
464da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  print_config_mk CONFIG "${1}" ${CONFIG_LIST}
465da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  print_config_mk HAVE   "${1}" gnu_strip
46690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
467da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  enabled msvs && echo "CONFIG_VS_VERSION=${vs_version}" >> "${1}"
46890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
469da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  CC="${saved_CC}"
470da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  CXX="${saved_CXX}"
47190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
47290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
47390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberwrite_common_target_config_h() {
474da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  print_webm_license ${TMP_H} "/*" " */"
475da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  cat >> ${TMP_H} << EOF
47690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber/* This file automatically generated by configure. Do not edit! */
4771b362b15af34006e6a11974088a46d42b903418eJohann#ifndef VPX_CONFIG_H
4781b362b15af34006e6a11974088a46d42b903418eJohann#define VPX_CONFIG_H
47990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#define RESTRICT    ${RESTRICT}
480ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang#define INLINE      ${INLINE}
48190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberEOF
482da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  print_config_h ARCH   "${TMP_H}" ${ARCH_LIST}
483da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  print_config_h HAVE   "${TMP_H}" ${HAVE_LIST}
484da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  print_config_h CONFIG "${TMP_H}" ${CONFIG_LIST}
485da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  print_config_vars_h   "${TMP_H}" ${VAR_LIST}
486da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  echo "#endif /* VPX_CONFIG_H */" >> ${TMP_H}
487da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  mkdir -p `dirname "$1"`
488da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  cmp "$1" ${TMP_H} >/dev/null 2>&1 || mv ${TMP_H} "$1"
48990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
49090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
49190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberprocess_common_cmdline() {
492da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  for opt in "$@"; do
493da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian    optval="${opt#*=}"
494da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian    case "$opt" in
495da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      --child)
496da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian        enable_feature child
49790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        ;;
498da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      --log*)
49990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        logging="$optval"
50090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        if ! disabled logging ; then
501da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          enabled logging || logfile="$logging"
50290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        else
503da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          logfile=/dev/null
50490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        fi
50590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        ;;
506da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      --target=*)
507da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian        toolchain="${toolchain:-${optval}}"
50890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        ;;
509da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      --force-target=*)
510da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian        toolchain="${toolchain:-${optval}}"
511da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian        enable_feature force_toolchain
51290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        ;;
513da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      --cpu=*)
514da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian        tune_cpu="$optval"
51590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        ;;
516da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      --extra-cflags=*)
51779f15823c34ae1e423108295e416213200bb280fAndreas Huber        extra_cflags="${optval}"
51879f15823c34ae1e423108295e416213200bb280fAndreas Huber        ;;
5192263fc984bdc858ee931d3e35c87c404de923950Johann      --extra-cxxflags=*)
5202263fc984bdc858ee931d3e35c87c404de923950Johann        extra_cxxflags="${optval}"
5212263fc984bdc858ee931d3e35c87c404de923950Johann        ;;
522da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      --enable-?*|--disable-?*)
52390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        eval `echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g'`
5241b362b15af34006e6a11974088a46d42b903418eJohann        if echo "${ARCH_EXT_LIST}" | grep "^ *$option\$" >/dev/null; then
525da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          [ $action = "disable" ] && RTCD_OPTIONS="${RTCD_OPTIONS}--disable-${option} "
5261b362b15af34006e6a11974088a46d42b903418eJohann        elif [ $action = "disable" ] && ! disabled $option ; then
5271b362b15af34006e6a11974088a46d42b903418eJohann          echo "${CMDLINE_SELECT}" | grep "^ *$option\$" >/dev/null ||
5281b362b15af34006e6a11974088a46d42b903418eJohann            die_unknown $opt
529da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          log_echo "  disabling $option"
5301b362b15af34006e6a11974088a46d42b903418eJohann        elif [ $action = "enable" ] && ! enabled $option ; then
5311b362b15af34006e6a11974088a46d42b903418eJohann          echo "${CMDLINE_SELECT}" | grep "^ *$option\$" >/dev/null ||
5321b362b15af34006e6a11974088a46d42b903418eJohann            die_unknown $opt
533da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          log_echo "  enabling $option"
5341b362b15af34006e6a11974088a46d42b903418eJohann        fi
5351184aebb761cbeac9124c37189a80a1a58f04b6bhkuang        ${action}_feature $option
53690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        ;;
537da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      --require-?*)
5381b362b15af34006e6a11974088a46d42b903418eJohann        eval `echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g'`
5391b362b15af34006e6a11974088a46d42b903418eJohann        if echo "${ARCH_EXT_LIST}" none | grep "^ *$option\$" >/dev/null; then
5401b362b15af34006e6a11974088a46d42b903418eJohann            RTCD_OPTIONS="${RTCD_OPTIONS}${opt} "
5411b362b15af34006e6a11974088a46d42b903418eJohann        else
5421b362b15af34006e6a11974088a46d42b903418eJohann            die_unknown $opt
5431b362b15af34006e6a11974088a46d42b903418eJohann        fi
5441b362b15af34006e6a11974088a46d42b903418eJohann        ;;
545da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      --force-enable-?*|--force-disable-?*)
54690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        eval `echo "$opt" | sed 's/--force-/action=/;s/-/ option=/;s/-/_/g'`
5471184aebb761cbeac9124c37189a80a1a58f04b6bhkuang        ${action}_feature $option
54890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        ;;
549da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      --libc=*)
55090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        [ -d "${optval}" ] || die "Not a directory: ${optval}"
5511184aebb761cbeac9124c37189a80a1a58f04b6bhkuang        disable_feature builtin_libc
55290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        alt_libc="${optval}"
55390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        ;;
554da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      --as=*)
555ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian        [ "${optval}" = yasm ] || [ "${optval}" = nasm ] \
556da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          || [ "${optval}" = auto ] \
557da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          || die "Must be yasm, nasm or auto: ${optval}"
558538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber        alt_as="${optval}"
559538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber        ;;
560da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      --size-limit=*)
561ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian        w="${optval%%x*}"
562ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian        h="${optval##*x}"
563ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian        VAR_LIST="DECODE_WIDTH_LIMIT ${w} DECODE_HEIGHT_LIMIT ${h}"
564ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian        [ ${w} -gt 0 ] && [ ${h} -gt 0 ] || die "Invalid size-limit: too small."
565ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian        [ ${w} -lt 65536 ] && [ ${h} -lt 65536 ] \
566ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian            || die "Invalid size-limit: too big."
567ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian        enable_feature size_limit
568ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian        ;;
569da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      --prefix=*)
570f71323e297a928af368937089d3ed71239786f86Andreas Huber        prefix="${optval}"
571f71323e297a928af368937089d3ed71239786f86Andreas Huber        ;;
572da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      --libdir=*)
573f71323e297a928af368937089d3ed71239786f86Andreas Huber        libdir="${optval}"
574f71323e297a928af368937089d3ed71239786f86Andreas Huber        ;;
575da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      --sdk-path=*)
5761b362b15af34006e6a11974088a46d42b903418eJohann        [ -d "${optval}" ] || die "Not a directory: ${optval}"
5771b362b15af34006e6a11974088a46d42b903418eJohann        sdk_path="${optval}"
5781b362b15af34006e6a11974088a46d42b903418eJohann        ;;
579da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      --libc|--as|--prefix|--libdir|--sdk-path)
58090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        die "Option ${opt} requires argument"
58190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        ;;
582da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      --help|-h)
583da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian        show_help
58490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        ;;
585da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      *)
586da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian        die_unknown $opt
58790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        ;;
588da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian    esac
589da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  done
59090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
59190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
59290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberprocess_cmdline() {
593da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  for opt do
594da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian    optval="${opt#*=}"
595da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian    case "$opt" in
596da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      *)
597da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian        process_common_cmdline $opt
59890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        ;;
599da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian    esac
600da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  done
60190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
60290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
603f71323e297a928af368937089d3ed71239786f86Andreas Huberpost_process_common_cmdline() {
604da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  prefix="${prefix:-/usr/local}"
605da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  prefix="${prefix%/}"
606da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  libdir="${libdir:-${prefix}/lib}"
607da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  libdir="${libdir%/}"
608da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  if [ "${libdir#${prefix}}" = "${libdir}" ]; then
609da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian    die "Libdir ${libdir} must be a subdirectory of ${prefix}"
610da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  fi
611f71323e297a928af368937089d3ed71239786f86Andreas Huber}
612f71323e297a928af368937089d3ed71239786f86Andreas Huber
61390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberpost_process_cmdline() {
614da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  true;
61590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
61690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
61790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubersetup_gnu_toolchain() {
618da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  CC=${CC:-${CROSS}gcc}
619da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  CXX=${CXX:-${CROSS}g++}
620da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  AR=${AR:-${CROSS}ar}
621da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  LD=${LD:-${CROSS}${link_with_cc:-ld}}
622da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  AS=${AS:-${CROSS}as}
623da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  STRIP=${STRIP:-${CROSS}strip}
624da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  NM=${NM:-${CROSS}nm}
625da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  AS_SFX=.s
626da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  EXE_SFX=
62790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
62890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
629da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian# Reliably find the newest available Darwin SDKs. (Older versions of
630da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian# xcrun don't support --show-sdk-path.)
631da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanianshow_darwin_sdk_path() {
632da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  xcrun --sdk $1 --show-sdk-path 2>/dev/null ||
633da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian    xcodebuild -sdk $1 -version Path 2>/dev/null
634da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian}
635f71323e297a928af368937089d3ed71239786f86Andreas Huber
6362263fc984bdc858ee931d3e35c87c404de923950Johann# Print the major version number of the Darwin SDK specified by $1.
6372263fc984bdc858ee931d3e35c87c404de923950Johannshow_darwin_sdk_major_version() {
6382263fc984bdc858ee931d3e35c87c404de923950Johann  xcrun --sdk $1 --show-sdk-version 2>/dev/null | cut -d. -f1
6392263fc984bdc858ee931d3e35c87c404de923950Johann}
6402263fc984bdc858ee931d3e35c87c404de923950Johann
641da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanianprocess_common_toolchain() {
642da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  if [ -z "$toolchain" ]; then
643da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian    gcctarget="${CHOST:-$(gcc -dumpmachine 2> /dev/null)}"
644f71323e297a928af368937089d3ed71239786f86Andreas Huber
645da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian    # detect tgt_isa
646da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian    case "$gcctarget" in
647da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      armv6*)
648da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian        tgt_isa=armv6
649da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian        ;;
650da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      armv7*-hardfloat*)
651da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian        tgt_isa=armv7
652da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian        float_abi=hard
653da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian        ;;
654da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      armv7*)
655da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian        tgt_isa=armv7
656da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian        float_abi=softfp
657da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian        ;;
658da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      *x86_64*|*amd64*)
659da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian        tgt_isa=x86_64
660da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian        ;;
661da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      *i[3456]86*)
662da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian        tgt_isa=x86
663da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian        ;;
664da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      *sparc*)
665da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian        tgt_isa=sparc
666da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian        ;;
667da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian    esac
66890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
669da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian    # detect tgt_os
670da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian    case "$gcctarget" in
671da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      *darwin10*)
672da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian        tgt_isa=x86_64
673da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian        tgt_os=darwin10
674da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian        ;;
675da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      *darwin11*)
676da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian        tgt_isa=x86_64
677da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian        tgt_os=darwin11
678da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian        ;;
679da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      *darwin12*)
680da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian        tgt_isa=x86_64
681da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian        tgt_os=darwin12
682da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian        ;;
683da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      *darwin13*)
684da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian        tgt_isa=x86_64
685da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian        tgt_os=darwin13
686da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian        ;;
687da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      *darwin14*)
688da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian        tgt_isa=x86_64
689da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian        tgt_os=darwin14
690da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian        ;;
691da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      x86_64*mingw32*)
692da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian        tgt_os=win64
693da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian        ;;
694da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      *mingw32*|*cygwin*)
695da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian        [ -z "$tgt_isa" ] && tgt_isa=x86
696da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian        tgt_os=win32
697da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian        ;;
698da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      *linux*|*bsd*)
699da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian        tgt_os=linux
700da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian        ;;
701da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      *solaris2.10)
702da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian        tgt_os=solaris
703da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian        ;;
704da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      *os2*)
705da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian        tgt_os=os2
706da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian        ;;
707da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian    esac
70890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
709da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian    if [ -n "$tgt_isa" ] && [ -n "$tgt_os" ]; then
710da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      toolchain=${tgt_isa}-${tgt_os}-gcc
711da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian    fi
712da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  fi
71390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
714da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  toolchain=${toolchain:-generic-gnu}
71590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
716da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  is_in ${toolchain} ${all_platforms} || enabled force_toolchain \
717da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian    || die "Unrecognized toolchain '${toolchain}'"
71890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
719da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  enabled child || log_echo "Configuring for target '${toolchain}'"
72090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
721da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  #
722da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  # Set up toolchain variables
723da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  #
724da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  tgt_isa=$(echo ${toolchain} | awk 'BEGIN{FS="-"}{print $1}')
725da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  tgt_os=$(echo ${toolchain} | awk 'BEGIN{FS="-"}{print $2}')
726da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  tgt_cc=$(echo ${toolchain} | awk 'BEGIN{FS="-"}{print $3}')
727538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber
728da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  # Mark the specific ISA requested as enabled
729da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  soft_enable ${tgt_isa}
730da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  enable_feature ${tgt_os}
731da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  enable_feature ${tgt_cc}
7321b362b15af34006e6a11974088a46d42b903418eJohann
733da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  # Enable the architecture family
734da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  case ${tgt_isa} in
735da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian    arm*)
736da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      enable_feature arm
737da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      ;;
738da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian    mips*)
739da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      enable_feature mips
740da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      ;;
741da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  esac
742da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian
743da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  # PIC is probably what we want when building shared libs
744da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  enabled shared && soft_enable pic
745da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian
746da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  # Minimum iOS version for all target platforms (darwin and iphonesimulator).
747da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  IOS_VERSION_MIN="6.0"
748da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian
749da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  # Handle darwin variants. Newer SDKs allow targeting older
750da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  # platforms, so use the newest one available.
751da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  case ${toolchain} in
752da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian    arm*-darwin*)
7532263fc984bdc858ee931d3e35c87c404de923950Johann      add_cflags "-miphoneos-version-min=${IOS_VERSION_MIN}"
7542263fc984bdc858ee931d3e35c87c404de923950Johann      iphoneos_sdk_dir="$(show_darwin_sdk_path iphoneos)"
7552263fc984bdc858ee931d3e35c87c404de923950Johann      if [ -d "${iphoneos_sdk_dir}" ]; then
7562263fc984bdc858ee931d3e35c87c404de923950Johann        add_cflags  "-isysroot ${iphoneos_sdk_dir}"
7572263fc984bdc858ee931d3e35c87c404de923950Johann        add_ldflags "-isysroot ${iphoneos_sdk_dir}"
758da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      fi
759da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      ;;
7602263fc984bdc858ee931d3e35c87c404de923950Johann    x86*-darwin*)
761da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      osx_sdk_dir="$(show_darwin_sdk_path macosx)"
762da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      if [ -d "${osx_sdk_dir}" ]; then
7631b362b15af34006e6a11974088a46d42b903418eJohann        add_cflags  "-isysroot ${osx_sdk_dir}"
7641b362b15af34006e6a11974088a46d42b903418eJohann        add_ldflags "-isysroot ${osx_sdk_dir}"
765da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      fi
766da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      ;;
767da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  esac
7681b362b15af34006e6a11974088a46d42b903418eJohann
769da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  case ${toolchain} in
770da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian    *-darwin8-*)
771da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      add_cflags  "-mmacosx-version-min=10.4"
772da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      add_ldflags "-mmacosx-version-min=10.4"
773da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      ;;
774da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian    *-darwin9-*)
775da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      add_cflags  "-mmacosx-version-min=10.5"
776da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      add_ldflags "-mmacosx-version-min=10.5"
777da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      ;;
778da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian    *-darwin10-*)
779da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      add_cflags  "-mmacosx-version-min=10.6"
780da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      add_ldflags "-mmacosx-version-min=10.6"
781da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      ;;
782da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian    *-darwin11-*)
783da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      add_cflags  "-mmacosx-version-min=10.7"
784da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      add_ldflags "-mmacosx-version-min=10.7"
785da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      ;;
786da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian    *-darwin12-*)
787da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      add_cflags  "-mmacosx-version-min=10.8"
788da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      add_ldflags "-mmacosx-version-min=10.8"
789da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      ;;
790da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian    *-darwin13-*)
791da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      add_cflags  "-mmacosx-version-min=10.9"
792da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      add_ldflags "-mmacosx-version-min=10.9"
793da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      ;;
794da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian    *-darwin14-*)
795da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      add_cflags  "-mmacosx-version-min=10.10"
796da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      add_ldflags "-mmacosx-version-min=10.10"
797da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      ;;
798da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian    *-iphonesimulator-*)
799da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      add_cflags  "-miphoneos-version-min=${IOS_VERSION_MIN}"
800da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      add_ldflags "-miphoneos-version-min=${IOS_VERSION_MIN}"
801da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      iossim_sdk_dir="$(show_darwin_sdk_path iphonesimulator)"
802da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      if [ -d "${iossim_sdk_dir}" ]; then
803da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian        add_cflags  "-isysroot ${iossim_sdk_dir}"
804da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian        add_ldflags "-isysroot ${iossim_sdk_dir}"
805da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      fi
806da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      ;;
807da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  esac
80890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
809da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  # Handle Solaris variants. Solaris 10 needs -lposix4
810da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  case ${toolchain} in
811da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian    sparc-solaris-*)
812da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      add_extralibs -lposix4
813da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      ;;
814da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian    *-solaris-*)
815da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      add_extralibs -lposix4
816da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      ;;
817da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  esac
818538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber
819da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  # Process ARM architecture variants
820da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  case ${toolchain} in
8211b362b15af34006e6a11974088a46d42b903418eJohann    arm*)
822da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      # on arm, isa versions are supersets
823da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      case ${tgt_isa} in
824ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian        arm64|armv8)
825da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          soft_enable neon
826da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          ;;
827ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian        armv7|armv7s)
828da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          soft_enable neon
829da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          # Only enable neon_asm when neon is also enabled.
830da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          enabled neon && soft_enable neon_asm
831da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          # If someone tries to force it through, die.
832da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          if disabled neon && enabled neon_asm; then
833da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian            die "Disabling neon while keeping neon-asm is not supported"
834da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          fi
835da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          case ${toolchain} in
8362263fc984bdc858ee931d3e35c87c404de923950Johann            # Apple iOS SDKs no longer support armv6 as of the version 9
8372263fc984bdc858ee931d3e35c87c404de923950Johann            # release (coincides with release of Xcode 7). Only enable media
8382263fc984bdc858ee931d3e35c87c404de923950Johann            # when using earlier SDK releases.
839da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian            *-darwin*)
8402263fc984bdc858ee931d3e35c87c404de923950Johann              if [ "$(show_darwin_sdk_major_version iphoneos)" -lt 9 ]; then
8412263fc984bdc858ee931d3e35c87c404de923950Johann                soft_enable media
8422263fc984bdc858ee931d3e35c87c404de923950Johann              else
8432263fc984bdc858ee931d3e35c87c404de923950Johann                soft_disable media
8442263fc984bdc858ee931d3e35c87c404de923950Johann                RTCD_OPTIONS="${RTCD_OPTIONS}--disable-media "
8452263fc984bdc858ee931d3e35c87c404de923950Johann              fi
846da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian              ;;
847da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian            *)
848da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian              soft_enable media
8492263fc984bdc858ee931d3e35c87c404de923950Johann              ;;
850da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          esac
851da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          ;;
8521b362b15af34006e6a11974088a46d42b903418eJohann        armv6)
8532263fc984bdc858ee931d3e35c87c404de923950Johann          case ${toolchain} in
8542263fc984bdc858ee931d3e35c87c404de923950Johann            *-darwin*)
8552263fc984bdc858ee931d3e35c87c404de923950Johann              if [ "$(show_darwin_sdk_major_version iphoneos)" -lt 9 ]; then
8562263fc984bdc858ee931d3e35c87c404de923950Johann                soft_enable media
8572263fc984bdc858ee931d3e35c87c404de923950Johann              else
8582263fc984bdc858ee931d3e35c87c404de923950Johann                die "Your iOS SDK does not support armv6."
8592263fc984bdc858ee931d3e35c87c404de923950Johann              fi
8602263fc984bdc858ee931d3e35c87c404de923950Johann              ;;
8612263fc984bdc858ee931d3e35c87c404de923950Johann            *)
8622263fc984bdc858ee931d3e35c87c404de923950Johann              soft_enable media
8632263fc984bdc858ee931d3e35c87c404de923950Johann              ;;
8642263fc984bdc858ee931d3e35c87c404de923950Johann          esac
865da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          ;;
866da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      esac
86790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
868da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      asm_conversion_cmd="cat"
86990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
870da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      case ${tgt_cc} in
87190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        gcc)
872da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          CROSS=${CROSS:-arm-none-linux-gnueabi-}
873da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          link_with_cc=gcc
874da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          setup_gnu_toolchain
875da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          arch_int=${tgt_isa##armv}
876da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          arch_int=${arch_int%%te}
877da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          check_add_asflags --defsym ARCHITECTURE=${arch_int}
878da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          tune_cflags="-mtune="
879da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          if [ ${tgt_isa} = "armv7" ] || [ ${tgt_isa} = "armv7s" ]; then
880da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian            if [ -z "${float_abi}" ]; then
881da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian              check_cpp <<EOF && float_abi=hard || float_abi=softfp
882ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang#ifndef __ARM_PCS_VFP
883ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang#error "not hardfp"
884ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang#endif
885ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangEOF
88690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            fi
887da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian            check_add_cflags  -march=armv7-a -mfloat-abi=${float_abi}
888da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian            check_add_asflags -march=armv7-a -mfloat-abi=${float_abi}
8891b362b15af34006e6a11974088a46d42b903418eJohann
890da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian            if enabled neon || enabled neon_asm; then
891da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian              check_add_cflags -mfpu=neon #-ftree-vectorize
892da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian              check_add_asflags -mfpu=neon
893ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang            fi
894da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          else
895da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian            check_add_cflags -march=${tgt_isa}
896da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian            check_add_asflags -march=${tgt_isa}
897da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          fi
898da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian
899da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          enabled debug && add_asflags -g
900da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          asm_conversion_cmd="${source_path}/build/make/ads2gas.pl"
901da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          if enabled thumb; then
902da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian            asm_conversion_cmd="$asm_conversion_cmd -thumb"
903da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian            check_add_cflags -mthumb
904da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian            check_add_asflags -mthumb -mimplicit-it=always
905da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          fi
906da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          ;;
907ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang        vs*)
908da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          asm_conversion_cmd="${source_path}/build/make/ads2armasm_ms.pl"
909da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          AS_SFX=.s
910da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          msvs_arch_dir=arm-msvs
911da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          disable_feature multithread
912da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          disable_feature unit_tests
913da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          vs_version=${tgt_cc##vs}
914da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          if [ $vs_version -ge 12 ]; then
915da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian            # MSVC 2013 doesn't allow doing plain .exe projects for ARM,
916da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian            # only "AppContainerApplication" which requires an AppxManifest.
917da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian            # Therefore disable the examples, just build the library.
918da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian            disable_feature examples
919da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          fi
920da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          ;;
92190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        rvct)
922da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          CC=armcc
923da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          AR=armar
924da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          AS=armasm
925da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          LD="${source_path}/build/make/armlink_adapter.sh"
926da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          STRIP=arm-none-linux-gnueabi-strip
927da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          NM=arm-none-linux-gnueabi-nm
928da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          tune_cflags="--cpu="
929da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          tune_asflags="--cpu="
930da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          if [ -z "${tune_cpu}" ]; then
931da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian            if [ ${tgt_isa} = "armv7" ]; then
932da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian              if enabled neon || enabled neon_asm
933da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian              then
934da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian                check_add_cflags --fpu=softvfp+vfpv3
935da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian                check_add_asflags --fpu=softvfp+vfpv3
936da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian              fi
937da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian              check_add_cflags --cpu=Cortex-A8
938da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian              check_add_asflags --cpu=Cortex-A8
939da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian            else
940da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian              check_add_cflags --cpu=${tgt_isa##armv}
941da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian              check_add_asflags --cpu=${tgt_isa##armv}
94290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            fi
943da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          fi
944da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          arch_int=${tgt_isa##armv}
945da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          arch_int=${arch_int%%te}
946da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          check_add_asflags --pd "\"ARCHITECTURE SETA ${arch_int}\""
947da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          enabled debug && add_asflags -g
948da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          add_cflags --gnu
949da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          add_cflags --enum_is_int
950da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          add_cflags --wchar32
951da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          ;;
952da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      esac
95390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
954da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      case ${tgt_os} in
95579f15823c34ae1e423108295e416213200bb280fAndreas Huber        none*)
956da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          disable_feature multithread
957da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          disable_feature os_support
958da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          ;;
9591b362b15af34006e6a11974088a46d42b903418eJohann
9601b362b15af34006e6a11974088a46d42b903418eJohann        android*)
961da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          SDK_PATH=${sdk_path}
962da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          COMPILER_LOCATION=`find "${SDK_PATH}" \
963da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian                             -name "arm-linux-androideabi-gcc*" -print -quit`
964da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          TOOLCHAIN_PATH=${COMPILER_LOCATION%/*}/arm-linux-androideabi-
965da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          CC=${TOOLCHAIN_PATH}gcc
966da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          CXX=${TOOLCHAIN_PATH}g++
967da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          AR=${TOOLCHAIN_PATH}ar
968da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          LD=${TOOLCHAIN_PATH}gcc
969da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          AS=${TOOLCHAIN_PATH}as
970da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          STRIP=${TOOLCHAIN_PATH}strip
971da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          NM=${TOOLCHAIN_PATH}nm
972da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian
973da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          if [ -z "${alt_libc}" ]; then
974da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian            alt_libc=`find "${SDK_PATH}" -name arch-arm -print | \
975da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian              awk '{n = split($0,a,"/"); \
976da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian                split(a[n-1],b,"-"); \
977da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian                print $0 " " b[2]}' | \
978da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian                sort -g -k 2 | \
979da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian                awk '{ print $1 }' | tail -1`
980da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          fi
981da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian
982da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          add_cflags "--sysroot=${alt_libc}"
983da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          add_ldflags "--sysroot=${alt_libc}"
984da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian
985da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          # linker flag that routes around a CPU bug in some
986da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          # Cortex-A8 implementations (NDK Dev Guide)
987da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          add_ldflags "-Wl,--fix-cortex-a8"
988da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian
989da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          enable_feature pic
990da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          soft_enable realtime_only
991da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          if [ ${tgt_isa} = "armv7" ]; then
992da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian            soft_enable runtime_cpu_detect
993da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          fi
994da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          if enabled runtime_cpu_detect; then
995da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian            add_cflags "-I${SDK_PATH}/sources/android/cpufeatures"
996da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          fi
9971b362b15af34006e6a11974088a46d42b903418eJohann          ;;
9981b362b15af34006e6a11974088a46d42b903418eJohann
99990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        darwin*)
1000da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          XCRUN_FIND="xcrun --sdk iphoneos --find"
1001da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          CXX="$(${XCRUN_FIND} clang++)"
1002da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          CC="$(${XCRUN_FIND} clang)"
1003da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          AR="$(${XCRUN_FIND} ar)"
1004da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          AS="$(${XCRUN_FIND} as)"
1005da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          STRIP="$(${XCRUN_FIND} strip)"
1006da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          NM="$(${XCRUN_FIND} nm)"
1007da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          RANLIB="$(${XCRUN_FIND} ranlib)"
1008da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          AS_SFX=.s
1009da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian
1010da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          # Special handling of ld for armv6 because libclang_rt.ios.a does
1011da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          # not contain armv6 support in Apple's clang package:
1012da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          #   Apple LLVM version 5.1 (clang-503.0.40) (based on LLVM 3.4svn).
1013da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          # TODO(tomfinegan): Remove this. Our minimum iOS version (6.0)
1014da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          # renders support for armv6 unnecessary because the 3GS and up
1015da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          # support neon.
1016da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          if [ "${tgt_isa}" = "armv6" ]; then
10172ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian            LD="$(${XCRUN_FIND} ld)"
1018da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          else
1019da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian            LD="${CXX:-$(${XCRUN_FIND} ld)}"
1020da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          fi
1021da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian
1022da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          # ASFLAGS is written here instead of using check_add_asflags
1023da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          # because we need to overwrite all of ASFLAGS and purge the
1024da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          # options that were put in above
1025da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          ASFLAGS="-arch ${tgt_isa} -g"
1026da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian
1027da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          add_cflags -arch ${tgt_isa}
1028da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          add_ldflags -arch ${tgt_isa}
1029da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian
1030da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          alt_libc="$(show_darwin_sdk_path iphoneos)"
1031da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          if [ -d "${alt_libc}" ]; then
1032da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian            add_cflags -isysroot ${alt_libc}
1033da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          fi
1034da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian
1035da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          if [ "${LD}" = "${CXX}" ]; then
1036da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian            add_ldflags -miphoneos-version-min="${IOS_VERSION_MIN}"
1037da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          else
1038da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian            add_ldflags -ios_version_min "${IOS_VERSION_MIN}"
1039da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          fi
1040da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian
1041da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          for d in lib usr/lib usr/lib/system; do
1042da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian            try_dir="${alt_libc}/${d}"
1043da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian            [ -d "${try_dir}" ] && add_ldflags -L"${try_dir}"
1044da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          done
1045da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian
1046da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          asm_conversion_cmd="${source_path}/build/make/ads2gas_apple.pl"
10472263fc984bdc858ee931d3e35c87c404de923950Johann
10482263fc984bdc858ee931d3e35c87c404de923950Johann          if [ "$(show_darwin_sdk_major_version iphoneos)" -gt 8 ]; then
10492263fc984bdc858ee931d3e35c87c404de923950Johann            check_add_cflags -fembed-bitcode
10502263fc984bdc858ee931d3e35c87c404de923950Johann            check_add_asflags -fembed-bitcode
10512263fc984bdc858ee931d3e35c87c404de923950Johann            check_add_ldflags -fembed-bitcode
10522263fc984bdc858ee931d3e35c87c404de923950Johann          fi
1053da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          ;;
105490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
105590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        linux*)
1056da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          enable_feature linux
1057da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          if enabled rvct; then
1058da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian            # Check if we have CodeSourcery GCC in PATH. Needed for
1059da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian            # libraries
1060da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian            hash arm-none-linux-gnueabi-gcc 2>&- || \
1061da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian              die "Couldn't find CodeSourcery GCC from PATH"
1062da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian
1063da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian            # Use armcc as a linker to enable translation of
1064da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian            # some gcc specific options such as -lm and -lpthread.
1065da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian            LD="armcc --translate_gcc"
1066da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian
1067da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian            # create configuration file (uses path to CodeSourcery GCC)
1068da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian            armcc --arm_linux_configure --arm_linux_config_file=arm_linux.cfg
1069da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian
1070da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian            add_cflags --arm_linux_paths --arm_linux_config_file=arm_linux.cfg
1071da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian            add_asflags --no_hide_all --apcs=/interwork
1072da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian            add_ldflags --arm_linux_paths --arm_linux_config_file=arm_linux.cfg
1073da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian            enabled pic && add_cflags --apcs=/fpic
1074da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian            enabled pic && add_asflags --apcs=/fpic
1075da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian            enabled shared && add_cflags --shared
1076da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          fi
1077da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          ;;
1078da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      esac
1079da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      ;;
108090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    mips*)
1081da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      link_with_cc=gcc
1082da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      setup_gnu_toolchain
1083da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      tune_cflags="-mtune="
1084da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      if enabled dspr2; then
1085da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian        check_add_cflags -mips32r2 -mdspr2
1086da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      fi
1087da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian
1088da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      if enabled runtime_cpu_detect; then
1089da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian        disable_feature runtime_cpu_detect
1090da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      fi
1091da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian
1092da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      if [ -n "${tune_cpu}" ]; then
1093da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian        case ${tune_cpu} in
1094da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          p5600)
1095da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian            check_add_cflags -mips32r5 -funroll-loops -mload-store-pairs
1096da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian            check_add_cflags -msched-weight -mhard-float -mfp64
1097da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian            check_add_asflags -mips32r5 -mhard-float -mfp64
1098da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian            check_add_ldflags -mfp64
10991b362b15af34006e6a11974088a46d42b903418eJohann            ;;
1100da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          i6400)
1101da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian            check_add_cflags -mips64r6 -mabi=64 -funroll-loops -msched-weight 
1102da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian            check_add_cflags  -mload-store-pairs -mhard-float -mfp64
1103da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian            check_add_asflags -mips64r6 -mabi=64 -mhard-float -mfp64
1104da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian            check_add_ldflags -mips64r6 -mabi=64 -mfp64
11051b362b15af34006e6a11974088a46d42b903418eJohann            ;;
110690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        esac
110790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
1108da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian        if enabled msa; then
1109da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          add_cflags -mmsa
1110da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          add_asflags -mmsa
1111da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          add_ldflags -mmsa
1112da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian        fi
1113da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      fi
1114da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian
1115da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      check_add_cflags -march=${tgt_isa}
1116da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      check_add_asflags -march=${tgt_isa}
1117da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      check_add_asflags -KPIC
1118da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      ;;
1119da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian    x86*)
1120da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      case  ${tgt_os} in
1121da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian        win*)
1122da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          enabled gcc && add_cflags -fno-common
1123da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          ;;
1124da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian        solaris*)
1125da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          CC=${CC:-${CROSS}gcc}
1126da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          CXX=${CXX:-${CROSS}g++}
1127da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          LD=${LD:-${CROSS}gcc}
1128da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          CROSS=${CROSS:-g}
1129da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          ;;
1130da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian        os2)
11312263fc984bdc858ee931d3e35c87c404de923950Johann          disable_feature pic
1132da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          AS=${AS:-nasm}
11332263fc984bdc858ee931d3e35c87c404de923950Johann          add_ldflags -Zhigh-mem
1134da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          ;;
1135da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      esac
1136da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian
1137da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      AS="${alt_as:-${AS:-auto}}"
1138da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      case  ${tgt_cc} in
1139da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian        icc*)
1140da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          CC=${CC:-icc}
1141da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          LD=${LD:-icc}
1142da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          setup_gnu_toolchain
1143da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          add_cflags -use-msasm  # remove -use-msasm too?
1144da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          # add -no-intel-extensions to suppress warning #10237
1145da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          # refer to http://software.intel.com/en-us/forums/topic/280199
1146da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          add_ldflags -i-static -no-intel-extensions
1147da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          enabled x86_64 && add_cflags -ipo -static -O3 -no-prec-div
1148da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          enabled x86_64 && AR=xiar
1149da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          case ${tune_cpu} in
1150da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian            atom*)
1151da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian              tune_cflags="-x"
1152da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian              tune_cpu="SSE3_ATOM"
1153da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian              ;;
1154da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian            *)
1155da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian              tune_cflags="-march="
1156da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian              ;;
1157da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          esac
1158da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          ;;
1159da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian        gcc*)
1160da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          link_with_cc=gcc
1161da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          tune_cflags="-march="
1162da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          setup_gnu_toolchain
1163da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          #for 32 bit x86 builds, -O3 did not turn on this flag
1164da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          enabled optimizations && disabled gprof && check_add_cflags -fomit-frame-pointer
1165da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          ;;
1166da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian        vs*)
1167da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          # When building with Microsoft Visual Studio the assembler is
1168da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          # invoked directly. Checking at configure time is unnecessary.
1169da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          # Skip the check by setting AS arbitrarily
1170da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          AS=msvs
1171da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          msvs_arch_dir=x86-msvs
1172da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          vc_version=${tgt_cc##vs}
1173da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          case $vc_version in
1174da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian            7|8|9|10)
1175da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian              echo "${tgt_cc} does not support avx/avx2, disabling....."
1176da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian              RTCD_OPTIONS="${RTCD_OPTIONS}--disable-avx --disable-avx2 "
1177da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian              soft_disable avx
1178da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian              soft_disable avx2
1179da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian              ;;
1180da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          esac
1181da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          ;;
1182da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      esac
1183da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian
1184da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      bits=32
1185da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      enabled x86_64 && bits=64
1186da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      check_cpp <<EOF && bits=x32
1187da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian#if !defined(__ILP32__) || !defined(__x86_64__)
1188ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian#error "not x32"
1189ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian#endif
1190ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh VenkatasubramanianEOF
1191da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      case ${tgt_cc} in
1192da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian        gcc*)
1193da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          add_cflags -m${bits}
1194da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          add_ldflags -m${bits}
1195da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          ;;
1196da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      esac
1197da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian
1198da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      soft_enable runtime_cpu_detect
1199da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      # We can't use 'check_cflags' until the compiler is configured and CC is
1200da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      # populated.
1201da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      check_gcc_machine_option mmx
1202da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      check_gcc_machine_option sse
1203da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      check_gcc_machine_option sse2
1204da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      check_gcc_machine_option sse3
1205da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      check_gcc_machine_option ssse3
1206da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      check_gcc_machine_option sse4 sse4_1
1207da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      check_gcc_machine_option avx
1208da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      check_gcc_machine_option avx2
1209da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian
1210da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      case "${AS}" in
1211da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian        auto|"")
1212da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          which nasm >/dev/null 2>&1 && AS=nasm
1213da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          which yasm >/dev/null 2>&1 && AS=yasm
1214da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          if [ "${AS}" = nasm ] ; then
1215da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian            # Apple ships version 0.98 of nasm through at least Xcode 6. Revisit
1216da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian            # this check if they start shipping a compatible version.
1217da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian            apple=`nasm -v | grep "Apple"`
1218da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian            [ -n "${apple}" ] \
1219da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian              && echo "Unsupported version of nasm: ${apple}" \
1220da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian              && AS=""
1221da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          fi
1222da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          [ "${AS}" = auto ] || [ -z "${AS}" ] \
12232263fc984bdc858ee931d3e35c87c404de923950Johann            && die "Neither yasm nor nasm have been found." \
12242263fc984bdc858ee931d3e35c87c404de923950Johann                   "See the prerequisites section in the README for more info."
1225da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          ;;
1226da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      esac
1227da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      log_echo "  using $AS"
1228da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      [ "${AS##*/}" = nasm ] && add_asflags -Ox
1229da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      AS_SFX=.asm
1230da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      case  ${tgt_os} in
1231da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian        win32)
1232da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          add_asflags -f win32
1233da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          enabled debug && add_asflags -g cv8
1234da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          EXE_SFX=.exe
1235da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          ;;
1236da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian        win64)
1237da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          add_asflags -f x64
1238da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          enabled debug && add_asflags -g cv8
1239da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          EXE_SFX=.exe
1240da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          ;;
1241da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian        linux*|solaris*|android*)
1242da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          add_asflags -f elf${bits}
1243da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          enabled debug && [ "${AS}" = yasm ] && add_asflags -g dwarf2
1244da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          enabled debug && [ "${AS}" = nasm ] && add_asflags -g
1245da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          [ "${AS##*/}" = nasm ] && check_asm_align
1246da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          ;;
1247da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian        darwin*)
1248da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          add_asflags -f macho${bits}
1249da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          enabled x86 && darwin_arch="-arch i386" || darwin_arch="-arch x86_64"
1250da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          add_cflags  ${darwin_arch}
1251da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          add_ldflags ${darwin_arch}
1252da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          # -mdynamic-no-pic is still a bit of voodoo -- it was required at
1253da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          # one time, but does not seem to be now, and it breaks some of the
1254da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          # code that still relies on inline assembly.
1255da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          # enabled icc && ! enabled pic && add_cflags -fno-pic -mdynamic-no-pic
1256da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          enabled icc && ! enabled pic && add_cflags -fno-pic
1257da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          ;;
1258da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian        iphonesimulator)
1259da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          add_asflags -f macho${bits}
1260da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          enabled x86 && sim_arch="-arch i386" || sim_arch="-arch x86_64"
1261da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          add_cflags  ${sim_arch}
1262da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          add_ldflags ${sim_arch}
12632263fc984bdc858ee931d3e35c87c404de923950Johann
12642263fc984bdc858ee931d3e35c87c404de923950Johann          if [ "$(show_darwin_sdk_major_version iphonesimulator)" -gt 8 ]; then
12652263fc984bdc858ee931d3e35c87c404de923950Johann            # yasm v1.3.0 doesn't know what -fembed-bitcode means, so turning it
12662263fc984bdc858ee931d3e35c87c404de923950Johann            # on is pointless (unless building a C-only lib). Warn the user, but
12672263fc984bdc858ee931d3e35c87c404de923950Johann            # do nothing here.
12682263fc984bdc858ee931d3e35c87c404de923950Johann            log "Warning: Bitcode embed disabled for simulator targets."
12692263fc984bdc858ee931d3e35c87c404de923950Johann          fi
1270da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          ;;
1271da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian        os2)
1272da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          add_asflags -f aout
1273da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          enabled debug && add_asflags -g
1274da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          EXE_SFX=.exe
1275da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          ;;
1276da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian        *)
1277da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          log "Warning: Unknown os $tgt_os while setting up $AS flags"
1278da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          ;;
1279da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      esac
1280da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      ;;
1281da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian    *-gcc|generic-gnu)
1282da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      link_with_cc=gcc
1283da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      enable_feature gcc
1284da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      setup_gnu_toolchain
1285da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      ;;
1286da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  esac
128790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
1288da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  # Try to enable CPU specific tuning
1289da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  if [ -n "${tune_cpu}" ]; then
1290da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian    if [ -n "${tune_cflags}" ]; then
1291da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      check_add_cflags ${tune_cflags}${tune_cpu} || \
1292da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian        die "Requested CPU '${tune_cpu}' not supported by compiler"
1293da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian    fi
129490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    if [ -n "${tune_asflags}" ]; then
1295da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      check_add_asflags ${tune_asflags}${tune_cpu} || \
1296da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian        die "Requested CPU '${tune_cpu}' not supported by assembler"
1297da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian    fi
129890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    if [ -z "${tune_cflags}${tune_asflags}" ]; then
1299da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      log_echo "Warning: CPU tuning not supported by this toolchain"
130090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    fi
1301da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  fi
1302da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian
1303da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  if enabled debug; then
1304da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian    check_add_cflags -g && check_add_ldflags -g
1305da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  else
1306da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian    check_add_cflags -DNDEBUG
1307da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  fi
1308da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian
1309da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  enabled gprof && check_add_cflags -pg && check_add_ldflags -pg
1310da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  enabled gcov &&
1311da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian    check_add_cflags -fprofile-arcs -ftest-coverage &&
1312da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian    check_add_ldflags -fprofile-arcs -ftest-coverage
1313da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian
1314da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  if enabled optimizations; then
1315da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian    if enabled rvct; then
1316da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      enabled small && check_add_cflags -Ospace || check_add_cflags -Otime
1317ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    else
1318da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      enabled small && check_add_cflags -O2 ||  check_add_cflags -O3
1319ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    fi
1320da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  fi
1321ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
1322da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  if [ "${tgt_isa}" = "x86_64" ] || [ "${tgt_isa}" = "x86" ]; then
1323da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian    soft_enable use_x86inc
1324da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  fi
132590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
1326da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  # Position Independent Code (PIC) support, for building relocatable
1327da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  # shared objects
1328da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  enabled gcc && enabled pic && check_add_cflags -fPIC
1329f3bed9137f66ef693bd406e43b17e9a1114f1e14hkuang
1330da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  # Work around longjmp interception on glibc >= 2.11, to improve binary
1331da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  # compatibility. See http://code.google.com/p/webm/issues/detail?id=166
1332da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  enabled linux && check_add_cflags -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=0
133390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
1334da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  # Check for strip utility variant
1335da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  ${STRIP} -V 2>/dev/null | grep GNU >/dev/null && enable_feature gnu_strip
13361b362b15af34006e6a11974088a46d42b903418eJohann
1337da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  # Try to determine target endianness
1338da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  check_cc <<EOF
1339da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanianunsigned int e = 'O'<<24 | '2'<<16 | 'B'<<8 | 'E';
134090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberEOF
134190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    [ -f "${TMP_O}" ] && od -A n -t x1 "${TMP_O}" | tr -d '\n' |
13421184aebb761cbeac9124c37189a80a1a58f04b6bhkuang        grep '4f *32 *42 *45' >/dev/null 2>&1 && enable_feature big_endian
134390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
1344ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang    # Try to find which inline keywords are supported
1345ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang    check_cc <<EOF && INLINE="inline"
1346da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanianstatic inline function() {}
1347ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangEOF
1348ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang
1349da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  # Almost every platform uses pthreads.
1350da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  if enabled multithread; then
13511b362b15af34006e6a11974088a46d42b903418eJohann    case ${toolchain} in
1352da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      *-win*-vs*)
1353da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian        ;;
1354da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      *-android-gcc)
1355da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian        ;;
1356da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      *)
1357da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian        check_header pthread.h && add_extralibs -lpthread
13581b362b15af34006e6a11974088a46d42b903418eJohann        ;;
13591b362b15af34006e6a11974088a46d42b903418eJohann    esac
1360da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  fi
13611b362b15af34006e6a11974088a46d42b903418eJohann
1362da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  # only for MIPS platforms
1363da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  case ${toolchain} in
1364da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian    mips*)
1365da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      if enabled big_endian; then
1366da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian        if enabled dspr2; then
1367da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          echo "dspr2 optimizations are available only for little endian platforms"
1368da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          disable_feature dspr2
1369da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian        fi
1370da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian        if enabled msa; then
1371da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          echo "msa optimizations are available only for little endian platforms"
1372da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian          disable_feature msa
1373da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian        fi
1374da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      fi
1375da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      ;;
1376da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  esac
1377da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian
1378da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  # glibc needs these
1379da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  if enabled linux; then
1380da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian    add_cflags -D_LARGEFILE_SOURCE
1381da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian    add_cflags -D_FILE_OFFSET_BITS=64
1382da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  fi
138390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
138490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
138590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberprocess_toolchain() {
1386da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  process_common_toolchain
138790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
138890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
138990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberprint_config_mk() {
1390da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  saved_prefix="${prefix}"
1391da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  prefix=$1
1392da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  makefile=$2
1393da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  shift 2
1394da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  for cfg; do
1395da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian    if enabled $cfg; then
1396da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      upname="`toupper $cfg`"
1397da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      echo "${prefix}_${upname}=yes" >> $makefile
1398da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian    fi
1399da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  done
1400da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  prefix="${saved_prefix}"
140190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
140290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
140390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberprint_config_h() {
1404da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  saved_prefix="${prefix}"
1405da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  prefix=$1
1406da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  header=$2
1407da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  shift 2
1408da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  for cfg; do
1409da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian    upname="`toupper $cfg`"
1410da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian    if enabled $cfg; then
1411da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      echo "#define ${prefix}_${upname} 1" >> $header
1412da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian    else
1413da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      echo "#define ${prefix}_${upname} 0" >> $header
1414da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian    fi
1415da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  done
1416da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  prefix="${saved_prefix}"
1417ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian}
1418ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
1419ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianprint_config_vars_h() {
1420da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  header=$1
1421da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  shift
1422da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  while [ $# -gt 0 ]; do
1423da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian    upname="`toupper $1`"
1424da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian    echo "#define ${upname} $2" >> $header
1425da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian    shift 2
1426da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  done
142790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
142890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
14291b362b15af34006e6a11974088a46d42b903418eJohannprint_webm_license() {
1430da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  saved_prefix="${prefix}"
1431da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  destination=$1
1432da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  prefix="$2"
1433da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  suffix="$3"
1434da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  shift 3
1435da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  cat <<EOF > ${destination}
14361b362b15af34006e6a11974088a46d42b903418eJohann${prefix} Copyright (c) 2011 The WebM project authors. All Rights Reserved.${suffix}
14371b362b15af34006e6a11974088a46d42b903418eJohann${prefix} ${suffix}
14381b362b15af34006e6a11974088a46d42b903418eJohann${prefix} Use of this source code is governed by a BSD-style license${suffix}
14391b362b15af34006e6a11974088a46d42b903418eJohann${prefix} that can be found in the LICENSE file in the root of the source${suffix}
14401b362b15af34006e6a11974088a46d42b903418eJohann${prefix} tree. An additional intellectual property rights grant can be found${suffix}
14411b362b15af34006e6a11974088a46d42b903418eJohann${prefix} in the file PATENTS.  All contributing project authors may${suffix}
14421b362b15af34006e6a11974088a46d42b903418eJohann${prefix} be found in the AUTHORS file in the root of the source tree.${suffix}
14431b362b15af34006e6a11974088a46d42b903418eJohannEOF
1444da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  prefix="${saved_prefix}"
14451b362b15af34006e6a11974088a46d42b903418eJohann}
14461b362b15af34006e6a11974088a46d42b903418eJohann
144790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberprocess_targets() {
1448da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  true;
144990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
145090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
145190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberprocess_detect() {
1452da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  true;
145390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
145490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
14551184aebb761cbeac9124c37189a80a1a58f04b6bhkuangenable_feature logging
145691037db265ecdd914a26e056cf69207b4f50924ehkuanglogfile="config.log"
145790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberself=$0
145890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberprocess() {
1459da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  cmdline_args="$@"
1460da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  process_cmdline "$@"
1461da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  if enabled child; then
1462da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian    echo "# ${self} $@" >> ${logfile}
1463da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  else
1464da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian    echo "# ${self} $@" > ${logfile}
1465da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  fi
1466da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  post_process_common_cmdline
1467da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  post_process_cmdline
1468da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  process_toolchain
1469da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  process_detect
1470da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  process_targets
1471da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian
1472da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  OOT_INSTALLS="${OOT_INSTALLS}"
1473da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  if enabled source_path_used; then
1474da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  # Prepare the PWD for building.
1475da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  for f in ${OOT_INSTALLS}; do
1476da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian    install -D "${source_path}/$f" "$f"
1477da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  done
1478da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  fi
1479da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  cp "${source_path}/build/make/Makefile" .
1480da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian
1481da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  clean_temp_files
1482da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  true
148390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
1484