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