configure.sh 43.2 KB
Newer Older
1
#!/bin/sh
John Koleszar's avatar
John Koleszar committed
2
##
3
##  configure.sh
John Koleszar's avatar
John Koleszar committed
4
##
5 6 7 8 9
##  This script is sourced by the main configure script and contains
##  utility functions and other common bits that aren't strictly libvpx
##  related.
##
##  This build system is based in part on the FFmpeg configure script.
John Koleszar's avatar
John Koleszar committed
10 11 12 13 14 15 16
##


#
# Logging / Output Functions
#
die_unknown(){
Johann's avatar
Johann committed
17 18 19 20
  echo "Unknown option \"$1\"."
  echo "See $0 --help for available options."
  clean_temp_files
  exit 1
John Koleszar's avatar
John Koleszar committed
21 22 23
}

die() {
Johann's avatar
Johann committed
24 25 26 27 28 29 30 31 32
  echo "$@"
  echo
  echo "Configuration failed. This could reflect a misconfiguration of your"
  echo "toolchains, improper options selected, or another problem. If you"
  echo "don't see any useful error messages above, the next step is to look"
  echo "at the configure error log file ($logfile) to determine what"
  echo "configure was trying to do when it died."
  clean_temp_files
  exit 1
John Koleszar's avatar
John Koleszar committed
33 34 35
}

log(){
Johann's avatar
Johann committed
36
  echo "$@" >>$logfile
John Koleszar's avatar
John Koleszar committed
37 38 39
}

log_file(){
Johann's avatar
Johann committed
40 41 42
  log BEGIN $1
  cat -n $1 >>$logfile
  log END $1
John Koleszar's avatar
John Koleszar committed
43 44 45
}

log_echo() {
Johann's avatar
Johann committed
46 47
  echo "$@"
  log "$@"
John Koleszar's avatar
John Koleszar committed
48 49 50
}

fwrite () {
Johann's avatar
Johann committed
51 52 53
  outfile=$1
  shift
  echo "$@" >> ${outfile}
John Koleszar's avatar
John Koleszar committed
54 55 56
}

show_help_pre(){
Johann's avatar
Johann committed
57 58 59 60 61 62 63 64
  for opt in ${CMDLINE_SELECT}; do
    opt2=`echo $opt | sed -e 's;_;-;g'`
    if enabled $opt; then
      eval "toggle_${opt}=\"--disable-${opt2}\""
    else
      eval "toggle_${opt}=\"--enable-${opt2} \""
    fi
  done
John Koleszar's avatar
John Koleszar committed
65

Johann's avatar
Johann committed
66
  cat <<EOF
John Koleszar's avatar
John Koleszar committed
67 68 69 70 71
Usage: configure [options]
Options:

Build options:
  --help                      print this message
72
  --log=yes|no|FILE           file configure log is written to [config.log]
John Koleszar's avatar
John Koleszar committed
73 74
  --target=TARGET             target platform tuple [generic-gnu]
  --cpu=CPU                   optimize for a specific cpu rather than a family
Attila Nagy's avatar
Attila Nagy committed
75
  --extra-cflags=ECFLAGS      add ECFLAGS to CFLAGS [$CFLAGS]
76
  --extra-cxxflags=ECXXFLAGS  add ECXXFLAGS to CXXFLAGS [$CXXFLAGS]
John Koleszar's avatar
John Koleszar committed
77 78 79 80
  ${toggle_extra_warnings}    emit harmless warnings (always non-fatal)
  ${toggle_werror}            treat warnings as errors, if possible
                              (not available with all compilers)
  ${toggle_optimizations}     turn on/off compiler optimization flags
81
  ${toggle_pic}               turn on/off Position Independent Code
John Koleszar's avatar
John Koleszar committed
82 83 84 85
  ${toggle_ccache}            turn on/off compiler cache
  ${toggle_debug}             enable/disable debug mode
  ${toggle_gprof}             enable/disable gprof profiling instrumentation
  ${toggle_gcov}              enable/disable gcov coverage instrumentation
86
  ${toggle_thumb}             enable/disable building arm assembly in thumb mode
87 88
  ${toggle_dependency_tracking}
                              disable to speed up one-time build
John Koleszar's avatar
John Koleszar committed
89 90 91 92 93 94 95 96 97 98 99 100

Install options:
  ${toggle_install_docs}      control whether docs are installed
  ${toggle_install_bins}      control whether binaries are installed
  ${toggle_install_libs}      control whether libraries are installed
  ${toggle_install_srcs}      control whether sources are installed


EOF
}

show_help_post(){
Johann's avatar
Johann committed
101
  cat <<EOF
John Koleszar's avatar
John Koleszar committed
102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118


NOTES:
    Object files are built at the place where configure is launched.

    All boolean options can be negated. The default value is the opposite
    of that shown above. If the option --disable-foo is listed, then
    the default value for foo is enabled.

Supported targets:
EOF
  show_targets ${all_platforms}
  echo
  exit 1
}

show_targets() {
Johann's avatar
Johann committed
119 120 121 122 123 124 125 126 127 128 129 130 131 132
  while [ -n "$*" ]; do
    if [ "${1%%-*}" = "${2%%-*}" ]; then
      if [ "${2%%-*}" = "${3%%-*}" ]; then
        printf "    %-24s %-24s %-24s\n" "$1" "$2" "$3"
        shift; shift; shift
      else
        printf "    %-24s %-24s\n" "$1" "$2"
        shift; shift
      fi
    else
      printf "    %-24s\n" "$1"
      shift
    fi
  done
John Koleszar's avatar
John Koleszar committed
133 134 135
}

show_help() {
Johann's avatar
Johann committed
136 137
  show_help_pre
  show_help_post
John Koleszar's avatar
John Koleszar committed
138 139 140 141 142 143
}

#
# List Processing Functions
#
set_all(){
Johann's avatar
Johann committed
144 145 146 147 148
  value=$1
  shift
  for var in $*; do
    eval $var=$value
  done
John Koleszar's avatar
John Koleszar committed
149 150 151
}

is_in(){
Johann's avatar
Johann committed
152 153 154 155 156 157
  value=$1
  shift
  for var in $*; do
    [ $var = $value ] && return 0
  done
  return 1
John Koleszar's avatar
John Koleszar committed
158 159 160
}

add_cflags() {
Johann's avatar
Johann committed
161 162
  CFLAGS="${CFLAGS} $@"
  CXXFLAGS="${CXXFLAGS} $@"
John Koleszar's avatar
John Koleszar committed
163 164 165
}

