Skip to content

Commit 082478c

Browse files
committed
Add a CMakeLists.txt to initialize and drive the first build.
This keeps all the environment variables sane and allows for out-of-this-tree builds. Usage: cmake -B ../build -DINSTALL_ROOT=$some_dir/install cd to ../build and issue a, "make tools" command to build everything. Signed-off-by: Sid Manning <[email protected]>
1 parent 179795d commit 082478c

File tree

5 files changed

+84
-11
lines changed

5 files changed

+84
-11
lines changed

CMakeLists.txt

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
cmake_minimum_required(VERSION 3.22)
2+
project(
3+
"Hexagon open source toolchain"
4+
DESCRIPTION "It is a sample toolchain to support Hexagon"
5+
HOMEPAGE_URL "https://github.com/quic/toolchain_for_hexagon"
6+
LANGUAGES NONE)
7+
8+
9+
# Set variables with CACHE option to allow command line override
10+
set(HOST_CLANG_VER 20 CACHE STRING "Host Clang version")
11+
set(ARTIFACT_TAG 20.0.0 CACHE STRING "Artifact tag")
12+
set(INSTALL_ROOT /tmp/$ENV{USER}/hexagon-qemu CACHE STRING "Install root")
13+
set(TOOLCHAIN_INSTALL ${INSTALL_ROOT}/clang+llvm-${ARTIFACT_TAG}-cross-hexagon-unknown-linux-musl)
14+
set(ROOT_INSTALL ${INSTALL_ROOT}/install_rootfs)
15+
set(ARTIFACT_BASE ${INSTALL_ROOT}/artifacts)
16+
17+
set(TOOLCHAIN_INSTALL_REL ${TOOLCHAIN_INSTALL})
18+
set(TOOLCHAIN_BIN ${TOOLCHAIN_INSTALL}/x86_64-linux-gnu/bin)
19+
set(TOOLCHAIN_LIB ${TOOLCHAIN_INSTALL}/x86_64-linux-gnu/lib)
20+
set(HEX_SYSROOT ${TOOLCHAIN_INSTALL}/x86_64-linux-gnu/target/hexagon-unknown-linux-musl)
21+
set(HEX_TOOLS_TARGET_BASE ${HEX_SYSROOT}/usr)
22+
set(ROOT_INSTALL_REL ${ROOT_INSTALL})
23+
set(ROOTFS ${ROOT_INSTALL})
24+
set(RESULTS_DIR ${ARTIFACT_BASE}/${ARTIFACT_TAG})
25+
26+
# Custom commands
27+
add_custom_target(setup
28+
COMMAND ${CMAKE_COMMAND} -E make_directory ${ARTIFACT_BASE}
29+
COMMAND ${CMAKE_COMMAND} -E make_directory ${RESULTS_DIR}
30+
COMMAND ${CMAKE_COMMAND} -E echo_append ${CMAKE_CURRENT_SOURCE_DIR}
31+
COMMAND ${CMAKE_COMMAND} -E echo_append ${TOOLCHAIN_INSTALL_REL}
32+
)
33+
34+
add_custom_target(clone
35+
DEPENDS setup
36+
COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/get-src-repos.sh ${CMAKE_CURRENT_SOURCE_DIR} ${TOOLCHAIN_INSTALL_REL}
37+
)
38+
39+
add_custom_target(eld
40+
DEPENDS clone
41+
COMMAND ${CMAKE_COMMAND} -E chdir llvm-project git clone [email protected]:cgit/eld.git
42+
)
43+
44+
#
45+
# NOTE:
46+
# DEPENDS eld
47+
# Remove this when incrementally building
48+
# the scripts are very picky about running more than once.
49+
#
50+
add_custom_target(tools
51+
DEPENDS eld
52+
COMMAND
53+
env TOOLCHAIN_INSTALL=${TOOLCHAIN_INSTALL}
54+
env ROOT_INSTALL=${ROOT_INSTALL}
55+
env ARTIFACT_BASE=${ARTIFACT_BASE}
56+
env ARTIFACT_TAG=${ARTIFACT_TAG}
57+
env CURRENT_SOURCE_DIR=${CMAKE_CURRENT_SOURCE_DIR}
58+
${CMAKE_CURRENT_SOURCE_DIR}/build-toolchain.sh
59+
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
60+
)

build-rootfs.sh

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,10 @@
55

66
STAMP=${1-$(date +"%Y_%b_%d")}
77

8+
if [ -z "${CURRENT_SOURCE_DIR}" ]; then
9+
CURRENT_SOURCE_DIR=${PWD}
10+
fi
11+
812
set -euo pipefail
913

1014

