Browse Source
The current docker image for cross compiling hexagon guests
is manually built since it takes >2 hours to build from source.
This patch:
1. Solves the above issue by using the prebuilt clang
toolchain hosted on CodeLinaro [1] and maintained by QUIC [2].
2. The dockerfile is also switched from multi-stage to single stage
build to allow the CI docker engine to reuse the layer cache.
3. Re-enables the hexagon-cross-container job to be always run in
CI and makes it a non-optional dependency for the
build-user-hexagon job.
The changes for 1 & 2 together bring down the build time to
~3 minutes in GitLab CI when cache is reused and ~9 minutes
when cache cannot be reused.
[1]: https://github.com/CodeLinaro/hexagon-builder
[2]: https://github.com/quic/toolchain_for_hexagon/releases/
Signed-off-by: Mukilan Thiyagarajan <quic_mthiyaga@quicinc.com>
[AJB: also tweak MAINTAINERS, remove QEMU_JOB_ONLY_FORKS and comment]
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20221219144354.11659-1-quic_mthiyaga@quicinc.com>
Message-Id: <20221221090411.1995037-6-alex.bennee@linaro.org>
pull/229/head
committed by
Alex Bennée
6 changed files with 20 additions and 205 deletions
@ -1,141 +0,0 @@ |
|||
#!/bin/bash |
|||
|
|||
set -e |
|||
|
|||
BASE=$(readlink -f ${PWD}) |
|||
|
|||
TOOLCHAIN_INSTALL=$(readlink -f "$TOOLCHAIN_INSTALL") |
|||
ROOTFS=$(readlink -f "$ROOTFS") |
|||
|
|||
TOOLCHAIN_BIN=${TOOLCHAIN_INSTALL}/bin |
|||
HEX_SYSROOT=${TOOLCHAIN_INSTALL}/hexagon-unknown-linux-musl |
|||
HEX_TOOLS_TARGET_BASE=${HEX_SYSROOT}/usr |
|||
|
|||
function cdp() { |
|||
DIR="$1" |
|||
mkdir -p "$DIR" |
|||
cd "$DIR" |
|||
} |
|||
|
|||
function fetch() { |
|||
DIR="$1" |
|||
URL="$2" |
|||
TEMP="$(readlink -f "$PWD/tmp.tar.gz")" |
|||
wget --quiet "$URL" -O "$TEMP" |
|||
cdp "$DIR" |
|||
tar xaf "$TEMP" --strip-components=1 |
|||
rm "$TEMP" |
|||
cd - |
|||
} |
|||
|
|||
build_llvm_clang() { |
|||
fetch "$BASE/llvm-project" "$LLVM_URL" |
|||
cdp "$BASE/build-llvm" |
|||
|
|||
cmake -G Ninja \ |
|||
-DCMAKE_BUILD_TYPE=Release \ |
|||
-DCMAKE_INSTALL_PREFIX=${TOOLCHAIN_INSTALL} \ |
|||
-DLLVM_ENABLE_LLD=ON \ |
|||
-DLLVM_TARGETS_TO_BUILD="Hexagon" \ |
|||
-DLLVM_ENABLE_PROJECTS="clang;lld" \ |
|||
"$BASE/llvm-project/llvm" |
|||
ninja all install |
|||
cd ${TOOLCHAIN_BIN} |
|||
ln -sf clang hexagon-unknown-linux-musl-clang |
|||
ln -sf clang++ hexagon-unknown-linux-musl-clang++ |
|||
ln -sf llvm-ar hexagon-unknown-linux-musl-ar |
|||
ln -sf llvm-objdump hexagon-unknown-linux-musl-objdump |
|||
ln -sf llvm-objcopy hexagon-unknown-linux-musl-objcopy |
|||
ln -sf llvm-readelf hexagon-unknown-linux-musl-readelf |
|||
ln -sf llvm-ranlib hexagon-unknown-linux-musl-ranlib |
|||
|
|||
# workaround for now: |
|||
cat <<EOF > hexagon-unknown-linux-musl.cfg |
|||
-G0 --sysroot=${HEX_SYSROOT} |
|||
EOF |
|||
} |
|||
|
|||
build_clang_rt() { |
|||
cdp "$BASE/build-clang_rt" |
|||
cmake -G Ninja \ |
|||
-DCMAKE_BUILD_TYPE=Release \ |
|||
-DLLVM_CONFIG_PATH="$BASE/build-llvm/bin/llvm-config" \ |
|||
-DCMAKE_ASM_FLAGS="-G0 -mlong-calls -fno-pic --target=hexagon-unknown-linux-musl " \ |
|||
-DCMAKE_SYSTEM_NAME=Linux \ |
|||
-DCMAKE_C_COMPILER="${TOOLCHAIN_BIN}/hexagon-unknown-linux-musl-clang" \ |
|||
-DCMAKE_ASM_COMPILER="${TOOLCHAIN_BIN}/hexagon-unknown-linux-musl-clang" \ |
|||
-DCMAKE_INSTALL_PREFIX=${HEX_TOOLS_TARGET_BASE} \ |
|||
-DCMAKE_CROSSCOMPILING=ON \ |
|||
-DCMAKE_C_COMPILER_FORCED=ON \ |
|||
-DCMAKE_CXX_COMPILER_FORCED=ON \ |
|||
-DCOMPILER_RT_BUILD_BUILTINS=ON \ |
|||
-DCOMPILER_RT_BUILTINS_ENABLE_PIC=OFF \ |
|||
-DCMAKE_SIZEOF_VOID_P=4 \ |
|||
-DCOMPILER_RT_OS_DIR= \ |
|||
-DCAN_TARGET_hexagon=1 \ |
|||
-DCAN_TARGET_x86_64=0 \ |
|||
-DCOMPILER_RT_SUPPORTED_ARCH=hexagon \ |
|||
-DLLVM_ENABLE_PROJECTS="compiler-rt" \ |
|||
"$BASE/llvm-project/compiler-rt" |
|||
ninja install-compiler-rt |
|||
} |
|||
|
|||
build_musl_headers() { |
|||
fetch "$BASE/musl" "$MUSL_URL" |
|||
cd "$BASE/musl" |
|||
make clean |
|||
CC=${TOOLCHAIN_BIN}/hexagon-unknown-linux-musl-clang \ |
|||
CROSS_COMPILE=hexagon-unknown-linux-musl \ |
|||
LIBCC=${HEX_TOOLS_TARGET_BASE}/lib/libclang_rt.builtins-hexagon.a \ |
|||
CROSS_CFLAGS="-G0 -O0 -mv65 -fno-builtin -fno-rounding-math --target=hexagon-unknown-linux-musl" \ |
|||
./configure --target=hexagon --prefix=${HEX_TOOLS_TARGET_BASE} |
|||
PATH=${TOOLCHAIN_BIN}:$PATH make CROSS_COMPILE= install-headers |
|||
|
|||
cd ${HEX_SYSROOT}/.. |
|||
ln -sf hexagon-unknown-linux-musl hexagon |
|||
} |
|||
|
|||
build_kernel_headers() { |
|||
fetch "$BASE/linux" "$LINUX_URL" |
|||
mkdir -p "$BASE/build-linux" |
|||
cd "$BASE/linux" |
|||
make O=../build-linux ARCH=hexagon \ |
|||
KBUILD_CFLAGS_KERNEL="-mlong-calls" \ |
|||
CC=${TOOLCHAIN_BIN}/hexagon-unknown-linux-musl-clang \ |
|||
LD=${TOOLCHAIN_BIN}/ld.lld \ |
|||
KBUILD_VERBOSE=1 comet_defconfig |
|||
make mrproper |
|||
|
|||
cd "$BASE/build-linux" |
|||
make \ |
|||
ARCH=hexagon \ |
|||
CC=${TOOLCHAIN_BIN}/clang \ |
|||
INSTALL_HDR_PATH=${HEX_TOOLS_TARGET_BASE} \ |
|||
V=1 \ |
|||
headers_install |
|||
} |
|||
|
|||
build_musl() { |
|||
cd "$BASE/musl" |
|||
make clean |
|||
CROSS_COMPILE=hexagon-unknown-linux-musl- \ |
|||
AR=llvm-ar \ |
|||
RANLIB=llvm-ranlib \ |
|||
STRIP=llvm-strip \ |
|||
CC=clang \ |
|||
LIBCC=${HEX_TOOLS_TARGET_BASE}/lib/libclang_rt.builtins-hexagon.a \ |
|||
CFLAGS="-G0 -O0 -mv65 -fno-builtin -fno-rounding-math --target=hexagon-unknown-linux-musl" \ |
|||
./configure --target=hexagon --prefix=${HEX_TOOLS_TARGET_BASE} |
|||
PATH=${TOOLCHAIN_BIN}/:$PATH make CROSS_COMPILE= install |
|||
cd ${HEX_TOOLS_TARGET_BASE}/lib |
|||
ln -sf libc.so ld-musl-hexagon.so |
|||
ln -sf ld-musl-hexagon.so ld-musl-hexagon.so.1 |
|||
cdp ${HEX_TOOLS_TARGET_BASE}/../lib |
|||
ln -sf ../usr/lib/ld-musl-hexagon.so.1 |
|||
} |
|||
|
|||
build_llvm_clang |
|||
build_kernel_headers |
|||
build_musl_headers |
|||
build_clang_rt |
|||
build_musl |
|||
Loading…
Reference in new issue