add_cflags_only() {
Johann's avatar
Johann committed
166
  CFLAGS="${CFLAGS} $@"
John Koleszar's avatar
John Koleszar committed
167 168 169
}

add_cxxflags_only() {
Johann's avatar
Johann committed
170
  CXXFLAGS="${CXXFLAGS} $@"
John Koleszar's avatar
John Koleszar committed
171 172 173
}

add_ldflags() {
Johann's avatar
Johann committed
174
  LDFLAGS="${LDFLAGS} $@"
John Koleszar's avatar
John Koleszar committed
175 176 177
}

add_asflags() {
Johann's avatar
Johann committed
178
  ASFLAGS="${ASFLAGS} $@"
John Koleszar's avatar
John Koleszar committed
179 180 181
}

add_extralibs() {
Johann's avatar
Johann committed
182
  extralibs="${extralibs} $@"
John Koleszar's avatar
John Koleszar committed
183 184 185 186 187
}

#
# Boolean Manipulation Functions
#
188

189
enable_feature(){
Johann's avatar
Johann committed
190
  set_all yes $*
John Koleszar's avatar
John Koleszar committed
191 192
}

193
disable_feature(){
Johann's avatar
Johann committed
194
  set_all no $*
John Koleszar's avatar
John Koleszar committed
195 196 197
}

enabled(){
Johann's avatar
Johann committed
198
  eval test "x\$$1" = "xyes"
John Koleszar's avatar
John Koleszar committed
199 200 201
}

disabled(){
Johann's avatar
Johann committed
202
  eval test "x\$$1" = "xno"
John Koleszar's avatar
John Koleszar committed
203 204
}

205 206 207 208 209 210 211 212 213 214 215 216 217 218
enable_codec(){
  enabled "${1}" || echo "  enabling ${1}"
  enable_feature "${1}"

  is_in "${1}" vp8 vp9 && enable_feature "${1}_encoder" "${1}_decoder"
}

disable_codec(){
  disabled "${1}" || echo "  disabling ${1}"
  disable_feature "${1}"

  is_in "${1}" vp8 vp9 && disable_feature "${1}_encoder" "${1}_decoder"
}

219 220 221 222
# Iterates through positional parameters, checks to confirm the parameter has
# not been explicitly (force) disabled, and enables the setting controlled by
# the parameter when the setting is not disabled.
# Note: Does NOT alter RTCD generation options ($RTCD_OPTIONS).
John Koleszar's avatar
John Koleszar committed
223
soft_enable() {
Johann's avatar
Johann committed
224 225
  for var in $*; do
    if ! disabled $var; then
226
      enabled $var || log_echo "  enabling $var"
Johann's avatar
Johann committed
227 228 229
      enable_feature $var
    fi
  done
John Koleszar's avatar
John Koleszar committed
230 231
}

232 233 234 235
# Iterates through positional parameters, checks to confirm the parameter has
# not been explicitly (force) enabled, and disables the setting controlled by
# the parameter when the setting is not enabled.
# Note: Does NOT alter RTCD generation options ($RTCD_OPTIONS).
John Koleszar's avatar
John Koleszar committed
236
soft_disable() {
Johann's avatar
Johann committed
237 238
  for var in $*; do
    if ! enabled $var; then
239
      disabled $var || log_echo "  disabling $var"
Johann's avatar
Johann committed
240 241 242
      disable_feature $var
    fi
  done
John Koleszar's avatar
John Koleszar committed
243 244 245 246 247 248
}

#
# Text Processing Functions
#
toupper(){
Johann's avatar
Johann committed
249
  echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
John Koleszar's avatar
John Koleszar committed
250 251 252
}

tolower(){
Johann's avatar
Johann committed
253
  echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
John Koleszar's avatar
John Koleszar committed
254 255 256 257 258 259
}

