[clang] CMake cache file for building Pico SDK toolchain (PR #113267)

Petr Hosek via cfe-commits cfe-commits at lists.llvm.org
Mon Oct 21 23:42:24 PDT 2024


https://github.com/petrhosek updated https://github.com/llvm/llvm-project/pull/113267

>From 781d226916e6bc477494f707085b9ccab72befb6 Mon Sep 17 00:00:00 2001
From: Petr Hosek <phosek at google.com>
Date: Mon, 21 Oct 2024 23:24:11 -0700
Subject: [PATCH 1/2] 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.
---
 clang/cmake/caches/Pico.cmake | 89 +++++++++++++++++++++++++++++++++++
 1 file changed, 89 insertions(+)
 create mode 100644 clang/cmake/caches/Pico.cmake

diff --git a/clang/cmake/caches/Pico.cmake b/clang/cmake/caches/Pico.cmake
new file mode 100644
index 00000000000000..b0cc357b5b658d
--- /dev/null
+++ b/clang/cmake/caches/Pico.cmake
@@ -0,0 +1,89 @@
+# This file sets up a CMakeCache for the Pico SDK toolchain build.
+
+set(CMAKE_BUILD_TYPE Release CACHE STRING "")
+
+set(LLVM_TARGETS_TO_BUILD ARM;RISCV CACHE STRING "")
+set(LLVM_ENABLE_PROJECTS clang;lld;llvm CACHE STRING "")
+set(LLVM_ENABLE_RUNTIMES compiler-rt;libcxx;libc CACHE STRING "")
+
+set(CLANG_DEFAULT_CXX_STDLIB libc++ CACHE STRING "")
+set(CLANG_DEFAULT_LINKER lld CACHE STRING "")
+set(CLANG_DEFAULT_RTLIB compiler-rt CACHE STRING "")
+
+set(LLVM_INSTALL_TOOLCHAIN_ONLY ON CACHE BOOL "")
+set(LLVM_TOOLCHAIN_TOOLS
+  llvm-ar
+  llvm-cov
+  llvm-objcopy
+  llvm-objdump
+  llvm-profdata
+  llvm-ranlib
+  llvm-readelf
+  llvm-readobj
+  llvm-size
+  llvm-strings
+  llvm-strip
+  llvm-symbolizer
+  CACHE STRING "")
+set(LLVM_DISTRIBUTION_COMPONENTS
+  builtins
+  clang
+  clang-resource-headers
+  lld
+  runtimes
+  ${LLVM_TOOLCHAIN_TOOLS}
+  CACHE STRING "")
+
+# TODO: Switch to newhdrgen for LLVM libc
+set(LLVM_LIBC_FULL_BUILD ON CACHE BOOL "")
+set(LIBC_HDRGEN_ONLY ON CACHE BOOL "")
+
+set(LLVM_BUILTIN_TARGETS armv8m.main-none-eabi;riscv32-unknown-elf CACHE STRING "")
+foreach(target ${LLVM_BUILTIN_TARGETS})
+  set(BUILTINS_${target}_CMAKE_SYSTEM_NAME Generic CACHE STRING "")
+  set(BUILTINS_${target}_CMAKE_BUILD_TYPE MinSizeRel CACHE STRING "")
+  set(BUILTINS_${target}_COMPILER_RT_BAREMETAL_BUILD ON CACHE BOOL "")
+endforeach()
+
+set(BUILTINS_armv8m.main-none-eabi_CMAKE_SYSTEM_PROCESSOR arm CACHE STRING "")
+set(BUILTINS_riscv32-unknown-elf_CMAKE_SYSTEM_PROCESSOR RISCV CACHE STRING "")
+foreach(lang C;CXX;ASM)
+  set(BUILTINS_armv8m.main-none-eabi_CMAKE_${lang}_FLAGS "-march=armv8m.main+fp+dsp -mcpu=cortex-m33 -mfloat-abi=softfp" CACHE STRING "")
+  set(BUILTINS_riscv32-unknown-elf_CMAKE_${lang}_FLAGS "-march=rv32imac_zicsr_zifencei_zba_zbb_zbs_zbkb -mabi=ilp32" CACHE STRING "")
+endforeach()
+
+set(LLVM_RUNTIME_TARGETS armv8m.main-none-eabi;riscv32-unknown-elf CACHE STRING "")
+foreach(target ${LLVM_RUNTIME_TARGETS})
+  set(RUNTIMES_${target}_CMAKE_SYSTEM_NAME Generic CACHE STRING "")
+  set(RUNTIMES_${target}_CMAKE_BUILD_TYPE MinSizeRel CACHE STRING "")
+  set(RUNTIMES_${target}_CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY CACHE STRING "")
+  set(RUNTIMES_${target}_LLVM_ENABLE_RUNTIMES libc;libcxx CACHE STRING "")
+  set(RUNTIMES_${target}_LLVM_ENABLE_ASSERTIONS OFF CACHE BOOL "")
+  set(RUNTIMES_${target}_LLVM_INCLUDE_TESTS OFF CACHE BOOL "")
+  set(RUNTIMES_${target}_LLVM_LIBC_FULL_BUILD ON CACHE BOOL "")
+  set(RUNTIMES_${target}_LIBC_ENABLE_USE_BY_CLANG ON CACHE BOOL "")
+  # TODO: Switch to newhdrgen for LLVM libc
+  set(RUNTIMES_${target}_LIBC_USE_NEW_HEADER_GEN OFF CACHE BOOL "")
+  set(RUNTIMES_${target}_LIBCXX_CXX_ABI none CACHE STRING "")
+  set(RUNTIMES_${target}_LIBCXX_LIBC llvm-libc CACHE STRING "")
+  set(RUNTIMES_${target}_LIBCXX_ENABLE_SHARED OFF CACHE BOOL "")
+  set(RUNTIMES_${target}_LIBCXX_ENABLE_FILESYSTEM OFF CACHE BOOL "")
+  set(RUNTIMES_${target}_LIBCXX_ENABLE_RANDOM_DEVICE OFF CACHE BOOL "")
+  set(RUNTIMES_${target}_LIBCXX_ENABLE_LOCALIZATION OFF CACHE BOOL "")
+  set(RUNTIMES_${target}_LIBCXX_ENABLE_UNICODE OFF CACHE BOOL "")
+  set(RUNTIMES_${target}_LIBCXX_ENABLE_WIDE_CHARACTERS OFF CACHE BOOL "")
+  set(RUNTIMES_${target}_LIBCXX_ENABLE_EXCEPTIONS OFF CACHE BOOL "")
+  set(RUNTIMES_${target}_LIBCXX_ENABLE_RTTI OFF CACHE BOOL "")
+  set(RUNTIMES_${target}_LIBCXX_ENABLE_THREADS OFF CACHE BOOL "")
+  set(RUNTIMES_${target}_LIBCXX_ENABLE_MONOTONIC_CLOCK OFF CACHE BOOL "")
+  set(RUNTIMES_${target}_LIBCXX_USE_COMPILER_RT ON CACHE BOOL "")
+endforeach()
+
+set(RUNTIMES_armv8m.main-none-eabi_CMAKE_SYSTEM_PROCESSOR arm CACHE STRING "")
+set(RUNTIMES_riscv32-unknown-elf_CMAKE_SYSTEM_PROCESSOR RISCV CACHE STRING "")
+foreach(lang C;CXX;ASM)
+  # TODO: Use timespec_get instead of gettimeofday in libc++
+  # TODO: Use internal logging API instead of fprintf in libc++
+  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 "")
+  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 "")
+endforeach()

