#!/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 < 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