toolchain_util: build stable cross gdb, misc cleanups

This commit is contained in:
Michael Marineau 2014-08-15 15:48:18 -07:00
parent 47982596b5
commit 319879609e

View File

@ -213,7 +213,7 @@ _crossdev_info() {
local cross_chost="$1"; shift local cross_chost="$1"; shift
echo -n "# "; crossdev --version echo -n "# "; crossdev --version
echo "# $@" echo "# $@"
crossdev --show-target-cfg "${cross_chost}" crossdev "$@" --show-target-cfg
} }
# Build/install a toolchain w/ crossdev. # Build/install a toolchain w/ crossdev.
@ -221,13 +221,17 @@ _crossdev_info() {
install_cross_toolchain() { install_cross_toolchain() {
local cross_chost="$1"; shift local cross_chost="$1"; shift
local cross_pkgs=( $(get_cross_pkgs $cross_chost) ) local cross_pkgs=( $(get_cross_pkgs $cross_chost) )
# gdb doesn't respect the --stable flag, set it stable explicitly
local cross_flags=( --gdb '[stable]' --ex-gdb --stable --target "${cross_chost}" )
local cross_cfg="/usr/${cross_chost}/etc/portage/${cross_chost}-crossdev" local cross_cfg="/usr/${cross_chost}/etc/portage/${cross_chost}-crossdev"
local cross_cfg_data=$(_crossdev_info "${cross_chost}" stable) local cross_cfg_data=$(_crossdev_info "${cross_flags[@]}")
local emerge_flags=( "$@" --binpkg-respect-use=y --update --newuse )
# Forcing binary packages for toolchain packages breaks crossdev since it # Forcing binary packages for toolchain packages breaks crossdev since it
# prevents it from rebuilding with different use flags during bootstrap. # prevents it from rebuilding with different use flags during bootstrap.
local safe_flags=( "${@/#--useoldpkg-atoms=*/}" ) local safe_flags=( "${@/#--useoldpkg-atoms=*/}" )
safe_flags=( "${safe_flags[@]/#--rebuild-exclude=*/}" ) safe_flags=( "${safe_flags[@]/#--rebuild-exclude=*/}" )
cross_flags+=( --portage "${safe_flags[*]}" )
# may be called from either catalyst (root) or upgrade_chroot (user) # may be called from either catalyst (root) or upgrade_chroot (user)
local sudo= local sudo=
@ -238,30 +242,25 @@ install_cross_toolchain() {
# Only call crossdev to regenerate configs if something has changed # Only call crossdev to regenerate configs if something has changed
if ! cmp --quiet - "${cross_cfg}" <<<"${cross_cfg_data}" if ! cmp --quiet - "${cross_cfg}" <<<"${cross_cfg_data}"
then then
$sudo crossdev --stable --portage "${safe_flags[*]}" \ $sudo crossdev "${cross_flags[@]}" --init-target
--init-target --target "${cross_chost}"
$sudo tee "${cross_cfg}" <<<"${cross_cfg_data}" >/dev/null $sudo tee "${cross_cfg}" <<<"${cross_cfg_data}" >/dev/null
fi fi
# Check if any packages need to be built from source. If so do a full # Check if any packages need to be built from source. If so do a full
# bootstrap via crossdev, otherwise just install the binaries (if enabled). # bootstrap via crossdev, otherwise just install the binaries (if enabled).
if emerge "$@" --binpkg-respect-use=y --update --newuse \ # It is ok to build gdb from source outside of crossdev.
if emerge "${emerge_flags[@]}" \
--pretend "${cross_pkgs[@]}" | grep -q '^\[ebuild' --pretend "${cross_pkgs[@]}" | grep -q '^\[ebuild'
then then
$sudo crossdev --stable --portage "${safe_flags[*]}" \ $sudo crossdev "${cross_flags[@]}" --stage4
--stage4 --target "${cross_chost}"
else else
$sudo emerge "$@" --binpkg-respect-use=y --update --newuse \ $sudo emerge "${emerge_flags[@]}" \
"${cross_pkgs[@]}" "cross-${cross_chost}/gdb" "${cross_pkgs[@]}"
fi fi
# Setup wrappers for our shiny new toolchain # Setup wrappers for our shiny new toolchain
if [[ ! -e "/usr/lib/ccache/bin/${cross_chost}-gcc" ]]; then $sudo CC_QUIET=1 ccache-config --install-links "${cross_chost}"
$sudo ccache-config --install-links "${cross_chost}" $sudo CC_QUIET=1 sysroot-config --install-links "${cross_chost}"
fi
if [[ ! -e "/usr/lib/sysroot-wrappers/bin/${cross_chost}-gcc" ]]; then
$sudo sysroot-config --install-links "${cross_chost}"
fi
} }
# Build/install toolchain dependencies into the cross sysroot for a # Build/install toolchain dependencies into the cross sysroot for a