https://github.com/statham-arm updated https://github.com/llvm/llvm-project/pull/179919
>From a3aea535529ca7ac6e090f62a7453075adb7bbb8 Mon Sep 17 00:00:00 2001 From: Simon Tatham <[email protected]> Date: Thu, 29 Jan 2026 14:21:23 +0000 Subject: [PATCH 1/2] [compiler-rt][ARM] cmake properties for complicated builtin sources In the builtins library, most functions have a portable C implementation (e.g. `mulsf3.c`), and platforms might provide an optimized assembler implementation (e.g. `arm/mulsf3.S`). The cmake script automatically excludes the C source file corresponding to each assembly source file it includes. Additionally, each source file name is automatically translated into a flag that lit tests can query, with a name like `librt_has_mulsf3`, to indicate that a function is available to be tested. In future commits I plan to introduce cases where a single .S file provides more than one function (so that they can share code easily), and therefore, must supersede more than one existing source file. I've introduced the `crt_supersedes` cmake property, which you can set on a .S file to name a list of .c files that it should supersede. Also, the `crt_provides` property can be set on any source file to indicate a list of functions it makes available for testing, in addition to the one implied by its name. --- compiler-rt/cmake/Modules/CompilerRTUtils.cmake | 12 ++++++++---- compiler-rt/test/builtins/CMakeLists.txt | 5 ++++- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/compiler-rt/cmake/Modules/CompilerRTUtils.cmake b/compiler-rt/cmake/Modules/CompilerRTUtils.cmake index cbd18d26c0b93..a09a870ed8384 100644 --- a/compiler-rt/cmake/Modules/CompilerRTUtils.cmake +++ b/compiler-rt/cmake/Modules/CompilerRTUtils.cmake @@ -450,10 +450,14 @@ function(filter_builtin_sources inout_var name) # and ensure that it is removed from the file list. get_filename_component(_name ${_file} NAME) string(REGEX REPLACE "\\.S$" ".c" _cname "${_name}") - if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/${_cname}") - message(STATUS "For ${name} builtins preferring ${_file} to ${_cname}") - list(REMOVE_ITEM intermediate ${_cname}) - endif() + get_property(_cnames SOURCE ${_file} PROPERTY crt_supersedes) + set(_cnames ${_cname} ${_cnames}) + foreach(_cname ${_cnames}) + if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/${_cname}") + message(STATUS "For ${name} builtins preferring ${_file} to ${_cname}") + list(REMOVE_ITEM intermediate ${_cname}) + endif() + endforeach() endif() endforeach() set(${inout_var} ${intermediate} PARENT_SCOPE) diff --git a/compiler-rt/test/builtins/CMakeLists.txt b/compiler-rt/test/builtins/CMakeLists.txt index 1d4e69602ee9f..9c7f404242f22 100644 --- a/compiler-rt/test/builtins/CMakeLists.txt +++ b/compiler-rt/test/builtins/CMakeLists.txt @@ -123,7 +123,10 @@ foreach(arch ${BUILTIN_TEST_ARCH}) # "hexagon/udivsi3.S" => "udivsi3" # "udivsi3.c" => "udivsi3" get_filename_component(FILE_NAME_FILTERED "${file_name}" NAME_WE) - list(APPEND BUILTINS_LIT_SOURCE_FEATURES "librt_has_${FILE_NAME_FILTERED}") + get_property(_also_provided SOURCE "${COMPILER_RT_SOURCE_DIR}/lib/builtins/${file_name}" DIRECTORY ${COMPILER_RT_SOURCE_DIR} PROPERTY crt_provides) + foreach(_function "${FILE_NAME_FILTERED}" ${_also_provided}) + list(APPEND BUILTINS_LIT_SOURCE_FEATURES "librt_has_${_function}") + endforeach() endforeach() string(TOUPPER ${arch} ARCH_UPPER_CASE) >From fea8e45575ab02aa0a0c76c85593da6edd5932f9 Mon Sep 17 00:00:00 2001 From: Simon Tatham <[email protected]> Date: Thu, 5 Feb 2026 17:08:24 +0000 Subject: [PATCH 2/2] Move property-setting into a function This is more concise at each call site, but more importantly, gives me a place to check `COMPILER_RT_BUILTINS_STANDALONE_BUILD`. --- compiler-rt/lib/builtins/CMakeLists.txt | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/compiler-rt/lib/builtins/CMakeLists.txt b/compiler-rt/lib/builtins/CMakeLists.txt index f43ef4743ff97..c1a0ffc0fe2da 100644 --- a/compiler-rt/lib/builtins/CMakeLists.txt +++ b/compiler-rt/lib/builtins/CMakeLists.txt @@ -57,6 +57,19 @@ if (COMPILER_RT_STANDALONE_BUILD) ON) endif() +function(set_special_properties source_file) + cmake_parse_arguments(ARG "" "SUPERSEDES;PROVIDES" "" ${ARGN}) + if(ARG_SUPERSEDES) + set_property(SOURCE ${source_file} + PROPERTY crt_supersedes ${ARG_SUPERSEDES}) + endif() + if(ARG_PROVIDES AND NOT COMPILER_RT_BUILTINS_STANDALONE_BUILD) + set_property(SOURCE ${source_file} + DIRECTORY ${COMPILER_RT_SOURCE_DIR} + PROPERTY crt_provides ${ARG_PROVIDES}) + endif() +endfunction() + include(builtin-config-ix) include(CMakeDependentOption) include(CMakePushCheckState) _______________________________________________ llvm-branch-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits
