forked from mirror/qemu
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
142 lines
4.0 KiB
Bash
142 lines
4.0 KiB
Bash
#!/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
|