#
# Temporary File Functions
#
source_path=${0%/*}
260
enable_feature source_path_used
261
if [ -z "$source_path" ] || [ "$source_path" = "." ]; then
Johann's avatar
Johann committed
262 263
  source_path="`pwd`"
  disable_feature source_path_used
John Koleszar's avatar
John Koleszar committed
264 265 266
fi

if test ! -z "$TMPDIR" ; then
Johann's avatar
Johann committed
267
  TMPDIRx="${TMPDIR}"
John Koleszar's avatar
John Koleszar committed
268
elif test ! -z "$TEMPDIR" ; then
Johann's avatar
Johann committed
269
  TMPDIRx="${TEMPDIR}"
John Koleszar's avatar
John Koleszar committed
270
else
Johann's avatar
Johann committed
271
  TMPDIRx="/tmp"
John Koleszar's avatar
John Koleszar committed
272
fi
273 274 275 276 277 278 279
RAND=$(awk 'BEGIN { srand(); printf "%d\n",(rand() * 32768)}')
TMP_H="${TMPDIRx}/vpx-conf-$$-${RAND}.h"
TMP_C="${TMPDIRx}/vpx-conf-$$-${RAND}.c"
TMP_CC="${TMPDIRx}/vpx-conf-$$-${RAND}.cc"
TMP_O="${TMPDIRx}/vpx-conf-$$-${RAND}.o"
TMP_X="${TMPDIRx}/vpx-conf-$$-${RAND}.x"
TMP_ASM="${TMPDIRx}/vpx-conf-$$-${RAND}.asm"
John Koleszar's avatar
John Koleszar committed
280 281

clean_temp_files() {
Johann's avatar
Johann committed
282 283
  rm -f ${TMP_C} ${TMP_CC} ${TMP_H} ${TMP_O} ${TMP_X} ${TMP_ASM}
  enabled gcov && rm -f ${TMP_C%.c}.gcno ${TMP_CC%.cc}.gcno
John Koleszar's avatar
John Koleszar committed
284 285 286 287 288 289
}

#
# Toolchain Check Functions
#
check_cmd() {
Johann's avatar
Johann committed
290 291 292
  enabled external_build && return
  log "$@"
  "$@" >>${logfile} 2>&1
John Koleszar's avatar
John Koleszar committed
293 294 295
}

check_cc() {
Johann's avatar
Johann committed
296 297 298 299
  log check_cc "$@"
  cat >${TMP_C}
  log_file ${TMP_C}
  check_cmd ${CC} ${CFLAGS} "$@" -c -o ${TMP_O} ${TMP_C}
John Koleszar's avatar
John Koleszar committed
300 301
}

John Koleszar's avatar
John Koleszar committed
302
check_cxx() {
Johann's avatar
Johann committed
303 304 305 306
  log check_cxx "$@"
  cat >${TMP_CC}
  log_file ${TMP_CC}
  check_cmd ${CXX} ${CXXFLAGS} "$@" -c -o ${TMP_O} ${TMP_CC}
John Koleszar's avatar
John Koleszar committed
307 308
}

John Koleszar's avatar
John Koleszar committed
309
check_cpp() {
Johann's avatar
Johann committed
310 311 312 313
  log check_cpp "$@"
  cat > ${TMP_C}
  log_file ${TMP_C}
  check_cmd ${CC} ${CFLAGS} "$@" -E -o ${TMP_O} ${TMP_C}
John Koleszar's avatar
John Koleszar committed
314 315 316
}

check_ld() {
Johann's avatar
Johann committed
317 318 319
  log check_ld "$@"
  check_cc $@ \
    && check_cmd ${LD} ${LDFLAGS} "$@" -o ${TMP_X} ${TMP_O} ${extralibs}
John Koleszar's avatar
John Koleszar committed
320 321 322
}

check_header(){
Johann's avatar
Johann committed
323 324 325 326 327 328
  log check_header "$@"
  header=$1
  shift
  var=`echo $header | sed 's/[^A-Za-z0-9_]/_/g'`
  disable_feature $var
  check_cpp "$@" <<EOF && enable_feature $var
John Koleszar's avatar
John Koleszar committed
329 330 331 332 333 334
#include "$header"
int x;
EOF
}

check_cflags() {
Johann's avatar
Johann committed
335 336
 log check_cflags "$@"
 check_cc -Werror "$@" <<EOF
John Koleszar's avatar
John Koleszar committed
337 338 339 340
int x;
EOF
}

John Koleszar's avatar
John Koleszar committed
341
check_cxxflags() {
Johann's avatar
Johann committed
342
  log check_cxxflags "$@"
John Koleszar's avatar
John Koleszar committed
343

Johann's avatar
Johann committed
344 345 346 347
  # Catch CFLAGS that trigger CXX warnings
  case "$CXX" in
    *c++-analyzer|*clang++|*g++*)
      check_cxx -Werror "$@" <<EOF
John Koleszar's avatar
John Koleszar committed
348 349 350
int x;
EOF
      ;;
Johann's avatar
Johann committed
351 352
    *)
      check_cxx -Werror "$@" <<EOF
John Koleszar's avatar
John Koleszar committed
353 354 355 356 357 358
int x;
EOF
      ;;
    esac
}

John Koleszar's avatar
John Koleszar committed
359
check_add_cflags() {
Johann's avatar
Johann committed
360 361
  check_cxxflags "$@" && add_cxxflags_only "$@"
  check_cflags "$@" && add_cflags_only "$@"
John Koleszar's avatar
John Koleszar committed
362 363
}

364 365 366 367
check_add_cxxflags() {
  check_cxxflags "$@" && add_cxxflags_only "$@"
}

John Koleszar's avatar
John Koleszar committed
368
check_add_asflags() {
Johann's avatar
Johann committed
369 370
  log add_asflags "$@"
  add_asflags "$@"
John Koleszar's avatar
John Koleszar committed
371 372 373
}

check_add_ldflags() {
Johann's avatar
Johann committed
374 375
  log add_ldflags "$@"
  add_ldflags "$@"
John Koleszar's avatar
John Koleszar committed
376 377
}

Jan Kratochvil's avatar
Jan Kratochvil committed
378
check_asm_align() {
Johann's avatar
Johann committed
379 380
  log check_asm_align "$@"
  cat >${TMP_ASM} <<EOF
Jan Kratochvil's avatar
Jan Kratochvil committed
381 382 383
section .rodata
align 16
EOF
Johann's avatar
Johann committed
384 385 386 387 388 389 390
  log_file ${TMP_ASM}
  check_cmd ${AS} ${ASFLAGS} -o ${TMP_O} ${TMP_ASM}
  readelf -WS ${TMP_O} >${TMP_X}
  log_file ${TMP_X}
  if ! grep -q '\.rodata .* 16$' ${TMP_X}; then
    die "${AS} ${ASFLAGS} does not support section alignment (nasm <=2.08?)"
  fi
Jan Kratochvil's avatar
Jan Kratochvil committed
391 392
}

393 394
# tests for -m$1 toggling the feature given in $2. If $2 is empty $1 is used.
check_gcc_machine_option() {
Johann's avatar
Johann committed
395 396 397 398 399 400 401 402 403
  opt="$1"
  feature="$2"
  [ -n "$feature" ] || feature="$opt"

  if enabled gcc && ! disabled "$feature" && ! check_cflags "-m$opt"; then
    RTCD_OPTIONS="${RTCD_OPTIONS}--disable-$feature "
  else
    soft_enable "$feature"
  fi
404 405
}

406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422
# tests for -m$2, -m$3, -m$4... toggling the feature given in $1.
check_gcc_machine_options() {
  feature="$1"
  shift
  flags="-m$1"
  shift
  for opt in $*; do
    flags="$flags -m$opt"
  done

  if enabled gcc && ! disabled "$feature" && ! check_cflags $flags; then
    RTCD_OPTIONS="${RTCD_OPTIONS}--disable-$feature "
  else
    soft_enable "$feature"
  fi
}

John Koleszar's avatar
John Koleszar committed
423
write_common_config_banner() {
Johann's avatar
Johann committed
424 425 426
  print_webm_license config.mk "##" ""
  echo '# This file automatically generated by configure. Do not edit!' >> config.mk
  echo "TOOLCHAIN := ${toolchain}" >> config.mk
John Koleszar's avatar
John Koleszar committed
427

Johann's avatar
Johann committed
428 429 430 431 432
  case ${toolchain} in
    *-linux-rvct)
      echo "ALT_LIBC := ${alt_libc}" >> config.mk
      ;;
  esac
John Koleszar's avatar
John Koleszar committed
433 434 435
}

write_common_config_targets() {
Johann's avatar
Johann committed
436 437
  for t in ${all_targets}; do
    if enabled ${t}; then
438
      if enabled child; then
Johann's avatar
Johann committed
439 440 441 442 443
        fwrite config.mk "ALL_TARGETS += ${t}-${toolchain}"
      else
        fwrite config.mk "ALL_TARGETS += ${t}"
      fi
    fi
John Koleszar's avatar
John Koleszar committed
444
    true;
Johann's avatar
Johann committed
445 446
  done
  true
John Koleszar's avatar
John Koleszar committed
447 448 449
}

write_common_target_config_mk() {
Johann's avatar
Johann committed
450 451 452 453 454
  saved_CC="${CC}"
  saved_CXX="${CXX}"
  enabled ccache && CC="ccache ${CC}"
  enabled ccache && CXX="ccache ${CXX}"
  print_webm_license $1 "##" ""
John Koleszar's avatar
John Koleszar committed
455

Johann's avatar
Johann committed
456
  cat >> $1 << EOF
John Koleszar's avatar
John Koleszar committed
457 458 459 460 461 462
# This file automatically generated by configure. Do not edit!
SRC_PATH="$source_path"
SRC_PATH_BARE=$source_path
BUILD_PFX=${BUILD_PFX}
TOOLCHAIN=${toolchain}
ASM_CONVERSION=${asm_conversion_cmd:-${source_path}/build/make/ads2gas.pl}
463
GEN_VCPROJ=${gen_vcproj_cmd}
464
MSVS_ARCH_DIR=${msvs_arch_dir}
John Koleszar's avatar
John Koleszar committed
465 466

CC=${CC}
John Koleszar's avatar
John Koleszar committed
467
CXX=${CXX}
John Koleszar's avatar
John Koleszar committed
468 469 470 471 472 473
AR=${AR}
LD=${LD}
AS=${AS}
STRIP=${STRIP}
NM=${NM}

474
CFLAGS  = ${CFLAGS}
John Koleszar's avatar
John Koleszar committed
475
CXXFLAGS  = ${CXXFLAGS}
476
ARFLAGS = -crs\$(if \$(quiet),,v)
John Koleszar's avatar
John Koleszar committed
477 478 479 480
LDFLAGS = ${LDFLAGS}
ASFLAGS = ${ASFLAGS}
extralibs = ${extralibs}
AS_SFX    = ${AS_SFX:-.asm}
John Koleszar's avatar
John Koleszar committed
481
EXE_SFX   = ${EXE_SFX}
482
VCPROJ_SFX = ${VCPROJ_SFX}
483
RTCD_OPTIONS = ${RTCD_OPTIONS}
John Koleszar's avatar
John Koleszar committed
484 485
EOF

Johann's avatar
Johann committed
486
  if enabled rvct; then cat >> $1 << EOF
487
fmt_deps = sed -e 's;^__image.axf;\${@:.d=.o} \$@;' #hide
John Koleszar's avatar
John Koleszar committed
488
EOF
Johann's avatar
Johann committed
489
  else cat >> $1 << EOF
490
fmt_deps = sed -e 's;^\([a-zA-Z0-9_]*\)\.o;\${@:.d=.o} \$@;'
John Koleszar's avatar
John Koleszar committed
491
EOF
Johann's avatar
Johann committed
492
  fi
John Koleszar's avatar
John Koleszar committed
493

Johann's avatar
Johann committed
494 495 496 497
  print_config_mk ARCH   "${1}" ${ARCH_LIST}
  print_config_mk HAVE   "${1}" ${HAVE_LIST}
  print_config_mk CONFIG "${1}" ${CONFIG_LIST}
  print_config_mk HAVE   "${1}" gnu_strip
John Koleszar's avatar
John Koleszar committed
498

Johann's avatar
Johann committed
499
  enabled msvs && echo "CONFIG_VS_VERSION=${vs_version}" >> "${1}"
John Koleszar's avatar
John Koleszar committed
500

Johann's avatar
Johann committed
501 502
  CC="${saved_CC}"
  CXX="${saved_CXX}"
John Koleszar's avatar
John Koleszar committed
503 504 505
}

write_common_target_config_h() {
Johann's avatar
Johann committed
506 507
  print_webm_license ${TMP_H} "/*" " */"
  cat >> ${TMP_H} << EOF
John Koleszar's avatar
John Koleszar committed
508
/* This file automatically generated by configure. Do not edit! */
509 510
#ifndef VPX_CONFIG_H
#define VPX_CONFIG_H
John Koleszar's avatar
John Koleszar committed
511
#define RESTRICT    ${RESTRICT}
512
#define INLINE      ${INLINE}
John Koleszar's avatar
John Koleszar committed
513
EOF
Johann's avatar
Johann committed
514 515 516 517 518 519 520
  print_config_h ARCH   "${TMP_H}" ${ARCH_LIST}
  print_config_h HAVE   "${TMP_H}" ${HAVE_LIST}
  print_config_h CONFIG "${TMP_H}" ${CONFIG_LIST}
  print_config_vars_h   "${TMP_H}" ${VAR_LIST}
  echo "#endif /* VPX_CONFIG_H */" >> ${TMP_H}
  mkdir -p `dirname "$1"`
  cmp "$1" ${TMP_H} >/dev/null 2>&1 || mv ${TMP_H} "$1"
John Koleszar's avatar
John Koleszar committed
521 522 523
}

