|  | @ -91,36 +91,38 @@ function(pybind11_add_module target_name) | 
		
	
		
			
				|  |  | 
 |  |  | 
 | 
		
	
		
			
				|  |  |     # Enable link time optimization and set the default symbol |  |  |     # Enable link time optimization and set the default symbol | 
		
	
		
			
				|  |  |     # visibility to hidden (very important to obtain small binaries) |  |  |     # visibility to hidden (very important to obtain small binaries) | 
		
	
		
			
				|  |  |     string(TOUPPER "${CMAKE_BUILD_TYPE}" U_CMAKE_BUILD_TYPE) |  |  |  | 
		
	
		
			
				|  |  |     if (NOT ${U_CMAKE_BUILD_TYPE} MATCHES DEBUG) |  |  |  | 
		
	
		
			
				|  |  |       # Check for Link Time Optimization support (GCC/Clang) |  |  |  | 
		
	
		
			
				|  |  |       check_cxx_compiler_flag("-flto" HAS_LTO_FLAG) |  |  |  | 
		
	
		
			
				|  |  |       if(HAS_LTO_FLAG AND NOT CYGWIN) |  |  |  | 
		
	
		
			
				|  |  |         target_compile_options(${target_name} PRIVATE -flto) |  |  |  | 
		
	
		
			
				|  |  |       endif() |  |  |  | 
		
	
		
			
				|  |  | 
 |  |  |  | 
		
	
		
			
				|  |  |       # Intel equivalent to LTO is called IPO |  |  |  | 
		
	
		
			
				|  |  |       if(CMAKE_CXX_COMPILER_ID MATCHES "Intel") |  |  |  | 
		
	
		
			
				|  |  |         check_cxx_compiler_flag("-ipo" HAS_IPO_FLAG) |  |  |  | 
		
	
		
			
				|  |  |         if(HAS_IPO_FLAG) |  |  |  | 
		
	
		
			
				|  |  |           target_compile_options(${target_name} PRIVATE -ipo) |  |  |  | 
		
	
		
			
				|  |  |         endif() |  |  |  | 
		
	
		
			
				|  |  |  |  |  |      string(TOUPPER "${CMAKE_BUILD_TYPE}" U_CMAKE_BUILD_TYPE) | 
		
	
		
			
				|  |  |  |  |  |      if (NOT ${U_CMAKE_BUILD_TYPE} MATCHES DEBUG) | 
		
	
		
			
				|  |  |  |  |  | #      # Check for Link Time Optimization support (GCC/Clang) | 
		
	
		
			
				|  |  |  |  |  |        check_cxx_compiler_flag("-flto" HAS_LTO_FLAG) | 
		
	
		
			
				|  |  |  |  |  |        if(HAS_LTO_FLAG AND NOT CYGWIN) | 
		
	
		
			
				|  |  |  |  |  |           target_compile_options(${target_name} PRIVATE -flto) | 
		
	
		
			
				|  |  |  |  |  |        endif() | 
		
	
		
			
				|  |  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |  |        # Intel equivalent to LTO is called IPO | 
		
	
		
			
				|  |  |  |  |  |        if(CMAKE_CXX_COMPILER_ID MATCHES "Intel") | 
		
	
		
			
				|  |  |  |  |  |          check_cxx_compiler_flag("-ipo" HAS_IPO_FLAG) | 
		
	
		
			
				|  |  |  |  |  |          if(HAS_IPO_FLAG) | 
		
	
		
			
				|  |  |  |  |  |            target_compile_options(${target_name} PRIVATE -ipo) | 
		
	
		
			
				|  |  |  |  |  |          endif() | 
		
	
		
			
				|  |  |  |  |  |        endif() | 
		
	
		
			
				|  |  |  |  |  | # | 
		
	
		
			
				|  |  |  |  |  |       if(NOT APPLE) | 
		
	
		
			
				|  |  |  |  |  | #      # Default symbol visibility | 
		
	
		
			
				|  |  |  |  |  |         target_compile_options(${target_name} PRIVATE "-fvisibility=hidden") | 
		
	
		
			
				|  |  |       endif() |  |  |       endif() | 
		
	
		
			
				|  |  | 
 |  |  | 
 | 
		
	
		
			
				|  |  |       # Default symbol visibility |  |  |  | 
		
	
		
			
				|  |  |       target_compile_options(${target_name} PRIVATE "-fvisibility=hidden") |  |  |  | 
		
	
		
			
				|  |  | 
 |  |  |  | 
		
	
		
			
				|  |  |       # Strip unnecessary sections of the binary on Linux/Mac OS |  |  |  | 
		
	
		
			
				|  |  |  |  |  | #      # Strip unnecessary sections of the binary on Linux/Mac OS | 
		
	
		
			
				|  |  |       if(CMAKE_STRIP) |  |  |       if(CMAKE_STRIP) | 
		
	
		
			
				|  |  |         if(APPLE) |  |  |  | 
		
	
		
			
				|  |  |           add_custom_command(TARGET ${target_name} POST_BUILD |  |  |  | 
		
	
		
			
				|  |  |  |  |  |          if(APPLE) | 
		
	
		
			
				|  |  |  |  |  |            add_custom_command(TARGET ${target_name} POST_BUILD | 
		
	
		
			
				|  |  |                              COMMAND ${CMAKE_STRIP} -u -r $<TARGET_FILE:${target_name}>) |  |  |                              COMMAND ${CMAKE_STRIP} -u -r $<TARGET_FILE:${target_name}>) | 
		
	
		
			
				|  |  |         else() |  |  |         else() | 
		
	
		
			
				|  |  |           add_custom_command(TARGET ${target_name} POST_BUILD |  |  |           add_custom_command(TARGET ${target_name} POST_BUILD | 
		
	
		
			
				|  |  |                              COMMAND ${CMAKE_STRIP} $<TARGET_FILE:${target_name}>) |  |  |                              COMMAND ${CMAKE_STRIP} $<TARGET_FILE:${target_name}>) | 
		
	
		
			
				|  |  |         endif() |  |  |         endif() | 
		
	
		
			
				|  |  |       endif() |  |  |       endif() | 
		
	
		
			
				|  |  |     endif() |  |  |  | 
		
	
		
			
				|  |  |  |  |  |      endif() | 
		
	
		
			
				|  |  |   elseif(MSVC) |  |  |   elseif(MSVC) | 
		
	
		
			
				|  |  |     # /MP enables multithreaded builds (relevant when there are many files), /bigobj is |  |  |     # /MP enables multithreaded builds (relevant when there are many files), /bigobj is | 
		
	
		
			
				|  |  |     # needed for bigger binding projects due to the limit to 64k addressable sections |  |  |     # needed for bigger binding projects due to the limit to 64k addressable sections | 
		
	
	
		
			
				|  | 
 |