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