[libc-commits] [libc] [llvm] [libc] armv8m hard float build check (PR #214090)
Prabhu Rajasekaran via libc-commits
libc-commits at lists.llvm.org
Wed Aug 5 10:50:41 PDT 2026
https://github.com/Prabhuk updated https://github.com/llvm/llvm-project/pull/214090
>From d3ae16e1f805a0dfadbf694864f9294a311a3c82 Mon Sep 17 00:00:00 2001
From: prabhukr <prabhukr at google.com>
Date: Mon, 3 Aug 2026 10:08:16 -0700
Subject: [PATCH 1/4] [libc] armv8m hard float build check
Our premerge checks were testing the softfp build for armv8m. Adding
also a hard float ABI check for this target to increase build check
coverage.
---
.github/workflows/libc-fullbuild-tests.yml | 15 ++++++++++++---
.../cmake/caches/armv8m.main-none-eabi-hard.cmake | 8 ++++++++
.../caches/armv8m.main-none-eabi-softfp.cmake | 8 ++++++++
libc/cmake/caches/armv8m.main-none-eabi.cmake | 9 +--------
4 files changed, 29 insertions(+), 11 deletions(-)
create mode 100644 libc/cmake/caches/armv8m.main-none-eabi-hard.cmake
create mode 100644 libc/cmake/caches/armv8m.main-none-eabi-softfp.cmake
diff --git a/.github/workflows/libc-fullbuild-tests.yml b/.github/workflows/libc-fullbuild-tests.yml
index 03b73cb242b57..8f5aee19dc999 100644
--- a/.github/workflows/libc-fullbuild-tests.yml
+++ b/.github/workflows/libc-fullbuild-tests.yml
@@ -88,12 +88,21 @@ jobs:
cpp_compiler: clang++-23
target: armv7em-none-eabi
testing: SKIP
- - name: baremetal-armv8m
+ - name: baremetal-armv8m-softfp
os: ubuntu-24.04
build_type: MinSizeRel
c_compiler: clang-23
cpp_compiler: clang++-23
target: armv8m.main-none-eabi
+ cache_file: armv8m.main-none-eabi-softfp
+ testing: SKIP
+ - name: baremetal-armv8m-hard
+ os: ubuntu-24.04
+ build_type: MinSizeRel
+ c_compiler: clang-23
+ cpp_compiler: clang++-23
+ target: armv8m.main-none-eabi
+ cache_file: armv8m.main-none-eabi-hard
testing: SKIP
- name: baremetal-armv8.1m
os: ubuntu-24.04
@@ -134,7 +143,7 @@ jobs:
uses: hendrikmuhs/ccache-action at d62db5f07c26379fc4b4e0916f098a92573c3b03 # v1.2.23
with:
max-size: 1G
- key: libc_fullbuild_v3_${{ matrix.target }}_${{ matrix.build_type }}_${{ matrix.c_compiler }}
+ key: libc_fullbuild_v3_${{ matrix.name }}_${{ matrix.build_type }}_${{ matrix.c_compiler }}
variant: sccache
# Configure libc fullbuild with scudo.
@@ -179,7 +188,7 @@ jobs:
case "${{ matrix.name }}" in
baremetal-* )
cmake $CMAKE_FLAGS \
- -C /__w/llvm-project/llvm-project/libc/cmake/caches/${{ matrix.target }}.cmake
+ -C /__w/llvm-project/llvm-project/libc/cmake/caches/${{ matrix.cache_file || matrix.target }}.cmake
;;
*-gpu | uefi-* )
cmake \
diff --git a/libc/cmake/caches/armv8m.main-none-eabi-hard.cmake b/libc/cmake/caches/armv8m.main-none-eabi-hard.cmake
new file mode 100644
index 0000000000000..d0312cabb67eb
--- /dev/null
+++ b/libc/cmake/caches/armv8m.main-none-eabi-hard.cmake
@@ -0,0 +1,8 @@
+set(CMAKE_SYSTEM_PROCESSOR arm CACHE STRING "")
+set(RUNTIMES_TARGET_TRIPLE "armv8m.main-none-eabi" CACHE STRING "")
+
+foreach(lang C;CXX;ASM)
+ set(CMAKE_${lang}_FLAGS "-mfloat-abi=hard -march=armv8m.main+fp+dsp -mcpu=cortex-m33" CACHE STRING "")
+endforeach()
+
+include(${CMAKE_CURRENT_LIST_DIR}/baremetal_common.cmake)
diff --git a/libc/cmake/caches/armv8m.main-none-eabi-softfp.cmake b/libc/cmake/caches/armv8m.main-none-eabi-softfp.cmake
new file mode 100644
index 0000000000000..4b69f6a822e71
--- /dev/null
+++ b/libc/cmake/caches/armv8m.main-none-eabi-softfp.cmake
@@ -0,0 +1,8 @@
+set(CMAKE_SYSTEM_PROCESSOR arm CACHE STRING "")
+set(RUNTIMES_TARGET_TRIPLE "armv8m.main-none-eabi" CACHE STRING "")
+
+foreach(lang C;CXX;ASM)
+ set(CMAKE_${lang}_FLAGS "-mfloat-abi=softfp -march=armv8m.main+fp+dsp -mcpu=cortex-m33" CACHE STRING "")
+endforeach()
+
+include(${CMAKE_CURRENT_LIST_DIR}/baremetal_common.cmake)
diff --git a/libc/cmake/caches/armv8m.main-none-eabi.cmake b/libc/cmake/caches/armv8m.main-none-eabi.cmake
index 4b69f6a822e71..46e9f24eb51d1 100644
--- a/libc/cmake/caches/armv8m.main-none-eabi.cmake
+++ b/libc/cmake/caches/armv8m.main-none-eabi.cmake
@@ -1,8 +1 @@
-set(CMAKE_SYSTEM_PROCESSOR arm CACHE STRING "")
-set(RUNTIMES_TARGET_TRIPLE "armv8m.main-none-eabi" CACHE STRING "")
-
-foreach(lang C;CXX;ASM)
- set(CMAKE_${lang}_FLAGS "-mfloat-abi=softfp -march=armv8m.main+fp+dsp -mcpu=cortex-m33" CACHE STRING "")
-endforeach()
-
-include(${CMAKE_CURRENT_LIST_DIR}/baremetal_common.cmake)
+include(${CMAKE_CURRENT_LIST_DIR}/armv8m.main-none-eabi-softfp.cmake)
>From a5a9446eaf6615ce3c41c4f2c0996b40681b2e1e Mon Sep 17 00:00:00 2001
From: prabhukr <prabhukr at google.com>
Date: Tue, 4 Aug 2026 15:54:22 -0700
Subject: [PATCH 2/4] Only set float abi from hard/soft cmake files.
---
libc/cmake/caches/armv8m.main-none-eabi-hard.cmake | 10 ++--------
.../cmake/caches/armv8m.main-none-eabi-softfp.cmake | 10 ++--------
libc/cmake/caches/armv8m.main-none-eabi.cmake | 13 ++++++++++++-
3 files changed, 16 insertions(+), 17 deletions(-)
diff --git a/libc/cmake/caches/armv8m.main-none-eabi-hard.cmake b/libc/cmake/caches/armv8m.main-none-eabi-hard.cmake
index d0312cabb67eb..b83cb66b050b0 100644
--- a/libc/cmake/caches/armv8m.main-none-eabi-hard.cmake
+++ b/libc/cmake/caches/armv8m.main-none-eabi-hard.cmake
@@ -1,8 +1,2 @@
-set(CMAKE_SYSTEM_PROCESSOR arm CACHE STRING "")
-set(RUNTIMES_TARGET_TRIPLE "armv8m.main-none-eabi" CACHE STRING "")
-
-foreach(lang C;CXX;ASM)
- set(CMAKE_${lang}_FLAGS "-mfloat-abi=hard -march=armv8m.main+fp+dsp -mcpu=cortex-m33" CACHE STRING "")
-endforeach()
-
-include(${CMAKE_CURRENT_LIST_DIR}/baremetal_common.cmake)
+set(LIBC_FLOAT_ABI "hard")
+include(${CMAKE_CURRENT_LIST_DIR}/armv8m.main-none-eabi.cmake)
diff --git a/libc/cmake/caches/armv8m.main-none-eabi-softfp.cmake b/libc/cmake/caches/armv8m.main-none-eabi-softfp.cmake
index 4b69f6a822e71..6eb1aafef7bdd 100644
--- a/libc/cmake/caches/armv8m.main-none-eabi-softfp.cmake
+++ b/libc/cmake/caches/armv8m.main-none-eabi-softfp.cmake
@@ -1,8 +1,2 @@
-set(CMAKE_SYSTEM_PROCESSOR arm CACHE STRING "")
-set(RUNTIMES_TARGET_TRIPLE "armv8m.main-none-eabi" CACHE STRING "")
-
-foreach(lang C;CXX;ASM)
- set(CMAKE_${lang}_FLAGS "-mfloat-abi=softfp -march=armv8m.main+fp+dsp -mcpu=cortex-m33" CACHE STRING "")
-endforeach()
-
-include(${CMAKE_CURRENT_LIST_DIR}/baremetal_common.cmake)
+set(LIBC_FLOAT_ABI "softfp")
+include(${CMAKE_CURRENT_LIST_DIR}/armv8m.main-none-eabi.cmake)
diff --git a/libc/cmake/caches/armv8m.main-none-eabi.cmake b/libc/cmake/caches/armv8m.main-none-eabi.cmake
index 46e9f24eb51d1..948f6321ab98c 100644
--- a/libc/cmake/caches/armv8m.main-none-eabi.cmake
+++ b/libc/cmake/caches/armv8m.main-none-eabi.cmake
@@ -1 +1,12 @@
-include(${CMAKE_CURRENT_LIST_DIR}/armv8m.main-none-eabi-softfp.cmake)
+set(CMAKE_SYSTEM_PROCESSOR arm CACHE STRING "")
+set(RUNTIMES_TARGET_TRIPLE "armv8m.main-none-eabi" CACHE STRING "")
+
+if(NOT DEFINED LIBC_FLOAT_ABI)
+ set(LIBC_FLOAT_ABI "softfp")
+endif()
+
+foreach(lang C;CXX;ASM)
+ set(CMAKE_${lang}_FLAGS "-mfloat-abi=${LIBC_FLOAT_ABI} -march=armv8m.main+fp+dsp -mcpu=cortex-m33" CACHE STRING "")
+endforeach()
+
+include(${CMAKE_CURRENT_LIST_DIR}/baremetal_common.cmake)
>From 87d7851ec2ec28f419d72185a5029e8c9d6dbd14 Mon Sep 17 00:00:00 2001
From: prabhukr <prabhukr at google.com>
Date: Wed, 5 Aug 2026 10:47:05 -0700
Subject: [PATCH 3/4] Use hf suffix in target triple to simplify this change.
---
.github/workflows/libc-fullbuild-tests.yml | 6 ++----
libc/cmake/caches/armv8m.main-none-eabi-hard.cmake | 2 --
libc/cmake/caches/armv8m.main-none-eabi-softfp.cmake | 2 --
libc/cmake/caches/armv8m.main-none-eabi.cmake | 6 +-----
4 files changed, 3 insertions(+), 13 deletions(-)
delete mode 100644 libc/cmake/caches/armv8m.main-none-eabi-hard.cmake
delete mode 100644 libc/cmake/caches/armv8m.main-none-eabi-softfp.cmake
diff --git a/.github/workflows/libc-fullbuild-tests.yml b/.github/workflows/libc-fullbuild-tests.yml
index 8f5aee19dc999..e5b6d0c8e4f3c 100644
--- a/.github/workflows/libc-fullbuild-tests.yml
+++ b/.github/workflows/libc-fullbuild-tests.yml
@@ -94,15 +94,13 @@ jobs:
c_compiler: clang-23
cpp_compiler: clang++-23
target: armv8m.main-none-eabi
- cache_file: armv8m.main-none-eabi-softfp
testing: SKIP
- name: baremetal-armv8m-hard
os: ubuntu-24.04
build_type: MinSizeRel
c_compiler: clang-23
cpp_compiler: clang++-23
- target: armv8m.main-none-eabi
- cache_file: armv8m.main-none-eabi-hard
+ target: armv8m.main-none-eabihf
testing: SKIP
- name: baremetal-armv8.1m
os: ubuntu-24.04
@@ -188,7 +186,7 @@ jobs:
case "${{ matrix.name }}" in
baremetal-* )
cmake $CMAKE_FLAGS \
- -C /__w/llvm-project/llvm-project/libc/cmake/caches/${{ matrix.cache_file || matrix.target }}.cmake
+ -C /__w/llvm-project/llvm-project/libc/cmake/caches/${{ matrix.target }}.cmake
;;
*-gpu | uefi-* )
cmake \
diff --git a/libc/cmake/caches/armv8m.main-none-eabi-hard.cmake b/libc/cmake/caches/armv8m.main-none-eabi-hard.cmake
deleted file mode 100644
index b83cb66b050b0..0000000000000
--- a/libc/cmake/caches/armv8m.main-none-eabi-hard.cmake
+++ /dev/null
@@ -1,2 +0,0 @@
-set(LIBC_FLOAT_ABI "hard")
-include(${CMAKE_CURRENT_LIST_DIR}/armv8m.main-none-eabi.cmake)
diff --git a/libc/cmake/caches/armv8m.main-none-eabi-softfp.cmake b/libc/cmake/caches/armv8m.main-none-eabi-softfp.cmake
deleted file mode 100644
index 6eb1aafef7bdd..0000000000000
--- a/libc/cmake/caches/armv8m.main-none-eabi-softfp.cmake
+++ /dev/null
@@ -1,2 +0,0 @@
-set(LIBC_FLOAT_ABI "softfp")
-include(${CMAKE_CURRENT_LIST_DIR}/armv8m.main-none-eabi.cmake)
diff --git a/libc/cmake/caches/armv8m.main-none-eabi.cmake b/libc/cmake/caches/armv8m.main-none-eabi.cmake
index 948f6321ab98c..4b69f6a822e71 100644
--- a/libc/cmake/caches/armv8m.main-none-eabi.cmake
+++ b/libc/cmake/caches/armv8m.main-none-eabi.cmake
@@ -1,12 +1,8 @@
set(CMAKE_SYSTEM_PROCESSOR arm CACHE STRING "")
set(RUNTIMES_TARGET_TRIPLE "armv8m.main-none-eabi" CACHE STRING "")
-if(NOT DEFINED LIBC_FLOAT_ABI)
- set(LIBC_FLOAT_ABI "softfp")
-endif()
-
foreach(lang C;CXX;ASM)
- set(CMAKE_${lang}_FLAGS "-mfloat-abi=${LIBC_FLOAT_ABI} -march=armv8m.main+fp+dsp -mcpu=cortex-m33" CACHE STRING "")
+ set(CMAKE_${lang}_FLAGS "-mfloat-abi=softfp -march=armv8m.main+fp+dsp -mcpu=cortex-m33" CACHE STRING "")
endforeach()
include(${CMAKE_CURRENT_LIST_DIR}/baremetal_common.cmake)
>From 95bf0236556c06695bdbec0626574bc063b287a1 Mon Sep 17 00:00:00 2001
From: prabhukr <prabhukr at google.com>
Date: Wed, 5 Aug 2026 10:50:17 -0700
Subject: [PATCH 4/4] Add the hf cache file
---
libc/cmake/caches/armv8m.main-none-eabihf.cmake | 8 ++++++++
1 file changed, 8 insertions(+)
create mode 100644 libc/cmake/caches/armv8m.main-none-eabihf.cmake
diff --git a/libc/cmake/caches/armv8m.main-none-eabihf.cmake b/libc/cmake/caches/armv8m.main-none-eabihf.cmake
new file mode 100644
index 0000000000000..46c71dedb0c3a
--- /dev/null
+++ b/libc/cmake/caches/armv8m.main-none-eabihf.cmake
@@ -0,0 +1,8 @@
+set(CMAKE_SYSTEM_PROCESSOR arm CACHE STRING "")
+set(RUNTIMES_TARGET_TRIPLE "armv8m.main-none-eabihf" CACHE STRING "")
+
+foreach(lang C;CXX;ASM)
+ set(CMAKE_${lang}_FLAGS "-mfloat-abi=hard -march=armv8m.main+fp+dsp -mcpu=cortex-m33" CACHE STRING "")
+endforeach()
+
+include(${CMAKE_CURRENT_LIST_DIR}/baremetal_common.cmake)
More information about the libc-commits
mailing list