summaryrefslogtreecommitdiff
path: root/scripts/tarball.sh
blob: 70ebd92835d723226e64f0dd4ec49c4227eff8db (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#!/bin/bash

# This scripts makes a tarball of the configured toolchain
# Pre-requisites:
#  - crosstool-NG is configured
#  - components tarball are available
#  - toolchain is built successfully

# We need the functions first:
. "${CT_TOP_DIR}/scripts/functions"

exec 6>&1
exec >/dev/null

# Override log level
unset CT_LOG_ERROR CT_LOG_WARN CT_LOG_EXTRA CT_LOG_DEBUG
CT_LOG_INFO=y
CT_LOG_LEVEL_MAX="INFO"

# Parse the configuration file:
. ${CT_TOP_DIR}/.config

CT_DoBuildTargetTriplet

# Kludge: if any of the config options needs either CT_TARGET or CT_TOP_DIR,
# re-parse them:
. "${CT_TOP_DIR}/.config"

# Build the files' base names
CT_KERNEL_FILE="${CT_KERNEL}-${CT_KERNEL_VERSION}"
CT_BINUTILS_FILE="binutils-${CT_BINUTILS_VERSION}"
CT_LIBC_FILE="${CT_LIBC}-${CT_LIBC_VERSION}"
for addon in ${CT_LIBC_ADDONS_LIST}; do
    CT_LIBC_ADDONS_FILES="${CT_LIBC_ADDONS_FILES} ${CT_LIBC}-${addon}-${CT_LIBC_VERSION}"
done
[ "${CT_LIBC_GLIBC_USE_PORTS}" = "y" ] && CT_LIBC_ADDONS_FILES="${CT_LIBC_ADDONS_FILES} ${CT_LIBC}-ports-${CT_LIBC_VERSION}"
[ "${CT_LIBC_UCLIBC_LOCALES}" = "y" ]  && CT_LIBC_ADDONS_FILES="${CT_LIBC_ADDONS_FILES} ${CT_LIBC}-locales-030818"
[ "${CT_CC_USE_CORE}" = "y" ]          && CT_CC_CORE_FILE="${CT_CC_CORE}-${CT_CC_CORE_VERSION}"
CT_CC_FILE="${CT_CC}-${CT_CC_VERSION}"
[ "${CT_ARCH_FLOAT_SW_LIBFLOAT}" = "y" ] && CT_LIBFLOAT_FILE="libfloat-990616"

# Build a one-line list of the files to ease scanning below
CT_TARBALLS_DIR="${CT_TOP_DIR}/targets/tarballs"
CT_TARBALLS=" "
for file_var in CT_KERNEL_FILE CT_BINUTILS_FILE CT_LIBC_FILE CT_LIBC_ADDONS_FILES CT_CC_CORE_FILE CT_CC_FILE CT_LIBFLOAT_FILE; do
    for file in ${!file_var}; do
        ext=`CT_GetFileExtension "${file}"`
        CT_TestAndAbort "Missing tarball for: \"${file}\"" -z "${ext}"
        CT_TARBALLS="${CT_TARBALLS}${file}${ext} "
    done
done

# We need to emulate a build directory:
CT_BUILD_DIR="${CT_TOP_DIR}/targets/${CT_TARGET}/build"
mkdir -p "${CT_BUILD_DIR}"
CT_MktempDir tempdir

# Save crosstool-ng, as it is configured for the current toolchain.
topdir=`basename "${CT_TOP_DIR}"`
CT_Pushd "${CT_TOP_DIR}/.."

botdir=`pwd`

# Build the list of files to exclude:
echo "${topdir}/*.log" >"${tempdir}/${CT_TARGET}.list"
echo "${topdir}/targets/*-*-*-*" >>"${tempdir}/${CT_TARGET}.list"
for t in `ls -1 "${topdir}/targets/tarballs/"`; do
    case "${CT_TARBALLS}" in
        *" ${t} "*) ;;
        *)          echo "${topdir}/targets/tarballs/${t}" >>"${tempdir}/${CT_TARGET}.list"
    esac
done

CT_DoLog INFO "Saving crosstool"
tar cfj "${CT_PREFIX_DIR}/${topdir}.${CT_TARGET}.tar.bzip2" \
    --no-wildcards-match-slash                              \
    -X "${tempdir}/${CT_TARGET}.list"                       \
    "${topdir}"                                             2>/dev/null

CT_Popd

# Save the generated toolchain
CT_DoLog INFO "Saving the generated toolchain"
tar cfj "${botdir}/${CT_TARGET}.tar.bz2" "${CT_PREFIX_DIR}" 2>/dev/null

rm -f "${CT_PREFIX_DIR}/${topdir}.${CT_TARGET}.tar.bzip2"
rm -rf "${tempdir}"