From ba4bd3f46e97b5637b16a0fa74b064fb3e6db8ff Mon Sep 17 00:00:00 2001 From: jeremyd2019 Date: Wed, 21 May 2025 22:14:13 -0700 Subject: [PATCH] [CMake] respect LLVMConfig.cmake's LLVM_DEFINITIONS in standalone builds (#138587) In #138329, _GNU_SOURCE was added for Cygwin, but when building Clang standalone against an installed LLVM this definition was not picked up, resulting in undefined strnlen. Follow the documentation in https://llvm.org/docs/CMake.html#embedding-llvm-in-your-project and add the LLVM_DEFINITIONS in standalone projects' cmakes. --- bolt/CMakeLists.txt | 4 ++++ clang/CMakeLists.txt | 4 ++++ flang/CMakeLists.txt | 5 +++++ lld/CMakeLists.txt | 4 ++++ lldb/cmake/modules/LLDBStandalone.cmake | 4 ++++ mlir/CMakeLists.txt | 5 +++++ polly/CMakeLists.txt | 5 +++++ 7 files changed, 31 insertions(+) diff --git a/bolt/CMakeLists.txt b/bolt/CMakeLists.txt index 52c796518ac0..5c7d51e1e398 100644 --- a/bolt/CMakeLists.txt +++ b/bolt/CMakeLists.txt @@ -46,6 +46,10 @@ if(BOLT_BUILT_STANDALONE) set(LLVM_RUNTIME_OUTPUT_INTDIR ${CMAKE_BINARY_DIR}/${CMAKE_CFG_INTDIR}/bin) set(LLVM_LIBRARY_OUTPUT_INTDIR ${CMAKE_BINARY_DIR}/${CMAKE_CFG_INTDIR}/lib${LLVM_LIBDIR_SUFFIX}) + separate_arguments(LLVM_DEFINITIONS_LIST NATIVE_COMMAND ${LLVM_DEFINITIONS}) + add_definitions(${LLVM_DEFINITIONS_LIST}) + list(APPEND CMAKE_REQUIRED_DEFINITIONS ${LLVM_DEFINITIONS_LIST}) + include(AddLLVM) include(TableGen) include_directories(${LLVM_INCLUDE_DIRS}) diff --git a/clang/CMakeLists.txt b/clang/CMakeLists.txt index f12712f55fb9..ab2ac9bc6b9a 100644 --- a/clang/CMakeLists.txt +++ b/clang/CMakeLists.txt @@ -68,6 +68,10 @@ if(CLANG_BUILT_STANDALONE) option(CLANG_ENABLE_BOOTSTRAP "Generate the clang bootstrap target" OFF) option(LLVM_ENABLE_LIBXML2 "Use libxml2 if available." ON) + separate_arguments(LLVM_DEFINITIONS_LIST NATIVE_COMMAND ${LLVM_DEFINITIONS}) + add_definitions(${LLVM_DEFINITIONS_LIST}) + list(APPEND CMAKE_REQUIRED_DEFINITIONS ${LLVM_DEFINITIONS_LIST}) + include(AddLLVM) include(TableGen) include(HandleLLVMOptions) diff --git a/flang/CMakeLists.txt b/flang/CMakeLists.txt index f358a93fdd79..56a96f590f0a 100644 --- a/flang/CMakeLists.txt +++ b/flang/CMakeLists.txt @@ -140,6 +140,11 @@ if (FLANG_STANDALONE_BUILD) if (NOT DEFINED LLVM_MAIN_SRC_DIR) set(LLVM_MAIN_SRC_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../llvm") endif() + + separate_arguments(LLVM_DEFINITIONS_LIST NATIVE_COMMAND ${LLVM_DEFINITIONS}) + add_definitions(${LLVM_DEFINITIONS_LIST}) + list(APPEND CMAKE_REQUIRED_DEFINITIONS ${LLVM_DEFINITIONS_LIST}) + include(AddLLVM) include(HandleLLVMOptions) include(VersionFromVCS) diff --git a/lld/CMakeLists.txt b/lld/CMakeLists.txt index 9b202cc5d489..80e25204a65e 100644 --- a/lld/CMakeLists.txt +++ b/lld/CMakeLists.txt @@ -39,6 +39,10 @@ if(LLD_BUILT_STANDALONE) set(LLVM_RUNTIME_OUTPUT_INTDIR ${CMAKE_BINARY_DIR}/${CMAKE_CFG_INTDIR}/bin) set(LLVM_LIBRARY_OUTPUT_INTDIR ${CMAKE_BINARY_DIR}/${CMAKE_CFG_INTDIR}/lib${LLVM_LIBDIR_SUFFIX}) + separate_arguments(LLVM_DEFINITIONS_LIST NATIVE_COMMAND ${LLVM_DEFINITIONS}) + add_definitions(${LLVM_DEFINITIONS_LIST}) + list(APPEND CMAKE_REQUIRED_DEFINITIONS ${LLVM_DEFINITIONS_LIST}) + include(AddLLVM) include(TableGen) include(HandleLLVMOptions) diff --git a/lldb/cmake/modules/LLDBStandalone.cmake b/lldb/cmake/modules/LLDBStandalone.cmake index c9367214848f..1a4cdbfbb1cc 100644 --- a/lldb/cmake/modules/LLDBStandalone.cmake +++ b/lldb/cmake/modules/LLDBStandalone.cmake @@ -85,6 +85,10 @@ endif() # CMake modules to be in that directory as well. list(APPEND CMAKE_MODULE_PATH "${LLVM_DIR}") +separate_arguments(LLVM_DEFINITIONS_LIST NATIVE_COMMAND ${LLVM_DEFINITIONS}) +add_definitions(${LLVM_DEFINITIONS_LIST}) +list(APPEND CMAKE_REQUIRED_DEFINITIONS ${LLVM_DEFINITIONS_LIST}) + include(AddLLVM) include(TableGen) include(HandleLLVMOptions) diff --git a/mlir/CMakeLists.txt b/mlir/CMakeLists.txt index 9e786154a2b4..daedc2be2258 100644 --- a/mlir/CMakeLists.txt +++ b/mlir/CMakeLists.txt @@ -21,6 +21,11 @@ set(CMAKE_CXX_STANDARD 17 CACHE STRING "C++ standard to conform to") if(MLIR_STANDALONE_BUILD) find_package(LLVM CONFIG REQUIRED) set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${LLVM_CMAKE_DIR}) + + separate_arguments(LLVM_DEFINITIONS_LIST NATIVE_COMMAND ${LLVM_DEFINITIONS}) + add_definitions(${LLVM_DEFINITIONS_LIST}) + list(APPEND CMAKE_REQUIRED_DEFINITIONS ${LLVM_DEFINITIONS_LIST}) + include(HandleLLVMOptions) include(AddLLVM) include(TableGen) diff --git a/polly/CMakeLists.txt b/polly/CMakeLists.txt index c3232752d307..52d1be6fe295 100644 --- a/polly/CMakeLists.txt +++ b/polly/CMakeLists.txt @@ -13,6 +13,11 @@ if(POLLY_STANDALONE_BUILD) # Where is LLVM installed? find_package(LLVM CONFIG REQUIRED) set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${LLVM_CMAKE_DIR}) + + separate_arguments(LLVM_DEFINITIONS_LIST NATIVE_COMMAND ${LLVM_DEFINITIONS}) + add_definitions(${LLVM_DEFINITIONS_LIST}) + list(APPEND CMAKE_REQUIRED_DEFINITIONS ${LLVM_DEFINITIONS_LIST}) + include(HandleLLVMOptions) include(AddLLVM)