blob: 82f32c819df66c5f1bae54ccba9647f10be3c1ce [file] [log] [blame]
#!/bin/bash
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
set -o errtrace
trap 'echo Fatal error: script $0 aborting at line $LINENO, command \"$BASH_COMMAND\" returned $?; exit 1' ERR
snapshot="2023.01.02.021151"
snapshot_year=`echo $snapshot | cut -d . -f 1`
snapshot_month=`echo $snapshot | cut -d . -f 2`
snapshot_day=`echo $snapshot | cut -d . -f 3`
snapshot_time=`echo $snapshot | cut -d . -f 4`
glibc_version=2.35-r16
# Upgrade CrOS toolchain to GCC 10.2.0 ${snapshot}
function build_toolchain_arm_none_eabi {
pushd ${SCRIPT_DIR}
rm -rf arm
# 1. Obtain {toolchain,glibc} prebuilts from Chrome OS.
gsutil.py cp gs://chromiumos-sdk/${snapshot_year}/${snapshot_month}/arm-none-eabi-${snapshot}.tar.xz .
gsutil.py cp gs://chromeos-prebuilt/host/amd64/amd64-host/chroot-${snapshot}/packages/cross-arm-none-eabi/newlib-4.1.0-r5.tbz2 .
# 2. Extract downloaded toolchain (overwrite armv7a contents)
rm -rf arm
mkdir arm
tar -C arm -xf arm-none-eabi-${snapshot}.tar.xz
tar -C arm -I'zstd -f' -xf newlib-4.1.0-r5.tbz2
rm arm-none-eabi-${snapshot}.tar.xz newlib-4.1.0-r5.tbz2
# 3. Make copies of libgcc_s.so.1 to fit with chromecast build system.
cp arm/lib/libgcc_s.so.1 arm/usr/arm-none-eabi/lib/
# 4. Add NOTICE files.
curl -L https://www.gnu.org/licenses/lgpl-2.1.txt > arm/usr/arm-none-eabi/NOTICE-eglibc
curl -L https://gnu.org/licenses/gpl-3.0.txt > arm/usr/arm-none-eabi/NOTICE-gdb
# 6. Customize default linker to be bfd, not gold.
sed -i -e "s/-gold//g" arm/bin/arm-none-eabi-ld
popd # ${SCRIPT_DIR}
}
# Upgrade CrOS toolchain to GCC 10.2.0 ${snapshot}
function build_toolchain {
pushd ${SCRIPT_DIR}
local readonly arch=${1}
local readonly abi=${2}
rm -rf ${arch}
# 1. Obtain {toolchain,glibc} prebuilts from Chrome OS.
gsutil.py cp gs://chromiumos-sdk/${snapshot_year}/${snapshot_month}/${arch}-cros-linux-${abi}-${snapshot}.tar.xz .
gsutil.py cp gs://chromeos-prebuilt/host/amd64/amd64-host/chroot-${snapshot}/packages/cross-${arch}-cros-linux-${abi}/glibc-${glibc_version}.tbz2 .
# 2. Extract downloaded toolchain (overwrite armv7a contents)
rm -rf ${arch}
mkdir ${arch}
tar -C ${arch} -xf ${arch}-cros-linux-${abi}-${snapshot}.tar.xz
tar -C ${arch} -I'zstd -f' -xf glibc-${glibc_version}.tbz2
rm ${arch}-cros-linux-${abi}-${snapshot}.tar.xz glibc-${glibc_version}.tbz2
# 3. Make copies of libgcc_s.so.1 to fit with chromecast build system.
cp ${arch}/usr/lib/gcc/${arch}-cros-linux-${abi}/10.2.0/libgcc_s.so.1 ${arch}/usr/${arch}-cros-linux-${abi}/lib/
# 4. Add NOTICE files.
curl -L https://www.gnu.org/licenses/lgpl-2.1.txt > ${arch}/usr/${arch}-cros-linux-${abi}/NOTICE-eglibc
curl -L https://gnu.org/licenses/gpl-3.0.txt > ${arch}/usr/${arch}-cros-linux-${abi}/NOTICE-gdb
# 8. Apply our patches
# Remove any empty folders created by unzipping the toolchains that are not
# checked into git. Those can be problematic when applying patches.
find . -type d -empty -delete
pushd ${arch}
patch -p1 < ${SCRIPT_DIR}/patches/eureka.patch
popd
if [ -f ${SCRIPT_DIR}/patches/${arch}.patch ]; then
patch -p1 < ${SCRIPT_DIR}/patches/${arch}.patch
fi
popd # ${SCRIPT_DIR}
}
build_toolchain armv7a gnueabihf
build_toolchain aarch64 gnu
build_toolchain x86_64 gnu
build_toolchain_arm_none_eabi