process_common_cmdline() {
Johann's avatar
Johann committed
524 525 526 527 528
  for opt in "$@"; do
    optval="${opt#*=}"
    case "$opt" in
      --child)
        enable_feature child
John Koleszar's avatar
John Koleszar committed
529
        ;;
Johann's avatar
Johann committed
530
      --log*)
John Koleszar's avatar
John Koleszar committed
531 532
        logging="$optval"
        if ! disabled logging ; then
Johann's avatar
Johann committed
533
          enabled logging || logfile="$logging"
John Koleszar's avatar
John Koleszar committed
534
        else
Johann's avatar
Johann committed
535
          logfile=/dev/null
John Koleszar's avatar
John Koleszar committed
536 537
        fi
        ;;
Johann's avatar
Johann committed
538 539
      --target=*)
        toolchain="${toolchain:-${optval}}"
John Koleszar's avatar
John Koleszar committed
540
        ;;
Johann's avatar
Johann committed
541 542 543
      --force-target=*)
        toolchain="${toolchain:-${optval}}"
        enable_feature force_toolchain
John Koleszar's avatar
John Koleszar committed
544
        ;;
Johann's avatar
Johann committed
545 546
      --cpu=*)
        tune_cpu="$optval"
John Koleszar's avatar
John Koleszar committed
547
        ;;
Johann's avatar
Johann committed
548
      --extra-cflags=*)
Attila Nagy's avatar
Attila Nagy committed
549 550
        extra_cflags="${optval}"
        ;;
551 552 553
      --extra-cxxflags=*)
        extra_cxxflags="${optval}"
        ;;
Johann's avatar
Johann committed
554
      --enable-?*|--disable-?*)
