scripts/saveSample.sh.in
author "Yann E. MORIN" <yann.morin.1998@free.fr>
Sun May 11 23:43:52 2014 +0200 (2014-05-11)
changeset 3320 78af1c99bc6d
parent 2937 e94b6f607b05
permissions -rw-r--r--
scripts/functions: add target_endian_le and target_endian_be

We currently define target_endian_el and target_endian_eb to be the
tuple extension depending on endianness, defined to be respectively
'el' or 'eb' according to the endianness.

Some architecture do not use 'el' or 'eb', but use 'le' or 'be'.

Provide that as well, as two new variables: target_endian_le and
target_endian_be.

Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
Cc: Cody P Schafer <dev@codyps.com>
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@2838
    12
. "${CT_LIB_DIR}/paths.sh"
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@2576
    25
# Note: we just need the non-mangled .config, not .config.2
yann@2576
    26
if [ ! -f .config ]; then
yann@1935
    27
    CT_Abort "Configuration file not found. Please create one."
yann@1935
    28
fi
yann@2576
    29
. .config
yann@63
    30
yann@1223
    31
# We can not reliably save a sample which either uses local patches
yann@1223
    32
# and/or custom Linux kernel headers. Warn the user about this issue
yann@1223
    33
# and continue if he/she confirms sving the sample.
yann@1223
    34
if [ "${CT_CUSTOM_PATCH}" = "y" ]; then
yann@1223
    35
    exec >&7
yann@1223
    36
    echo "You are using local patches."
yann@1223
    37
    echo "You will not be able to (easily) share this sample in this case."
yann@1223
    38
    read -p "Press Ctrl-C to stop now, or Enter to continue..."
yann@1223
    39
fi
yann@1223
    40
if [ "${CT_KERNEL_LINUX_USE_CUSTOM_HEADERS}" = "y" ]; then
yann@1223
    41
    exec >&7
yann@1223
    42
    echo "You are using custom Linux headers."
yann@1223
    43
    echo "You will not be able to (easily) share this sample in this case."
yann@1223
    44
    read -p "Press Ctrl-C to stop now, or Enter to continue..."
yann@1223
    45
fi
yann@1223
    46
yann@682
    47
# Do not use a progress bar
yann@682
    48
unset CT_LOG_PROGRESS_BAR
yann@682
    49
yann@967
    50
# Parse architecture and kernel specific functions
yann@927
    51
. "${CT_LIB_DIR}/scripts/build/arch/${CT_ARCH}.sh"
yann@967
    52
. "${CT_LIB_DIR}/scripts/build/kernel/${CT_KERNEL}.sh"
yann@394
    53
yann@335
    54
# Target tuple: CT_TARGET needs a little love:
yann@335
    55
CT_DoBuildTargetTuple
yann@63
    56
yann@64
    57
# Kludge: if any of the config options needs either CT_TARGET or CT_TOP_DIR,
yann@64
    58
# re-parse them:
yann@2576
    59
. .config
yann@64
    60
yann@682
    61
# Override log options
yann@682
    62
unset CT_LOG_PROGRESS_BAR CT_LOG_ERROR CT_LOG_INFO CT_LOG_EXTRA CT_LOG_DEBUG LOG_ALL
yann@603
    63
CT_LOG_WARN=y
yann@603
    64
CT_LOG_LEVEL_MAX="WARN"
yann@126
    65
yann@1424
    66
# Compute the name of the sample directory
yann@1424
    67
case "${CT_TOOLCHAIN_TYPE}" in
yann@1424
    68
    cross)      samp_name="${CT_TARGET}";;
yann@1427
    69
    canadian)   samp_name="${CT_HOST},${CT_TARGET}";;
yann@1424
    70
    *)          CT_Abort "Unsupported toolchain type '${CT_TOOLCHAIN_TYPE}'";;
yann@1424
    71
esac
yann@1424
    72
samp_dir="samples/${samp_name}"
yann@1424
    73
mkdir -p "${samp_dir}"
yann@63
    74
yann@2981
    75
# Tweak the .config file
yann@2981
    76
# We need to be based on the real .config with kconfig's values,
yann@2981
    77
# not our mangled .config.2 with shell arrays
yann@2981
    78
cp .config .defconfig
yann@1529
    79
"${sed}" -r -e 's|^(CT_PREFIX_DIR)=.*|\1="${HOME}/x-tools/${CT_TARGET}"|;'      \
yann@1186
    80
            -e 's|^# CT_LOG_TO_FILE is not set$|CT_LOG_TO_FILE=y|;'             \
