yann@182: #!/bin/bash yann@182: yann@182: # This scripts makes a tarball of the configured toolchain yann@182: # Pre-requisites: yann@182: # - crosstool-NG is configured yann@182: # - components tarball are available yann@182: # - toolchain is built successfully yann@182: yann@182: # We need the functions first: yann@182: . "${CT_TOP_DIR}/scripts/functions" yann@182: yann@182: # Don't care about any log file yann@182: exec >/dev/null yann@182: rm -f "${tmp_log_file}" yann@182: yann@182: # Parse the configuration file: yann@182: . ${CT_TOP_DIR}/.config yann@182: yann@182: CT_DoBuildTargetTriplet yann@182: yann@182: # Kludge: if any of the config options needs either CT_TARGET or CT_TOP_DIR, yann@182: # re-parse them: yann@182: . "${CT_TOP_DIR}/.config" yann@182: yann@182: # Build a one-line list of files to include yann@182: CT_DoStep DEBUG "Building list of tarballs to add" yann@182: CT_TARBALLS_DIR="${CT_TOP_DIR}/targets/tarballs" yann@182: CT_TARBALLS="" yann@182: for dir in '' tools debug; do yann@182: CT_DoStep DEBUG "Scanning directory \"${dir}\"" yann@182: for script in "${CT_TOP_DIR}/scripts/build/${dir}/"*.sh; do yann@182: CT_DoStep DEBUG "Testing component \"${script}\"" yann@182: [ -n "${script}" ] || continue yann@182: unset do_print_file_name yann@182: . "${script}" yann@182: for file in `do_print_filename`; do yann@182: CT_DoLog DEBUG "Finding tarball for \"${file}\"" yann@182: [ -n "${file}" ] || continue yann@182: ext=`CT_GetFileExtension "${file}"` yann@182: CT_TestOrAbort "Missing tarball for: \"${file}\"" -f "${CT_TOP_DIR}/targets/tarballs/${file}${ext}" yann@182: CT_DoLog DEBUG "Found \"${file}${ext}\"" yann@182: CT_TARBALLS="${CT_TARBALLS} ${file}${ext}" yann@182: done yann@182: CT_EndStep yann@182: done yann@182: CT_EndStep yann@182: done yann@182: CT_EndStep yann@182: yann@182: # We need to emulate a build directory: yann@182: CT_BUILD_DIR="${CT_TOP_DIR}/targets/${CT_TARGET}/build" yann@182: mkdir -p "${CT_BUILD_DIR}" yann@182: CT_MktempDir tempdir yann@182: yann@197: # Save crosstool-NG, as it is configured for the current toolchain. yann@182: topdir=`basename "${CT_TOP_DIR}"` yann@182: CT_Pushd "${CT_TOP_DIR}/.." yann@182: yann@182: botdir=`pwd` yann@182: yann@182: # Build the list of files to exclude yann@182: CT_DoLog DEBUG "Building list of files to exclude" yann@182: exclude_list="${tempdir}/${CT_TARGET}.list" yann@182: { echo ".svn"; \ yann@182: echo "${topdir}/log.*"; \ yann@182: echo "${topdir}/targets/src"; \ yann@182: echo "${topdir}/targets/tst"; \ yann@182: echo "${topdir}/targets/*-*-*-*"; \ yann@182: for t in `ls -1 "${topdir}/targets/tarballs/"`; do \ yann@182: case " ${CT_TARBALLS} " in \ yann@182: *" ${t} "*) ;; \ yann@182: *) echo "${topdir}/targets/tarballs/${t}";; \ yann@182: esac; \ yann@182: done; \ yann@182: } >"${exclude_list}" yann@182: yann@182: # Render the install directory writable yann@182: chmod u+w "${CT_PREFIX_DIR}" yann@182: yann@197: CT_DoLog INFO "Saving crosstool-NG into the toolchain directory" yann@182: tar cvjf "${CT_PREFIX_DIR}/${topdir}.${CT_TARGET}.tar.bzip2" \ yann@182: --no-wildcards-match-slash \ yann@182: -X "${exclude_list}" \ yann@182: "${topdir}" 2>&1 |CT_DoLog ALL yann@182: yann@182: CT_Popd yann@182: yann@182: CT_DoLog INFO "Saving the toolchain" yann@182: tar cvjf "${botdir}/${CT_TARGET}.tar.bz2" "${CT_PREFIX_DIR}" 2>&1 |CT_DoLog ALL yann@182: yann@182: CT_DoLog DEBUG "Getting rid of working directories" yann@182: rm -f "${CT_PREFIX_DIR}/${topdir}.${CT_TARGET}.tar.bzip2" yann@182: rm -rf "${tempdir}" yann@182: yann@182: if [ "${CT_INSTALL_DIR_RO}" = "y" ]; then yann@182: # Render the install directory non-writable yann@182: chmod u-w "${CT_PREFIX_DIR}" yann@182: fi