Merge pull request #835 from dm0-/portage

Work with new portage sysroot behavior
This commit is contained in:
David Michael 2018-08-31 13:38:52 -04:00 committed by GitHub
commit 237569143f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 42 additions and 14 deletions

View File

@ -19,17 +19,22 @@ configure_target_root() {
CBUILD="$(portageq envvar CBUILD)" \ CBUILD="$(portageq envvar CBUILD)" \
CHOST="${cross_chost}" \ CHOST="${cross_chost}" \
ROOT="/build/${board}" \ ROOT="/build/${board}" \
SYSROOT="/usr/${cross_chost}" \ SYSROOT="/build/${board}" \
_configure_sysroot "${profile}" _configure_sysroot "${profile}"
} }
build_target_toolchain() { build_target_toolchain() {
local board="$1" local board="$1"
local ROOT="/build/${board}" local ROOT="/build/${board}"
local SYSROOT="/usr/$(get_board_chost "${board}")"
mkdir -p "${ROOT}/usr"
cp -at "${ROOT}" "${SYSROOT}"/lib*
cp -at "${ROOT}"/usr "${SYSROOT}"/usr/include "${SYSROOT}"/usr/lib*
# --root is required because run_merge overrides ROOT= # --root is required because run_merge overrides ROOT=
PORTAGE_CONFIGROOT="$ROOT" \ PORTAGE_CONFIGROOT="$ROOT" \
run_merge -u --root="$ROOT" "${TOOLCHAIN_PKGS[@]}" run_merge -u --root="$ROOT" --sysroot="$ROOT" "${TOOLCHAIN_PKGS[@]}"
} }
configure_crossdev_overlay / /tmp/crossdev configure_crossdev_overlay / /tmp/crossdev

View File

@ -257,7 +257,7 @@ _configure_sysroot() {
$sudo eselect profile set --force "$profile" $sudo eselect profile set --force "$profile"
$sudo tee "${ROOT}/etc/portage/make.conf" >/dev/null <<EOF $sudo tee "${ROOT}/etc/portage/make.conf" >/dev/null <<EOF
$(portageq envvar -v CHOST CBUILD ROOT SYSROOT \ $(portageq envvar -v CHOST CBUILD ROOT \
PORTDIR PORTDIR_OVERLAY DISTDIR PKGDIR) PORTDIR PORTDIR_OVERLAY DISTDIR PKGDIR)
HOSTCC=\${CBUILD}-gcc HOSTCC=\${CBUILD}-gcc
PKG_CONFIG_PATH="\${SYSROOT}/usr/lib/pkgconfig/" PKG_CONFIG_PATH="\${SYSROOT}/usr/lib/pkgconfig/"
@ -372,7 +372,7 @@ install_cross_libs() {
done | $sudo tee "${package_provided}/cross-${cross_chost}" >/dev/null done | $sudo tee "${package_provided}/cross-${cross_chost}" >/dev/null
# OK, clear as mud? Install those dependencies now! # OK, clear as mud? Install those dependencies now!
PORTAGE_CONFIGROOT="$ROOT" ROOT="$ROOT" $sudo emerge "$@" -u $cross_deps PORTAGE_CONFIGROOT="$ROOT" $sudo emerge --root="$ROOT" --sysroot="$ROOT" "$@" -u $cross_deps
} }
# Get the latest GCC profile for a given CHOST # Get the latest GCC profile for a given CHOST

View File