John Koleszar's avatar
John Koleszar committed
555
        eval `echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g'`
556
        if is_in ${option} ${ARCH_EXT_LIST}; then
Johann's avatar
Johann committed
557
          [ $action = "disable" ] && RTCD_OPTIONS="${RTCD_OPTIONS}--disable-${option} "
John Koleszar's avatar
John Koleszar committed
558
        elif [ $action = "disable" ] && ! disabled $option ; then
559
          is_in ${option} ${CMDLINE_SELECT} || die_unknown $opt
560
          log_echo "  disabling $option"
John Koleszar's avatar
John Koleszar committed
561
        elif [ $action = "enable" ] && ! enabled $option ; then
562
          is_in ${option} ${CMDLINE_SELECT} || die_unknown $opt
563
          log_echo "  enabling $option"
564
        fi
James Zern's avatar
James Zern committed
565
        ${action}_feature $option
566
        ;;
Johann's avatar
Johann committed
567
      --require-?*)
568
        eval `echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g'`
569
        if is_in ${option} ${ARCH_EXT_LIST}; then
570 571 572 573
            RTCD_OPTIONS="${RTCD_OPTIONS}${opt} "
        else
            die_unknown $opt
        fi
John Koleszar's avatar
John Koleszar committed
574
        ;;
Johann's avatar
Johann committed
575
      --force-enable-?*|--force-disable-?*)
John Koleszar's avatar
John Koleszar committed
576
        eval `echo "$opt" | sed 's/--force-/action=/;s/-/ option=/;s/-/_/g'`
James Zern's avatar
James Zern committed
577
        ${action}_feature $option
John Koleszar's avatar
John Koleszar committed
578
        ;;
Johann's avatar
Johann committed
579
      --libc=*)
John Koleszar's avatar
John Koleszar committed
580
        [ -d "${optval}" ] || die "Not a directory: ${optval}"
581
        disable_feature builtin_libc
John Koleszar's avatar
John Koleszar committed
582 583
        alt_libc="${optval}"
        ;;
Johann's avatar
Johann committed
584
      --as=*)
585
        [ "${optval}" = yasm ] || [ "${optval}" = nasm ] \
Johann's avatar
Johann committed
586 587
          || [ "${optval}" = auto ] \
          || die "Must be yasm, nasm or auto: ${optval}"
Jan Kratochvil's avatar
Jan Kratochvil committed
588 589
        alt_as="${optval}"
        ;;
Johann's avatar
Johann committed
590
      --size-limit=*)
591 592 593
        w="${optval%%x*}"
        h="${optval##*x}"
        VAR_LIST="DECODE_WIDTH_LIMIT ${w} DECODE_HEIGHT_LIMIT ${h}"
594 595
        [ ${w} -gt 0 ] && [ ${h} -gt 0 ] || die "Invalid size-limit: too small."
        [ ${w} -lt 65536 ] && [ ${h} -lt 65536 ] \
596 597 598
            || die "Invalid size-limit: too big."
        enable_feature size_limit
        ;;
Johann's avatar
Johann committed
599
      --prefix=*)
600 601
        prefix="${optval}"
        ;;
Johann's avatar
Johann committed
602
      --libdir=*)
603 604
        libdir="${optval}"
        ;;
Johann's avatar
Johann committed
605
      --sdk-path=*)
John Koleszar's avatar
John Koleszar committed
606 607 608
        [ -d "${optval}" ] || die "Not a directory: ${optval}"
        sdk_path="${optval}"
        ;;
Johann's avatar
Johann committed
609
      --libc|--as|--prefix|--libdir|--sdk-path)
John Koleszar's avatar
John Koleszar committed
610 611
        die "Option ${opt} requires argument"
        ;;
Johann's avatar
Johann committed
612 613
      --help|-h)
        show_help
John Koleszar's avatar
John Koleszar committed
614
        ;;
Johann's avatar
Johann committed
615 616
      *)
        die_unknown $opt
John Koleszar's avatar
John Koleszar committed
617
        ;;
Johann's avatar
Johann committed
618 619
    esac
  done
John Koleszar's avatar
John Koleszar committed
620 621 622
}

process_cmdline() {
Johann's avatar
Johann committed
623 624 625 626 627
  for opt do
    optval="${opt#*=}"
    case "$opt" in
      *)
        process_common_cmdline $opt
John Koleszar's avatar
John Koleszar committed
628
        ;;
Johann's avatar
Johann committed
629 630
    esac
  done
John Koleszar's avatar
John Koleszar committed
631 632
}

633
post_process_common_cmdline() {
Johann's avatar
Johann committed
634 635 636 637 638 639 640
  prefix="${prefix:-/usr/local}"
  prefix="${prefix%/}"
  libdir="${libdir:-${prefix}/lib}"
  libdir="${libdir%/}"
  if [ "${libdir#${prefix}}" = "${libdir}" ]; then
    die "Libdir ${libdir} must be a subdirectory of ${prefix}"
  fi
641 642
}

John Koleszar's avatar
John Koleszar committed
643
post_process_cmdline() {
Johann's avatar
Johann committed
644
  true;
John Koleszar's avatar
John Koleszar committed
645 646 647
}

setup_gnu_toolchain() {
Johann's avatar
Johann committed
648 649 650 651 652 653 654
  CC=${CC:-${CROSS}gcc}
  CXX=${CXX:-${CROSS}g++}
  AR=${AR:-${CROSS}ar}
  LD=${LD:-${CROSS}${link_with_cc:-ld}}
  AS=${AS:-${CROSS}as}
  STRIP=${STRIP:-${CROSS}strip}
  NM=${NM:-${CROSS}nm}
655
  AS_SFX=.S
Johann's avatar
Johann committed
656
  EXE_SFX=
John Koleszar's avatar
John Koleszar committed
657 658
}

659 660 661 662 663 664 665
# Reliably find the newest available Darwin SDKs. (Older versions of
# xcrun don't support --show-sdk-path.)
show_darwin_sdk_path() {
  xcrun --sdk $1 --show-sdk-path 2>/dev/null ||
    xcodebuild -sdk $1 -version Path 2>/dev/null
}

666 667 668 669 670
# Print the major version number of the Darwin SDK specified by $1.
show_darwin_sdk_major_version() {
  xcrun --sdk $1 --show-sdk-version 2>/dev/null | cut -d. -f1
}

671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690
# Print the Xcode version.
show_xcode_version() {
  xcodebuild -version | head -n1 | cut -d' ' -f2
}

