Skip to content

Commit f1f1875

Browse files
[libc][cmake] reset COMPILE_DEFINITIONS (#77810)
While trying to enable -Werror (#74506), the 32b ARM build bot reported an error stemming from -Wshorten-64-to-32 related to usages of `off_t`. I failed to fix these properly in #77350 (the 32b ARM build is not a fullbuild) and #77396. It turns out, the preprocessor defines `-D_LARGEFILE_SOURCE` and `-D_FILE_OFFSET_BITS=64` were being set for llvmlibc when using the cmake build system. In particular, these preprocessor defines are feature test macros used by glibc, and which have effects no the corresponding ABI for types like `off_t` (for instance, should `off_t` be 32b or 64b on 32b targets). But who was setting these? Turns out that the use of add_compile_definitions in llvm/cmake/modules/HandleLLVMOptions.cmake was setting these (and more), which is then inherited by every subdirectory. While some of these defines maybe make sense for host builds, they do not make sense for libraries for the target. The full list of defines being set prior to this commit: - `-D_GNU_SOURCE` - `-D_FILE_OFFSET_BITS=64` - `-D_DEBUG` - `-D_GLIBCXX_ASSERTIONS` - `-D_LARGEFILE_SOURCE` - `-D_FILE_OFFSET_BITS=64` - `-D__STDC_CONSTANT_MACROS` - `-D__STDC_FORMAT_MACROS` - `-D__STDC_LIMIT_MACROS` If we desire any of the above, we should manually reset them. Fix this by resetting COMPILE_DEFINITIONS for the libc/ subdirectory. Side note: to debug 'directory properties' in cmake, you first need to use `get_directory_property` to fetch the corresponding value into a variable first, then that variable can be printed via `message`. Link: https://www.gnu.org/software/libc/manual/html_node/Feature-Test-Macros.html#index-_005fFILE_005fOFFSET_005fBITS Link: https://www.gnu.org/software/libc/manual/html_node/Feature-Test-Macros.html#index-_005fFILE_005fOFFSET_005fBITS Fixes: #77395
1 parent cbaadb1 commit f1f1875

File tree

1 file changed

+18
-4
lines changed

1 file changed

+18
-4
lines changed

libc/CMakeLists.txt

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,24 @@ endif()
77
include(${LLVM_COMMON_CMAKE_UTILS}/Modules/CMakePolicy.cmake
88
NO_POLICY_SCOPE)
99

10-
# `llvm-project/llvm/CMakeLists.txt` adds the following directive
11-
# `include_directories( ${LLVM_INCLUDE_DIR} ${LLVM_MAIN_INCLUDE_DIR})`
12-
# We undo it to be able to precisely control what is getting included.
13-
set_directory_properties(PROPERTIES INCLUDE_DIRECTORIES "")
10+
if (LIBC_CMAKE_VERBOSE_LOGGING)
11+
get_directory_property(LIBC_OLD_PREPROCESSOR_DEFS COMPILE_DEFINITIONS)
12+
foreach(OLD_DEF ${LIBC_OLD_PREPROCESSOR_DEFS})
13+
message(STATUS "Undefining ${OLD_DEF}")
14+
endforeach()
15+
endif()
16+
set_directory_properties(PROPERTIES
17+
# `llvm-project/llvm/CMakeLists.txt` adds the following directive
18+
# `include_directories( ${LLVM_INCLUDE_DIR} ${LLVM_MAIN_INCLUDE_DIR})` We
19+
# undo it to be able to precisely control what is getting included.
20+
INCLUDE_DIRECTORIES ""
21+
# `llvm/cmake/modules/HandleLLVMOptions.cmake` uses `add_compile_definitions`
22+
# to set a few preprocessor defines which we do not want.
23+
COMPILE_DEFINITIONS ""
24+
)
25+
if (CMAKE_BUILD_TYPE STREQUAL "Debug")
26+
add_definitions("-D_DEBUG")
27+
endif()
1428

1529
# Default to C++17
1630
set(CMAKE_CXX_STANDARD 17)

0 commit comments

Comments
 (0)