@ -464,7 +464,7 @@ install_oem_package() {
# build anything else from source here. emerge doesn't have a way to # build anything else from source here. emerge doesn't have a way to
# enforce this in a single command. # enforce this in a single command.
info "Building ${oem_pkg}" info "Building ${oem_pkg}"
USE="${oem_use}" emerge-${BOARD} --root="${oem_tmp}" \ USE="${oem_use}" emerge-${BOARD} \
--nodeps --buildpkgonly --usepkg n \ --nodeps --buildpkgonly --usepkg n \
--quiet "${oem_pkg}" --quiet "${oem_pkg}"
@ -474,7 +474,8 @@ install_oem_package() {
fi fi
info "Installing ${oem_pkg} to OEM partition" info "Installing ${oem_pkg} to OEM partition"
USE="${oem_use}" emerge-${BOARD} --root="${oem_tmp}" \ USE="${oem_use}" emerge-${BOARD} \
--root="${oem_tmp}" --sysroot="${oem_tmp}" \
--root-deps=rdeps --usepkgonly ${getbinpkg} \ --root-deps=rdeps --usepkgonly ${getbinpkg} \
--quiet --jobs=2 "${oem_pkg}" --quiet --jobs=2 "${oem_pkg}"
sudo rsync -a "${oem_tmp}/usr/share/oem/" "${VM_TMP_ROOT}/usr/share/oem/" sudo rsync -a "${oem_tmp}/usr/share/oem/" "${VM_TMP_ROOT}/usr/share/oem/"

View File

@ -79,12 +79,25 @@ function torcx_build() (
[ -s "${tmproot}/etc/portage/bashrc" ] && [ -s "${tmproot}/etc/portage/bashrc" ] &&
. "${tmproot}/etc/portage/bashrc" . "${tmproot}/etc/portage/bashrc"
# Build binary packages using dev files in the board root.
emerge-${BOARD} \
--buildpkg \
--buildpkgonly \
--nodeps \
--oneshot \
--quiet \
--root-deps=rdeps \
"${pkg}"
# Install the binary packages in the temporary torcx image root.
emerge-${BOARD} \ emerge-${BOARD} \
--nodeps \ --nodeps \
--oneshot \ --oneshot \
--quiet \
--root="${tmproot}" \ --root="${tmproot}" \
--root-deps=rdeps \ --root-deps=rdeps \
--quiet \ --sysroot="${tmproot}" \
--usepkgonly \
"${pkg}" "${pkg}"
) )

View File

@ -305,19 +305,28 @@ if [[ ${FLAGS_regen_configs} -eq ${FLAGS_FALSE} ]]; then
EMERGE_FLAGS+=" --usepkg" EMERGE_FLAGS+=" --usepkg"
fi fi
EMERGE_FLAGS+=" --getbinpkg" EMERGE_FLAGS+=" --getbinpkg"
EMERGE_TOOLCHAIN_FLAGS+=" --usepkgonly --getbinpkg --rebuilt-binaries n"
else
# When binary packages are disabled we need to make sure the cross
# sysroot includes any build dependencies for the toolchain.
info "Installing toolchain build dependencies"
install_cross_libs "${BOARD_CHOST}" ${EMERGE_FLAGS} --buildpkg=n
fi fi
info "Installing baselayout" info "Installing baselayout"
"${EMERGE_WRAPPER}" ${EMERGE_FLAGS} --nodeps sys-apps/baselayout "${EMERGE_WRAPPER}" ${EMERGE_FLAGS} --nodeps sys-apps/baselayout
if [[ "${FLAGS_usepkg}" -ne "${FLAGS_TRUE}" ||
"${FLAGS_getbinpkg}" -ne "${FLAGS_TRUE}" ]]
then
# When binary packages are disabled we need to make sure the cross
# sysroot includes any build dependencies for the toolchain.
info "Installing toolchain build dependencies"
install_cross_libs "${BOARD_CHOST}" ${EMERGE_FLAGS} --buildpkg=n
info "Building toolchain"
"${EMERGE_WRAPPER}" --buildpkg --buildpkgonly \
--root="/usr/${BOARD_CHOST}" --sysroot="/usr/${BOARD_CHOST}" \
${EMERGE_TOOLCHAIN_FLAGS} "${TOOLCHAIN_PKGS[@]}"
fi
info "Installing toolchain" info "Installing toolchain"
SYSROOT="/usr/${BOARD_CHOST}" "${EMERGE_WRAPPER}" \ "${EMERGE_WRAPPER}" \
--usepkgonly --getbinpkg --rebuilt-binaries n \
${EMERGE_TOOLCHAIN_FLAGS} "${TOOLCHAIN_PKGS[@]}" ${EMERGE_TOOLCHAIN_FLAGS} "${TOOLCHAIN_PKGS[@]}"
fi fi