Skip to content

Commit 781d226

Browse files
committed
CMake cache file for building Pico SDK toolchain
This cache file demonstrates how to build a complete baremetal Clang/LLVM toolchain that can be used to build the Pico SDK.
1 parent 61a4678 commit 781d226

File tree

1 file changed

+89
-0
lines changed

1 file changed

+89
-0
lines changed

clang/cmake/caches/Pico.cmake

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
# This file sets up a CMakeCache for the Pico SDK toolchain build.
2+
3+
set(CMAKE_BUILD_TYPE Release CACHE STRING "")
4+
5+
set(LLVM_TARGETS_TO_BUILD ARM;RISCV CACHE STRING "")
6+
set(LLVM_ENABLE_PROJECTS clang;lld;llvm CACHE STRING "")
7+
set(LLVM_ENABLE_RUNTIMES compiler-rt;libcxx;libc CACHE STRING "")
8+
9+
set(CLANG_DEFAULT_CXX_STDLIB libc++ CACHE STRING "")
10+
set(CLANG_DEFAULT_LINKER lld CACHE STRING "")
11+
set(CLANG_DEFAULT_RTLIB compiler-rt CACHE STRING "")
12+
13+
set(LLVM_INSTALL_TOOLCHAIN_ONLY ON CACHE BOOL "")
14+
set(LLVM_TOOLCHAIN_TOOLS
15+
llvm-ar
16+
llvm-cov
17+
llvm-objcopy
18+
llvm-objdump
19+
llvm-profdata
20+
llvm-ranlib
21+
llvm-readelf
22+
llvm-readobj
23+
llvm-size
24+
llvm-strings
25+
llvm-strip
26+
llvm-symbolizer
27+
CACHE STRING "")
28+
set(LLVM_DISTRIBUTION_COMPONENTS
29+
builtins
30+
clang
31+
clang-resource-headers
32+
lld
33+
runtimes
34+
${LLVM_TOOLCHAIN_TOOLS}
35+
CACHE STRING "")
36+
37+
# TODO: Switch to newhdrgen for LLVM libc
38+
set(LLVM_LIBC_FULL_BUILD ON CACHE BOOL "")
39+
set(LIBC_HDRGEN_ONLY ON CACHE BOOL "")
40+
41+
set(LLVM_BUILTIN_TARGETS armv8m.main-none-eabi;riscv32-unknown-elf CACHE STRING "")
42+
foreach(target ${LLVM_BUILTIN_TARGETS})
43+
set(BUILTINS_${target}_CMAKE_SYSTEM_NAME Generic CACHE STRING "")
44+
set(BUILTINS_${target}_CMAKE_BUILD_TYPE MinSizeRel CACHE STRING "")
45+
set(BUILTINS_${target}_COMPILER_RT_BAREMETAL_BUILD ON CACHE BOOL "")
46+
endforeach()
47+
48+
set(BUILTINS_armv8m.main-none-eabi_CMAKE_SYSTEM_PROCESSOR arm CACHE STRING "")
49+
set(BUILTINS_riscv32-unknown-elf_CMAKE_SYSTEM_PROCESSOR RISCV CACHE STRING "")
50+
foreach(lang C;CXX;ASM)
51+
set(BUILTINS_armv8m.main-none-eabi_CMAKE_${lang}_FLAGS "-march=armv8m.main+fp+dsp -mcpu=cortex-m33 -mfloat-abi=softfp" CACHE STRING "")
52+
set(BUILTINS_riscv32-unknown-elf_CMAKE_${lang}_FLAGS "-march=rv32imac_zicsr_zifencei_zba_zbb_zbs_zbkb -mabi=ilp32" CACHE STRING "")
53+
endforeach()
54+
55+
set(LLVM_RUNTIME_TARGETS armv8m.main-none-eabi;riscv32-unknown-elf CACHE STRING "")
56+
foreach(target ${LLVM_RUNTIME_TARGETS})
57+
set(RUNTIMES_${target}_CMAKE_SYSTEM_NAME Generic CACHE STRING "")
58+
set(RUNTIMES_${target}_CMAKE_BUILD_TYPE MinSizeRel CACHE STRING "")
59+
set(RUNTIMES_${target}_CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY CACHE STRING "")
60+
set(RUNTIMES_${target}_LLVM_ENABLE_RUNTIMES libc;libcxx CACHE STRING "")
61+
set(RUNTIMES_${target}_LLVM_ENABLE_ASSERTIONS OFF CACHE BOOL "")
62+
set(RUNTIMES_${target}_LLVM_INCLUDE_TESTS OFF CACHE BOOL "")
63+
set(RUNTIMES_${target}_LLVM_LIBC_FULL_BUILD ON CACHE BOOL "")
64+
set(RUNTIMES_${target}_LIBC_ENABLE_USE_BY_CLANG ON CACHE BOOL "")
65+
# TODO: Switch to newhdrgen for LLVM libc
66+
set(RUNTIMES_${target}_LIBC_USE_NEW_HEADER_GEN OFF CACHE BOOL "")
67+
set(RUNTIMES_${target}_LIBCXX_CXX_ABI none CACHE STRING "")
68+
set(RUNTIMES_${target}_LIBCXX_LIBC llvm-libc CACHE STRING "")
69+
set(RUNTIMES_${target}_LIBCXX_ENABLE_SHARED OFF CACHE BOOL "")
70+
set(RUNTIMES_${target}_LIBCXX_ENABLE_FILESYSTEM OFF CACHE BOOL "")
71+
set(RUNTIMES_${target}_LIBCXX_ENABLE_RANDOM_DEVICE OFF CACHE BOOL "")
72+
set(RUNTIMES_${target}_LIBCXX_ENABLE_LOCALIZATION OFF CACHE BOOL "")
73+
set(RUNTIMES_${target}_LIBCXX_ENABLE_UNICODE OFF CACHE BOOL "")
74+
set(RUNTIMES_${target}_LIBCXX_ENABLE_WIDE_CHARACTERS OFF CACHE BOOL "")
75+
set(RUNTIMES_${target}_LIBCXX_ENABLE_EXCEPTIONS OFF CACHE BOOL "")
76+
set(RUNTIMES_${target}_LIBCXX_ENABLE_RTTI OFF CACHE BOOL "")
77+
set(RUNTIMES_${target}_LIBCXX_ENABLE_THREADS OFF CACHE BOOL "")
78+
set(RUNTIMES_${target}_LIBCXX_ENABLE_MONOTONIC_CLOCK OFF CACHE BOOL "")
79+
set(RUNTIMES_${target}_LIBCXX_USE_COMPILER_RT ON CACHE BOOL "")
80+
endforeach()
81+
82+
set(RUNTIMES_armv8m.main-none-eabi_CMAKE_SYSTEM_PROCESSOR arm CACHE STRING "")
83+
set(RUNTIMES_riscv32-unknown-elf_CMAKE_SYSTEM_PROCESSOR RISCV CACHE STRING "")
84+
foreach(lang C;CXX;ASM)
85+
# TODO: Use timespec_get instead of gettimeofday in libc++
86+
# TODO: Use internal logging API instead of fprintf in libc++
87+
set(RUNTIMES_armv8m.main-none-eabi_CMAKE_${lang}_FLAGS "-march=armv8m.main+fp+dsp -mcpu=cortex-m33 -mfloat-abi=softfp -Wno-atomic-alignment \"-Dvfprintf(stream, format, vlist)=vprintf(format, vlist)\" \"-Dfprintf(stream, format, ...)=printf(format)\" \"-Dtimeval=struct timeval{int tv_sec; int tv_usec;}\" \"-Dgettimeofday(tv, tz)\" -D_LIBCPP_PRINT=1" CACHE STRING "")
88+
set(RUNTIMES_riscv32-unknown-elf_CMAKE_${lang}_FLAGS "-march=rv32imac_zicsr_zifencei_zba_zbb_zbs_zbkb -mabi=ilp32 -Wno-atomic-alignment \"-Dvfprintf(stream, format, vlist)=vprintf(format, vlist)\" \"-Dfprintf(stream, format, ...)=printf(format)\" \"-Dtimeval=struct timeval{int tv_sec; int tv_usec;}\" \"-Dgettimeofday(tv, tz)\" -D_LIBCPP_PRINT=1" CACHE STRING "")
89+
endforeach()

0 commit comments

Comments
 (0)