forked from OSchip/llvm-project
[CMake] Fixes /INCREMENTAL detection when considering adding /Brepro
/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. Reviewed By: rnk Differential Revision: https://reviews.llvm.org/D117381
This commit is contained in:
parent
3b64ab574d
commit
d87459a0b8
|
@ -277,6 +277,17 @@ function(add_flag_or_print_warning flag name)
|
||||||
endif()
|
endif()
|
||||||
endfunction()
|
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_ENABLE_LLD )
|
||||||
if ( LLVM_USE_LINKER )
|
if ( LLVM_USE_LINKER )
|
||||||
message(FATAL_ERROR "LLVM_ENABLE_LLD and LLVM_USE_LINKER can't be set at the same time")
|
message(FATAL_ERROR "LLVM_ENABLE_LLD and LLVM_USE_LINKER can't be set at the same time")
|
||||||
|
@ -535,11 +546,13 @@ if( MSVC )
|
||||||
if (SUPPORTS_BREPRO)
|
if (SUPPORTS_BREPRO)
|
||||||
# Check if /INCREMENTAL is passed to the linker and complain that it
|
# Check if /INCREMENTAL is passed to the linker and complain that it
|
||||||
# won't work with /Brepro.
|
# won't work with /Brepro.
|
||||||
string(FIND "${all_linker_flags_uppercase}" "/INCREMENTAL" linker_flag_idx)
|
has_msvc_incremental_no_flag("${CMAKE_EXE_LINKER_FLAGS_${uppercase_CMAKE_BUILD_TYPE}} ${CMAKE_EXE_LINKER_FLAGS}" NO_INCR_EXE)
|
||||||
if (${linker_flag_idx} GREATER -1)
|
has_msvc_incremental_no_flag("${CMAKE_MODULE_LINKER_FLAGS_${uppercase_CMAKE_BUILD_TYPE}} ${CMAKE_MODULE_LINKER_FLAGS}" NO_INCR_MODULE)
|
||||||
message(WARNING "/Brepro not compatible with /INCREMENTAL linking - builds will be non-deterministic")
|
has_msvc_incremental_no_flag("${CMAKE_SHARED_LINKER_FLAGS_${uppercase_CMAKE_BUILD_TYPE}} ${CMAKE_SHARED_LINKER_FLAGS}" NO_INCR_SHARED)
|
||||||
else()
|
if (NO_INCR_EXE AND NO_INCR_MODULE AND NO_INCR_SHARED)
|
||||||
append("/Brepro" CMAKE_C_FLAGS CMAKE_CXX_FLAGS)
|
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()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
Loading…
Reference in New Issue