scripts/saveSample.sh.in
author Remy Bohmer <linux@bohmer.net>
Thu May 27 23:18:19 2010 +0200 (2010-05-27)
changeset 2060 51e4597b07fc
parent 1539 dd6d8c22d3fd
child 2468 90595d1c1017
permissions -rw-r--r--
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>
yann@1186
     1
#!@@CT_bash@@
yann@63
     2
yann@63
     3
# This script is responsible for saving the current configuration into a
yann@63
     4
# sample to be used later on as a pre-configured target.
yann@63
     5
yann@63
     6
# What we need to save:
yann@63
     7
#  - the .config file
yann@63
     8
#  - the uClibc .config file if uClibc selected
yann@935
     9
#  - info about who reported the sample
yann@935
    10
yann@1186
    11
# Parse the tools' paths configuration
yann@1186
    12
. "${CT_LIB_DIR}/paths.mk"
yann@1186
    13
yann@935
    14
# We'll need the stdout later, save it
yann@935
    15
exec 7>&1
yann@63
    16
yann@182
    17
. "${CT_LIB_DIR}/scripts/functions"
yann@63
    18
yann@165
    19
# Don't care about any log file
yann@115
    20
exec >/dev/null
yann@165
    21
rm -f "${tmp_log_file}"
yann@84
    22
yann@63
    23
# Parse the configuration file
yann@1935
    24
# Don't use CT_TestOrAbort, it prints the test string to [DEBUG]
yann@1935
    25
if [ ! -f .config ]; then
yann@1935
    26
    CT_Abort "Configuration file not found. Please create one."
yann@1935
    27
fi
yann@935
    28
. .config
yann@63
    29
yann@1223
    30
# We can not reliably save a sample which either uses local patches
yann@1223
    31
# and/or custom Linux kernel headers. Warn the user about this issue
yann@1223
    32
# and continue if he/she confirms sving the sample.
yann@1223
    33
if [ "${CT_CUSTOM_PATCH}" = "y" ]; then
yann@1223
    34
    exec >&7
yann@1223
    35
    echo "You are using local patches."
yann@1223
    36
    echo "You will not be able to (easily) share this sample in this case."
yann@1223
    37
    read -p "Press Ctrl-C to stop now, or Enter to continue..."
yann@1223
    38
fi
yann@1223
    39
if [ "${CT_KERNEL_LINUX_USE_CUSTOM_HEADERS}" = "y" ]; then
yann@1223
    40
    exec >&7
yann@1223
    41
    echo "You are using custom Linux headers."
yann@1223
    42
    echo "You will not be able to (easily) share this sample in this case."
yann@1223
    43
    read -p "Press Ctrl-C to stop now, or Enter to continue..."
yann@1223
    44
fi
yann@1223
    45
yann@682
    46
# Do not use a progress bar
yann@682
    47
unset CT_LOG_PROGRESS_BAR
yann@682
    48
yann@967
    49
# Parse architecture and kernel specific functions
yann@927
    50
. "${CT_LIB_DIR}/scripts/build/arch/${CT_ARCH}.sh"
yann@967
    51
. "${CT_LIB_DIR}/scripts/build/kernel/${CT_KERNEL}.sh"
yann@394
    52
yann@335
    53
# Target tuple: CT_TARGET needs a little love:
yann@335
    54
CT_DoBuildTargetTuple
yann@63
    55
yann@64
    56
# Kludge: if any of the config options needs either CT_TARGET or CT_TOP_DIR,
yann@64
    57
# re-parse them:
yann@935
    58
. .config
yann@64
    59
yann@682
    60
# Override log options
yann@682
    61
unset CT_LOG_PROGRESS_BAR CT_LOG_ERROR CT_LOG_INFO CT_LOG_EXTRA CT_LOG_DEBUG LOG_ALL
yann@603
    62
CT_LOG_WARN=y
yann@603
    63
CT_LOG_LEVEL_MAX="WARN"
yann@126
    64
yann@1424
    65
# Compute the name of the sample directory
yann@1424
    66
case "${CT_TOOLCHAIN_TYPE}" in
yann@1424
    67
    cross)      samp_name="${CT_TARGET}";;
yann@1427
    68
    canadian)   samp_name="${CT_HOST},${CT_TARGET}";;
yann@1424
    69
    *)          CT_Abort "Unsupported toolchain type '${CT_TOOLCHAIN_TYPE}'";;
yann@1424
    70
esac
yann@1424
    71
samp_dir="samples/${samp_name}"
yann@1424
    72
