blob: 425d6a6597be5135601cb7bd5d634340015ff767 [file] [log] [blame]
# Copyright 2021 The Chromium OS Authors. All rights reserved.
# Distributed under the terms of the GNU General Public License v2
#
# This package provides 4.9.2 GCC toolchains for Chrome OS
# for ARM32, ARM64 and X86_64 ABIs.
# This package is provided purely for compatibility reasons to be used by
# packages that cannot use clang compiler or newer versions of GCC.
# These toolchains are based on standalone toolchain binaries generated by
# chromiumos-sdk builder.
# No fixes including security are planned for these toolchains.
EAPI=7
DESCRIPTION="Frozen GCC 4.9.2 toolchains for Chrome OS"
# Use the toolchains generated by SDK builder on Jan 04, 2021 that has been
# verified to work with Chrome OS GCC user packages.
CROS_TC_VERSION="2021.01.04.014317"
SRC_URI="gs://chromiumos-sdk/2021/01/aarch64-cros-linux-gnu-${CROS_TC_VERSION}.tar.xz
gs://chromiumos-sdk/2021/01/armv7a-cros-linux-gnueabihf-${CROS_TC_VERSION}.tar.xz
gs://chromiumos-sdk/2021/01/x86_64-cros-linux-gnu-${CROS_TC_VERSION}.tar.xz"
HOMEPAGE="https://www.chromium.org/chromium-os"
LICENSE="GPL-3 LGPL-3 libgcc FDL-1.2"
SLOT=0
KEYWORDS="*"
IUSE=""
RESTRICT="binchecks strip"
QA_PREBUILT="*"
CROS_ABIS=("aarch64-cros-linux-gnu" "armv7a-cros-linux-gnueabihf" "x86_64-cros-linux-gnu")
INSTALL_DIR="/opt/gcc-bin-${PV}"
S="${WORKDIR}"
# Unpack the standalone toolchain tarballs to <abi> directories.
src_unpack() {
local abi
for abi in "${CROS_ABIS[@]}"; do
cd "${WORKDIR}" || die
mkdir "${abi}" || die
cd "${abi}" || die
unpack "${abi}-${CROS_TC_VERSION}.tar.xz"
done
}
# Remove files that we do not need for gcc to reduce installation size
# e.g. llvm/gdb/gconv etc.
src_prepare() {
default
local abi
for abi in "${CROS_ABIS[@]}"; do
cd "${WORKDIR}/${abi}" || die
rm -f bin/*gcov* bin/*gdb* bin/*clang* bin/*lld* bin/*llvm* || die
rm -f lib/*clang* lib/*rust* lib/*libstd-* lib/*libc++* || die
rm -rf usr/"${abi}"*/usr/lib*/gconv || die
rm -rf usr/bin || die
rm -rf usr/include/c++ usr/include/llvm* usr/include/clang* usr/share/clang* || die
# Delete anything not binutils related from usr/lib64.
local file
for file in "${WORKDIR}/${abi}/usr/lib64"/*; do
if [[ -d "${file}" && "${file}" == *binutils* ]]; then
continue
else
rm -rf "${file}" || die
fi
done
# Delete anything that is not prefixed with the abi inside top bin dir.
for file in "${WORKDIR}/${abi}/bin"/*; do
if [[ -f "${file}" || -L "${file}" ]]; then
local name="$(basename "${file}")"
if [[ "${name}" != "${abi}"* ]]; then
rm -f "${file}" || die
fi
fi
done
# Rebuild the compiler wrapper with a workaround to avoid 512 errors.
cd "${WORKDIR}/${abi}/usr/x86_64-pc-linux-gnu/${abi}/gcc-bin/4.9.x" || die
rm -f sysroot_wrapper.hardened* || die
"${FILESDIR}/compiler_wrapper/build.py" --config=cros.hardened \
--use_ccache=false \
--use_llvm_next=false \
--output_file=sysroot_wrapper.hardened.ccache || die
done
}
src_install() {
dodir "${INSTALL_DIR}"
local abi
for abi in "${CROS_ABIS[@]}"; do
mv "${WORKDIR}/${abi}" "${D}/${INSTALL_DIR}" || die
done
}