@@ -99,8 +103,8 @@ build_canadian_clang() {
99103
-DLLVM_ENABLE_PIC:BOOL=OFF \
100104
-DLLVM_TARGETS_TO_BUILD:STRING="Hexagon" \
101105
-DLLVM_ENABLE_PROJECTS:STRING="clang;lld" \
102-
-C ./hexagon-unknown-linux-musl-clang.cmake \
103-
-C ./hexagon-linux-cross.cmake \
106+
-C ${CURRENT_SOURCE_DIR}/hexagon-unknown-linux-musl-clang.cmake \
107+
-C ${CURRENT_SOURCE_DIR}/hexagon-linux-cross.cmake \
104108
-B ./obj_canadian \
105109
-S ./llvm-project/llvm
106110

build-toolchain.sh

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@
44
# SPDX-License-Identifier: BSD-3-Clause
55

66
STAMP=${1-$(date +"%Y_%b_%d")}
7+
if [ -z "${CURRENT_SOURCE_DIR}" ]; then
8+
CURRENT_SOURCE_DIR=${PWD}
9+
fi
710

811
set -euo pipefail
912
set -x
@@ -41,7 +44,7 @@ build_llvm_clang_cross() {
4144
-DCMAKE_BUILD_WITH_INSTALL_RPATH:BOOL=ON \
4245
-DCMAKE_CROSSCOMPILING:BOOL=ON \
4346
${EXTRA} \
44-
-C ./llvm-tools.cmake \
47+
-C ${CURRENT_SOURCE_DIR}/llvm-tools.cmake \
4548
-C ./llvm-project/clang/cmake/caches/hexagon-unknown-linux-musl-clang.cmake \
4649
-C ./llvm-project/clang/cmake/caches/hexagon-unknown-linux-musl-clang-cross.cmake \
4750
-B ./obj_llvm_${triple} \
@@ -120,7 +123,7 @@ build_clang_rt_builtins() {
120123
-DCMAKE_C_COMPILER_FORCED:BOOL=ON \
121124
-DCMAKE_CXX_COMPILER_FORCED:BOOL=ON \
122125
-C ./llvm-project/compiler-rt/cmake/caches/hexagon-linux-builtins.cmake \
123-
-C ./hexagon-linux-cross.cmake \
126+
-C ${CURRENT_SOURCE_DIR}/hexagon-linux-cross.cmake \
124127
-B ./obj_clang_rt \
125128
-S ./llvm-project/compiler-rt
126129

@@ -131,7 +134,7 @@ build_clang_rt_builtins() {
131134

132135
config_kernel() {
133136
cd ${BASE}
134-
mkdir obj_linux
137+
mkdir -p obj_linux
135138
cd linux
136139
make O=../obj_linux ARCH=hexagon \
137140
CROSS_COMPILE=hexagon-unknown-linux-musl- \
@@ -208,7 +211,7 @@ build_libs() {
208211
-DCMAKE_INSTALL_PREFIX:PATH=${HEX_TOOLS_TARGET_BASE} \
209212
-DCMAKE_CROSSCOMPILING:BOOL=ON \
210213
-DCMAKE_CXX_COMPILER_FORCED:BOOL=ON \
211-
-C ./hexagon-linux-cross.cmake \
214+
-C ${CURRENT_SOURCE_DIR}/hexagon-linux-cross.cmake \
212215
-C ./llvm-project/libcxx/cmake/caches/hexagon-linux-runtimes.cmake \
213216
-C ./llvm-project/compiler-rt/cmake/caches/hexagon-linux-clangrt.cmake \
214217
-B ./obj_libs \
@@ -236,7 +239,7 @@ build_sanitizers() {
236239
-DCMAKE_CXX_COMPILER_FORCED:BOOL=ON \
237240
-DCOMPILER_RT_SUPPORTED_ARCH=hexagon \
238241
-DLLVM_TARGET_TRIPLE=hexagon-unknown-linux-musl \
239-
-C ./hexagon-linux-cross.cmake \
242+
-C ${CURRENT_SOURCE_DIR}/hexagon-linux-cross.cmake \
240243
-B ./obj_san \
241244
-S ./llvm-project/compiler-rt
242245
cmake --build ./obj_san -- -v install-compiler-rt
@@ -253,7 +256,7 @@ build_qemu() {
253256
--enable-slirp \
254257
--enable-plugins \
255258
--disable-containers \
256-
--python=$(which python3.8) \
259+
--python=$(which python) \
257260
--target-list=hexagon-softmmu,hexagon-linux-user --prefix=${TOOLCHAIN_INSTALL}/x86_64-linux-gnu \
258261

259262
# --cc=clang \
@@ -322,7 +325,7 @@ which clang
322325
clang --version
323326
ninja --version
324327
cmake --version
325-
python3.8 --version
328+
python --version
326329

327330
build_llvm_clang
328331

get-src-repos.sh

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,14 @@ git clone -q --branch=hexagon https://github.com/quic/musl &
2121
git clone -q https://github.com/quic/hexagonMVM &
2222
git clone -q https://github.com/qemu/qemu &
2323

24+
gitdirs="qemu llvm-test-suite musl linux busybox hexagonMVM llvm-project libc-test buildroot cpython"
25+
2426
wait
2527

2628
dump_checkout_info() {
2729
out=${1}
2830
mkdir -p ${out}
29-
for d in ./*
31+
for d in ${gitdirs}
3032
do
3133
if [[ -d ${d} ]]; then
3234
proj=$(basename ${d})

test-toolchain.sh

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,10 @@ LLVM_TS_PER_TEST_TIMEOUT_SEC=$((10 * 60))
99
# For now let's limit the scope of this test suite
1010
LLVM_TS_LIMIT=400
1111

12+
if [ -z "${CURRENT_SOURCE_DIR}" ]; then
13+
CURRENT_SOURCE_DIR=${PWD}
14+
fi
15+
1216
set -euo pipefail
1317

1418
test_llvm() {
@@ -33,7 +37,7 @@ test_llvm() {
3337
-DTEST_SUITE_LIT:FILEPATH="${BASE}/obj_llvm/bin/llvm-lit" \
3438
-DBENCHMARK_USE_LIBCXX:BOOL=ON \
3539
-DSMALL_PROBLEM_SIZE:BOOL=ON \
36-
-C ./hexagon-linux-cross.cmake \
40+
-C ${CURRENT_SOURCE_DIR}/hexagon-linux-cross.cmake \
3741
-B ./obj_test-suite_${OPT_FLAVOR} \
3842
-S ./llvm-test-suite
3943

0 commit comments

Comments
 (0)