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
8179f15823c34ae1e423108295e416213200bb280fAndreas Huber  --extra-cflags=ECFLAGS      add ECFLAGS to CFLAGS [$CFLAGS]
8290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber  ${toggle_extra_warnings}    emit harmless warnings (always non-fatal)
8390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber  ${toggle_werror}            treat warnings as errors, if possible
8490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                              (not available with all compilers)
8590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber  ${toggle_optimizations}     turn on/off compiler optimization flags
8679f15823c34ae1e423108295e416213200bb280fAndreas Huber  ${toggle_pic}               turn on/off Position Independent Code
8790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber  ${toggle_ccache}            turn on/off compiler cache
8890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber  ${toggle_debug}             enable/disable debug mode
8990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber  ${toggle_gprof}             enable/disable gprof profiling instrumentation
9090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber  ${toggle_gcov}              enable/disable gcov coverage instrumentation
9190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
9290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberInstall options:
9390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber  ${toggle_install_docs}      control whether docs are installed
9490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber  ${toggle_install_bins}      control whether binaries are installed
9590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber  ${toggle_install_libs}      control whether libraries are installed
9690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber  ${toggle_install_srcs}      control whether sources are installed
9790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
9890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
9990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberEOF
10090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
10190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
10290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
10390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubershow_help_post(){
10490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    cat <<EOF
10590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
10690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
10790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberNOTES:
10890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    Object files are built at the place where configure is launched.
10990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
11090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    All boolean options can be negated. The default value is the opposite
11190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    of that shown above. If the option --disable-foo is listed, then
11290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    the default value for foo is enabled.
11390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
11490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberSupported targets:
11590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberEOF
11690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber  show_targets ${all_platforms}
11790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber  echo
11890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber  exit 1
11990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
12090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
12190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
12290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubershow_targets() {
12390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    while [ -n "$*" ]; do
124f71323e297a928af368937089d3ed71239786f86Andreas Huber        if [ "${1%%-*}" = "${2%%-*}" ]; then
125f71323e297a928af368937089d3ed71239786f86Andreas Huber            if [ "${2%%-*}" = "${3%%-*}" ]; then
12690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                printf "    %-24s %-24s %-24s\n" "$1" "$2" "$3"
12790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                shift; shift; shift
12890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            else
12990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                printf "    %-24s %-24s\n" "$1" "$2"
13090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                shift; shift
13190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            fi
13290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        else
13390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            printf "    %-24s\n" "$1"
13490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            shift
13590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        fi
13690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    done
13790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
13890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
13990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
14090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubershow_help() {
14190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    show_help_pre
14290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    show_help_post
14390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
14490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
14590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#
14690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# List Processing Functions
14790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#
14890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberset_all(){
14990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    value=$1
15090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    shift
15190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    for var in $*; do
15290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        eval $var=$value
15390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    done
15490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
15590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
15690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
15790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberis_in(){
15890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    value=$1
15990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    shift
16090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    for var in $*; do
16190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        [ $var = $value ] && return 0
16290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    done
16390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    return 1
16490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
16590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
16690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
16790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberadd_cflags() {
16890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    CFLAGS="${CFLAGS} $@"
16990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
17090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
17190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
17290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberadd_ldflags() {
17390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    LDFLAGS="${LDFLAGS} $@"
17490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
17590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
17690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
17790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberadd_asflags() {
17890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ASFLAGS="${ASFLAGS} $@"
17990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
18090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
18190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
18290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberadd_extralibs() {
18390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    extralibs="${extralibs} $@"
18490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
18590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
18690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#
18790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# Boolean Manipulation Functions
18890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#
18990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberenable(){
19090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    set_all yes $*
19190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
19290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
19390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberdisable(){
19490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    set_all no $*
19590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
19690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
19790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberenabled(){
19890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    eval test "x\$$1" = "xyes"
19990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
20090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
20190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberdisabled(){
20290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    eval test "x\$$1" = "xno"
20390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
20490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
20590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
20690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubersoft_enable() {
20790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    for var in $*; do
20890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        if ! disabled $var; then
20990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            log_echo "  enabling $var"
21090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            enable $var
21190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        fi
21290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    done
21390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
21490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
21590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubersoft_disable() {
21690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    for var in $*; do
21790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        if ! enabled $var; then
21890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            log_echo "  disabling $var"
21990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            disable $var
22090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        fi
22190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    done
22290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
22390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
22490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
22590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#
22690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# Text Processing Functions
22790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#
22890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubertoupper(){
22990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
23090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
23190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
23290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
23390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubertolower(){
23490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
23590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
23690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
23790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
23890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#
23990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# Temporary File Functions
24090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#
24190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubersource_path=${0%/*}
24290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberenable source_path_used
24390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberif test -z "$source_path" -o "$source_path" = "." ; then
24490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    source_path="`pwd`"
24590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    disable source_path_used
24690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberfi
24790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
24890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberif test ! -z "$TMPDIR" ; then
24990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    TMPDIRx="${TMPDIR}"
25090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberelif test ! -z "$TEMPDIR" ; then
25190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    TMPDIRx="${TEMPDIR}"
25290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberelse
25390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    TMPDIRx="/tmp"
25490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberfi
25590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberTMP_H="${TMPDIRx}/vpx-conf-$$-${RANDOM}.h"
25690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberTMP_C="${TMPDIRx}/vpx-conf-$$-${RANDOM}.c"
25790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberTMP_O="${TMPDIRx}/vpx-conf-$$-${RANDOM}.o"
25890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberTMP_X="${TMPDIRx}/vpx-conf-$$-${RANDOM}.x"
259538f6170b788de7408b06efc6613dc98579aa6a6Andreas HuberTMP_ASM="${TMPDIRx}/vpx-conf-$$-${RANDOM}.asm"
26090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
26190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberclean_temp_files() {
262538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber    rm -f ${TMP_C} ${TMP_H} ${TMP_O} ${TMP_X} ${TMP_ASM}
26390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
26490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
26590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#
26690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# Toolchain Check Functions
26790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#
26890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubercheck_cmd() {
26990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    log "$@"
27090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    "$@" >>${logfile} 2>&1
27190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
27290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
27390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubercheck_cc() {
27490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    log check_cc "$@"
27590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    cat >${TMP_C}
27690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    log_file ${TMP_C}
27790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    check_cmd ${CC} ${CFLAGS} "$@" -c -o ${TMP_O} ${TMP_C}
27890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
27990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
28090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubercheck_cpp() {
28190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    log check_cpp "$@"
28290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    cat > ${TMP_C}
28390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    log_file ${TMP_C}
28490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    check_cmd ${CC} ${CFLAGS} "$@" -E -o ${TMP_O} ${TMP_C}
28590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
28690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
28790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubercheck_ld() {
28890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    log check_ld "$@"
28990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    check_cc $@ \
29090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        && check_cmd ${LD} ${LDFLAGS} "$@" -o ${TMP_X} ${TMP_O} ${extralibs}
29190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
29290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
29390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubercheck_header(){
29490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    log check_header "$@"
29590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    header=$1
29690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    shift
29790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    var=`echo $header | sed 's/[^A-Za-z0-9_]/_/g'`
29890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    disable $var
29990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    check_cpp "$@" <<EOF && enable $var
30090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#include "$header"
30190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberint x;
30290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberEOF
30390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
30490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
30590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
30690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubercheck_cflags() {
30790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    log check_cflags "$@"
30890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    check_cc "$@" <<EOF
30990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberint x;
31090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberEOF
31190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
31290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
31390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubercheck_add_cflags() {
31490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    check_cflags "$@" && add_cflags "$@"
31590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
31690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
31790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubercheck_add_asflags() {
31890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    log add_asflags "$@"
31990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    add_asflags "$@"
32090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
32190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
32290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubercheck_add_ldflags() {
32390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    log add_ldflags "$@"
32490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    add_ldflags "$@"
32590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
32690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
327538f6170b788de7408b06efc6613dc98579aa6a6Andreas Hubercheck_asm_align() {
328538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber    log check_asm_align "$@"
329538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber    cat >${TMP_ASM} <<EOF
330538f6170b788de7408b06efc6613dc98579aa6a6Andreas Hubersection .rodata
331538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huberalign 16
332538f6170b788de7408b06efc6613dc98579aa6a6Andreas HuberEOF
333538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber    log_file ${TMP_ASM}
334538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber    check_cmd ${AS} ${ASFLAGS} -o ${TMP_O} ${TMP_ASM}
335538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber    readelf -WS ${TMP_O} >${TMP_X}
336538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber    log_file ${TMP_X}
337538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber    if ! grep -q '\.rodata .* 16$' ${TMP_X}; then
338538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber        die "${AS} ${ASFLAGS} does not support section alignment (nasm <=2.08?)"
339538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber    fi
340538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber}
341538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber
34290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberwrite_common_config_banner() {
34390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    echo '# This file automatically generated by configure. Do not edit!' > config.mk
34490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    echo "TOOLCHAIN := ${toolchain}" >> config.mk
34590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
34690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    case ${toolchain} in
34790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        *-linux-rvct)
34890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            echo "ALT_LIBC := ${alt_libc}" >> config.mk
34990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            ;;
35090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    esac
35190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
35290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
35390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberwrite_common_config_targets() {
35490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    for t in ${all_targets}; do
35590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        if enabled ${t}; then
35690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            if enabled universal || enabled child; then
35790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                fwrite config.mk "ALL_TARGETS += ${t}-${toolchain}"
35890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            else
35990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                fwrite config.mk "ALL_TARGETS += ${t}"
36090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            fi
36190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        fi
36290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    true;
36390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    done
36490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubertrue
36590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
36690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
36790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberwrite_common_target_config_mk() {
36890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    local CC=${CC}
36990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    enabled ccache && CC="ccache ${CC}"
37090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
37190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    cat > $1 << EOF
37290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber# This file automatically generated by configure. Do not edit!
37390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberSRC_PATH="$source_path"
37490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberSRC_PATH_BARE=$source_path
37590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberBUILD_PFX=${BUILD_PFX}
37690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberTOOLCHAIN=${toolchain}
37790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberASM_CONVERSION=${asm_conversion_cmd:-${source_path}/build/make/ads2gas.pl}
37890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
37990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberCC=${CC}
38090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberAR=${AR}
38190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberLD=${LD}
38290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberAS=${AS}
38390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberSTRIP=${STRIP}
38490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberNM=${NM}
38590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
386f71323e297a928af368937089d3ed71239786f86Andreas HuberCFLAGS  = ${CFLAGS}
38790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberARFLAGS = -rus\$(if \$(quiet),c,v)
38890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberLDFLAGS = ${LDFLAGS}
38990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberASFLAGS = ${ASFLAGS}
39090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberextralibs = ${extralibs}
39190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberAS_SFX    = ${AS_SFX:-.asm}
39290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberEOF
39390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
39490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    if enabled rvct; then cat >> $1 << EOF
39590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberfmt_deps = sed -e 's;^__image.axf;\$(dir \$@)\$(notdir \$<).o \$@;' #hide
39690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberEOF
39790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    else cat >> $1 << EOF
398f71323e297a928af368937089d3ed71239786f86Andreas Huberfmt_deps = sed -e 's;^\([a-zA-Z0-9_]*\)\.o;\$(dir \$@)\1\$(suffix \$<).o \$@;'
39990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberEOF
40090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    fi
40190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
40290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    print_config_mk ARCH   "${1}" ${ARCH_LIST}
40390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    print_config_mk HAVE   "${1}" ${HAVE_LIST}
40490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    print_config_mk CONFIG "${1}" ${CONFIG_LIST}
40590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    print_config_mk HAVE   "${1}" gnu_strip
40690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
40790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    enabled msvs && echo "CONFIG_VS_VERSION=${vs_version}" >> "${1}"
40890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
40990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
41090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
41190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
41290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberwrite_common_target_config_h() {
41390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    cat > ${TMP_H} << EOF
41490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber/* This file automatically generated by configure. Do not edit! */
41590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#define RESTRICT    ${RESTRICT}
41690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberEOF
41790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    print_config_h ARCH   "${TMP_H}" ${ARCH_LIST}
41890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    print_config_h HAVE   "${TMP_H}" ${HAVE_LIST}
41990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    print_config_h CONFIG "${TMP_H}" ${CONFIG_LIST}
42090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    mkdir -p `dirname "$1"`
42190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    cmp "$1" ${TMP_H} >/dev/null 2>&1 || mv ${TMP_H} "$1"
42290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
42390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
42490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberprocess_common_cmdline() {
42590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    for opt in "$@"; do
42690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        optval="${opt#*=}"
42790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        case "$opt" in
42890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        --child) enable child
42990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        ;;
43090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        --log*)
43190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        logging="$optval"
43290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        if ! disabled logging ; then
43390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            enabled logging || logfile="$logging"
43490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        else
43590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            logfile=/dev/null
43690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        fi
43790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        ;;
43890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        --target=*) toolchain="${toolchain:-${optval}}"
43990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        ;;
44090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        --force-target=*) toolchain="${toolchain:-${optval}}"; enable force_toolchain
44190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        ;;
44290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        --cpu)
44390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        ;;
44490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        --cpu=*) tune_cpu="$optval"
44590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        ;;
44679f15823c34ae1e423108295e416213200bb280fAndreas Huber        --extra-cflags=*)
44779f15823c34ae1e423108295e416213200bb280fAndreas Huber        extra_cflags="${optval}"
44879f15823c34ae1e423108295e416213200bb280fAndreas Huber        ;;
44990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        --enable-?*|--disable-?*)
45090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        eval `echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g'`
45190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        echo "${CMDLINE_SELECT} ${ARCH_EXT_LIST}" | grep "^ *$option\$" >/dev/null || die_unknown $opt
45290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        $action $option
45390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        ;;
45490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        --force-enable-?*|--force-disable-?*)
45590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        eval `echo "$opt" | sed 's/--force-/action=/;s/-/ option=/;s/-/_/g'`
45690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        $action $option
45790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        ;;
45890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        --libc=*)
45990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        [ -d "${optval}" ] || die "Not a directory: ${optval}"
46090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        disable builtin_libc
46190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        alt_libc="${optval}"
46290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        ;;
463538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber        --as=*)
464538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber        [ "${optval}" = yasm -o "${optval}" = nasm -o "${optval}" = auto ] \
465538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber            || die "Must be yasm, nasm or auto: ${optval}"
466538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber        alt_as="${optval}"
467538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber        ;;
468f71323e297a928af368937089d3ed71239786f86Andreas Huber        --prefix=*)
469f71323e297a928af368937089d3ed71239786f86Andreas Huber        prefix="${optval}"
470f71323e297a928af368937089d3ed71239786f86Andreas Huber        ;;
471f71323e297a928af368937089d3ed71239786f86Andreas Huber        --libdir=*)
472f71323e297a928af368937089d3ed71239786f86Andreas Huber        libdir="${optval}"
473f71323e297a928af368937089d3ed71239786f86Andreas Huber        ;;
474538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber        --libc|--as|--prefix|--libdir)
47590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        die "Option ${opt} requires argument"
47690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        ;;
47790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        --help|-h) show_help
47890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        ;;
47990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        *) die_unknown $opt
48090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        ;;
48190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        esac
48290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    done
48390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
48490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
48590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberprocess_cmdline() {
48690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    for opt do
48790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        optval="${opt#*=}"
48890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        case "$opt" in
48990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        *) process_common_cmdline $opt
49090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        ;;
49190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        esac
49290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    done
49390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
49490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
495f71323e297a928af368937089d3ed71239786f86Andreas Huber
496f71323e297a928af368937089d3ed71239786f86Andreas Huberpost_process_common_cmdline() {
497f71323e297a928af368937089d3ed71239786f86Andreas Huber    prefix="${prefix:-/usr/local}"
498f71323e297a928af368937089d3ed71239786f86Andreas Huber    prefix="${prefix%/}"
499f71323e297a928af368937089d3ed71239786f86Andreas Huber    libdir="${libdir:-${prefix}/lib}"
500f71323e297a928af368937089d3ed71239786f86Andreas Huber    libdir="${libdir%/}"
501f71323e297a928af368937089d3ed71239786f86Andreas Huber    if [ "${libdir#${prefix}}" = "${libdir}" ]; then
502f71323e297a928af368937089d3ed71239786f86Andreas Huber        die "Libdir ${libdir} must be a subdirectory of ${prefix}"
503f71323e297a928af368937089d3ed71239786f86Andreas Huber    fi
504f71323e297a928af368937089d3ed71239786f86Andreas Huber}
505f71323e297a928af368937089d3ed71239786f86Andreas Huber
506f71323e297a928af368937089d3ed71239786f86Andreas Huber
50790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberpost_process_cmdline() {
50890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    true;
50990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
51090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
51190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubersetup_gnu_toolchain() {
51290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        CC=${CC:-${CROSS}gcc}
51390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        AR=${AR:-${CROSS}ar}
51490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        LD=${LD:-${CROSS}${link_with_cc:-ld}}
51590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        AS=${AS:-${CROSS}as}
51690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    STRIP=${STRIP:-${CROSS}strip}
51790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    NM=${NM:-${CROSS}nm}
51890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        AS_SFX=.s
51990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
52090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
52190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberprocess_common_toolchain() {
522f71323e297a928af368937089d3ed71239786f86Andreas Huber    if [ -z "$toolchain" ]; then
523f71323e297a928af368937089d3ed71239786f86Andreas Huber        gcctarget="$(gcc -dumpmachine 2> /dev/null)"
524f71323e297a928af368937089d3ed71239786f86Andreas Huber
525f71323e297a928af368937089d3ed71239786f86Andreas Huber        # detect tgt_isa
526f71323e297a928af368937089d3ed71239786f86Andreas Huber        case "$gcctarget" in
527f71323e297a928af368937089d3ed71239786f86Andreas Huber            *x86_64*|*amd64*)
528f71323e297a928af368937089d3ed71239786f86Andreas Huber                tgt_isa=x86_64
529f71323e297a928af368937089d3ed71239786f86Andreas Huber                ;;
530f71323e297a928af368937089d3ed71239786f86Andreas Huber            *i[3456]86*)
531f71323e297a928af368937089d3ed71239786f86Andreas Huber                tgt_isa=x86
532f71323e297a928af368937089d3ed71239786f86Andreas Huber                ;;
533538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber            *powerpc64*)
534538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber                tgt_isa=ppc64
535538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber                ;;
536538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber            *powerpc*)
537538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber                tgt_isa=ppc32
538538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber                ;;
539538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber            *sparc*)
540538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber                tgt_isa=sparc
541538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber                ;;
542f71323e297a928af368937089d3ed71239786f86Andreas Huber        esac
543f71323e297a928af368937089d3ed71239786f86Andreas Huber
544f71323e297a928af368937089d3ed71239786f86Andreas Huber        # detect tgt_os
545f71323e297a928af368937089d3ed71239786f86Andreas Huber        case "$gcctarget" in
546f71323e297a928af368937089d3ed71239786f86Andreas Huber            *darwin8*)
547f71323e297a928af368937089d3ed71239786f86Andreas Huber                tgt_isa=universal
548f71323e297a928af368937089d3ed71239786f86Andreas Huber                tgt_os=darwin8
549f71323e297a928af368937089d3ed71239786f86Andreas Huber                ;;
550f71323e297a928af368937089d3ed71239786f86Andreas Huber            *darwin9*)
551f71323e297a928af368937089d3ed71239786f86Andreas Huber                tgt_isa=universal
552f71323e297a928af368937089d3ed71239786f86Andreas Huber                tgt_os=darwin9
553f71323e297a928af368937089d3ed71239786f86Andreas Huber                ;;
55479f15823c34ae1e423108295e416213200bb280fAndreas Huber            *darwin10*)
55579f15823c34ae1e423108295e416213200bb280fAndreas Huber                tgt_isa=x86_64
55679f15823c34ae1e423108295e416213200bb280fAndreas Huber                tgt_os=darwin10
55779f15823c34ae1e423108295e416213200bb280fAndreas Huber                ;;
558f71323e297a928af368937089d3ed71239786f86Andreas Huber            *mingw32*|*cygwin*)
559f71323e297a928af368937089d3ed71239786f86Andreas Huber                [ -z "$tgt_isa" ] && tgt_isa=x86
560f71323e297a928af368937089d3ed71239786f86Andreas Huber                tgt_os=win32
561f71323e297a928af368937089d3ed71239786f86Andreas Huber                ;;
562f71323e297a928af368937089d3ed71239786f86Andreas Huber            *linux*|*bsd*)
563f71323e297a928af368937089d3ed71239786f86Andreas Huber                tgt_os=linux
564f71323e297a928af368937089d3ed71239786f86Andreas Huber                ;;
565538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber            *solaris2.10)
566538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber                tgt_os=solaris
567538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber                ;;
568f71323e297a928af368937089d3ed71239786f86Andreas Huber        esac
569f71323e297a928af368937089d3ed71239786f86Andreas Huber
570f71323e297a928af368937089d3ed71239786f86Andreas Huber        if [ -n "$tgt_isa" ] && [ -n "$tgt_os" ]; then
571f71323e297a928af368937089d3ed71239786f86Andreas Huber            toolchain=${tgt_isa}-${tgt_os}-gcc
572f71323e297a928af368937089d3ed71239786f86Andreas Huber        fi
573f71323e297a928af368937089d3ed71239786f86Andreas Huber    fi
574f71323e297a928af368937089d3ed71239786f86Andreas Huber
57590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    toolchain=${toolchain:-generic-gnu}
57690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
57790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    is_in ${toolchain} ${all_platforms} || enabled force_toolchain \
57890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        || die "Unrecognized toolchain '${toolchain}'"
57990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
58090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    enabled child || log_echo "Configuring for target '${toolchain}'"
58190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
58290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    #
58390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    # Set up toolchain variables
58490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    #
58590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    tgt_isa=$(echo ${toolchain} | awk 'BEGIN{FS="-"}{print $1}')
58690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    tgt_os=$(echo ${toolchain} | awk 'BEGIN{FS="-"}{print $2}')
58790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    tgt_cc=$(echo ${toolchain} | awk 'BEGIN{FS="-"}{print $3}')
58890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
58990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    # Mark the specific ISA requested as enabled
59090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    soft_enable ${tgt_isa}
59190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    enable ${tgt_os}
59290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    enable ${tgt_cc}
59390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
59490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    # Enable the architecture family
59590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    case ${tgt_isa} in
59690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        arm*|iwmmxt*) enable arm;;
59790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    mips*)        enable mips;;
59890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    esac
59990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
600538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber    # PIC is probably what we want when building shared libs
601538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber    enabled shared && soft_enable pic
602538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber
60390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    # Handle darwin variants
60490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    case ${toolchain} in
605538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber        *-darwin8-*)
60690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            add_cflags  "-isysroot /Developer/SDKs/MacOSX10.4u.sdk"
60790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            add_cflags  "-mmacosx-version-min=10.4"
60890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            add_ldflags "-isysroot /Developer/SDKs/MacOSX10.4u.sdk"
60990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            add_ldflags "-mmacosx-version-min=10.4"
61090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            ;;
611538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber        *-darwin9-*)
61290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            add_cflags  "-isysroot /Developer/SDKs/MacOSX10.5.sdk"
61390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            add_cflags  "-mmacosx-version-min=10.5"
61490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            add_ldflags "-isysroot /Developer/SDKs/MacOSX10.5.sdk"
61590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            add_ldflags "-mmacosx-version-min=10.5"
61690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            ;;
61779f15823c34ae1e423108295e416213200bb280fAndreas Huber        *-darwin10-*)
61879f15823c34ae1e423108295e416213200bb280fAndreas Huber            add_cflags  "-isysroot /Developer/SDKs/MacOSX10.6.sdk"
61979f15823c34ae1e423108295e416213200bb280fAndreas Huber            add_cflags  "-mmacosx-version-min=10.6"
62079f15823c34ae1e423108295e416213200bb280fAndreas Huber            add_ldflags "-isysroot /Developer/SDKs/MacOSX10.6.sdk"
62179f15823c34ae1e423108295e416213200bb280fAndreas Huber            add_ldflags "-mmacosx-version-min=10.6"
62279f15823c34ae1e423108295e416213200bb280fAndreas Huber            ;;
62390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    esac
62490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
625538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber    # Handle Solaris variants. Solaris 10 needs -lposix4
626538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber    case ${toolchain} in
62779f15823c34ae1e423108295e416213200bb280fAndreas Huber        sparc-solaris-*)
62879f15823c34ae1e423108295e416213200bb280fAndreas Huber            add_extralibs -lposix4
62979f15823c34ae1e423108295e416213200bb280fAndreas Huber            add_cflags "-DMUST_BE_ALIGNED"
63079f15823c34ae1e423108295e416213200bb280fAndreas Huber            ;;
631538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber        *-solaris-*)
632538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber            add_extralibs -lposix4
633538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber            ;;
634538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber    esac
635538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber
63690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    # Process ARM architecture variants
63790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    case ${toolchain} in
63890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    arm*|iwmmxt*)
63990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    # on arm, isa versions are supersets
64090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    enabled armv7a && soft_enable armv7 ### DEBUG
64190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    enabled armv7 && soft_enable armv6
64290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    enabled armv6 && soft_enable armv5te
64390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    enabled armv6 && soft_enable fast_unaligned
64490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    enabled iwmmxt2 && soft_enable iwmmxt
64590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    enabled iwmmxt && soft_enable armv5te
64690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
64790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    asm_conversion_cmd="cat"
64890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
64990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        case ${tgt_cc} in
65090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        gcc)
65190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        if enabled iwmmxt || enabled iwmmxt2
65290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            then
65390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                CROSS=${CROSS:-arm-iwmmxt-linux-gnueabi-}
65490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            elif enabled symbian; then
65590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                CROSS=${CROSS:-arm-none-symbianelf-}
65690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            else
65790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                CROSS=${CROSS:-arm-none-linux-gnueabi-}
65890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            fi
65990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            link_with_cc=gcc
66090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            setup_gnu_toolchain
66190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            arch_int=${tgt_isa##armv}
66290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            arch_int=${arch_int%%te}
66390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            check_add_asflags --defsym ARCHITECTURE=${arch_int}
66490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            tune_cflags="-mtune="
66590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        if enabled iwmmxt || enabled iwmmxt2
66690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            then
66790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                check_add_asflags -mcpu=${tgt_isa}
66890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            elif enabled armv7
66990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            then
67090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                check_add_cflags -march=armv7-a -mcpu=cortex-a8 -mfpu=neon -mfloat-abi=softfp  #-ftree-vectorize
67179f15823c34ae1e423108295e416213200bb280fAndreas Huber                check_add_asflags -mcpu=cortex-a8 -mfpu=neon -mfloat-abi=softfp  #-march=armv7-a
67290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            else
67390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                check_add_cflags -march=${tgt_isa}
67490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                check_add_asflags -march=${tgt_isa}
67590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            fi
67679f15823c34ae1e423108295e416213200bb280fAndreas Huber            enabled debug && add_asflags -g
67790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            asm_conversion_cmd="${source_path}/build/make/ads2gas.pl"
67890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            ;;
67990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        rvct)
68090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            CC=armcc
68190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            AR=armar
68290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            AS=armasm
68390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            LD=${source_path}/build/make/armlink_adapter.sh
68490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            STRIP=arm-none-linux-gnueabi-strip
68590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            NM=arm-none-linux-gnueabi-nm
68690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            tune_cflags="--cpu="
68790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            tune_asflags="--cpu="
68890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            if [ -z "${tune_cpu}" ]; then
68990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            if enabled armv7
69090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                then
69190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                    check_add_cflags --cpu=Cortex-A8 --fpu=softvfp+vfpv3
69290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                    check_add_asflags --cpu=Cortex-A8 --fpu=none
69390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                else
69490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                    check_add_cflags --cpu=${tgt_isa##armv}
69590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                    check_add_asflags --cpu=${tgt_isa##armv}
69690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                fi
69790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            fi
69890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            arch_int=${tgt_isa##armv}
69990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            arch_int=${arch_int%%te}
70090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            check_add_asflags --pd "\"ARCHITECTURE SETA ${arch_int}\""
70179f15823c34ae1e423108295e416213200bb280fAndreas Huber            enabled debug && add_asflags -g
70279f15823c34ae1e423108295e416213200bb280fAndreas Huber            add_cflags --gnu
70379f15823c34ae1e423108295e416213200bb280fAndreas Huber            add_cflags --enum_is_int
70479f15823c34ae1e423108295e416213200bb280fAndreas Huber            add_cflags --wchar32
70590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        ;;
70690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        esac
70790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
70890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        case ${tgt_os} in
70979f15823c34ae1e423108295e416213200bb280fAndreas Huber        none*)
71079f15823c34ae1e423108295e416213200bb280fAndreas Huber            disable multithread
71179f15823c34ae1e423108295e416213200bb280fAndreas Huber            disable os_support
71279f15823c34ae1e423108295e416213200bb280fAndreas Huber            ;;
71390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        darwin*)
71490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            SDK_PATH=/Developer/Platforms/iPhoneOS.platform/Developer
71590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            TOOLCHAIN_PATH=${SDK_PATH}/usr/bin
71690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            CC=${TOOLCHAIN_PATH}/gcc
71790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            AR=${TOOLCHAIN_PATH}/ar
71879f15823c34ae1e423108295e416213200bb280fAndreas Huber            LD=${TOOLCHAIN_PATH}/arm-apple-darwin10-gcc-4.2.1
71990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            AS=${TOOLCHAIN_PATH}/as
72090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            STRIP=${TOOLCHAIN_PATH}/strip
72190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            NM=${TOOLCHAIN_PATH}/nm
72290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            AS_SFX=.s
72390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
72490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            # ASFLAGS is written here instead of using check_add_asflags
72590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            # because we need to overwrite all of ASFLAGS and purge the
72690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            # options that were put in above
72790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            ASFLAGS="-version -arch ${tgt_isa} -g"
72890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
72990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            add_cflags -arch ${tgt_isa}
73090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            add_ldflags -arch_only ${tgt_isa}
73190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
73279f15823c34ae1e423108295e416213200bb280fAndreas Huber            add_cflags  "-isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.2.sdk"
73390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
73490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            # This should be overridable
73579f15823c34ae1e423108295e416213200bb280fAndreas Huber            alt_libc=${SDK_PATH}/SDKs/iPhoneOS4.2.sdk
73690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
73790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            # Add the paths for the alternate libc
73890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#            for d in usr/include usr/include/gcc/darwin/4.0/; do
73979f15823c34ae1e423108295e416213200bb280fAndreas Huber            for d in usr/include usr/include/gcc/darwin/4.0/ usr/lib/gcc/arm-apple-darwin10/4.2.1/include/; do
74090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                try_dir="${alt_libc}/${d}"
74190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                [ -d "${try_dir}" ] && add_cflags -I"${try_dir}"
74290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            done
74390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
74490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            for d in lib usr/lib; do
74590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                try_dir="${alt_libc}/${d}"
74690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                [ -d "${try_dir}" ] && add_ldflags -L"${try_dir}"
74790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            done
74890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
74990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            asm_conversion_cmd="${source_path}/build/make/ads2gas_apple.pl"
75090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber         ;;
75190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
75290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        linux*)
75390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            enable linux
75490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            if enabled rvct; then
75590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                # Compiling with RVCT requires an alternate libc (glibc) when
75690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                # targetting linux.
75790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                disabled builtin_libc \
75890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                    || die "Must supply --libc when targetting *-linux-rvct"
75990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
76090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                # Set up compiler
76190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                add_cflags --library_interface=aeabi_glibc
76290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                add_cflags --no_hide_all
76390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                add_cflags --dwarf2
76490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
76590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                # Set up linker
76690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                add_ldflags --sysv --no_startup --no_ref_cpp_init
76790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                add_ldflags --entry=_start
76890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                add_ldflags --keep '"*(.init)"' --keep '"*(.fini)"'
76990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                add_ldflags --keep '"*(.init_array)"' --keep '"*(.fini_array)"'
77090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                add_ldflags --dynamiclinker=/lib/ld-linux.so.3
77190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                add_extralibs libc.so.6 -lc_nonshared crt1.o crti.o crtn.o
77290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
77390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                # Add the paths for the alternate libc
77490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                for d in usr/include; do
77590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                    try_dir="${alt_libc}/${d}"
77690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                    [ -d "${try_dir}" ] && add_cflags -J"${try_dir}"
77790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                done
77890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                add_cflags -J"${RVCT31INC}"
77990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                for d in lib usr/lib; do
78090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                    try_dir="${alt_libc}/${d}"
78190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                    [ -d "${try_dir}" ] && add_ldflags -L"${try_dir}"
78290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                done
78390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
78490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
78590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                # glibc has some struct members named __align, which is a
78690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                # storage modifier in RVCT. If we need to use this modifier,
78790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                # we'll have to #undef it in our code. Note that this must
78890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                # happen AFTER all libc inclues.
78990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                add_cflags -D__align=x_align_x
79090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            fi
79190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        ;;
79290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
79390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        symbian*)
79490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            enable symbian
79590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            # Add the paths for the alternate libc
79690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            for d in include/libc; do
79790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                try_dir="${alt_libc}/${d}"
79890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                [ -d "${try_dir}" ] && add_cflags -I"${try_dir}"
79990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            done
80090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            for d in release/armv5/urel; do
80190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                try_dir="${alt_libc}/${d}"
80290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                [ -d "${try_dir}" ] && add_ldflags -L"${try_dir}"
80390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            done
80490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            add_cflags -DIMPORT_C=
80590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
80690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        esac
80790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ;;
80890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    mips*)
80990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        CROSS=${CROSS:-mipsel-linux-uclibc-}
81090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        link_with_cc=gcc
81190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        setup_gnu_toolchain
81290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        tune_cflags="-mtune="
81390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        check_add_cflags -march=${tgt_isa}
81490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    check_add_asflags -march=${tgt_isa}
81590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    check_add_asflags -KPIC
81690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ;;
81790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ppc*)
81890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        enable ppc
81990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        bits=${tgt_isa##ppc}
82090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        link_with_cc=gcc
82190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        setup_gnu_toolchain
82290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        add_asflags -force_cpusubtype_ALL -I"\$(dir \$<)darwin"
82390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        soft_enable altivec
824538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber        enabled altivec && add_cflags -maltivec
82590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
82690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        case "$tgt_os" in
82790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        linux*)
82890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            add_asflags -maltivec -mregnames -I"\$(dir \$<)linux"
82990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        ;;
83090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        darwin*)
83190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            darwin_arch="-arch ppc"
83290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            enabled ppc64 && darwin_arch="${darwin_arch}64"
83390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            add_cflags  ${darwin_arch} -m${bits} -fasm-blocks
83490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            add_asflags ${darwin_arch} -force_cpusubtype_ALL -I"\$(dir \$<)darwin"
83590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            add_ldflags ${darwin_arch} -m${bits}
836538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber            enabled altivec && add_cflags -faltivec
83790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        ;;
83890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        esac
83990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ;;
84090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    x86*)
84190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        bits=32
84290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        enabled x86_64 && bits=64
84390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        soft_enable runtime_cpu_detect
84490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        soft_enable mmx
84590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        soft_enable sse
84690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        soft_enable sse2
84790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        soft_enable sse3
84890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        soft_enable ssse3
849538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber        soft_enable sse4_1
85090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
85190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        case  ${tgt_os} in
852f71323e297a928af368937089d3ed71239786f86Andreas Huber            win*)
853f71323e297a928af368937089d3ed71239786f86Andreas Huber                enabled gcc && add_cflags -fno-common
854f71323e297a928af368937089d3ed71239786f86Andreas Huber                ;;
85590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            solaris*)
85690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                CC=${CC:-${CROSS}gcc}
85790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                LD=${LD:-${CROSS}gcc}
85890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                CROSS=${CROSS:-g}
85990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                ;;
86090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        esac
86190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
862538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber        AS="${alt_as:-${AS:-auto}}"
86390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        case  ${tgt_cc} in
86490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            icc*)
86590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                CC=${CC:-icc}
86690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                LD=${LD:-icc}
86790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                setup_gnu_toolchain
86890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                add_cflags -use-msasm -use-asm
86990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                add_ldflags -i-static
87079f15823c34ae1e423108295e416213200bb280fAndreas Huber                enabled x86_64 && add_cflags -ipo -no-prec-div -static -xSSE2 -axSSE2
871f71323e297a928af368937089d3ed71239786f86Andreas Huber                enabled x86_64 && AR=xiar
872f71323e297a928af368937089d3ed71239786f86Andreas Huber                case ${tune_cpu} in
873f71323e297a928af368937089d3ed71239786f86Andreas Huber                    atom*)
874f71323e297a928af368937089d3ed71239786f86Andreas Huber                        tune_cflags="-x"
875f71323e297a928af368937089d3ed71239786f86Andreas Huber                        tune_cpu="SSE3_ATOM"
876f71323e297a928af368937089d3ed71239786f86Andreas Huber                    ;;
877f71323e297a928af368937089d3ed71239786f86Andreas Huber                    *)
878f71323e297a928af368937089d3ed71239786f86Andreas Huber                        tune_cflags="-march="
879f71323e297a928af368937089d3ed71239786f86Andreas Huber                    ;;
880f71323e297a928af368937089d3ed71239786f86Andreas Huber                esac
88190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                ;;
88290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            gcc*)
88390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                add_cflags  -m${bits}
88490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                add_ldflags -m${bits}
88590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                link_with_cc=gcc
886f71323e297a928af368937089d3ed71239786f86Andreas Huber                tune_cflags="-march="
88790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            setup_gnu_toolchain
88890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                ;;
88990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        esac
89090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
891538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber        case "${AS}" in
892538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber            auto|"")
893538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber                which nasm >/dev/null 2>&1 && AS=nasm
894538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber                which yasm >/dev/null 2>&1 && AS=yasm
895538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber                [ "${AS}" = auto -o -z "${AS}" ] \
896538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber                    && die "Neither yasm nor nasm have been found"
897538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber                ;;
898538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber        esac
899538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber        log_echo "  using $AS"
900538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber        [ "${AS##*/}" = nasm ] && add_asflags -Ox
90190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        AS_SFX=.asm
90290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        case  ${tgt_os} in
90390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            win*)
90490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                add_asflags -f win${bits}
90579f15823c34ae1e423108295e416213200bb280fAndreas Huber                enabled debug && add_asflags -g cv8
90690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            ;;
90790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            linux*|solaris*)
90890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                add_asflags -f elf${bits}
909538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber                enabled debug && [ "${AS}" = yasm ] && add_asflags -g dwarf2
910538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber                enabled debug && [ "${AS}" = nasm ] && add_asflags -g
911538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber                [ "${AS##*/}" = nasm ] && check_asm_align
91290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            ;;
91390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            darwin*)
91490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                add_asflags -f macho${bits}
91590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                enabled x86 && darwin_arch="-arch i386" || darwin_arch="-arch x86_64"
91690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                add_cflags  ${darwin_arch}
91790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                add_ldflags ${darwin_arch}
91890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                # -mdynamic-no-pic is still a bit of voodoo -- it was required at
91990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                # one time, but does not seem to be now, and it breaks some of the
92090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                # code that still relies on inline assembly.
92190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                # enabled icc && ! enabled pic && add_cflags -fno-pic -mdynamic-no-pic
92290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                enabled icc && ! enabled pic && add_cflags -fno-pic
92390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            ;;
924538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber            *) log "Warning: Unknown os $tgt_os while setting up $AS flags"
92590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            ;;
92690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        esac
92790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ;;
92890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    universal*|*-gcc|generic-gnu)
92990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        link_with_cc=gcc
930f71323e297a928af368937089d3ed71239786f86Andreas Huber        enable gcc
93190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    setup_gnu_toolchain
93290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ;;
93390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    esac
93490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
93590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    # Try to enable CPU specific tuning
93690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    if [ -n "${tune_cpu}" ]; then
93790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        if [ -n "${tune_cflags}" ]; then
93890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            check_add_cflags ${tune_cflags}${tune_cpu} || \
93990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                die "Requested CPU '${tune_cpu}' not supported by compiler"
94090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        fi
94190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    if [ -n "${tune_asflags}" ]; then
94290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            check_add_asflags ${tune_asflags}${tune_cpu} || \
94390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                die "Requested CPU '${tune_cpu}' not supported by assembler"
94490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        fi
94590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    if [ -z "${tune_cflags}${tune_asflags}" ]; then
94690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            log_echo "Warning: CPU tuning not supported by this toolchain"
94790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        fi
94890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    fi
94990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
95090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    enabled debug && check_add_cflags -g && check_add_ldflags -g
95190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    enabled gprof && check_add_cflags -pg && check_add_ldflags -pg
95290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    enabled gcov &&
95390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        check_add_cflags -fprofile-arcs -ftest-coverage &&
95490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        check_add_ldflags -fprofile-arcs -ftest-coverage
955538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber    if enabled optimizations; then
956538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber        enabled rvct && check_add_cflags -Otime
957538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber        enabled small && check_add_cflags -O2 || check_add_cflags -O3
95890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    fi
95990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
96079f15823c34ae1e423108295e416213200bb280fAndreas Huber    # Position Independent Code (PIC) support, for building relocatable
96190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    # shared objects
96290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    enabled gcc && enabled pic && check_add_cflags -fPIC
96390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
96490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    # Check for strip utility variant
96590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ${STRIP} -V 2>/dev/null | grep GNU >/dev/null && enable gnu_strip
96690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
96790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    # Try to determine target endianness
96890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    check_cc <<EOF
96990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    unsigned int e = 'O'<<24 | '2'<<16 | 'B'<<8 | 'E';
97090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberEOF
97190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    [ -f "${TMP_O}" ] && od -A n -t x1 "${TMP_O}" | tr -d '\n' |
97290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        grep '4f *32 *42 *45' >/dev/null 2>&1 && enable big_endian
97390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
97490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    # Almost every platform uses pthreads.
97590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    if enabled multithread; then
97690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        case ${toolchain} in
97790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            *-win*);;
97890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            *) check_header pthread.h && add_extralibs -lpthread
97990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        esac
98090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    fi
98190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
98290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    # glibc needs these
98390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    if enabled linux; then
984f71323e297a928af368937089d3ed71239786f86Andreas Huber        add_cflags -D_LARGEFILE_SOURCE
985f71323e297a928af368937089d3ed71239786f86Andreas Huber        add_cflags -D_FILE_OFFSET_BITS=64
98690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    fi
98779f15823c34ae1e423108295e416213200bb280fAndreas Huber
98879f15823c34ae1e423108295e416213200bb280fAndreas Huber    # append any user defined extra cflags
98979f15823c34ae1e423108295e416213200bb280fAndreas Huber    if [ -n "${extra_cflags}" ] ; then
99079f15823c34ae1e423108295e416213200bb280fAndreas Huber        check_add_cflags ${extra_cflags} || \
99179f15823c34ae1e423108295e416213200bb280fAndreas Huber        die "Requested extra CFLAGS '${extra_cflags}' not supported by compiler"
99279f15823c34ae1e423108295e416213200bb280fAndreas Huber    fi
99390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
99490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
99590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberprocess_toolchain() {
99690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    process_common_toolchain
99790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
99890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
99990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberprint_config_mk() {
1000f71323e297a928af368937089d3ed71239786f86Andreas Huber    local prefix=$1
1001f71323e297a928af368937089d3ed71239786f86Andreas Huber    local makefile=$2
100290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    shift 2
100390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    for cfg; do
100490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        upname="`toupper $cfg`"
100590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        if enabled $cfg; then
100690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            echo "${prefix}_${upname}=yes" >> $makefile
100790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        fi
100890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    done
100990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
101090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
101190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberprint_config_h() {
1012f71323e297a928af368937089d3ed71239786f86Andreas Huber    local prefix=$1
1013f71323e297a928af368937089d3ed71239786f86Andreas Huber    local header=$2
101490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    shift 2
101590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    for cfg; do
101690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        upname="`toupper $cfg`"
101790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        if enabled $cfg; then
101890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            echo "#define ${prefix}_${upname} 1" >> $header
101990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        else
102090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            echo "#define ${prefix}_${upname} 0" >> $header
102190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        fi
102290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    done
102390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
102490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
102590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberprocess_targets() {
102690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    true;
102790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
102890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
102990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberprocess_detect() {
103090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    true;
103190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
103290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
103390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberenable logging
103490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberlogfile="config.err"
103590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberself=$0
103690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberprocess() {
103790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    cmdline_args="$@"
103890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    process_cmdline "$@"
103990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    if enabled child; then
104090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        echo "# ${self} $@" >> ${logfile}
104190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    else
104290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        echo "# ${self} $@" > ${logfile}
104390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    fi
1044f71323e297a928af368937089d3ed71239786f86Andreas Huber    post_process_common_cmdline
104590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    post_process_cmdline
104690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    process_toolchain
104790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    process_detect
104890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    process_targets
104990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
105090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    OOT_INSTALLS="${OOT_INSTALLS}"
105190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    if enabled source_path_used; then
105290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    # Prepare the PWD for building.
105390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    for f in ${OOT_INSTALLS}; do
105490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            install -D ${source_path}/$f $f
105590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    done
105690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    fi
105790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    cp ${source_path}/build/make/Makefile .
105890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
105990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    clean_temp_files
106090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    true
106190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
1062