# Fails when Xcode version is less than 6.3.
check_xcode_minimum_version() {
  xcode_major=$(show_xcode_version | cut -f1 -d.)
  xcode_minor=$(show_xcode_version | cut -f2 -d.)
  xcode_min_major=6
  xcode_min_minor=3
  if [ ${xcode_major} -lt ${xcode_min_major} ]; then
    return 1
  fi
  if [ ${xcode_major} -eq ${xcode_min_major} ] \
    && [ ${xcode_minor} -lt ${xcode_min_minor} ]; then
    return 1
  fi
}

John Koleszar's avatar
John Koleszar committed
691
process_common_toolchain() {
Johann's avatar
Johann committed
692 693 694 695
  if [ -z "$toolchain" ]; then
    gcctarget="${CHOST:-$(gcc -dumpmachine 2> /dev/null)}"
    # detect tgt_isa
    case "$gcctarget" in
696 697 698
      aarch64*)
        tgt_isa=arm64
        ;;
699
      armv7*-hardfloat* | armv7*-gnueabihf | arm-*-gnueabihf)
Johann's avatar
Johann committed
700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715
        tgt_isa=armv7
        float_abi=hard
        ;;
      armv7*)
        tgt_isa=armv7
        float_abi=softfp
        ;;
      *x86_64*|*amd64*)
        tgt_isa=x86_64
        ;;
      *i[3456]86*)
        tgt_isa=x86
        ;;
      *sparc*)
        tgt_isa=sparc
        ;;
716 717 718
      power*64*-*)
        tgt_isa=ppc64
        ;;
719 720 721
      power*)
        tgt_isa=ppc
        ;;
YinShiyou's avatar
YinShiyou committed
722 723 724 725 726 727
      *mips64el*)
        tgt_isa=mips64
        ;;
      *mips32el*)
        tgt_isa=mips32
        ;;
Johann's avatar
Johann committed
728
    esac
John Koleszar's avatar
John Koleszar committed
729

Johann's avatar
Johann committed
730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747
    # detect tgt_os
    case "$gcctarget" in
      *darwin10*)
        tgt_isa=x86_64
        tgt_os=darwin10
        ;;
      *darwin11*)
        tgt_isa=x86_64
        tgt_os=darwin11
        ;;
      *darwin12*)
        tgt_isa=x86_64
        tgt_os=darwin12
        ;;
      *darwin13*)
        tgt_isa=x86_64
        tgt_os=darwin13
        ;;
748 749 750 751
      *darwin14*)
        tgt_isa=x86_64
        tgt_os=darwin14
        ;;
752 753 754 755
      *darwin15*)
        tgt_isa=x86_64
        tgt_os=darwin15
        ;;
756 757 758 759
      *darwin16*)
        tgt_isa=x86_64
        tgt_os=darwin16
        ;;
Johann's avatar
Johann committed
760 761
      x86_64*mingw32*)
        tgt_os=win64
Moriyoshi Koizumi's avatar
Moriyoshi Koizumi committed
762 763 764
        ;;
      x86_64*cygwin*)
        tgt_os=win64
Johann's avatar
Johann committed
765 766 767 768 769 770 771 772 773 774 775 776 777 778 779
        ;;
      *mingw32*|*cygwin*)
        [ -z "$tgt_isa" ] && tgt_isa=x86
        tgt_os=win32
        ;;
      *linux*|*bsd*)
        tgt_os=linux
        ;;
      *solaris2.10)
        tgt_os=solaris
        ;;
      *os2*)
        tgt_os=os2
        ;;
    esac
John Koleszar's avatar
John Koleszar committed
780

Johann's avatar
Johann committed
781 782 783 784
    if [ -n "$tgt_isa" ] && [ -n "$tgt_os" ]; then
      toolchain=${tgt_isa}-${tgt_os}-gcc
    fi
  fi
John Koleszar's avatar
John Koleszar committed
785

Johann's avatar
Johann committed
786
  toolchain=${toolchain:-generic-gnu}
John Koleszar's avatar
John Koleszar committed
787

Johann's avatar
Johann committed
788 789
  is_in ${toolchain} ${all_platforms} || enabled force_toolchain \
    || die "Unrecognized toolchain '${toolchain}'"
John Koleszar's avatar
John Koleszar committed
790

Johann's avatar
Johann committed
791
  enabled child || log_echo "Configuring for target '${toolchain}'"
John Koleszar's avatar
John Koleszar committed
792

Johann's avatar
Johann committed
793 794 795 796 797 798
  #
  # Set up toolchain variables
  #
  tgt_isa=$(echo ${toolchain} | awk 'BEGIN{FS="-"}{print $1}')
  tgt_os=$(echo ${toolchain} | awk 'BEGIN{FS="-"}{print $2}')
  tgt_cc=$(echo ${toolchain} | awk 'BEGIN{FS="-"}{print $3}')
799

Johann's avatar
Johann committed
800 801 802 803
  # Mark the specific ISA requested as enabled
  soft_enable ${tgt_isa}
  enable_feature ${tgt_os}
  enable_feature ${tgt_cc}
804

Johann's avatar
Johann committed
805 806 807 808 809 810 811 812
  # Enable the architecture family
  case ${tgt_isa} in
    arm*)
      enable_feature arm
      ;;
    mips*)
      enable_feature mips
      ;;
813 814 815
    ppc*)
      enable_feature ppc
      ;;
Johann's avatar
Johann committed
816 817 818 819 820 821
  esac

  # PIC is probably what we want when building shared libs
  enabled shared && soft_enable pic

  # Minimum iOS version for all target platforms (darwin and iphonesimulator).
Johann's avatar
Johann committed
822
  # Shared library framework builds are only possible on iOS 8 and later.
823 824
  if enabled shared; then
    IOS_VERSION_OPTIONS="--enable-shared"
Johann's avatar
Johann committed
825
    IOS_VERSION_MIN="8.0"
826 827
  else
    IOS_VERSION_OPTIONS=""
828
    IOS_VERSION_MIN="7.0"
829
  fi
Johann's avatar
Johann committed
830 831

  # Handle darwin variants. Newer SDKs allow targeting older
832
  # platforms, so use the newest one available.
Johann's avatar
Johann committed
833
  case ${toolchain} in
834
    arm*-darwin*)
835
      add_cflags "-miphoneos-version-min=${IOS_VERSION_MIN}"
836 837 838 839 840 841 842
      iphoneos_sdk_dir="$(show_darwin_sdk_path iphoneos)"
      if [ -d "${iphoneos_sdk_dir}" ]; then
        add_cflags  "-isysroot ${iphoneos_sdk_dir}"
        add_ldflags "-isysroot ${iphoneos_sdk_dir}"
      fi
      ;;
    x86*-darwin*)
