Changeset 29780


Ignore:
Timestamp:
2012-01-19T00:46:06+01:00 (6 years ago)
Author:
jow
Message:

[scripts] ext-toolchain.sh: add option to write .config
Add a new --config option to generate a .config from a given toolchain,
this allows for easy integration of external toolchains, e.g.

./scripts/ext-toolchain.sh --toolchain /opt/mips-2011.03 --cflags "-muclibc" --config atheros

to setup a ready-to-compile atheros target using the external CodeSourcery toolchain.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/scripts/ext-toolchain.sh

    r29772 r29780  
    3535        rt:       librt-* librt 
    3636        pthread:  libpthread-* libpthread 
    37         cpp:      libstdc++ 
     37        stdcpp:   libstdc++ 
    3838        gcc:      libgcc_s 
    3939        ssp:      libssp 
     
    143143 
    144144find_libs() { 
    145         local spec="$(echo "$LIB_SPECS" | sed -ne "s#^[[:space:]]*$1:##p")" 
     145        local spec="$(echo "$LIB_SPECS" | sed -ne "s#^[[:space:]]*$1:##ip")" 
    146146 
    147147        if [ -n "$spec" ] && probe_cpp; then 
     
    168168 
    169169find_bins() { 
    170         local spec="$(echo "$BIN_SPECS" | sed -ne "s#^[[:space:]]*$1:##p")" 
     170        local spec="$(echo "$BIN_SPECS" | sed -ne "s#^[[:space:]]*$1:##ip")" 
    171171 
    172172        if [ -n "$spec" ] && probe_cpp; then 
     
    238238 
    239239 
     240print_config() { 
     241        local mktarget="$1" 
     242        local mksubtarget 
     243 
     244        local target="$("$CC" $CFLAGS -dumpmachine)" 
     245        local cpuarch="${target%%-*}" 
     246        local prefix="${CC##*/}"; prefix="${prefix%-*}-" 
     247        local config="${0%/scripts/*}/.config" 
     248 
     249        # if no target specified, print choice list and exit 
     250        if [ -z "$mktarget" ]; then 
     251                # prepare metadata 
     252                if [ ! -f "${0%/scripts/*}/tmp/.targetinfo" ]; then 
     253                        "${0%/*}/scripts/config/mconf" prepare-tmpinfo 
     254                fi 
     255 
     256                local mktargets=$( 
     257                        sed -ne " 
     258                                /^Target: / { h }; 
     259                                /^Target-Arch: $cpuarch\$/ { x; s#^Target: ##p } 
     260                        " "${0%/scripts/*}/tmp/.targetinfo" | sort -u 
     261                ) 
     262 
     263                for mktarget in $mktargets; do 
     264                        case "$mktarget" in */*) 
     265                                mktargets=$(echo "$mktargets" | sed -e "/^${mktarget%/*}\$/d") 
     266                        esac 
     267                done 
     268 
     269                if [ -n "$mktargets" ]; then 
     270                        echo "Available targets:"                               >&2 
     271                        echo $mktargets                                         >&2 
     272                else 
     273                        echo -e "Could not find a suitable OpenWrt target for " >&2 
     274                        echo -e "CPU architecture '$cpuarch' - you need to "    >&2 
     275                        echo -e "define one first!"                             >&2 
     276                fi 
     277                return 1 
     278        fi 
     279 
     280        # bail out if there is a .config already 
     281        if [ -f "${0%/scripts/*}/.config" ]; then 
     282                echo "There already is a .config file, refusing to overwrite!" >&2 
     283                return 1 
     284        fi 
     285 
     286        case "$mktarget" in */*) 
     287                mksubtarget="${mktarget#*/}" 
     288                mktarget="${mktarget%/*}" 
     289        ;; esac 
     290 
     291 
     292        echo "CONFIG_TARGET_${mktarget}=y" > "$config" 
     293 
     294        if [ -n "$mksubtarget" ]; then 
     295                echo "CONFIG_TARGET_${mktarget}_${mksubtarget}=y" >> "$config" 
     296        fi 
     297 
     298        if test_feature "softfloat"; then 
     299                echo "CONFIG_SOFT_FLOAT=y" >> "$config" 
     300        else 
     301                echo "# CONFIG_SOFT_FLOAT is not set" >> "$config" 
     302        fi 
     303 
     304        if test_feature "ipv6"; then 
     305                echo "CONFIG_IPV6=y" >> "$config" 
     306        else 
     307                echo "# CONFIG_IPV6 is not set" >> "$config" 
     308        fi 
     309 
     310        if test_feature "locale"; then 
     311                echo "CONFIG_NLS=y" >> "$config" 
     312        else 
     313                echo "# CONFIG_NLS is not set" >> "$config" 
     314        fi 
     315 
     316        echo "CONFIG_DEVEL=y" >> "$config" 
     317        echo "CONFIG_EXTERNAL_TOOLCHAIN=y" >> "$config" 
     318        echo "CONFIG_TOOLCHAIN_ROOT=\"$TOOLCHAIN\"" >> "$config" 
     319        echo "CONFIG_TOOLCHAIN_PREFIX=\"$prefix\"" >> "$config" 
     320        echo "CONFIG_TARGET_NAME=\"$target\"" >> "$config" 
     321 
     322        local lib 
     323        for lib in C RT PTHREAD GCC STDCPP SSP GFORTRAN; do 
     324                local file 
     325                local spec="" 
     326                local llib="$(echo "$lib" | sed -e 's#.*#\L&#')" 
     327                for file in $(find_libs "$lib"); do 
     328                        spec="${spec:+$spec }$(echo "$file" | sed -e "s#^$TOOLCHAIN#.#")" 
     329                done 
     330                if [ -n "$spec" ]; then 
     331                        echo "CONFIG_PACKAGE_lib${llib}=y" >> "$config" 
     332                        echo "CONFIG_LIB${lib}_FILE_SPEC=\"$spec\"" >> "$config" 
     333                else 
     334                        echo "# CONFIG_PACKAGE_lib${llib} is not set" >> "$config" 
     335                fi 
     336        done 
     337 
     338        local bin 
     339        for bin in LDD LDCONFIG; do 
     340                local file 
     341                local spec="" 
     342                local lbin="$(echo "$bin" | sed -e 's#.*#\L&#')" 
     343                for file in $(find_bins "$bin"); do 
     344                        spec="${spec:+$spec }$(echo "$file" | sed -e "s#^$TOOLCHAIN#.#")" 
     345                done 
     346                if [ -n "$spec" ]; then 
     347                        echo "CONFIG_PACKAGE_${lbin}=y" >> "$config" 
     348                        echo "CONFIG_${bin}_FILE_SPEC=\"$spec\"" >> "$config" 
     349                else 
     350                        echo "# CONFIG_PACKAGE_${lbin} is not set" >> "$config" 
     351                fi 
     352        done 
     353 
     354        # inflate 
     355        make -C "${0%/scripts/*}" defconfig 
     356        return 0 
     357} 
     358 
     359 
    240360probe_cc() { 
    241361        if [ -z "$CC" ]; then 
     
    365485                        wrap_bins "$1" 
    366486                        exit $? 
     487                ;; 
     488 
     489                --config) 
     490                        if probe_cc; then 
     491                                print_config "$1" 
     492                                exit $? 
     493                        fi 
     494                        echo "No C compiler found in '$TOOLCHAIN'." >&2 
     495                        exit 1 
    367496                ;; 
    368497 
     
    389518                        echo -e "    linker, assembler and other key executables in "   >&2 
    390519                        echo -e "    the directory given with --wrap.\n"                >&2 
     520                        echo -e "  $me --toolchain {directory} --config {target}"       >&2 
     521                        echo -e "    Analyze the given toolchain and print a suitable"  >&2 
     522                        echo -e "    .config for the given target. Omit target "        >&2 
     523                        echo -e "    argument to get a list of names."                  >&2 
     524                        echo -e "    suitable to prime .config with.\n"                 >&2 
    391525                        echo -e "  $me --help"                                          >&2 
    392526                        echo -e "    Display this help text and exit.\n\n"              >&2 
Note: See TracChangeset for help on using the changeset viewer.