mkdir -p "${samp_dir}"
yann@63
    73
yann@63
    74
# Save the crosstool-NG config file
yann@1529
    75
"${sed}" -r -e 's|^(CT_PREFIX_DIR)=.*|\1="${HOME}/x-tools/${CT_TARGET}"|;'      \
yann@1186
    76
            -e 's|^# CT_LOG_TO_FILE is not set$|CT_LOG_TO_FILE=y|;'             \
yann@1186
    77
            -e 's|^# CT_LOG_FILE_COMPRESS is not set$|CT_LOG_FILE_COMPRESS=y|;' \
yann@1186
    78
            -e 's|^(CT_LOCAL_TARBALLS_DIR)=.*|\1="${HOME}/src"|;'               \
yann@1186
    79
         <.config                                                               \
yann@1424
    80
    >"${samp_dir}/crosstool.config"
yann@63
    81
yann@64
    82
# Function to copy a file to the sample directory
yann@64
    83
# Needed in case the file is already there (think of a previously available sample)
yann@64
    84
# Usage: CT_DoAddFileToSample <source> <dest>
yann@64
    85
CT_DoAddFileToSample() {
yann@64
    86
    source="$1"
yann@64
    87
    dest="$2"
yann@1299
    88
    inode_s=$(ls -i "${source}" |awk '{ print $1; }')
yann@1299
    89
    inode_d=$(ls -i "${dest}" 2>/dev/null |awk '{ print $1; }' || true)
yann@64
    90
    if [ "${inode_s}" != "${inode_d}" ]; then
yann@64
    91
        cp "${source}" "${dest}"
yann@64
    92
    fi
yann@64
    93
}
yann@64
    94
yann@182
    95
if [ "${CT_TOP_DIR}" = "${CT_LIB_DIR}" ]; then
yann@182
    96
    samp_top_dir="\${CT_LIB_DIR}"
yann@182
    97
else
yann@182
    98
    samp_top_dir="\${CT_TOP_DIR}"
yann@182
    99
fi
yann@182
   100
yann@63
   101
# Save the uClibc .config file
yann@63
   102
if [ -n "${CT_LIBC_UCLIBC_CONFIG_FILE}" ]; then
yann@63
   103
    # We save the file, and then point the saved sample to this file
yann@1424
   104
    CT_DoAddFileToSample "${CT_LIBC_UCLIBC_CONFIG_FILE}" "${samp_dir}/${CT_LIBC}-${CT_LIBC_VERSION}.config"
yann@1539
   105
    "${sed}" -r -i -e 's|^(CT_LIBC_UCLIBC_CONFIG_FILE)=.+$|\1="'"${samp_top_dir}"'/samples/${CT_TARGET}/${CT_LIBC}-${CT_LIBC_VERSION}.config"|;' \
yann@1424
   106
             "${samp_dir}/crosstool.config"
yann@63
   107
else
yann@63
   108
    # remove any dangling files
yann@1424
   109
    for f in "${samp_dir}/${CT_LIBC}-"*.config; do
yann@182
   110
        if [ -f "${f}" ]; then rm -f "${f}"; fi
yann@63
   111
    done
yann@63
   112
fi
yann@935
   113
yann@935
   114
# Restore stdout now, to be interactive
yann@935
   115
exec >&7
yann@935
   116
yann@935
   117
# Fill-in the reported-by info
yann@1424
   118
[ -f "${samp_dir}/reported.by" ] && . "${samp_dir}/reported.by"
yann@935
   119
old_name="${reporter_name}"
yann@935
   120
old_url="${reporter_url}"
yann@935
   121
read -p "Reporter name [${reporter_name}]: " reporter_name
yann@935
   122
read -p "Reporter URL [${reporter_url}]: " reporter_url
yann@935
   123
if [ -n "${reporter_comment}" ]; then
yann@935
   124
  echo "Old comment if you need to copy-paste:"
yann@958
   125
  printf "${reporter_comment}\n"
yann@935
   126
fi
yann@935
   127
echo "Reporter comment (Ctrl-D to finish):"
yann@935
   128
reporter_comment=$(cat)
yann@935
   129
yann@935
   130
( echo "reporter_name=\"${reporter_name:=${old_name}}\""
yann@935
   131
  echo "reporter_url=\"${reporter_url:=${old_url}}\""
yann@935
   132
  printf "reporter_comment=\"${reporter_comment}\"\n"
yann@1424
   133
) >"${samp_dir}/reported.by"