scripts/addToolVersion.sh
author Remy Bohmer <linux@bohmer.net>
Thu May 27 23:18:19 2010 +0200 (2010-05-27)
changeset 2060 51e4597b07fc
parent 1872 d7787259005e
child 2412 20edcd78cf67
permissions -rwxr-xr-x
scripts: add option to strip all toolchain executables

To reduce filesizes of the toolchain and even improve build times
of projects to be build with this toolchain it is usefull to strip
the delivered toolchain executables. Since it is not likely that we
will debug the toolchain executables itself we do not need the
debug information inside the executables itself.

Signed-off-by: Remy Bohmer <linux@bohmer.net>
     1 #!/bin/sh
     2 set -e
     3 
     4 # Adds a new version to one of the toolchain component
     5 myname="$0"
     6 
     7 # Parse the tools' paths configuration
     8 # It is expected that this script is only to be run from the
     9 # source directory of crosstool-NG, so it is trivial to find
    10 # paths.mk (we can't use  ". paths.mk", as POSIX states that
    11 # $PATH should be searched for, and $PATH most probably doe
    12 # not include "."), hence the "./".
    13 . "./paths.mk"
    14 
    15 doHelp() {
    16     cat <<-EOF
    17 		Usage: ${myname} <--tool> <[options] version [...]> ...
    18 		  'tool' in one of:
    19 		    gcc, binutils, glibc, eglibc, uClibc, newlib, linux, gdb, dmalloc,
    20 		    duma, strace, ltrace, libelf, gmp, mpfr, ppl, cloog, mpc
    21 		
    22 		  Valid options for all tools:
    23 		    --stable, -s, +x   (default)
    24 		      mark the version as being stable (as opposed to experimental, below)
    25 		
    26 		    --experimental, -x, +s
    27 		      mark the version as being experimental (as opposed to stable, above)
    28 		
    29 		    --current, -c, +o   (default)
    30 		      mark the version as being cuurent (as opposed to obsolete, below)
    31 		
    32 		    --obsolete, -o, +c
    33 		      mark the version as being obsolete (as opposed to current, above)
    34 		
    35 		  Note: setting a new tool resets to the defaults: 'stable' and 'current'.
    36 		
    37 		  'version' is a valid version for the specified tool.
    38 		
    39 		  Examples:
    40 		    add stable current version 2.6.19.2 to linux kernel:
    41 		      ${myname} --linux 2.6.19.2
    42 		
    43 		    add experimental obsolete version 2.3.5 and stable current versions 2.6.1
    44 		    and 2.6.2 to glibc, add stable obsolete version 3.3.3 to gcc:
    45 		      ${myname} --glibc -x -o 2.3.5 -s -c 2.6.1 2.6.2 --gcc -o 3.3.3
    46 		EOF
    47 }
    48 
    49 # Effectively add a version to the specified tool
    50 # $cat          : tool category
    51 # $tool         : tool name
    52 # $tool_prefix  : tool directory prefix
    53 # $EXP          : set to non empty if experimental, to empty otherwise
    54 # #OBS          : set to non empty if obsolete, to empty otherwise
    55 # $1            : version string to add
    56 addToolVersion() {
    57     local version="$1"
    58     local file
    59     local config_ver_option
    60     local exp_obs_prompt
    61     local deps v ver_M ver_m ver_p
    62     local SedExpr1 SedExpr2
    63 
    64     file="config/${tool_prefix}/${tool}.in"
    65     v=$(echo "${version}" |"${sed}" -r -e 's/-/_/g; s/\./_/g;')
    66 
    67     config_ver_option="${cat}_V_${v}"
    68 
    69     # Check for existing version: it can be legitimitate for an end-user
    70     # to try adding a new version if the one he/she wants is not listed.
    71     # But it can be the case where the version is hidden behind either one
    72     # of EXPERIMENTAL or OBSOLETE, so warn if the version is already listed.
    73     if (GREP_OPTIONS= grep -E "^config ${config_ver_option}$" "${file}" >/dev/null 2>&1); then
    74         echo "'${tool}': version '${version}' already present:"
    75         GREP_OPTIONS= grep -A3 -B0 -E "^config ${config_ver_option}$" "${file}"
    76         return 0
    77     fi
    78 
    79     SedExpr1="${SedExpr1}config ${config_ver_option}\n"
    80     SedExpr1="${SedExpr1}    bool\n"
    81     SedExpr1="${SedExpr1}    prompt \"${version}"
    82     case "${EXP},${OBS}" in
    83         ,)  ;;
    84         ,*) exp_obs_prompt=" (OBSOLETE)"
    85             deps="    depends on OBSOLETE"
    86             ;;
    87         *,) exp_obs_prompt=" (EXPERIMENTAL)"
    88             deps="    depends on EXPERIMENTAL"
    89             ;;
    90         *)  exp_obs_prompt=" (EXPERIMENTAL, OBSOLETE)"
    91             deps="    depends on EXPERIMENTAL \\&\\& OBSOLETE"
    92             ;;
    93     esac
    94     [ -n "${exp_obs_prompt}" ] && SedExpr1="${SedExpr1}${exp_obs_prompt}"
    95     SedExpr1="${SedExpr1}\""
    96     [ -n "${deps}" ] && SedExpr1="${SedExpr1}\n${deps}"
    97     case "${tool}" in
    98         gcc)
    99             # Extract 'M'ajor and 'm'inor from version string
   100             ver_M=$(echo "${version}...." |cut -d . -f 1)
   101             ver_m=$(echo "${version}...." |cut -d . -f 2)
   102             if [    ${ver_M} -gt 4                          \
   103                  -o \( ${ver_M} -eq 4 -a ${ver_m} -ge 5 \)  ]; then
   104                 SedExpr1="${SedExpr1}\n    select CC_GCC_4_5_or_later"
   105             elif [    ${ver_M} -gt 4                          \
   106                    -o \( ${ver_M} -eq 4 -a ${ver_m} -ge 4 \)  ]; then
   107                 SedExpr1="${SedExpr1}\n    select CC_GCC_4_4_or_later"
   108             elif [    ${ver_M} -gt 4                          \
   109                    -o \( ${ver_M} -eq 4 -a ${ver_m} -ge 3 \)  ]; then
   110                 SedExpr1="${SedExpr1}\n    select CC_GCC_4_3_or_later"
   111             fi
   112             ;;
   113         uClibc)
   114             # uClibc-0.9.30 and above need some love
   115             ver_M=$(echo "${version}...." |cut -d . -f 1)
   116             ver_m=$(echo "${version}...." |cut -d . -f 2)
   117             ver_p=$(echo "${version}...." |cut -d . -f 3)
   118             if [    ${ver_M} -ge 1                                      \
   119                  -o ${ver_M} -eq 0 -a ${ver_m} -ge 10                   \
   120                  -o ${ver_M} -eq 0 -a ${ver_m} -eq 9 -a ${ver_p} -ge 30 ]; then
   121                 SedExpr1="${SedExpr1}\n    select LIBC_UCLIBC_0_9_30_or_later"
   122             fi
   123             ;;
   124         gdb)
   125             # gdb-7.0 and above have special handling
   126             ver_M=$(echo "${version}...." |cut -d . -f 1)
   127             if [ ${ver_M} -ge 7 ]; then
   128                 SedExpr1="${SedExpr1}\n    select GDB_7_0_or_later"
   129             fi
   130             ;;
   131     esac
   132     SedExpr2="    default \"${version}\" if ${config_ver_option}"
   133     "${sed}" -r -i -e 's/^(# CT_INSERT_VERSION_BELOW)$/\1\n\n'"${SedExpr1}"'/;' "${file}"
   134     "${sed}" -r -i -e 's/^(# CT_INSERT_VERSION_STRING_BELOW)$/\1\n'"${SedExpr2}"'/;' "${file}"
   135 }
   136 
   137 cat=
   138 tool=
   139 tool_prefix=
   140 VERSION=
   141 EXP=
   142 OBS=
   143 
   144 if [ $# -eq 0 ]; then
   145     doHelp
   146     exit 1
   147 fi
   148 
   149 while [ $# -gt 0 ]; do
   150     case "$1" in
   151         # Tools:
   152         --gcc)      EXP=; OBS=; cat=CC;             tool=gcc;       tool_prefix=cc;;
   153         --binutils) EXP=; OBS=; cat=BINUTILS;       tool=binutils;  tool_prefix=binutils;;
   154         --glibc)    EXP=; OBS=; cat=LIBC_GLIBC;     tool=glibc;     tool_prefix=libc;;
   155         --eglibc)   EXP=; OBS=; cat=LIBC_EGLIBC;    tool=eglibc;    tool_prefix=libc;;
   156         --uClibc)   EXP=; OBS=; cat=LIBC_UCLIBC;    tool=uClibc;    tool_prefix=libc;;
   157         --newlib)   EXP=; OBS=; cat=LIBC_NEWLIB;    tool=newlib;    tool_prefix=libc;;
   158         --linux)    EXP=; OBS=; cat=KERNEL;         tool=linux;     tool_prefix=kernel;;
   159         --gdb)      EXP=; OBS=; cat=GDB;            tool=gdb;       tool_prefix=debug;;
   160         --dmalloc)  EXP=; OBS=; cat=DMALLOC;        tool=dmalloc;   tool_prefix=debug;;
   161         --duma)     EXP=; OBS=; cat=DUMA;           tool=duma;      tool_prefix=debug;;
   162         --strace)   EXP=; OBS=; cat=STRACE;         tool=strace;    tool_prefix=debug;;
   163         --ltrace)   EXP=; OBS=; cat=LTRACE;         tool=ltrace;    tool_prefix=debug;;
   164         --gmp)      EXP=; OBS=; cat=GMP;            tool=gmp;       tool_prefix=companion_libs;;
   165         --mpfr)     EXP=; OBS=; cat=MPFR;           tool=mpfr;      tool_prefix=companion_libs;;
   166         --ppl)      EXP=; OBS=; cat=PPL;            tool=ppl;       tool_prefix=companion_libs;;
   167         --cloog)    EXP=; OBS=; cat=CLOOG;          tool=cloog;     tool_prefix=companion_libs;;
   168         --mpc)      EXP=; OBS=; cat=MPC;            tool=mpc;       tool_prefix=companion_libs;;
   169         --libelf)   EXP=; OBS=; cat=LIBELF;         tool=libelf;    tool_prefix=companion_libs;;
   170 
   171         # Tools options:
   172         -x|--experimental|+s)   EXP=1;;
   173         -s|--stable|+x)         EXP=;;
   174         -o|--obsolete|+c)       OBS=1;;
   175         -c|--current|+o)        OBS=;;
   176 
   177         # Misc:
   178         -h|--help)  doHelp; exit 0;;
   179         -*)         echo "Unknown option: '$1' (use -h/--help for help)."; exit 1;;
   180 
   181         # Version string:
   182         *)  [ -n "${tool}" ] || { doHelp; exit 1; }
   183             addToolVersion "$1"
   184             ;;
   185     esac
   186     shift
   187 done