configure.sh revision f71323e297a928af368937089d3ed71239786f86
190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#!/bin/bash
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(){
1790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    echo "Unknown option \"$1\"."
1890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    echo "See $0 --help for available options."
1990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    clean_temp_files
2090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    exit 1
2190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
2290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
2390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
2490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberdie() {
2590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    echo "$@"
2690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    echo
2790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    echo "Configuration failed. This could reflect a misconfiguration of your"
2890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    echo "toolchains, improper options selected, or another problem. If you"
2990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    echo "don't see any useful error messages above, the next step is to look"
3090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    echo "at the configure error log file ($logfile) to determine what"
3190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    echo "configure was trying to do when it died."
3290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    clean_temp_files
3390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    exit 1
3490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
3590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
3690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
3790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberlog(){
3890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    echo "$@" >>$logfile
3990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
4090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
4190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
4290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberlog_file(){
4390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    log BEGIN $1
4490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    pr -n -t $1 >>$logfile
4590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    log END $1
4690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
4790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
4890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
4990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberlog_echo() {
5090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    echo "$@"
5190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    log "$@"
5290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
5390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
5490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
5590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberfwrite () {
5690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    outfile=$1
5790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    shift
5890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    echo "$@" >> ${outfile}
5990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
6090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
6190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
6290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubershow_help_pre(){
6390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    for opt in ${CMDLINE_SELECT}; do
6490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        opt2=`echo $opt | sed -e 's;_;-;g'`
6590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        if enabled $opt; then
6690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            eval "toggle_${opt}=\"--disable-${opt2}\""
6790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        else
6890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            eval "toggle_${opt}=\"--enable-${opt2} \""
6990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        fi
7090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    done
7190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
7290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    cat <<EOF
7390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberUsage: configure [options]
7490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberOptions:
7590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
7690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberBuild options:
7790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber  --help                      print this message
7890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber  --log=yes|no|FILE           file configure log is written to [config.err]
7990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber  --target=TARGET             target platform tuple [generic-gnu]
8090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber  --cpu=CPU                   optimize for a specific cpu rather than a family
8190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber  ${toggle_extra_warnings}    emit harmless warnings (always non-fatal)
8290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber  ${toggle_werror}            treat warnings as errors, if possible
8390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                              (not available with all compilers)
8490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber  ${toggle_optimizations}     turn on/off compiler optimization flags
8590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber  ${toggle_pic}               turn on/off Position Independant Code
8690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber  ${toggle_ccache}            turn on/off compiler cache
8790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber  ${toggle_debug}             enable/disable debug mode
8890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber  ${toggle_gprof}             enable/disable gprof profiling instrumentation
8990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber  ${toggle_gcov}              enable/disable gcov coverage instrumentation
9090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
9190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberInstall options:
9290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber  ${toggle_install_docs}      control whether docs are installed
9390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber  ${toggle_install_bins}      control whether binaries are installed
9490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber  ${toggle_install_libs}      control whether libraries are installed
9590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber  ${toggle_install_srcs}      control whether sources are installed
9690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
9790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
9890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberEOF
9990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
10090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
10190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
10290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubershow_help_post(){
10390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    cat <<EOF
10490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
10590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
10690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberNOTES:
10790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    Object files are built at the place where configure is launched.
10890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
10990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    All boolean options can be negated. The default value is the opposite
11090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    of that shown above. If the option --disable-foo is listed, then
11190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    the default value for foo is enabled.
11290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
11390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberSupported targets:
11490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberEOF
11590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber  show_targets ${all_platforms}
11690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber  echo
11790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber  exit 1
11890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
11990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
12090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
12190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubershow_targets() {
12290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    while [ -n "$*" ]; do
123f71323e297a928af368937089d3ed71239786f86Andreas Huber        if [ "${1%%-*}" = "${2%%-*}" ]; then
124f71323e297a928af368937089d3ed71239786f86Andreas Huber            if [ "${2%%-*}" = "${3%%-*}" ]; then
12590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                printf "    %-24s %-24s %-24s\n" "$1" "$2" "$3"
12690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                shift; shift; shift
12790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            else
12890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                printf "    %-24s %-24s\n" "$1" "$2"
12990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                shift; shift
13090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            fi
13190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        else
13290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            printf "    %-24s\n" "$1"
13390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            shift
13490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        fi
13590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    done
13690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
13790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
13890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
13990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubershow_help() {
14090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    show_help_pre
14190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    show_help_post
14290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
14390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
14490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#
14590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# List Processing Functions
14690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#
14790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberset_all(){
14890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    value=$1
14990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    shift
15090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    for var in $*; do
15190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        eval $var=$value
15290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    done
15390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
15490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
15590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
15690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberis_in(){
15790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    value=$1
15890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    shift
15990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    for var in $*; do
16090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        [ $var = $value ] && return 0
16190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    done
16290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    return 1
16390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
16490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
16590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
16690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberadd_cflags() {
16790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    CFLAGS="${CFLAGS} $@"
16890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
16990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
17090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
17190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberadd_ldflags() {
17290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    LDFLAGS="${LDFLAGS} $@"
17390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
17490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
17590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
17690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberadd_asflags() {
17790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ASFLAGS="${ASFLAGS} $@"
17890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
17990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
18090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
18190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberadd_extralibs() {
18290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    extralibs="${extralibs} $@"
18390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
18490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
18590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#
18690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# Boolean Manipulation Functions
18790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#
18890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberenable(){
18990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    set_all yes $*
19090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
19190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
19290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberdisable(){
19390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    set_all no $*
19490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
19590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
19690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberenabled(){
19790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    eval test "x\$$1" = "xyes"
19890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
19990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
20090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberdisabled(){
20190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    eval test "x\$$1" = "xno"
20290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
20390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
20490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
20590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubersoft_enable() {
20690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    for var in $*; do
20790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        if ! disabled $var; then
20890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            log_echo "  enabling $var"
20990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            enable $var
21090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        fi
21190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    done
21290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
21390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
21490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubersoft_disable() {
21590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    for var in $*; do
21690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        if ! enabled $var; then
21790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            log_echo "  disabling $var"
21890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            disable $var
21990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        fi
22090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    done
22190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
22290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
22390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
22490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#
22590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# Text Processing Functions
22690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#
22790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubertoupper(){
22890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
22990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
23090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
23190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
23290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubertolower(){
23390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
23490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
23590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
23690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
23790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#
23890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# Temporary File Functions
23990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#
24090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubersource_path=${0%/*}
24190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberenable source_path_used
24290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberif test -z "$source_path" -o "$source_path" = "." ; then
24390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    source_path="`pwd`"
24490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    disable source_path_used
24590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberfi
24690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
24790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberif test ! -z "$TMPDIR" ; then
24890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    TMPDIRx="${TMPDIR}"
24990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberelif test ! -z "$TEMPDIR" ; then
25090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    TMPDIRx="${TEMPDIR}"
25190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberelse
25290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    TMPDIRx="/tmp"
25390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberfi
25490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberTMP_H="${TMPDIRx}/vpx-conf-$$-${RANDOM}.h"
25590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberTMP_C="${TMPDIRx}/vpx-conf-$$-${RANDOM}.c"
25690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberTMP_O="${TMPDIRx}/vpx-conf-$$-${RANDOM}.o"
25790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberTMP_X="${TMPDIRx}/vpx-conf-$$-${RANDOM}.x"
25890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
25990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberclean_temp_files() {
26090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    rm -f ${TMP_C} ${TMP_H} ${TMP_O} ${TMP_X}
26190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
26290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
26390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#
26490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# Toolchain Check Functions
26590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#
26690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubercheck_cmd() {
26790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    log "$@"
26890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    "$@" >>${logfile} 2>&1
26990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
27090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
27190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubercheck_cc() {
27290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    log check_cc "$@"
27390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    cat >${TMP_C}
27490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    log_file ${TMP_C}
27590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    check_cmd ${CC} ${CFLAGS} "$@" -c -o ${TMP_O} ${TMP_C}
27690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
27790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
27890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubercheck_cpp() {
27990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    log check_cpp "$@"
28090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    cat > ${TMP_C}
28190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    log_file ${TMP_C}
28290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    check_cmd ${CC} ${CFLAGS} "$@" -E -o ${TMP_O} ${TMP_C}
28390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
28490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
28590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubercheck_ld() {
28690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    log check_ld "$@"
28790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    check_cc $@ \
28890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        && check_cmd ${LD} ${LDFLAGS} "$@" -o ${TMP_X} ${TMP_O} ${extralibs}
28990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
29090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
29190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubercheck_header(){
29290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    log check_header "$@"
29390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    header=$1
29490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    shift
29590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    var=`echo $header | sed 's/[^A-Za-z0-9_]/_/g'`
29690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    disable $var
29790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    check_cpp "$@" <<EOF && enable $var
29890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#include "$header"
29990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberint x;
30090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberEOF
30190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
30290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
30390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
30490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubercheck_cflags() {
30590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    log check_cflags "$@"
30690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    check_cc "$@" <<EOF
30790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberint x;
30890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberEOF
30990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
31090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
31190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubercheck_add_cflags() {
31290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    check_cflags "$@" && add_cflags "$@"
31390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
31490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
31590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubercheck_add_asflags() {
31690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    log add_asflags "$@"
31790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    add_asflags "$@"
31890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
31990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
32090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubercheck_add_ldflags() {
32190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    log add_ldflags "$@"
32290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    add_ldflags "$@"
32390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
32490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
32590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberwrite_common_config_banner() {
32690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    echo '# This file automatically generated by configure. Do not edit!' > config.mk
32790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    echo "TOOLCHAIN := ${toolchain}" >> config.mk
32890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
32990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    case ${toolchain} in
33090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        *-linux-rvct)
33190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            echo "ALT_LIBC := ${alt_libc}" >> config.mk
33290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            ;;
33390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    esac
33490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
33590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
33690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberwrite_common_config_targets() {
33790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    for t in ${all_targets}; do
33890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        if enabled ${t}; then
33990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            if enabled universal || enabled child; then
34090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                fwrite config.mk "ALL_TARGETS += ${t}-${toolchain}"
34190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            else
34290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                fwrite config.mk "ALL_TARGETS += ${t}"
34390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            fi
34490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        fi
34590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    true;
34690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    done
34790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubertrue
34890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
34990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
35090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberwrite_common_target_config_mk() {
35190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    local CC=${CC}
35290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    enabled ccache && CC="ccache ${CC}"
35390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
35490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    cat > $1 << EOF
35590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# This file automatically generated by configure. Do not edit!
35690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberSRC_PATH="$source_path"
35790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberSRC_PATH_BARE=$source_path
35890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberBUILD_PFX=${BUILD_PFX}
35990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberTOOLCHAIN=${toolchain}
36090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberASM_CONVERSION=${asm_conversion_cmd:-${source_path}/build/make/ads2gas.pl}
36190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
36290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberCC=${CC}
36390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberAR=${AR}
36490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberLD=${LD}
36590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberAS=${AS}
36690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberSTRIP=${STRIP}
36790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberNM=${NM}
36890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
369f71323e297a928af368937089d3ed71239786f86Andreas HuberCFLAGS  = ${CFLAGS}
37090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberARFLAGS = -rus\$(if \$(quiet),c,v)
37190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberLDFLAGS = ${LDFLAGS}
37290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberASFLAGS = ${ASFLAGS}
37390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberextralibs = ${extralibs}
37490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberAS_SFX    = ${AS_SFX:-.asm}
37590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberEOF
37690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
37790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    if enabled rvct; then cat >> $1 << EOF
37890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberfmt_deps = sed -e 's;^__image.axf;\$(dir \$@)\$(notdir \$<).o \$@;' #hide
37990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberEOF
38090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    else cat >> $1 << EOF
381f71323e297a928af368937089d3ed71239786f86Andreas Huberfmt_deps = sed -e 's;^\([a-zA-Z0-9_]*\)\.o;\$(dir \$@)\1\$(suffix \$<).o \$@;'
38290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberEOF
38390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    fi
38490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
38590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    print_config_mk ARCH   "${1}" ${ARCH_LIST}
38690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    print_config_mk HAVE   "${1}" ${HAVE_LIST}
38790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    print_config_mk CONFIG "${1}" ${CONFIG_LIST}
38890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    print_config_mk HAVE   "${1}" gnu_strip
38990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
39090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    enabled msvs && echo "CONFIG_VS_VERSION=${vs_version}" >> "${1}"
39190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
39290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
39390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
39490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
39590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberwrite_common_target_config_h() {
39690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    cat > ${TMP_H} << EOF
39790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber/* This file automatically generated by configure. Do not edit! */
39890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#define RESTRICT    ${RESTRICT}
39990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberEOF
40090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    print_config_h ARCH   "${TMP_H}" ${ARCH_LIST}
40190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    print_config_h HAVE   "${TMP_H}" ${HAVE_LIST}
40290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    print_config_h CONFIG "${TMP_H}" ${CONFIG_LIST}
40390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    mkdir -p `dirname "$1"`
40490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    cmp "$1" ${TMP_H} >/dev/null 2>&1 || mv ${TMP_H} "$1"
40590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
40690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
40790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberprocess_common_cmdline() {
40890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    for opt in "$@"; do
40990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        optval="${opt#*=}"
41090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        case "$opt" in
41190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        --child) enable child
41290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        ;;
41390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        --log*)
41490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        logging="$optval"
41590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        if ! disabled logging ; then
41690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            enabled logging || logfile="$logging"
41790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        else
41890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            logfile=/dev/null
41990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        fi
42090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        ;;
42190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        --target=*) toolchain="${toolchain:-${optval}}"
42290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        ;;
42390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        --force-target=*) toolchain="${toolchain:-${optval}}"; enable force_toolchain
42490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        ;;
42590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        --cpu)
42690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        ;;
42790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        --cpu=*) tune_cpu="$optval"
42890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        ;;
42990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        --enable-?*|--disable-?*)
43090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        eval `echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g'`
43190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        echo "${CMDLINE_SELECT} ${ARCH_EXT_LIST}" | grep "^ *$option\$" >/dev/null || die_unknown $opt
43290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        $action $option
43390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        ;;
43490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        --force-enable-?*|--force-disable-?*)
43590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        eval `echo "$opt" | sed 's/--force-/action=/;s/-/ option=/;s/-/_/g'`
43690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        $action $option
43790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        ;;
43890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        --libc=*)
43990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        [ -d "${optval}" ] || die "Not a directory: ${optval}"
44090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        disable builtin_libc
44190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        alt_libc="${optval}"
44290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        ;;
443f71323e297a928af368937089d3ed71239786f86Andreas Huber        --prefix=*)
444f71323e297a928af368937089d3ed71239786f86Andreas Huber        prefix="${optval}"
445f71323e297a928af368937089d3ed71239786f86Andreas Huber        ;;
446f71323e297a928af368937089d3ed71239786f86Andreas Huber        --libdir=*)
447f71323e297a928af368937089d3ed71239786f86Andreas Huber        libdir="${optval}"
448f71323e297a928af368937089d3ed71239786f86Andreas Huber        ;;
449f71323e297a928af368937089d3ed71239786f86Andreas Huber        --libc|--prefix|--libdir)
45090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        die "Option ${opt} requires argument"
45190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        ;;
45290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        --help|-h) show_help
45390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        ;;
45490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        *) die_unknown $opt
45590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        ;;
45690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        esac
45790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    done
45890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
45990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
46090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberprocess_cmdline() {
46190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    for opt do
46290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        optval="${opt#*=}"
46390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        case "$opt" in
46490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        *) process_common_cmdline $opt
46590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        ;;
46690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        esac
46790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    done
46890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
46990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
470f71323e297a928af368937089d3ed71239786f86Andreas Huber
471f71323e297a928af368937089d3ed71239786f86Andreas Huberpost_process_common_cmdline() {
472f71323e297a928af368937089d3ed71239786f86Andreas Huber    prefix="${prefix:-/usr/local}"
473f71323e297a928af368937089d3ed71239786f86Andreas Huber    prefix="${prefix%/}"
474f71323e297a928af368937089d3ed71239786f86Andreas Huber    libdir="${libdir:-${prefix}/lib}"
475f71323e297a928af368937089d3ed71239786f86Andreas Huber    libdir="${libdir%/}"
476f71323e297a928af368937089d3ed71239786f86Andreas Huber    if [ "${libdir#${prefix}}" = "${libdir}" ]; then
477f71323e297a928af368937089d3ed71239786f86Andreas Huber        die "Libdir ${libdir} must be a subdirectory of ${prefix}"
478f71323e297a928af368937089d3ed71239786f86Andreas Huber    fi
479f71323e297a928af368937089d3ed71239786f86Andreas Huber}
480f71323e297a928af368937089d3ed71239786f86Andreas Huber
481f71323e297a928af368937089d3ed71239786f86Andreas Huber
48290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberpost_process_cmdline() {
48390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    true;
48490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
48590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
48690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubersetup_gnu_toolchain() {
48790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        CC=${CC:-${CROSS}gcc}
48890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        AR=${AR:-${CROSS}ar}
48990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        LD=${LD:-${CROSS}${link_with_cc:-ld}}
49090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        AS=${AS:-${CROSS}as}
49190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    STRIP=${STRIP:-${CROSS}strip}
49290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    NM=${NM:-${CROSS}nm}
49390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        AS_SFX=.s
49490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
49590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
49690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberprocess_common_toolchain() {
497f71323e297a928af368937089d3ed71239786f86Andreas Huber    if [ -z "$toolchain" ]; then
498f71323e297a928af368937089d3ed71239786f86Andreas Huber        gcctarget="$(gcc -dumpmachine 2> /dev/null)"
499f71323e297a928af368937089d3ed71239786f86Andreas Huber
500f71323e297a928af368937089d3ed71239786f86Andreas Huber        # detect tgt_isa
501f71323e297a928af368937089d3ed71239786f86Andreas Huber        case "$gcctarget" in
502f71323e297a928af368937089d3ed71239786f86Andreas Huber            *x86_64*|*amd64*)
503f71323e297a928af368937089d3ed71239786f86Andreas Huber                tgt_isa=x86_64
504f71323e297a928af368937089d3ed71239786f86Andreas Huber                ;;
505f71323e297a928af368937089d3ed71239786f86Andreas Huber            *i[3456]86*)
506f71323e297a928af368937089d3ed71239786f86Andreas Huber                tgt_isa=x86
507f71323e297a928af368937089d3ed71239786f86Andreas Huber                ;;
508f71323e297a928af368937089d3ed71239786f86Andreas Huber        esac
509f71323e297a928af368937089d3ed71239786f86Andreas Huber
510f71323e297a928af368937089d3ed71239786f86Andreas Huber        # detect tgt_os
511f71323e297a928af368937089d3ed71239786f86Andreas Huber        case "$gcctarget" in
512f71323e297a928af368937089d3ed71239786f86Andreas Huber            *darwin8*)
513f71323e297a928af368937089d3ed71239786f86Andreas Huber                tgt_isa=universal
514f71323e297a928af368937089d3ed71239786f86Andreas Huber                tgt_os=darwin8
515f71323e297a928af368937089d3ed71239786f86Andreas Huber                ;;
516f71323e297a928af368937089d3ed71239786f86Andreas Huber            *darwin9*)
517f71323e297a928af368937089d3ed71239786f86Andreas Huber                tgt_isa=universal
518f71323e297a928af368937089d3ed71239786f86Andreas Huber                tgt_os=darwin9
519f71323e297a928af368937089d3ed71239786f86Andreas Huber                ;;
520f71323e297a928af368937089d3ed71239786f86Andreas Huber            *mingw32*|*cygwin*)
521f71323e297a928af368937089d3ed71239786f86Andreas Huber                [ -z "$tgt_isa" ] && tgt_isa=x86
522f71323e297a928af368937089d3ed71239786f86Andreas Huber                tgt_os=win32
523f71323e297a928af368937089d3ed71239786f86Andreas Huber                ;;
524f71323e297a928af368937089d3ed71239786f86Andreas Huber            *linux*|*bsd*)
525f71323e297a928af368937089d3ed71239786f86Andreas Huber                tgt_os=linux
526f71323e297a928af368937089d3ed71239786f86Andreas Huber                ;;
527f71323e297a928af368937089d3ed71239786f86Andreas Huber        esac
528f71323e297a928af368937089d3ed71239786f86Andreas Huber
529f71323e297a928af368937089d3ed71239786f86Andreas Huber        if [ -n "$tgt_isa" ] && [ -n "$tgt_os" ]; then
530f71323e297a928af368937089d3ed71239786f86Andreas Huber            toolchain=${tgt_isa}-${tgt_os}-gcc
531f71323e297a928af368937089d3ed71239786f86Andreas Huber        fi
532f71323e297a928af368937089d3ed71239786f86Andreas Huber    fi
533f71323e297a928af368937089d3ed71239786f86Andreas Huber
53490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    toolchain=${toolchain:-generic-gnu}
53590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
53690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    is_in ${toolchain} ${all_platforms} || enabled force_toolchain \
53790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        || die "Unrecognized toolchain '${toolchain}'"
53890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
53990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    enabled child || log_echo "Configuring for target '${toolchain}'"
54090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
54190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    #
54290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    # Set up toolchain variables
54390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    #
54490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    tgt_isa=$(echo ${toolchain} | awk 'BEGIN{FS="-"}{print $1}')
54590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    tgt_os=$(echo ${toolchain} | awk 'BEGIN{FS="-"}{print $2}')
54690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    tgt_cc=$(echo ${toolchain} | awk 'BEGIN{FS="-"}{print $3}')
54790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
54890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    # Mark the specific ISA requested as enabled
54990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    soft_enable ${tgt_isa}
55090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    enable ${tgt_os}
55190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    enable ${tgt_cc}
55290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
55390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    # Enable the architecture family
55490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    case ${tgt_isa} in
55590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        arm*|iwmmxt*) enable arm;;
55690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    mips*)        enable mips;;
55790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    esac
55890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
55990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    # Handle darwin variants
56090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    case ${toolchain} in
56190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        *-darwin8-gcc)
56290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            add_cflags  "-isysroot /Developer/SDKs/MacOSX10.4u.sdk"
56390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            add_cflags  "-mmacosx-version-min=10.4"
56490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            add_ldflags "-isysroot /Developer/SDKs/MacOSX10.4u.sdk"
56590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            add_ldflags "-mmacosx-version-min=10.4"
56690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            ;;
56790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        *-darwin9-gcc)
56890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            add_cflags  "-isysroot /Developer/SDKs/MacOSX10.5.sdk"
56990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            add_cflags  "-mmacosx-version-min=10.5"
57090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            add_ldflags "-isysroot /Developer/SDKs/MacOSX10.5.sdk"
57190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            add_ldflags "-mmacosx-version-min=10.5"
57290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            ;;
57390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    esac
57490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
57590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    # Process ARM architecture variants
57690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    case ${toolchain} in
57790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    arm*|iwmmxt*)
57890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    # on arm, isa versions are supersets
57990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    enabled armv7a && soft_enable armv7 ### DEBUG
58090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    enabled armv7 && soft_enable armv6
58190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    enabled armv6 && soft_enable armv5te
58290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    enabled armv6 && soft_enable fast_unaligned
58390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    enabled iwmmxt2 && soft_enable iwmmxt
58490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    enabled iwmmxt && soft_enable armv5te
58590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
58690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    asm_conversion_cmd="cat"
58790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
58890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        case ${tgt_cc} in
58990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        gcc)
59090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        if enabled iwmmxt || enabled iwmmxt2
59190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            then
59290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                CROSS=${CROSS:-arm-iwmmxt-linux-gnueabi-}
59390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            elif enabled symbian; then
59490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                CROSS=${CROSS:-arm-none-symbianelf-}
59590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            else
59690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                CROSS=${CROSS:-arm-none-linux-gnueabi-}
59790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            fi
59890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            link_with_cc=gcc
59990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            setup_gnu_toolchain
60090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            arch_int=${tgt_isa##armv}
60190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            arch_int=${arch_int%%te}
60290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            check_add_asflags --defsym ARCHITECTURE=${arch_int}
60390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            tune_cflags="-mtune="
60490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        if enabled iwmmxt || enabled iwmmxt2
60590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            then
60690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                check_add_asflags -mcpu=${tgt_isa}
60790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            elif enabled armv7
60890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            then
60990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                check_add_cflags -march=armv7-a -mcpu=cortex-a8 -mfpu=neon -mfloat-abi=softfp  #-ftree-vectorize
61090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        check_add_asflags -mcpu=cortex-a8 -mfpu=neon -mfloat-abi=softfp  #-march=armv7-a
61190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            else
61290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                check_add_cflags -march=${tgt_isa}
61390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                check_add_asflags -march=${tgt_isa}
61490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            fi
61590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
61690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            asm_conversion_cmd="${source_path}/build/make/ads2gas.pl"
61790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            ;;
61890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        rvct)
61990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            CC=armcc
62090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            AR=armar
62190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            AS=armasm
62290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            LD=${source_path}/build/make/armlink_adapter.sh
62390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            STRIP=arm-none-linux-gnueabi-strip
62490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            NM=arm-none-linux-gnueabi-nm
62590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            tune_cflags="--cpu="
62690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            tune_asflags="--cpu="
62790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            if [ -z "${tune_cpu}" ]; then
62890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            if enabled armv7
62990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                then
63090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                    check_add_cflags --cpu=Cortex-A8 --fpu=softvfp+vfpv3
63190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                    check_add_asflags --cpu=Cortex-A8 --fpu=none
63290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                else
63390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                    check_add_cflags --cpu=${tgt_isa##armv}
63490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                    check_add_asflags --cpu=${tgt_isa##armv}
63590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                fi
63690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            fi
63790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            arch_int=${tgt_isa##armv}
63890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            arch_int=${arch_int%%te}
63990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            check_add_asflags --pd "\"ARCHITECTURE SETA ${arch_int}\""
64090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        ;;
64190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        esac
64290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
64390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        case ${tgt_os} in
64490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        darwin*)
64590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            SDK_PATH=/Developer/Platforms/iPhoneOS.platform/Developer
64690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            TOOLCHAIN_PATH=${SDK_PATH}/usr/bin
64790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            CC=${TOOLCHAIN_PATH}/gcc
64890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            AR=${TOOLCHAIN_PATH}/ar
64990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            LD=${TOOLCHAIN_PATH}/arm-apple-darwin9-gcc-4.2.1
65090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            AS=${TOOLCHAIN_PATH}/as
65190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            STRIP=${TOOLCHAIN_PATH}/strip
65290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            NM=${TOOLCHAIN_PATH}/nm
65390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            AS_SFX=.s
65490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
65590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            # ASFLAGS is written here instead of using check_add_asflags
65690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            # because we need to overwrite all of ASFLAGS and purge the
65790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            # options that were put in above
65890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            ASFLAGS="-version -arch ${tgt_isa} -g"
65990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
66090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            add_cflags -arch ${tgt_isa}
66190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            add_ldflags -arch_only ${tgt_isa}
66290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
66390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            add_cflags  "-isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.1.sdk"
66490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
66590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            # This should be overridable
66690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            alt_libc=${SDK_PATH}/SDKs/iPhoneOS3.1.sdk
66790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
66890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            # Add the paths for the alternate libc
66990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#            for d in usr/include usr/include/gcc/darwin/4.0/; do
67090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            for d in usr/include usr/include/gcc/darwin/4.0/ usr/lib/gcc/arm-apple-darwin9/4.0.1/include/; do
67190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                try_dir="${alt_libc}/${d}"
67290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                [ -d "${try_dir}" ] && add_cflags -I"${try_dir}"
67390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            done
67490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
67590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            for d in lib usr/lib; do
67690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                try_dir="${alt_libc}/${d}"
67790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                [ -d "${try_dir}" ] && add_ldflags -L"${try_dir}"
67890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            done
67990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
68090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            asm_conversion_cmd="${source_path}/build/make/ads2gas_apple.pl"
68190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber         ;;
68290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
68390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        linux*)
68490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            enable linux
68590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            if enabled rvct; then
68690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                # Compiling with RVCT requires an alternate libc (glibc) when
68790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                # targetting linux.
68890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                disabled builtin_libc \
68990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                    || die "Must supply --libc when targetting *-linux-rvct"
69090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
69190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                # Set up compiler
69290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                add_cflags --gnu
69390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                add_cflags --enum_is_int
69490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                add_cflags --library_interface=aeabi_glibc
69590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                add_cflags --no_hide_all
69690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                add_cflags --wchar32
69790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                add_cflags --dwarf2
69890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                add_cflags --gnu
69990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
70090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                # Set up linker
70190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                add_ldflags --sysv --no_startup --no_ref_cpp_init
70290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                add_ldflags --entry=_start
70390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                add_ldflags --keep '"*(.init)"' --keep '"*(.fini)"'
70490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                add_ldflags --keep '"*(.init_array)"' --keep '"*(.fini_array)"'
70590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                add_ldflags --dynamiclinker=/lib/ld-linux.so.3
70690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                add_extralibs libc.so.6 -lc_nonshared crt1.o crti.o crtn.o
70790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
70890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                # Add the paths for the alternate libc
70990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                for d in usr/include; do
71090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                    try_dir="${alt_libc}/${d}"
71190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                    [ -d "${try_dir}" ] && add_cflags -J"${try_dir}"
71290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                done
71390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                add_cflags -J"${RVCT31INC}"
71490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                for d in lib usr/lib; do
71590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                    try_dir="${alt_libc}/${d}"
71690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                    [ -d "${try_dir}" ] && add_ldflags -L"${try_dir}"
71790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                done
71890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
71990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
72090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                # glibc has some struct members named __align, which is a
72190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                # storage modifier in RVCT. If we need to use this modifier,
72290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                # we'll have to #undef it in our code. Note that this must
72390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                # happen AFTER all libc inclues.
72490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                add_cflags -D__align=x_align_x
72590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            fi
72690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        ;;
72790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
72890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        symbian*)
72990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            enable symbian
73090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            # Add the paths for the alternate libc
73190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            for d in include/libc; do
73290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                try_dir="${alt_libc}/${d}"
73390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                [ -d "${try_dir}" ] && add_cflags -I"${try_dir}"
73490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            done
73590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            for d in release/armv5/urel; do
73690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                try_dir="${alt_libc}/${d}"
73790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                [ -d "${try_dir}" ] && add_ldflags -L"${try_dir}"
73890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            done
73990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            add_cflags -DIMPORT_C=
74090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
74190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        esac
74290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ;;
74390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    mips*)
74490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        CROSS=${CROSS:-mipsel-linux-uclibc-}
74590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        link_with_cc=gcc
74690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        setup_gnu_toolchain
74790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        tune_cflags="-mtune="
74890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        check_add_cflags -march=${tgt_isa}
74990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    check_add_asflags -march=${tgt_isa}
75090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    check_add_asflags -KPIC
75190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ;;
75290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ppc*)
75390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        enable ppc
75490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        bits=${tgt_isa##ppc}
75590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        link_with_cc=gcc
75690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        setup_gnu_toolchain
75790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        add_asflags -force_cpusubtype_ALL -I"\$(dir \$<)darwin"
75890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        add_cflags -maltivec -faltivec
75990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        soft_enable altivec
76090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
76190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        case "$tgt_os" in
76290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        linux*)
76390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            add_asflags -maltivec -mregnames -I"\$(dir \$<)linux"
76490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        ;;
76590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        darwin*)
76690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            darwin_arch="-arch ppc"
76790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            enabled ppc64 && darwin_arch="${darwin_arch}64"
76890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            add_cflags  ${darwin_arch} -m${bits} -fasm-blocks
76990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            add_asflags ${darwin_arch} -force_cpusubtype_ALL -I"\$(dir \$<)darwin"
77090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            add_ldflags ${darwin_arch} -m${bits}
77190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        ;;
77290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        esac
77390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ;;
77490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    x86*)
77590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        bits=32
77690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        enabled x86_64 && bits=64
77790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        soft_enable runtime_cpu_detect
77890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        soft_enable mmx
77990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        soft_enable sse
78090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        soft_enable sse2
78190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        soft_enable sse3
78290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        soft_enable ssse3
78390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
78490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        case  ${tgt_os} in
785f71323e297a928af368937089d3ed71239786f86Andreas Huber            win*)
786f71323e297a928af368937089d3ed71239786f86Andreas Huber                enabled gcc && add_cflags -fno-common
787f71323e297a928af368937089d3ed71239786f86Andreas Huber                ;;
78890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            solaris*)
78990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                CC=${CC:-${CROSS}gcc}
79090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                LD=${LD:-${CROSS}gcc}
79190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                CROSS=${CROSS:-g}
79290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                ;;
79390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        esac
79490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
79590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        case  ${tgt_cc} in
79690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            icc*)
79790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                CC=${CC:-icc}
79890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                LD=${LD:-icc}
79990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                setup_gnu_toolchain
80090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                add_cflags -use-msasm -use-asm
80190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                add_ldflags -i-static
802f71323e297a928af368937089d3ed71239786f86Andreas Huber                enabled x86_64 && add_cflags -ipo -no-prec-div -static -xSSE3 -axSSE3
803f71323e297a928af368937089d3ed71239786f86Andreas Huber                enabled x86_64 && AR=xiar
804f71323e297a928af368937089d3ed71239786f86Andreas Huber                case ${tune_cpu} in
805f71323e297a928af368937089d3ed71239786f86Andreas Huber                    atom*)
806f71323e297a928af368937089d3ed71239786f86Andreas Huber                        tune_cflags="-x"
807f71323e297a928af368937089d3ed71239786f86Andreas Huber                        tune_cpu="SSE3_ATOM"
808f71323e297a928af368937089d3ed71239786f86Andreas Huber                    ;;
809f71323e297a928af368937089d3ed71239786f86Andreas Huber                    *)
810f71323e297a928af368937089d3ed71239786f86Andreas Huber                        tune_cflags="-march="
811f71323e297a928af368937089d3ed71239786f86Andreas Huber                    ;;
812f71323e297a928af368937089d3ed71239786f86Andreas Huber                esac
81390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                ;;
81490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            gcc*)
81590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                add_cflags  -m${bits}
81690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                add_ldflags -m${bits}
81790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                link_with_cc=gcc
818f71323e297a928af368937089d3ed71239786f86Andreas Huber                tune_cflags="-march="
81990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            setup_gnu_toolchain
82090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                ;;
82190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        esac
82290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
82390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        AS=yasm
82490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        AS_SFX=.asm
82590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        case  ${tgt_os} in
82690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            win*)
82790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                add_asflags -f win${bits}
82890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                enabled debug && add_asflags -g dwarf2
82990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            ;;
83090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            linux*|solaris*)
83190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                add_asflags -f elf${bits}
83290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                enabled debug && add_asflags -g dwarf2
83390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            ;;
83490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            darwin*)
83590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                add_asflags -f macho${bits}
83690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                enabled x86 && darwin_arch="-arch i386" || darwin_arch="-arch x86_64"
83790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                add_cflags  ${darwin_arch}
83890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                add_ldflags ${darwin_arch}
83990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                # -mdynamic-no-pic is still a bit of voodoo -- it was required at
84090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                # one time, but does not seem to be now, and it breaks some of the
84190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                # code that still relies on inline assembly.
84290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                # enabled icc && ! enabled pic && add_cflags -fno-pic -mdynamic-no-pic
84390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                enabled icc && ! enabled pic && add_cflags -fno-pic
84490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            ;;
84590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            *) log "Warning: Unknown os $tgt_os while setting up yasm flags"
84690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            ;;
84790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        esac
84890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ;;
84990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    universal*|*-gcc|generic-gnu)
85090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        link_with_cc=gcc
851f71323e297a928af368937089d3ed71239786f86Andreas Huber        enable gcc
85290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    setup_gnu_toolchain
85390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ;;
85490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    esac
85590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
85690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    # Try to enable CPU specific tuning
85790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    if [ -n "${tune_cpu}" ]; then
85890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        if [ -n "${tune_cflags}" ]; then
85990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            check_add_cflags ${tune_cflags}${tune_cpu} || \
86090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                die "Requested CPU '${tune_cpu}' not supported by compiler"
86190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        fi
86290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    if [ -n "${tune_asflags}" ]; then
86390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            check_add_asflags ${tune_asflags}${tune_cpu} || \
86490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                die "Requested CPU '${tune_cpu}' not supported by assembler"
86590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        fi
86690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    if [ -z "${tune_cflags}${tune_asflags}" ]; then
86790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            log_echo "Warning: CPU tuning not supported by this toolchain"
86890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        fi
86990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    fi
87090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
87190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    enabled debug && check_add_cflags -g && check_add_ldflags -g
87290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    enabled gprof && check_add_cflags -pg && check_add_ldflags -pg
87390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    enabled gcov &&
87490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        check_add_cflags -fprofile-arcs -ftest-coverage &&
87590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        check_add_ldflags -fprofile-arcs -ftest-coverage
87690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    enabled optimizations && check_add_cflags -O3
87790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    if enabled rvct; then
87890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        enabled optimizations && check_add_cflags -Otime
87990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    fi
88090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
88190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    # Position Independant Code (PIC) support, for building relocatable
88290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    # shared objects
88390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    enabled gcc && enabled pic && check_add_cflags -fPIC
88490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
88590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    # Check for strip utility variant
88690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ${STRIP} -V 2>/dev/null | grep GNU >/dev/null && enable gnu_strip
88790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
88890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    # Try to determine target endianness
88990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    check_cc <<EOF
89090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    unsigned int e = 'O'<<24 | '2'<<16 | 'B'<<8 | 'E';
89190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberEOF
89290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    [ -f "${TMP_O}" ] && od -A n -t x1 "${TMP_O}" | tr -d '\n' |
89390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        grep '4f *32 *42 *45' >/dev/null 2>&1 && enable big_endian
89490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
89590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    # Almost every platform uses pthreads.
89690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    if enabled multithread; then
89790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        case ${toolchain} in
89890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            *-win*);;
89990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            *) check_header pthread.h && add_extralibs -lpthread
90090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        esac
90190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    fi
90290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
90390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    # glibc needs these
90490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    if enabled linux; then
905f71323e297a928af368937089d3ed71239786f86Andreas Huber        add_cflags -D_LARGEFILE_SOURCE
906f71323e297a928af368937089d3ed71239786f86Andreas Huber        add_cflags -D_FILE_OFFSET_BITS=64
90790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    fi
90890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
90990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
91090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberprocess_toolchain() {
91190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    process_common_toolchain
91290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
91390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
91490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberprint_config_mk() {
915f71323e297a928af368937089d3ed71239786f86Andreas Huber    local prefix=$1
916f71323e297a928af368937089d3ed71239786f86Andreas Huber    local makefile=$2
91790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    shift 2
91890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    for cfg; do
91990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        upname="`toupper $cfg`"
92090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        if enabled $cfg; then
92190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            echo "${prefix}_${upname}=yes" >> $makefile
92290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        fi
92390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    done
92490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
92590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
92690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberprint_config_h() {
927f71323e297a928af368937089d3ed71239786f86Andreas Huber    local prefix=$1
928f71323e297a928af368937089d3ed71239786f86Andreas Huber    local header=$2
92990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    shift 2
93090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    for cfg; do
93190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        upname="`toupper $cfg`"
93290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        if enabled $cfg; then
93390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            echo "#define ${prefix}_${upname} 1" >> $header
93490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        else
93590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            echo "#define ${prefix}_${upname} 0" >> $header
93690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        fi
93790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    done
93890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
93990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
94090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberprocess_targets() {
94190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    true;
94290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
94390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
94490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberprocess_detect() {
94590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    true;
94690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
94790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
94890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberenable logging
94990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberlogfile="config.err"
95090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberself=$0
95190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberprocess() {
95290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    cmdline_args="$@"
95390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    process_cmdline "$@"
95490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    if enabled child; then
95590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        echo "# ${self} $@" >> ${logfile}
95690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    else
95790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        echo "# ${self} $@" > ${logfile}
95890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    fi
959f71323e297a928af368937089d3ed71239786f86Andreas Huber    post_process_common_cmdline
96090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    post_process_cmdline
96190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    process_toolchain
96290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    process_detect
96390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    process_targets
96490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
96590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    OOT_INSTALLS="${OOT_INSTALLS}"
96690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    if enabled source_path_used; then
96790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    # Prepare the PWD for building.
96890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    for f in ${OOT_INSTALLS}; do
96990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            install -D ${source_path}/$f $f
97090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    done
97190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    fi
97290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    cp ${source_path}/build/make/Makefile .
97390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
97490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    clean_temp_files
97590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    true
97690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
977