Skip to content

Commit 30c833e

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 43ca08d commit 30c833e

File tree

1 file changed

+88
-0
lines changed

1 file changed

+88
-0
lines changed

clang/cmake/caches/Pico.cmake

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
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+
set(CLANG_DEFAULT_UNWINDLIB libunwind CACHE STRING "")
13+
14+
set(LLVM_INSTALL_TOOLCHAIN_ONLY ON CACHE BOOL "")
15+
set(LLVM_TOOLCHAIN_TOOLS
16+
llvm-ar
17+
llvm-cov
18+
llvm-objcopy
19+
llvm-objdump
20+
llvm-profdata
21+
llvm-ranlib
22+
llvm-readelf
23+
llvm-readobj
24+
llvm-size
25+
llvm-strings
26+
llvm-strip
27+
llvm-symbolizer
28+
CACHE STRING "")
29+
set(LLVM_DISTRIBUTION_COMPONENTS
30+
builtins
31+
clang
32+
clang-resource-headers
33+
lld
34+
runtimes
35+
${LLVM_TOOLCHAIN_TOOLS}
36+
CACHE STRING "")
37+
38+
set(LLVM_BUILTIN_TARGETS armv6m-none-eabi;armv8m.main-none-eabi;riscv32-unknown-elf CACHE STRING "")
39+
foreach(target ${LLVM_BUILTIN_TARGETS})
40+
set(BUILTINS_${target}_CMAKE_SYSTEM_NAME Generic CACHE STRING "")
41+
set(BUILTINS_${target}_CMAKE_BUILD_TYPE MinSizeRel CACHE STRING "")
42+
set(BUILTINS_${target}_COMPILER_RT_BAREMETAL_BUILD ON CACHE BOOL "")
43+
endforeach()
44+
45+
set(BUILTINS_armv6m-none-eabi_CMAKE_SYSTEM_PROCESSOR arm CACHE STRING "")
46+
set(BUILTINS_armv8m.main-none-eabi_CMAKE_SYSTEM_PROCESSOR arm CACHE STRING "")
47+
set(BUILTINS_riscv32-unknown-elf_CMAKE_SYSTEM_PROCESSOR RISCV CACHE STRING "")
48+
foreach(lang C;CXX;ASM)
49+
set(BUILTINS_armv6m-none-eabi_CMAKE_${lang}_FLAGS "-march=armv6m -mcpu=cortex-m0plus -mfloat-abi=soft" CACHE STRING "")
50+
set(BUILTINS_armv8m.main-none-eabi_CMAKE_${lang}_FLAGS "-march=armv8m.main+fp+dsp -mcpu=cortex-m33 -mfloat-abi=softfp" CACHE STRING "")
51+
set(BUILTINS_riscv32-unknown-elf_CMAKE_${lang}_FLAGS "-march=rv32imac_zicsr_zifencei_zba_zbb_zbs_zbkb -mabi=ilp32" CACHE STRING "")
52+
endforeach()
53+
54+
set(LLVM_RUNTIME_TARGETS armv6m-none-eabi;armv8m.main-none-eabi;riscv32-unknown-elf CACHE STRING "")
55+
foreach(target ${LLVM_RUNTIME_TARGETS})
56+
set(RUNTIMES_${target}_CMAKE_SYSTEM_NAME Generic CACHE STRING "")
57+
set(RUNTIMES_${target}_CMAKE_BUILD_TYPE MinSizeRel CACHE STRING "")
58+
set(RUNTIMES_${target}_CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY CACHE STRING "")
59+
set(RUNTIMES_${target}_LLVM_ENABLE_RUNTIMES libc;libcxx CACHE STRING "")
60+
set(RUNTIMES_${target}_LLVM_ENABLE_ASSERTIONS OFF CACHE BOOL "")
61+
set(RUNTIMES_${target}_LLVM_INCLUDE_TESTS OFF CACHE BOOL "")
62+
set(RUNTIMES_${target}_LLVM_LIBC_FULL_BUILD ON CACHE BOOL "")
63+
set(RUNTIMES_${target}_LIBC_ENABLE_USE_BY_CLANG ON CACHE BOOL "")
64+
set(RUNTIMES_${target}_LIBCXX_CXX_ABI none CACHE STRING "")
65+
set(RUNTIMES_${target}_LIBCXX_ENABLE_SHARED OFF CACHE BOOL "")
66+
set(RUNTIMES_${target}_LIBCXX_ENABLE_FILESYSTEM OFF CACHE BOOL "")
67+
set(RUNTIMES_${target}_LIBCXX_ENABLE_RANDOM_DEVICE OFF CACHE BOOL "")
68+
set(RUNTIMES_${target}_LIBCXX_ENABLE_LOCALIZATION OFF CACHE BOOL "")
69+
set(RUNTIMES_${target}_LIBCXX_ENABLE_UNICODE OFF CACHE BOOL "")
70+
set(RUNTIMES_${target}_LIBCXX_ENABLE_WIDE_CHARACTERS OFF CACHE BOOL "")
71+
set(RUNTIMES_${target}_LIBCXX_ENABLE_EXCEPTIONS OFF CACHE BOOL "")
72+
set(RUNTIMES_${target}_LIBCXX_ENABLE_RTTI OFF CACHE BOOL "")
73+
set(RUNTIMES_${target}_LIBCXX_ENABLE_THREADS OFF CACHE BOOL "")
74+
set(RUNTIMES_${target}_LIBCXX_ENABLE_MONOTONIC_CLOCK OFF CACHE BOOL "")
75+
set(RUNTIMES_${target}_LIBCXX_SHARED_OUTPUT_NAME "c++-shared" CACHE STRING "")
76+
set(RUNTIMES_${target}_LIBCXX_USE_COMPILER_RT ON CACHE BOOL "")
77+
set(RUNTIMES_${target}_RUNTIMES_USE_LIBC llvm-libc CACHE STRING "")
78+
endforeach()
79+
80+
set(RUNTIMES_armv6m-none-eabi_CMAKE_SYSTEM_PROCESSOR arm CACHE STRING "")
81+
set(RUNTIMES_armv8m.main-none-eabi_CMAKE_SYSTEM_PROCESSOR arm CACHE STRING "")
82+
set(RUNTIMES_riscv32-unknown-elf_CMAKE_SYSTEM_PROCESSOR RISCV CACHE STRING "")
83+
foreach(lang C;CXX;ASM)
84+
# TODO: Use internal logging API instead of fprintf in libc++
85+
set(RUNTIMES_armv6m-none-eabi_CMAKE_${lang}_FLAGS "-march=armv6m -mcpu=cortex-m0plus -mfloat-abi=soft -Wno-atomic-alignment \"-Dvfprintf(stream, format, vlist)=vprintf(format, vlist)\" \"-Dfprintf(stream, format, ...)=printf(format)\" \"-Dfputs(string, stream)=puts(string)\" -D_LIBCPP_PRINT=1" CACHE STRING "")
86+
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)\" \"-Dfputs(string, stream)=puts(string)\" -D_LIBCPP_PRINT=1" CACHE STRING "")
87+
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)\" \"-Dfputs(string, stream)=puts(string)\" -D_LIBCPP_PRINT=1" CACHE STRING "")
88+
endforeach()

0 commit comments

Comments
 (0)