843 844 845 846
      osx_sdk_dir="$(show_darwin_sdk_path macosx)"
      if [ -d "${osx_sdk_dir}" ]; then
        add_cflags  "-isysroot ${osx_sdk_dir}"
        add_ldflags "-isysroot ${osx_sdk_dir}"
Johann's avatar
Johann committed
847 848 849
      fi
      ;;
  esac
John Koleszar's avatar
John Koleszar committed
850

Johann's avatar
Johann committed
851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875
  case ${toolchain} in
    *-darwin8-*)
      add_cflags  "-mmacosx-version-min=10.4"
      add_ldflags "-mmacosx-version-min=10.4"
      ;;
    *-darwin9-*)
      add_cflags  "-mmacosx-version-min=10.5"
      add_ldflags "-mmacosx-version-min=10.5"
      ;;
    *-darwin10-*)
      add_cflags  "-mmacosx-version-min=10.6"
      add_ldflags "-mmacosx-version-min=10.6"
      ;;
    *-darwin11-*)
      add_cflags  "-mmacosx-version-min=10.7"
      add_ldflags "-mmacosx-version-min=10.7"
      ;;
    *-darwin12-*)
      add_cflags  "-mmacosx-version-min=10.8"
      add_ldflags "-mmacosx-version-min=10.8"
      ;;
    *-darwin13-*)
      add_cflags  "-mmacosx-version-min=10.9"
      add_ldflags "-mmacosx-version-min=10.9"
      ;;
876 877 878 879
    *-darwin14-*)
      add_cflags  "-mmacosx-version-min=10.10"
      add_ldflags "-mmacosx-version-min=10.10"
      ;;
880 881 882 883
    *-darwin15-*)
      add_cflags  "-mmacosx-version-min=10.11"
      add_ldflags "-mmacosx-version-min=10.11"
      ;;
884 885 886 887
    *-darwin16-*)
      add_cflags  "-mmacosx-version-min=10.12"
      add_ldflags "-mmacosx-version-min=10.12"
      ;;
Johann's avatar
Johann committed
888 889 890
    *-iphonesimulator-*)
      add_cflags  "-miphoneos-version-min=${IOS_VERSION_MIN}"
      add_ldflags "-miphoneos-version-min=${IOS_VERSION_MIN}"
891 892 893 894 895
      iossim_sdk_dir="$(show_darwin_sdk_path iphonesimulator)"
      if [ -d "${iossim_sdk_dir}" ]; then
        add_cflags  "-isysroot ${iossim_sdk_dir}"
        add_ldflags "-isysroot ${iossim_sdk_dir}"
      fi
Johann's avatar
Johann committed
896 897
      ;;
  esac
John Koleszar's avatar
John Koleszar committed
898

Johann's avatar
Johann committed
899 900 901 902 903 904 905 906 907
  # Handle Solaris variants. Solaris 10 needs -lposix4
  case ${toolchain} in
    sparc-solaris-*)
      add_extralibs -lposix4
      ;;
    *-solaris-*)
      add_extralibs -lposix4
      ;;
  esac
