[PATCH] D117381: [CMake] Fixes /INCREMENTAL detection when considering adding /Brepro
Yuanfang Chen via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Fri Jan 14 18:55:52 PST 2022
ychen created this revision.
ychen added reviewers: rnk, beanz.
Herald added a subscriber: mgorny.
ychen requested review of this revision.
Herald added a project: LLVM.
Herald added a subscriber: llvm-commits.
/INCREMENTAL is the linker default (lld-link and MSVC link). Specifying
"/INCREMENTAL:NO" is the only way to disable it. So checking for the
negative flag instead and check exe/module/shared link flags
independently.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D117381
Files:
llvm/cmake/modules/HandleLLVMOptions.cmake
Index: llvm/cmake/modules/HandleLLVMOptions.cmake
===================================================================
--- llvm/cmake/modules/HandleLLVMOptions.cmake
+++ llvm/cmake/modules/HandleLLVMOptions.cmake
@@ -277,6 +277,17 @@
endif()
endfunction()
+function(has_msvc_incremental_no_flag flags incr_no_flag_on)
+ set(${incr_no_flag_on} OFF PARENT_SCOPE)
+ string(FIND "${flags}" "/INCREMENTAL" idx REVERSE)
+ if (${idx} GREATER -1)
+ string(SUBSTRING "${flags}" ${idx} 15 no_flag)
+ if (${no_flag} MATCHES "/INCREMENTAL:NO")
+ set(${incr_no_flag_on} ON PARENT_SCOPE)
+ endif()
+ endif()
+endfunction()
+
if( LLVM_ENABLE_LLD )
if ( LLVM_USE_LINKER )
message(FATAL_ERROR "LLVM_ENABLE_LLD and LLVM_USE_LINKER can't be set at the same time")
@@ -535,11 +546,13 @@
if (SUPPORTS_BREPRO)
# Check if /INCREMENTAL is passed to the linker and complain that it
# won't work with /Brepro.
- string(FIND "${all_linker_flags_uppercase}" "/INCREMENTAL" linker_flag_idx)
- if (${linker_flag_idx} GREATER -1)
- message(WARNING "/Brepro not compatible with /INCREMENTAL linking - builds will be non-deterministic")
- else()
+ has_msvc_incremental_no_flag("${CMAKE_EXE_LINKER_FLAGS_${uppercase_CMAKE_BUILD_TYPE}} ${CMAKE_EXE_LINKER_FLAGS}" NO_INCR_EXE)
+ has_msvc_incremental_no_flag("${CMAKE_MODULE_LINKER_FLAGS_${uppercase_CMAKE_BUILD_TYPE}} ${CMAKE_MODULE_LINKER_FLAGS}" NO_INCR_MODULE)
+ has_msvc_incremental_no_flag("${CMAKE_SHARED_LINKER_FLAGS_${uppercase_CMAKE_BUILD_TYPE}} ${CMAKE_SHARED_LINKER_FLAGS}" NO_INCR_SHARED)
+ if (NO_INCR_EXE AND NO_INCR_MODULE AND NO_INCR_SHARED)
append("/Brepro" CMAKE_C_FLAGS CMAKE_CXX_FLAGS)
+ else()
+ message(WARNING "/Brepro not compatible with /INCREMENTAL linking - builds will be non-deterministic")
endif()
endif()
endif()
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D117381.400227.patch
Type: text/x-patch
Size: 1887 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20220115/03e1aed4/attachment.bin>
More information about the llvm-commits
mailing list