>From a3740834f2a4e767aa2c84b687057c7b65c237a5 Mon Sep 17 00:00:00 2001
From: Petr Hosek <phosek at google.com>
Date: Mon, 21 Oct 2024 23:41:40 -0700
Subject: [PATCH 2/2] Switch to newhdrgen for LLVM libc

---
 clang/cmake/caches/Pico.cmake | 6 ------
 1 file changed, 6 deletions(-)

diff --git a/clang/cmake/caches/Pico.cmake b/clang/cmake/caches/Pico.cmake
index b0cc357b5b658d..84e6920e165407 100644
--- a/clang/cmake/caches/Pico.cmake
+++ b/clang/cmake/caches/Pico.cmake
@@ -34,10 +34,6 @@ set(LLVM_DISTRIBUTION_COMPONENTS
   ${LLVM_TOOLCHAIN_TOOLS}
   CACHE STRING "")
 
-# TODO: Switch to newhdrgen for LLVM libc
-set(LLVM_LIBC_FULL_BUILD ON CACHE BOOL "")
-set(LIBC_HDRGEN_ONLY ON CACHE BOOL "")
-
 set(LLVM_BUILTIN_TARGETS armv8m.main-none-eabi;riscv32-unknown-elf CACHE STRING "")
 foreach(target ${LLVM_BUILTIN_TARGETS})
   set(BUILTINS_${target}_CMAKE_SYSTEM_NAME Generic CACHE STRING "")
@@ -62,8 +58,6 @@ foreach(target ${LLVM_RUNTIME_TARGETS})
   set(RUNTIMES_${target}_LLVM_INCLUDE_TESTS OFF CACHE BOOL "")
   set(RUNTIMES_${target}_LLVM_LIBC_FULL_BUILD ON CACHE BOOL "")
   set(RUNTIMES_${target}_LIBC_ENABLE_USE_BY_CLANG ON CACHE BOOL "")
-  # TODO: Switch to newhdrgen for LLVM libc
-  set(RUNTIMES_${target}_LIBC_USE_NEW_HEADER_GEN OFF CACHE BOOL "")
   set(RUNTIMES_${target}_LIBCXX_CXX_ABI none CACHE STRING "")
   set(RUNTIMES_${target}_LIBCXX_LIBC llvm-libc CACHE STRING "")
   set(RUNTIMES_${target}_LIBCXX_ENABLE_SHARED OFF CACHE BOOL "")



More information about the cfe-commits mailing list