yann@1186
    81
            -e 's|^# CT_LOG_FILE_COMPRESS is not set$|CT_LOG_FILE_COMPRESS=y|;' \
yann@1186
    82
            -e 's|^(CT_LOCAL_TARBALLS_DIR)=.*|\1="${HOME}/src"|;'               \
yann@1186
    83
         <.config                                                               \
yann@2981
    84
         >.defconfig
yann@63
    85
yann@64
    86
# Function to copy a file to the sample directory
yann@64
    87
# Needed in case the file is already there (think of a previously available sample)
yann@64
    88
# Usage: CT_DoAddFileToSample <source> <dest>
yann@64
    89
CT_DoAddFileToSample() {
yann@64
    90
    source="$1"
yann@64
    91
    dest="$2"
yann@1299
    92
    inode_s=$(ls -i "${source}" |awk '{ print $1; }')
yann@1299
    93
    inode_d=$(ls -i "${dest}" 2>/dev/null |awk '{ print $1; }' || true)
yann@64
    94
    if [ "${inode_s}" != "${inode_d}" ]; then
yann@64
    95
        cp "${source}" "${dest}"
yann@64
    96
    fi
yann@64
    97
}
yann@64
    98
yann@182
    99
if [ "${CT_TOP_DIR}" = "${CT_LIB_DIR}" ]; then
yann@182
   100
    samp_top_dir="\${CT_LIB_DIR}"
yann@182
   101
else
yann@182
   102
    samp_top_dir="\${CT_TOP_DIR}"
yann@182
   103
fi
yann@182
   104
yann@63
   105
# Save the uClibc .config file
yann@63
   106
if [ -n "${CT_LIBC_UCLIBC_CONFIG_FILE}" ]; then
yann@63
   107
    # We save the file, and then point the saved sample to this file
yann@1424
   108
    CT_DoAddFileToSample "${CT_LIBC_UCLIBC_CONFIG_FILE}" "${samp_dir}/${CT_LIBC}-${CT_LIBC_VERSION}.config"
yann@1539
   109
    "${sed}" -r -i -e 's|^(CT_LIBC_UCLIBC_CONFIG_FILE)=.+$|\1="'"${samp_top_dir}"'/samples/${CT_TARGET}/${CT_LIBC}-${CT_LIBC_VERSION}.config"|;' \
yann@2981
   110
             .defconfig
yann@63
   111
else
yann@63
   112
    # remove any dangling files
yann@1424
   113
    for f in "${samp_dir}/${CT_LIBC}-"*.config; do
yann@182
   114
        if [ -f "${f}" ]; then rm -f "${f}"; fi
yann@63
   115
    done
yann@63
   116
fi
yann@935
   117
yann@2981
   118
# Now, actually save the defconfig
yann@2981
   119
export KCONFIG_CONFIG="$(pwd)/.defconfig"
yann@2981
   120
${CONF} --savedefconfig="${samp_dir}/crosstool.config" "${KCONFIG_TOP}"
yann@2981
   121
rm -f .defconfig
yann@2981
   122
yann@935
   123
# Restore stdout now, to be interactive
yann@935
   124
exec >&7
yann@935
   125
yann@935
   126
# Fill-in the reported-by info
yann@1424
   127
[ -f "${samp_dir}/reported.by" ] && . "${samp_dir}/reported.by"
yann@935
   128
old_name="${reporter_name}"
yann@935
   129
old_url="${reporter_url}"
yann@2937
   130
old_comment="${reporter_comment}"
yann@935
   131
read -p "Reporter name [${reporter_name}]: " reporter_name
yann@935
   132
read -p "Reporter URL [${reporter_url}]: " reporter_url
yann@935
   133
if [ -n "${reporter_comment}" ]; then
yann@2937
   134
  echo "Old comment:"
yann@2937
   135
  printf "${reporter_comment}\n" |sed -r -e 's/^/  > /;'
yann@935
   136
fi
yann@2937
   137
echo "Reporter comment (Ctrl-D to finish, '.' to use previous):"
yann@935
   138
reporter_comment=$(cat)
yann@2937
   139
if [ "${reporter_comment}" = "." ]; then
yann@2937
   140
  reporter_comment="${old_comment}"
yann@2937
   141
fi
yann@935
   142
yann@935
   143
( echo "reporter_name=\"${reporter_name:=${old_name}}\""
yann@935
   144
  echo "reporter_url=\"${reporter_url:=${old_url}}\""
yann@935
   145
  printf "reporter_comment=\"${reporter_comment}\"\n"
yann@1424
   146
) >"${samp_dir}/reported.by"