https://github.com/aganea updated https://github.com/llvm/llvm-project/pull/191552
>From 9881ee16b756ac64507de5e70edbc2ca939813df Mon Sep 17 00:00:00 2001 From: Alexandre Ganea <[email protected]> Date: Fri, 10 Apr 2026 14:48:38 -0400 Subject: [PATCH 1/2] [cmake] Fix clang-cl PCH mismatches in static builds With precompiled headers enabled, targets that define macros differently from the PCH built for LLVMSupport (or that gain macros after PCH setup) trigger clang-cl warnings and unreliable builds: warning: definition of macro 'LLVM_BUILD_STATIC' does not match definition in precompiled header [-Wclang-cl-pch] Similar mismatches were reported for: - CLANG_BUILD_STATIC (Clang static builds on Windows) - _ENABLE_EXTENDED_ALIGNED_STORAGE (LLDB directory-level definitions) - MLIR_INCLUDE_TESTS, FLANG_INCLUDE_TESTS (including DEF=1 forms) Object libraries defined LLVM_BUILD_STATIC after llvm_update_pch(), so the PCH did not see the macro. Executables hit the same issue when LLVM_BUILD_STATIC was applied after compile flags / PCH resolution. MLIRNVVMTarget adds target compile definitions such as MLIR_NVVM_EMBED_LIBDEVICE and __DEFAULT_CUDATOOLKIT_PATH__ that conflict with a reused PCH: warning: definition of macro 'MLIR_NVVM_EMBED_LIBDEVICE' does not match ... warning: definition of macro '__DEFAULT_CUDATOOLKIT_PATH__' does not match ... This is an effort to build the Windows LLVM installer error- and warning-free. I used llvm/utils/release/build_llvm_release.bat for that purpose. --- clang/cmake/modules/AddClang.cmake | 9 ++++- clang/lib/Testing/CMakeLists.txt | 4 ++ flang/cmake/modules/AddFlang.cmake | 8 +++- llvm/cmake/modules/AddLLVM.cmake | 57 +++++++++++++++++++++++++---- mlir/lib/Target/LLVM/CMakeLists.txt | 1 + 5 files changed, 69 insertions(+), 10 deletions(-) diff --git a/clang/cmake/modules/AddClang.cmake b/clang/cmake/modules/AddClang.cmake index e2112d7c326e2..09c62c44fc94b 100644 --- a/clang/cmake/modules/AddClang.cmake +++ b/clang/cmake/modules/AddClang.cmake @@ -106,7 +106,14 @@ macro(add_clang_library name) endif() set_property(GLOBAL APPEND PROPERTY CLANG_STATIC_LIBS ${name}) endif() - llvm_add_library(${name} ${LIBTYPE} ${ARG_UNPARSED_ARGUMENTS} ${srcs}) + # CLANG_BUILD_STATIC is added after llvm_add_library, but it changes the + # expansion of CLANG_ABI visibility macros, causing a PCH mismatch with + # libraries that were built without it. Disable PCH reuse in that case. + set(clang_pch_reuse) + if((WIN32 AND NOT MINGW) AND NOT CLANG_LINK_CLANG_DYLIB) + set(clang_pch_reuse DISABLE_PCH_REUSE) + endif() + llvm_add_library(${name} ${LIBTYPE} ${clang_pch_reuse} ${ARG_UNPARSED_ARGUMENTS} ${srcs}) if((WIN32 AND NOT MINGW) AND NOT CLANG_LINK_CLANG_DYLIB) # Make sure all consumers also turn off visibility macros so they're not diff --git a/clang/lib/Testing/CMakeLists.txt b/clang/lib/Testing/CMakeLists.txt index f4c99413d6dbf..9aeeb43e0079f 100644 --- a/clang/lib/Testing/CMakeLists.txt +++ b/clang/lib/Testing/CMakeLists.txt @@ -4,11 +4,15 @@ set(EXCLUDE_FROM_ALL ON) # Not add_clang_library: this is not part of clang's public library interface. # Unit tests should depend on this with target_link_libraries(), rather # than with clang_target_link_libraries(). +# +# DISABLE_PCH_REUSE: clang_target_link_libraries below propagates +# CLANG_BUILD_STATIC from Clang libraries, which conflicts with the PCH. add_llvm_library(clangTesting CommandLineArgs.cpp TestAST.cpp BUILDTREE_ONLY + DISABLE_PCH_REUSE LINK_COMPONENTS MC diff --git a/flang/cmake/modules/AddFlang.cmake b/flang/cmake/modules/AddFlang.cmake index ca233103ccdbe..29ae17afe1144 100644 --- a/flang/cmake/modules/AddFlang.cmake +++ b/flang/cmake/modules/AddFlang.cmake @@ -63,7 +63,13 @@ function(add_flang_library name) # Let llvm_add_library decide, taking BUILD_SHARED_LIBS into account. set(LIBTYPE) endif() - llvm_add_library(${name} ${LIBTYPE} ${ARG_UNPARSED_ARGUMENTS} ${srcs}) + # Clang libraries propagate CLANG_BUILD_STATIC as a PUBLIC definition on + # Windows static builds, which conflicts with the PCH from LLVM libraries. + set(_flang_pch_reuse) + if(ARG_CLANG_LIBS AND (WIN32 AND NOT MINGW) AND NOT CLANG_LINK_CLANG_DYLIB) + set(_flang_pch_reuse DISABLE_PCH_REUSE) + endif() + llvm_add_library(${name} ${LIBTYPE} ${_flang_pch_reuse} ${ARG_UNPARSED_ARGUMENTS} ${srcs}) clang_target_link_libraries(${name} PRIVATE ${ARG_CLANG_LIBS}) if (ARG_MLIR_LIBS) diff --git a/llvm/cmake/modules/AddLLVM.cmake b/llvm/cmake/modules/AddLLVM.cmake index 0730ba2f529ed..9efe89725ef20 100644 --- a/llvm/cmake/modules/AddLLVM.cmake +++ b/llvm/cmake/modules/AddLLVM.cmake @@ -107,6 +107,41 @@ function(llvm_update_pch name) set(ARG_DISABLE_PCH_REUSE ON) endif() + # Certain compile definitions change macro expansion in ways that conflict + # with a reused PCH (e.g. visibility macros, MSVC STL config, test-only + # code guards). Collect both target-level and directory-level definitions + # and disable PCH reuse when any of these are present but absent from the + # PCH source. Definitions may appear as "FOO" or "FOO=value". + set(_pch_conflict_defs + LLVM_BUILD_STATIC CLANG_BUILD_STATIC + _ENABLE_EXTENDED_ALIGNED_STORAGE + MLIR_INCLUDE_TESTS FLANG_INCLUDE_TESTS) + get_target_property(target_defs ${name} COMPILE_DEFINITIONS) + get_directory_property(dir_defs COMPILE_DEFINITIONS) + set(all_defs) + if(target_defs) + list(APPEND all_defs ${target_defs}) + endif() + if(dir_defs) + list(APPEND all_defs ${dir_defs}) + endif() + foreach(def ${_pch_conflict_defs}) + if(def IN_LIST all_defs) + set(ARG_DISABLE_PCH_REUSE ON) + break() + endif() + # Also match "DEF=value" forms (e.g. FLANG_INCLUDE_TESTS=1). + foreach(actual_def ${all_defs}) + if(actual_def MATCHES "^${def}=") + set(ARG_DISABLE_PCH_REUSE ON) + break() + endif() + endforeach() + if(ARG_DISABLE_PCH_REUSE) + break() + endif() + endforeach() + # Find PCH with highest priority from dependencies. We reuse the first PCH # with the highest priority. If the target has its own set of PCH, we give it # a higher priority so that dependents will prefer the new PCH. We don't do @@ -637,6 +672,9 @@ function(llvm_add_library name) ${ALL_FILES} ) llvm_update_compile_flags(${obj_name}) + if(ARG_DISABLE_LLVM_LINK_LLVM_DYLIB) + target_compile_definitions(${obj_name} PRIVATE LLVM_BUILD_STATIC) + endif() llvm_update_pch(${obj_name}) if(CMAKE_GENERATOR STREQUAL "Xcode") set(DUMMY_FILE ${CMAKE_CURRENT_BINARY_DIR}/Dummy.c) @@ -683,10 +721,6 @@ function(llvm_add_library name) endif() endforeach() endif() - - if(ARG_DISABLE_LLVM_LINK_LLVM_DYLIB) - target_compile_definitions(${obj_name} PRIVATE LLVM_BUILD_STATIC) - endif() endif() if(ARG_SHARED AND ARG_STATIC) @@ -772,6 +806,9 @@ function(llvm_add_library name) # $<TARGET_OBJECTS> doesn't require compile flags. if(NOT obj_name) llvm_update_compile_flags(${name}) + if(ARG_DISABLE_LLVM_LINK_LLVM_DYLIB) + target_compile_definitions(${name} PRIVATE LLVM_BUILD_STATIC) + endif() llvm_update_pch(${name}) else() get_target_property(lib_disable_pch ${obj_name} DISABLE_PRECOMPILE_HEADERS) @@ -1188,6 +1225,14 @@ macro(add_llvm_executable name) set(ARG_DISABLE_PCH_REUSE ON) endif() + # Executables in static builds get LLVM_BUILD_STATIC defined, but the PCH + # from LLVM component libraries does not have it. This macro changes the + # expansion of LLVM_ABI and similar visibility macros, causing a PCH + # mismatch that clang-cl warns about (-Wclang-cl-pch). + if(ARG_DISABLE_LLVM_LINK_LLVM_DYLIB OR NOT LLVM_LINK_LLVM_DYLIB) + target_compile_definitions(${name} PRIVATE LLVM_BUILD_STATIC) + endif() + # $<TARGET_OBJECTS> doesn't require compile flags. if(NOT LLVM_ENABLE_OBJLIB) llvm_update_compile_flags(${name}) @@ -1265,10 +1310,6 @@ macro(add_llvm_executable name) export_executable_symbols(${name}) endif() - if(ARG_DISABLE_LLVM_LINK_LLVM_DYLIB OR NOT LLVM_LINK_LLVM_DYLIB) - target_compile_definitions(${name} PRIVATE LLVM_BUILD_STATIC) - endif() - if(LLVM_BUILD_LLVM_DYLIB_VIS AND NOT LLVM_DYLIB_EXPORT_INLINES AND MSVC AND CMAKE_CXX_COMPILER_ID MATCHES Clang) # This has to match how the libraries the executable is linked to are built or there be linker errors. diff --git a/mlir/lib/Target/LLVM/CMakeLists.txt b/mlir/lib/Target/LLVM/CMakeLists.txt index 94660e231888b..f98c65bd2acbb 100644 --- a/mlir/lib/Target/LLVM/CMakeLists.txt +++ b/mlir/lib/Target/LLVM/CMakeLists.txt @@ -34,6 +34,7 @@ add_mlir_dialect_library(MLIRNVVMTarget NVVM/Target.cpp OBJECT + DISABLE_PCH_REUSE ADDITIONAL_HEADER_DIRS ${MLIR_MAIN_INCLUDE_DIR}/mlir/Dialect/LLVMIR >From d2a5cdc71220eeb3255f1851253a157e9c339130 Mon Sep 17 00:00:00 2001 From: Alexandre Ganea <[email protected]> Date: Tue, 14 Apr 2026 09:05:16 -0400 Subject: [PATCH 2/2] Narrow macros to improve PCH reusage --- clang/cmake/modules/AddClang.cmake | 9 +--- clang/lib/Testing/CMakeLists.txt | 4 -- clang/tools/libclang/CMakeLists.txt | 7 +++ flang/CMakeLists.txt | 4 -- flang/cmake/modules/AddFlang.cmake | 8 +-- flang/tools/fir-opt/CMakeLists.txt | 3 ++ lldb/CMakeLists.txt | 1 - llvm/cmake/modules/AddLLVM.cmake | 59 ++++++++-------------- llvm/cmake/modules/HandleLLVMOptions.cmake | 10 ++++ llvm/tools/llvm-config/CMakeLists.txt | 3 +- mlir/CMakeLists.txt | 1 - mlir/tools/mlir-lsp-server/CMakeLists.txt | 3 ++ mlir/tools/mlir-opt/CMakeLists.txt | 4 ++ mlir/tools/mlir-query/CMakeLists.txt | 3 ++ mlir/tools/mlir-reduce/CMakeLists.txt | 3 ++ mlir/tools/mlir-translate/CMakeLists.txt | 3 ++ 16 files changed, 60 insertions(+), 65 deletions(-) diff --git a/clang/cmake/modules/AddClang.cmake b/clang/cmake/modules/AddClang.cmake index 09c62c44fc94b..e2112d7c326e2 100644 --- a/clang/cmake/modules/AddClang.cmake +++ b/clang/cmake/modules/AddClang.cmake @@ -106,14 +106,7 @@ macro(add_clang_library name) endif() set_property(GLOBAL APPEND PROPERTY CLANG_STATIC_LIBS ${name}) endif() - # CLANG_BUILD_STATIC is added after llvm_add_library, but it changes the - # expansion of CLANG_ABI visibility macros, causing a PCH mismatch with - # libraries that were built without it. Disable PCH reuse in that case. - set(clang_pch_reuse) - if((WIN32 AND NOT MINGW) AND NOT CLANG_LINK_CLANG_DYLIB) - set(clang_pch_reuse DISABLE_PCH_REUSE) - endif() - llvm_add_library(${name} ${LIBTYPE} ${clang_pch_reuse} ${ARG_UNPARSED_ARGUMENTS} ${srcs}) + llvm_add_library(${name} ${LIBTYPE} ${ARG_UNPARSED_ARGUMENTS} ${srcs}) if((WIN32 AND NOT MINGW) AND NOT CLANG_LINK_CLANG_DYLIB) # Make sure all consumers also turn off visibility macros so they're not diff --git a/clang/lib/Testing/CMakeLists.txt b/clang/lib/Testing/CMakeLists.txt index 9aeeb43e0079f..f4c99413d6dbf 100644 --- a/clang/lib/Testing/CMakeLists.txt +++ b/clang/lib/Testing/CMakeLists.txt @@ -4,15 +4,11 @@ set(EXCLUDE_FROM_ALL ON) # Not add_clang_library: this is not part of clang's public library interface. # Unit tests should depend on this with target_link_libraries(), rather # than with clang_target_link_libraries(). -# -# DISABLE_PCH_REUSE: clang_target_link_libraries below propagates -# CLANG_BUILD_STATIC from Clang libraries, which conflicts with the PCH. add_llvm_library(clangTesting CommandLineArgs.cpp TestAST.cpp BUILDTREE_ONLY - DISABLE_PCH_REUSE LINK_COMPONENTS MC diff --git a/clang/tools/libclang/CMakeLists.txt b/clang/tools/libclang/CMakeLists.txt index 5fdfc474332f7..dcb9a331d381e 100644 --- a/clang/tools/libclang/CMakeLists.txt +++ b/clang/tools/libclang/CMakeLists.txt @@ -133,7 +133,14 @@ if (UNIX AND "${CMAKE_SYSTEM_NAME}" MATCHES "AIX") remove_definitions("-D_XOPEN_SOURCE=700") endif() +set(_libclang_pch_opts) +if(ENABLE_SHARED) + # DEFINE_SYMBOL _CINDEX_LIB_ is set on the shared target after creation, + # which conflicts with the PCH that was built without it. + set(_libclang_pch_opts DISABLE_PCH_REUSE) +endif() add_clang_library(libclang ${ENABLE_SHARED} ${ENABLE_STATIC} INSTALL_WITH_TOOLCHAIN + ${_libclang_pch_opts} OUTPUT_NAME ${output_name} ${SOURCES} diff --git a/flang/CMakeLists.txt b/flang/CMakeLists.txt index be0b1f3d9b270..97ef8bba8d6ad 100644 --- a/flang/CMakeLists.txt +++ b/flang/CMakeLists.txt @@ -489,10 +489,6 @@ include(GetClangResourceDir) get_clang_resource_dir(HEADER_BINARY_DIR PREFIX ${LLVM_LIBRARY_OUTPUT_INTDIR}/.. SUBDIR include) -if (FLANG_INCLUDE_TESTS) - add_compile_definitions(FLANG_INCLUDE_TESTS=1) -endif() - add_subdirectory(include) add_subdirectory(lib) add_subdirectory(cmake/modules) diff --git a/flang/cmake/modules/AddFlang.cmake b/flang/cmake/modules/AddFlang.cmake index 29ae17afe1144..ca233103ccdbe 100644 --- a/flang/cmake/modules/AddFlang.cmake +++ b/flang/cmake/modules/AddFlang.cmake @@ -63,13 +63,7 @@ function(add_flang_library name) # Let llvm_add_library decide, taking BUILD_SHARED_LIBS into account. set(LIBTYPE) endif() - # Clang libraries propagate CLANG_BUILD_STATIC as a PUBLIC definition on - # Windows static builds, which conflicts with the PCH from LLVM libraries. - set(_flang_pch_reuse) - if(ARG_CLANG_LIBS AND (WIN32 AND NOT MINGW) AND NOT CLANG_LINK_CLANG_DYLIB) - set(_flang_pch_reuse DISABLE_PCH_REUSE) - endif() - llvm_add_library(${name} ${LIBTYPE} ${_flang_pch_reuse} ${ARG_UNPARSED_ARGUMENTS} ${srcs}) + llvm_add_library(${name} ${LIBTYPE} ${ARG_UNPARSED_ARGUMENTS} ${srcs}) clang_target_link_libraries(${name} PRIVATE ${ARG_CLANG_LIBS}) if (ARG_MLIR_LIBS) diff --git a/flang/tools/fir-opt/CMakeLists.txt b/flang/tools/fir-opt/CMakeLists.txt index e735c2c2ff1a3..25e00f68b5cb4 100644 --- a/flang/tools/fir-opt/CMakeLists.txt +++ b/flang/tools/fir-opt/CMakeLists.txt @@ -1,5 +1,8 @@ add_flang_tool(fir-opt fir-opt.cpp) llvm_update_compile_flags(fir-opt) +if(FLANG_INCLUDE_TESTS) + target_compile_definitions(fir-opt PRIVATE FLANG_INCLUDE_TESTS=1) +endif() get_property(dialect_libs GLOBAL PROPERTY MLIR_DIALECT_LIBS) get_property(extension_libs GLOBAL PROPERTY MLIR_EXTENSION_LIBS) diff --git a/lldb/CMakeLists.txt b/lldb/CMakeLists.txt index 0a1ca5cf391ef..da389ad12b68d 100644 --- a/lldb/CMakeLists.txt +++ b/lldb/CMakeLists.txt @@ -47,7 +47,6 @@ if(uppercase_CMAKE_BUILD_TYPE STREQUAL "DEBUG" ) endif() if (WIN32) - add_definitions(-D_ENABLE_EXTENDED_ALIGNED_STORAGE) if (NOT MSVC) # _BSD_SOURCE is required for MinGW's getopt.h to define optreset add_definitions(-D_BSD_SOURCE) diff --git a/llvm/cmake/modules/AddLLVM.cmake b/llvm/cmake/modules/AddLLVM.cmake index 9efe89725ef20..e7b15d041044d 100644 --- a/llvm/cmake/modules/AddLLVM.cmake +++ b/llvm/cmake/modules/AddLLVM.cmake @@ -80,6 +80,8 @@ function(llvm_update_compile_flags name) endfunction() function(llvm_update_pch name) + cmake_parse_arguments(ARG "DISABLE_PCH_REUSE" "" "" ${ARGN}) + if(LLVM_REQUIRES_RTTI OR LLVM_REQUIRES_EH) # Non-default RTTI/EH results in incompatible flags, precluding PCH reuse. set(ARG_DISABLE_PCH_REUSE ON) @@ -107,41 +109,6 @@ function(llvm_update_pch name) set(ARG_DISABLE_PCH_REUSE ON) endif() - # Certain compile definitions change macro expansion in ways that conflict - # with a reused PCH (e.g. visibility macros, MSVC STL config, test-only - # code guards). Collect both target-level and directory-level definitions - # and disable PCH reuse when any of these are present but absent from the - # PCH source. Definitions may appear as "FOO" or "FOO=value". - set(_pch_conflict_defs - LLVM_BUILD_STATIC CLANG_BUILD_STATIC - _ENABLE_EXTENDED_ALIGNED_STORAGE - MLIR_INCLUDE_TESTS FLANG_INCLUDE_TESTS) - get_target_property(target_defs ${name} COMPILE_DEFINITIONS) - get_directory_property(dir_defs COMPILE_DEFINITIONS) - set(all_defs) - if(target_defs) - list(APPEND all_defs ${target_defs}) - endif() - if(dir_defs) - list(APPEND all_defs ${dir_defs}) - endif() - foreach(def ${_pch_conflict_defs}) - if(def IN_LIST all_defs) - set(ARG_DISABLE_PCH_REUSE ON) - break() - endif() - # Also match "DEF=value" forms (e.g. FLANG_INCLUDE_TESTS=1). - foreach(actual_def ${all_defs}) - if(actual_def MATCHES "^${def}=") - set(ARG_DISABLE_PCH_REUSE ON) - break() - endif() - endforeach() - if(ARG_DISABLE_PCH_REUSE) - break() - endif() - endforeach() - # Find PCH with highest priority from dependencies. We reuse the first PCH # with the highest priority. If the target has its own set of PCH, we give it # a higher priority so that dependents will prefer the new PCH. We don't do @@ -675,7 +642,11 @@ function(llvm_add_library name) if(ARG_DISABLE_LLVM_LINK_LLVM_DYLIB) target_compile_definitions(${obj_name} PRIVATE LLVM_BUILD_STATIC) endif() - llvm_update_pch(${obj_name}) + set(_pch_opts) + if(ARG_DISABLE_PCH_REUSE) + list(APPEND _pch_opts DISABLE_PCH_REUSE) + endif() + llvm_update_pch(${obj_name} ${_pch_opts}) if(CMAKE_GENERATOR STREQUAL "Xcode") set(DUMMY_FILE ${CMAKE_CURRENT_BINARY_DIR}/Dummy.c) file(WRITE ${DUMMY_FILE} "// This file intentionally empty\n") @@ -809,7 +780,11 @@ function(llvm_add_library name) if(ARG_DISABLE_LLVM_LINK_LLVM_DYLIB) target_compile_definitions(${name} PRIVATE LLVM_BUILD_STATIC) endif() - llvm_update_pch(${name}) + set(_pch_opts) + if(ARG_DISABLE_PCH_REUSE) + list(APPEND _pch_opts DISABLE_PCH_REUSE) + endif() + llvm_update_pch(${name} ${_pch_opts}) else() get_target_property(lib_disable_pch ${obj_name} DISABLE_PRECOMPILE_HEADERS) if(NOT ${lib_disable_pch}) @@ -1236,7 +1211,11 @@ macro(add_llvm_executable name) # $<TARGET_OBJECTS> doesn't require compile flags. if(NOT LLVM_ENABLE_OBJLIB) llvm_update_compile_flags(${name}) - llvm_update_pch(${name}) + if(ARG_DISABLE_PCH_REUSE) + llvm_update_pch(${name} DISABLE_PCH_REUSE) + else() + llvm_update_pch(${name}) + endif() elseif(NOT ARG_DISABLE_PCH_REUSE) get_target_property(lib_disable_pch ${obj_name} DISABLE_PRECOMPILE_HEADERS) if(NOT ${lib_disable_pch}) @@ -1986,7 +1965,9 @@ function(add_benchmark benchmark_name) set(EXCLUDE_FROM_ALL ON) endif() - add_llvm_executable(${benchmark_name} IGNORE_EXTERNALIZE_DEBUGINFO NO_INSTALL_RPATH ${ARGN}) + # DISABLE_PCH_REUSE: the benchmark library propagates BENCHMARK_STATIC_DEFINE + # as an INTERFACE definition, which conflicts with the PCH. + add_llvm_executable(${benchmark_name} IGNORE_EXTERNALIZE_DEBUGINFO NO_INSTALL_RPATH DISABLE_PCH_REUSE ${ARGN}) set(outdir ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}) set_output_directory(${benchmark_name} BINARY_DIR ${outdir} LIBRARY_DIR ${outdir}) get_subproject_title(subproject_title) diff --git a/llvm/cmake/modules/HandleLLVMOptions.cmake b/llvm/cmake/modules/HandleLLVMOptions.cmake index 5f1d68762c038..52f84b0dbb8ee 100644 --- a/llvm/cmake/modules/HandleLLVMOptions.cmake +++ b/llvm/cmake/modules/HandleLLVMOptions.cmake @@ -599,6 +599,7 @@ if( MSVC ) _CRT_NONSTDC_NO_WARNINGS _SCL_SECURE_NO_DEPRECATE _SCL_SECURE_NO_WARNINGS + _ENABLE_EXTENDED_ALIGNED_STORAGE ) # Tell MSVC to use the Unicode version of the Win32 APIs instead of ANSI. @@ -607,6 +608,15 @@ if( MSVC ) _UNICODE ) + # In static builds (no shared LLVM/Clang dylib), visibility macros like + # LLVM_ABI / CLANG_ABI must resolve to noops. Define the corresponding + # guards globally so every target — including the LLVMSupport PCH — sees + # them, avoiding clang-cl PCH mismatch warnings (-Wclang-cl-pch). + if(NOT LLVM_LINK_LLVM_DYLIB AND NOT BUILD_SHARED_LIBS) + add_compile_definitions(LLVM_BUILD_STATIC) + add_compile_definitions(CLANG_BUILD_STATIC) + endif() + if (LLVM_WINSYSROOT) if (NOT CLANG_CL) message(ERROR "LLVM_WINSYSROOT requires clang-cl") diff --git a/llvm/tools/llvm-config/CMakeLists.txt b/llvm/tools/llvm-config/CMakeLists.txt index fc285b2ba156a..5819b2ec9ed65 100644 --- a/llvm/tools/llvm-config/CMakeLists.txt +++ b/llvm/tools/llvm-config/CMakeLists.txt @@ -15,6 +15,7 @@ add_llvm_tool(llvm-config # want to build an entire native libLLVM.so in addition to the cross one just # for the native `llvm-config`! DISABLE_LLVM_LINK_LLVM_DYLIB + DISABLE_PCH_REUSE ) # Compute the substitution values for various items. @@ -88,7 +89,7 @@ llvm_expand_pseudo_components(LLVM_DYLIB_COMPONENTS_expanded "${LLVM_DYLIB_COMPO configure_file(${BUILDVARIABLES_SRCPATH} ${BUILDVARIABLES_OBJPATH} @ONLY) # Set build-time environment(s). -add_compile_definitions(CMAKE_CFG_INTDIR="$<CONFIG>") +target_compile_definitions(llvm-config PRIVATE CMAKE_CFG_INTDIR="$<CONFIG>") if(LLVM_ENABLE_MODULES) target_compile_options(llvm-config PUBLIC diff --git a/mlir/CMakeLists.txt b/mlir/CMakeLists.txt index 6d05fa50ecd05..39d9adc6a8f52 100644 --- a/mlir/CMakeLists.txt +++ b/mlir/CMakeLists.txt @@ -261,7 +261,6 @@ add_subdirectory(lib) add_subdirectory(lib/CAPI) if (MLIR_INCLUDE_TESTS) - add_definitions(-DMLIR_INCLUDE_TESTS) add_custom_target(MLIRUnitTests) set_target_properties(MLIRUnitTests PROPERTIES FOLDER "MLIR/Tests") if (TARGET llvm_gtest) diff --git a/mlir/tools/mlir-lsp-server/CMakeLists.txt b/mlir/tools/mlir-lsp-server/CMakeLists.txt index 0518620699ae0..3d57fa756359e 100644 --- a/mlir/tools/mlir-lsp-server/CMakeLists.txt +++ b/mlir/tools/mlir-lsp-server/CMakeLists.txt @@ -45,6 +45,9 @@ add_mlir_tool(mlir-lsp-server ) mlir_target_link_libraries(mlir-lsp-server PRIVATE ${LIBS}) target_link_libraries(mlir-lsp-server PRIVATE ${test_libs}) +if(MLIR_INCLUDE_TESTS) + target_compile_definitions(mlir-lsp-server PRIVATE MLIR_INCLUDE_TESTS) +endif() llvm_update_compile_flags(mlir-lsp-server) mlir_check_all_link_libraries(mlir-lsp-server) diff --git a/mlir/tools/mlir-opt/CMakeLists.txt b/mlir/tools/mlir-opt/CMakeLists.txt index c607ccfa80e3c..919dd9b6ceb6f 100644 --- a/mlir/tools/mlir-opt/CMakeLists.txt +++ b/mlir/tools/mlir-opt/CMakeLists.txt @@ -93,6 +93,10 @@ add_mlir_tool(mlir-opt ) mlir_target_link_libraries(mlir-opt PRIVATE ${LIBS}) target_link_libraries(mlir-opt PRIVATE ${test_libs}) +if(MLIR_INCLUDE_TESTS) + target_compile_definitions(MLIRMlirOptMain PRIVATE MLIR_INCLUDE_TESTS) + target_compile_definitions(mlir-opt PRIVATE MLIR_INCLUDE_TESTS) +endif() llvm_update_compile_flags(mlir-opt) mlir_check_all_link_libraries(mlir-opt) diff --git a/mlir/tools/mlir-query/CMakeLists.txt b/mlir/tools/mlir-query/CMakeLists.txt index 1668bbac23d16..51c2d093362a9 100644 --- a/mlir/tools/mlir-query/CMakeLists.txt +++ b/mlir/tools/mlir-query/CMakeLists.txt @@ -8,6 +8,9 @@ add_mlir_tool(mlir-query mlir-query.cpp ) llvm_update_compile_flags(mlir-query) +if(MLIR_INCLUDE_TESTS) + target_compile_definitions(mlir-query PRIVATE MLIR_INCLUDE_TESTS) +endif() mlir_target_link_libraries(mlir-query PRIVATE MLIRQueryLib diff --git a/mlir/tools/mlir-reduce/CMakeLists.txt b/mlir/tools/mlir-reduce/CMakeLists.txt index 349d75b84df0e..67af5c0421dfd 100644 --- a/mlir/tools/mlir-reduce/CMakeLists.txt +++ b/mlir/tools/mlir-reduce/CMakeLists.txt @@ -16,6 +16,9 @@ add_mlir_tool(mlir-reduce mlir_target_link_libraries(mlir-reduce PRIVATE ${LIBS}) target_link_libraries(mlir-reduce PRIVATE ${test_libs}) +if(MLIR_INCLUDE_TESTS) + target_compile_definitions(mlir-reduce PRIVATE MLIR_INCLUDE_TESTS) +endif() llvm_update_compile_flags(mlir-reduce) mlir_check_all_link_libraries(mlir-reduce) diff --git a/mlir/tools/mlir-translate/CMakeLists.txt b/mlir/tools/mlir-translate/CMakeLists.txt index b356e04bb1dc4..05ff1ac5ed1b3 100644 --- a/mlir/tools/mlir-translate/CMakeLists.txt +++ b/mlir/tools/mlir-translate/CMakeLists.txt @@ -9,6 +9,9 @@ add_mlir_tool(mlir-translate mlir-translate.cpp ) llvm_update_compile_flags(mlir-translate) +if(MLIR_INCLUDE_TESTS) + target_compile_definitions(mlir-translate PRIVATE MLIR_INCLUDE_TESTS) +endif() mlir_target_link_libraries(mlir-translate PRIVATE ${dialect_libs} _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
