Skip to content

Commit 216cd65

Browse files
apaillier-ledgeriartemov-ledger
authored andcommitted
New script to build clang rt builtins
1 parent e29eccd commit 216cd65

File tree

1 file changed

+95
-0
lines changed

1 file changed

+95
-0
lines changed

tools/build_clangrt_builtins.sh

Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
#!/usr/bin/env bash
2+
3+
set -e
4+
5+
TARGET_CPU=""
6+
OUTPUT_DIR=""
7+
8+
while getopts "t:o:" opt
9+
do
10+
case "$opt" in
11+
t)
12+
TARGET_CPU="$OPTARG"
13+
;;
14+
o)
15+
OUTPUT_DIR="$OPTARG"
16+
;;
17+
?)
18+
exit 1
19+
;;
20+
esac
21+
done
22+
shift "$((OPTIND - 1))"
23+
24+
if [ -z "$TARGET_CPU" ] || [ -z "$OUTPUT_DIR" ]
25+
then
26+
echo "Usage: $0 -t TARGET_CPU -o OUTPUT_FILE" >&2
27+
exit 1
28+
fi
29+
30+
mkdir -p "$OUTPUT_DIR"
31+
OUTPUT_DIR=$(realpath "$OUTPUT_DIR")
32+
33+
# enable source repository
34+
sed -i 's/^\(Types: deb\)$/\1 deb-src/g' /etc/apt/sources.list.d/debian.sources
35+
36+
apt update
37+
38+
apt install -y --no-install-recommends \
39+
dpkg-dev \
40+
llvm-dev
41+
42+
LLVM_VERSION=$(clang --version | head -n1 | rev | cut -d" " -f1 | rev)
43+
LLVM_MAJOR_VERSION=$(echo "$LLVM_VERSION" | cut -d. -f1)
44+
45+
cd /tmp
46+
47+
LLVM_DIR="llvm-toolchain-$LLVM_MAJOR_VERSION-$LLVM_VERSION"
48+
if [ ! -d "$LLVM_DIR" ]
49+
then
50+
# install Debian source package
51+
apt source "llvm-toolchain-$LLVM_MAJOR_VERSION"
52+
fi
53+
54+
cd "$LLVM_DIR"
55+
rm -rf build
56+
mkdir build
57+
cd build
58+
59+
TARGET=arm-none-eabi
60+
SYSROOT=/usr/lib/arm-none-eabi
61+
62+
cmake ../compiler-rt \
63+
-DCMAKE_TRY_COMPILE_TARGET_TYPE=STATIC_LIBRARY \
64+
-DCOMPILER_RT_OS_DIR="baremetal" \
65+
-DCOMPILER_RT_BUILD_BUILTINS=ON \
66+
-DCOMPILER_RT_BUILD_CRT=OFF \
67+
-DCOMPILER_RT_BUILD_SANITIZERS=OFF \
68+
-DCOMPILER_RT_BUILD_XRAY=OFF \
69+
-DCOMPILER_RT_BUILD_LIBFUZZER=OFF \
70+
-DCOMPILER_RT_BUILD_PROFILE=OFF \
71+
-DCOMPILER_RT_BUILD_MEMPROF=OFF \
72+
-DCOMPILER_RT_BUILD_ORC=OFF \
73+
-DCMAKE_C_COMPILER="$(which clang)" \
74+
-DCMAKE_C_COMPILER_TARGET="${TARGET}" \
75+
-DCMAKE_ASM_COMPILER_TARGET="${TARGET}" \
76+
-DCMAKE_AR="$(which llvm-ar)" \
77+
-DCMAKE_NM="$(which llvm-nm)" \
78+
-DCMAKE_RANLIB="$(which llvm-ranlib)" \
79+
-DCOMPILER_RT_BAREMETAL_BUILD=ON \
80+
-DCOMPILER_RT_DEFAULT_TARGET_ONLY=ON \
81+
-DLLVM_CONFIG_PATH="$(which llvm-config)" \
82+
-DCOMPILER_RT_HAS_FPIC_FLAG=OFF \
83+
-DCMAKE_C_FLAGS="-mcpu=${TARGET_CPU} -mlittle-endian -mthumb -Oz -g0 -fropi -frwpi" \
84+
-DCMAKE_ASM_FLAGS="-mcpu=${TARGET_CPU} -mlittle-endian -mthumb" \
85+
-DCMAKE_SYSROOT="$SYSROOT"
86+
make -j
87+
88+
# Removing duplicated symbols that are also present in picolibc
89+
ar d lib/baremetal/libclang_rt.builtins-arm.a aeabi_memset.S.o
90+
ar d lib/baremetal/libclang_rt.builtins-arm.a aeabi_memmove.S.o
91+
ar d lib/baremetal/libclang_rt.builtins-arm.a aeabi_memcpy.S.o
92+
93+
# Output
94+
mkdir -p "$OUTPUT_DIR"
95+
cp lib/baremetal/libclang_rt.builtins-arm.a "$OUTPUT_DIR/libclang_rt.builtins.a"

0 commit comments

Comments
 (0)