908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969
  
  
# Configure Android toolchain
   case ${tgt_os} in
     android*)
       case ${tgt_isa} in
         armv7)
           ANDROID_TOOLCHAIN_PREFIX=arm-linux-androideabi
           ANDROID_TOOLCHAIN_ARCH=arm
           ;;
         x86)
           ANDROID_TOOLCHAIN_PREFIX=x86-linux-android
           ANDROID_TOOLCHAIN_ALT_PREFIX=x86_64-linux-android
           ANDROID_TOOLCHAIN_ARCH=x86
           ;;
         x86_64)
           ANDROID_TOOLCHAIN_PREFIX=x86_64-linux-android
           ANDROID_TOOLCHAIN_ALT_PREFIX=x86_64-linux-android
           ANDROID_TOOLCHAIN_ARCH=x86_64
           ;;
         arm64)
          ANDROID_TOOLCHAIN_PREFIX=aarch64-linux-android
          ANDROID_TOOLCHAIN_ARCH=arm64
          ;;
       esac

       SDK_PATH=${sdk_path}
       COMPILER_LOCATION=`find "${SDK_PATH}" \
                          -name "${ANDROID_TOOLCHAIN_PREFIX}-gcc*" -print -quit`
       if [ -z "${COMPILER_LOCATION}" ]; then
         COMPILER_LOCATION=`find "${SDK_PATH}" \
                            -name "${ANDROID_TOOLCHAIN_ALT_PREFIX}-gcc*" -print -quit`
         ANDROID_TOOLCHAIN_PREFIX=${ANDROID_TOOLCHAIN_ALT_PREFIX}
       fi
       TOOLCHAIN_PATH=${COMPILER_LOCATION%/*}/${ANDROID_TOOLCHAIN_PREFIX}-
       CC=${TOOLCHAIN_PATH}gcc
       CXX=${TOOLCHAIN_PATH}g++
       AR=${TOOLCHAIN_PATH}ar
       LD=${TOOLCHAIN_PATH}gcc
       AS=${TOOLCHAIN_PATH}as
       STRIP=${TOOLCHAIN_PATH}strip
       NM=${TOOLCHAIN_PATH}nm

       if [ -z "${alt_libc}" ]; then
         alt_libc=`find "${SDK_PATH}" -name arch-${ANDROID_TOOLCHAIN_ARCH} -print | \
           awk '{n = split($0,a,"/"); \
             split(a[n-1],b,"-"); \
             print $0 " " b[2]}' | \
             sort -g -k 2 | \
             awk '{ print $1 }' | tail -1`
       fi

       if [ -d "${alt_libc}" ]; then
         add_cflags "--sysroot=${alt_libc}"
         add_ldflags "--sysroot=${alt_libc}"
       fi

       if [ ${tgt_isa} = "armv7" ]; then
         # linker flag that routes around a CPU bug in some
         # Cortex-A8 implementations (NDK Dev Guide)
         add_ldflags "-Wl,--fix-cortex-a8"
       fi
Sylvain Berfini's avatar
Sylvain Berfini committed
970
       if [ ${tgt_isa} = "x86" ] || [ ${tgt_isa} = "x86_64" ]; then
971 972 973 974 975 976 977 978 979 980 981 982
         add_asflags "-D__ANDROID__"
         add_cflags "-D__ANDROID__"
       fi

       enable_feature pic
       soft_enable realtime_only
       if [ ${tgt_isa} = "armv7" ]; then
         soft_enable runtime_cpu_detect
       fi
       if enabled runtime_cpu_detect; then
         add_cflags "-I${SDK_PATH}/sources/android/cpufeatures"
       fi
Sylvain Berfini's avatar
Sylvain Berfini committed
983
       add_cflags "-I${SDK_PATH}/sysroot/usr/include -I${SDK_PATH}/sysroot/usr/include/${ANDROID_TOOLCHAIN_PREFIX}"
984 985 986
       ;;
   esac

987

Johann's avatar
Johann committed
988 989
  # Process ARM architecture variants
  case ${toolchain} in
John Koleszar's avatar
John Koleszar committed
990
    arm*)
Johann's avatar
Johann committed
991 992
      # on arm, isa versions are supersets
      case ${tgt_isa} in
Tom Finegan's avatar
Tom Finegan committed
993
        arm64|armv8)
Johann's avatar
Johann committed
994 995
          soft_enable neon
          ;;
Tom Finegan's avatar
Tom Finegan committed
996
        armv7|armv7s)
Johann's avatar
Johann committed
997
          soft_enable neon
998 999 1000 1001 1002 1003
          # Only enable neon_asm when neon is also enabled.
          enabled neon && soft_enable neon_asm
          # If someone tries to force it through, die.
          if disabled neon && enabled neon_asm; then
            die "Disabling neon while keeping neon-asm is not supported"
          fi
Johann's avatar
Johann committed
1004 1005
          ;;
      esac
John Koleszar's avatar
John Koleszar committed
1006

Johann's avatar
Johann committed
1007
      asm_conversion_cmd="cat"
John Koleszar's avatar
John Koleszar committed
1008

Johann's avatar
Johann committed
1009
      case ${tgt_cc} in
John Koleszar's avatar
John Koleszar committed
1010
        gcc)
Johann's avatar
Johann committed
1011 1012 1013 1014 1015 1016 1017 1018 1019
          link_with_cc=gcc
          setup_gnu_toolchain
          arch_int=${tgt_isa##armv}
          arch_int=${arch_int%%te}
          check_add_asflags --defsym ARCHITECTURE=${arch_int}
          tune_cflags="-mtune="
          if [ ${tgt_isa} = "armv7" ] || [ ${tgt_isa} = "armv7s" ]; then
            if [ -z "${float_abi}" ]; then
              check_cpp <<EOF && float_abi=hard || float_abi=softfp
1020 1021 1022 1023
#ifndef __ARM_PCS_VFP
#error "not hardfp"
#endif
EOF
John Koleszar's avatar
John Koleszar committed
1024
            fi
Johann's avatar
Johann committed
1025 1026
            check_add_cflags  -march=armv7-a -mfloat-abi=${float_abi}
            check_add_asflags -march=armv7-a -mfloat-abi=${float_abi}
John Koleszar's avatar
John Koleszar committed
1027

Johann's avatar
Johann committed
1028 1029 1030
            if enabled neon || enabled neon_asm; then
              check_add_cflags -mfpu=neon #-ftree-vectorize
              check_add_asflags -mfpu=neon
1031
            fi
1032 1033 1034
          elif [ ${tgt_isa} = "arm64" ] || [ ${tgt_isa} = "armv8" ]; then
            check_add_cflags -march=armv8-a
            check_add_asflags -march=armv8-a
Johann's avatar
Johann committed
1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049
          else
            check_add_cflags -march=${tgt_isa}
            check_add_asflags -march=${tgt_isa}
          fi

          enabled debug && add_asflags -g
          asm_conversion_cmd="${source_path}/build/make/ads2gas.pl"
          if enabled thumb; then
            asm_conversion_cmd="$asm_conversion_cmd -thumb"
            check_add_cflags -mthumb
            check_add_asflags -mthumb -mimplicit-it=always
          fi
          ;;
        vs*)
          asm_conversion_cmd="${source_path}/build/make/ads2armasm_ms.pl"
1050
          AS_SFX=.S
Johann's avatar
Johann committed
1051 1052 1053 1054 1055 1056 1057 1058 1059
          msvs_arch_dir=arm-msvs
          disable_feature multithread
          disable_feature unit_tests
          vs_version=${tgt_cc##vs}
          if [ $vs_version -ge 12 ]; then
            # MSVC 2013 doesn't allow doing plain .exe projects for ARM,
            # only "AppContainerApplication" which requires an AppxManifest.
            # Therefore disable the examples, just build the library.
            disable_feature examples
1060
            disable_feature tools
Johann's avatar
Johann committed
1061 1062
          fi
          ;;
John Koleszar's avatar
John Koleszar committed
1063
        rvct)
Johann's avatar
Johann committed
1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083
          CC=armcc
          AR=armar
          AS=armasm
          LD="${source_path}/build/make/armlink_adapter.sh"
          STRIP=arm-none-linux-gnueabi-strip
          NM=arm-none-linux-gnueabi-nm
          tune_cflags="--cpu="
          tune_asflags="--cpu="
          if [ -z "${tune_cpu}" ]; then
            if [ ${tgt_isa} = "armv7" ]; then
              if enabled neon || enabled neon_asm
              then
                check_add_cflags --fpu=softvfp+vfpv3
                check_add_asflags --fpu=softvfp+vfpv3
              fi
              check_add_cflags --cpu=Cortex-A8
              check_add_asflags --cpu=Cortex-A8
            else
              check_add_cflags --cpu=${tgt_isa##armv}
              check_add_asflags --cpu=${tgt_isa##armv}
John Koleszar's avatar
John Koleszar committed
1084
            fi
Johann's avatar
Johann committed
1085 1086 1087 1088 1089 1090 1091 1092 1093 1094
          fi
          arch_int=${tgt_isa##armv}
          arch_int=${arch_int%%te}
          check_add_asflags --pd "\"ARCHITECTURE SETA ${arch_int}\""
          enabled debug && add_asflags -g
          add_cflags --gnu
          add_cflags --enum_is_int
          add_cflags --wchar32
          ;;
      esac
John Koleszar's avatar
John Koleszar committed
1095

Johann's avatar
Johann committed
1096
      case ${tgt_os} in
1097
        none*)
Johann's avatar
Johann committed
1098 1099 1100
          disable_feature multithread
          disable_feature os_support
          ;;
John Koleszar's avatar
John Koleszar committed
1101 1102


John Koleszar's avatar
John Koleszar committed
1103
        darwin*)