if(SMTG_WIN) option(SMTG_USE_STATIC_CRT "use static CRuntime on Windows (option /MT)" OFF) endif(SMTG_WIN) #------------------------------------------------------------------------ # setup the platform toolset (compiler options) macro(smtg_setup_platform_toolset) # deprecated if(SMTG_RENAME_ASSERT) add_compile_options(-DSMTG_RENAME_ASSERT=1) endif() # Add colors to clang output when using Ninja # See: https://github.com/ninja-build/ninja/wiki/FAQ if(UNIX AND CMAKE_CXX_COMPILER_ID MATCHES "Clang" AND CMAKE_GENERATOR STREQUAL "Ninja") add_compile_options(-fcolor-diagnostics) endif() #------------ option(SMTG_ENABLE_ADDRESS_SANITIZER "Enable Address Sanitizer" OFF) if(SMTG_LINUX) if(SMTG_ENABLE_ADDRESS_SANITIZER) set(CMAKE_CONFIGURATION_TYPES "${CMAKE_CONFIGURATION_TYPES};ASan") add_compile_options($<$:-DDEVELOPMENT=1>) add_compile_options($<$:-fsanitize=address>) add_compile_options($<$:-DVSTGUI_LIVE_EDITING=1>) add_compile_options($<$:-g>) add_compile_options($<$:-O0>) set(ASAN_LIBRARY asan) link_libraries($<$:${ASAN_LIBRARY}>) endif() set(common_linker_flags "-Wl,--no-undefined") set(CMAKE_MODULE_LINKER_FLAGS "${common_linker_flags}" CACHE STRING "Module Library Linker Flags") set(CMAKE_SHARED_LINKER_FLAGS "${common_linker_flags}" CACHE STRING "Shared Library Linker Flags") endif(SMTG_LINUX) #------------ if(UNIX) if(XCODE) set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LIBRARY "libc++") add_compile_options(-Winconsistent-missing-override) # Suggest override when missing add_compile_options(-Werror=return-type) add_compile_options(-ffast-math -ffp-contract=fast) if(SMTG_ENABLE_ADDRESS_SANITIZER) set(CMAKE_XCODE_SCHEME_ADDRESS_SANITIZER ON) set(CMAKE_XCODE_GENERATE_SCHEME ON) endif(SMTG_ENABLE_ADDRESS_SANITIZER) else() set(CMAKE_POSITION_INDEPENDENT_CODE TRUE) if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") add_compile_options(-Wsuggest-override) # Suggest override when missing endif() if(SMTG_MAC) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++") else() set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-multichar") if(ANDROID) set(CMAKE_ANDROID_STL_TYPE c++_static) link_libraries(dl) else() link_libraries(stdc++fs pthread dl) endif(ANDROID) endif(SMTG_MAC) endif(XCODE) #------------ elseif(SMTG_WIN) if(MINGW) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-multichar") set(common_linker_flags "-Wl,--no-undefined") set(CMAKE_MODULE_LINKER_FLAGS "${common_linker_flags}" CACHE STRING "Module Library Linker Flags") set(CMAKE_SHARED_LINKER_FLAGS "${common_linker_flags}" CACHE STRING "Shared Library Linker Flags") else() add_definitions(-D_UNICODE) add_definitions(-D_CRT_SECURE_NO_WARNINGS) # Eliminate deprecation warnings for less secure functions (strcpy...) add_compile_options(/W3) # Baseline reasonable warnings add_compile_options(/Zc:__cplusplus) # __cplusplus should denote the c++ standard add_compile_options(/fp:fast) # Floating Point Model add_compile_options($<$:/Oi>) # Enable Intrinsic Functions (Yes) add_compile_options($<$:/Ot>) # Favor Size Or Speed (Favor fast code) add_compile_options($<$:/GF>) # Enable String Pooling add_compile_options($<$:/EHa>) # Enable C++ Exceptions add_compile_options($<$:/Oy>) # Omit Frame Pointers #add_compile_options($<$:/Ox>) # Optimization (/O2: Maximise Speed /0x: Full Optimization) add_compile_options(/MP) # Multi-processor Compilation add_compile_options(/wd6031) # Return value ignored add_compile_options(/wd6308) # Realloc may return null pointer add_compile_options(/wd6330) # Incorrect type passed as parameter in call to function add_compile_options(/wd6385) # Invalid data add_compile_options(/wd6386) # Buffer overrun add_compile_options(/wd28125) # The function must be called from within a try/except block add_compile_options(/wd28251) # Inconsistent annotation for function #add_definitions("/analyze") # Enable Code Analyze set(CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG} /SAFESEH:NO") set(CMAKE_MODULE_LINKER_FLAGS_DEBUG "${CMAKE_MODULE_LINKER_FLAGS_DEBUG} /SAFESEH:NO") if(DEFINED CMAKE_GENERATOR_PLATFORM AND CMAKE_GENERATOR_PLATFORM) string(TOLOWER ${CMAKE_GENERATOR_PLATFORM} GENERATOR_PLATFORM) endif() if(${GENERATOR_PLATFORM} MATCHES "arm*") add_compile_options($<$:/Zi>) # Program Database add_compile_options($<$:/EHsc>) # Enable C++ Exceptions add_compile_options(/wd4103) # Alignment changed after including header else() if(SMTG_ENABLE_ADDRESS_SANITIZER) add_compile_options($<$:/fsanitize=address>) # Enable Address Sanitizer add_link_options($<$:/INCREMENTAL:NO>) # Enable Incremental Linking else() add_compile_options($<$:/ZI>) # Program Database for Edit And Continue endif() endif() if(SMTG_USE_STATIC_CRT) add_compile_options($<$:/MTd>) # Runtime Library: /MTd = MultiThreaded Debug Runtime add_compile_options($<$:/MT>) # Runtime Library: /MT = MultiThreaded Runtime else() add_compile_options($<$:/MDd>) # Runtime Library: /MDd = MultiThreadedDLL Debug Runtime add_compile_options($<$:/MD>) # Runtime Library: /MD = MultiThreadedDLL Runtime endif(SMTG_USE_STATIC_CRT) endif(MINGW) endif(UNIX) endmacro(smtg_setup_platform_toolset)