mirror of
				https://github.com/Z3Prover/z3
				synced 2025-10-31 19:52:29 +00:00 
			
		
		
		
	* CMake: simplify FindGMP.cmake Remove printing of all the different variables, and let FPHSA output the library name. Add an imported target, which bundles the library and the include directories for easier usage. * fix build: vector::c_ptr() now is vector::data() * CMake: use Threads::Threads imported module Otherwise the setting of THREADS_PREFER_PTHREAD_FLAG has no effect. * CMake: remove needless policy setting The minimum required version is CMake 3.4, where these policies are already set to new because they were introduced earlier. * CMake: remove needless variable expansion
		
			
				
	
	
		
			51 lines
		
	
	
	
		
			2.3 KiB
		
	
	
	
		
			CMake
		
	
	
	
	
	
			
		
		
	
	
			51 lines
		
	
	
	
		
			2.3 KiB
		
	
	
	
		
			CMake
		
	
	
	
	
	
| option(Z3_LINK_TIME_OPTIMIZATION "Use link time optimiziation" OFF)
 | |
| 
 | |
| if (Z3_LINK_TIME_OPTIMIZATION)
 | |
|   message(STATUS "LTO enabled")
 | |
|   set(build_types_with_lto "RELEASE" "RELWITHDEBINFO")
 | |
|   if (DEFINED CMAKE_CONFIGURATION_TYPES)
 | |
|     # Multi configuration generator
 | |
|     message(STATUS "Note LTO is only enabled for the following configurations: ${build_types_with_lto}")
 | |
|   else()
 | |
|     # Single configuration generator
 | |
|     string(TOUPPER "${CMAKE_BUILD_TYPE}" _build_type_upper)
 | |
|     list(FIND build_types_with_lto "${_build_type_upper}" _index)
 | |
|     if ("${_index}" EQUAL -1)
 | |
|       message(FATAL_ERROR "Configuration ${CMAKE_BUILD_TYPE} does not support LTO."
 | |
|         "You should set Z3_LINK_TIME_OPTIMIZATION to OFF.")
 | |
|     endif()
 | |
|   endif()
 | |
| 
 | |
|   set(_lto_compiler_flag "")
 | |
|   set(_lto_linker_flag "")
 | |
|   if ((CMAKE_CXX_COMPILER_ID MATCHES "Clang") OR
 | |
|       (CMAKE_CXX_COMPILER_ID MATCHES "GNU"))
 | |
|       set(_lto_compiler_flag "-flto")
 | |
|       set(_lto_linker_flag "-flto")
 | |
|   elseif (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
 | |
|     set(_lto_compiler_flag "/GL")
 | |
|     set(_lto_linker_flag "/LTCG")
 | |
|   else()
 | |
|     message(FATAL_ERROR "Can't enable LTO for compiler \"${CMAKE_CXX_COMPILER_ID}\"."
 | |
|       "You should set Z3_LINK_TIME_OPTIMIZATION to OFF.")
 | |
|   endif()
 | |
|   CHECK_CXX_COMPILER_FLAG("${_lto_compiler_flag}" HAS_LTO)
 | |
|   if (NOT HAS_LTO)
 | |
|     message(FATAL_ERROR "Compiler does not support LTO")
 | |
|   endif()
 | |
| 
 | |
|   foreach (_config ${build_types_with_lto})
 | |
|     # Set flags compiler and linker flags globally rather than using
 | |
|     # `Z3_COMPONENT_CXX_FLAGS` and `Z3_DEPENDENT_EXTRA_CXX_LINK_FLAGS`
 | |
|     # respectively.  We need per configuration compiler and linker flags. The
 | |
|     # `LINK_FLAGS` property (which we populate with
 | |
|     # `Z3_DEPENDENT_EXTRA_CXX_LINK_FLAGS`) doesn't seem to support generator
 | |
|     # expressions so we can't do `$<$<CONFIG:Release>:${_lto_linker_flag}>`.
 | |
|     set(CMAKE_CXX_FLAGS_${_config} "${CMAKE_CXX_FLAGS_${_config}} ${_lto_compiler_flag}")
 | |
|     set(CMAKE_EXE_LINKER_FLAGS_${_config} "${CMAKE_EXE_LINKER_FLAGS_${_config}} ${_lto_linker_flag}")
 | |
|     set(CMAKE_SHARED_LINKER_FLAGS_${_config} "${CMAKE_SHARED_LINKER_FLAGS_${_config}} ${_lto_linker_flag}")
 | |
|     set(CMAKE_STATIC_LINKER_FLAGS_${_config} "${CMAKE_STATIC_LINKER_FLAGS_${_config}} ${_lto_linker_flag}")
 | |
|   endforeach()
 | |
| else()
 | |
|   message(STATUS "LTO disabled")
 | |
| endif()
 |