1# Workaround for MSVC ARM64 performance regression: 2# https://developercommunity.visualstudio.com/t/Compiling-a-specific-code-for-ARM64-with/10444970 3# Since /O1 and /O2 represent a set of optimizations, 4# our goal is to disable the /Og flag while retaining the other optimizations from the /O1|/O2 set 5if(MSVC AND NOT CMAKE_CXX_COMPILER_ID MATCHES Clang 6 AND MSVC_VERSION VERSION_GREATER_EQUAL 1932 7 AND MSVC_VERSION VERSION_LESS 1939 8 AND CMAKE_SYSTEM_PROCESSOR MATCHES "ARM64") 9 10 string(TOUPPER "${CMAKE_BUILD_TYPE}" uppercase_CMAKE_BUILD_TYPE) 11 string(REGEX MATCHALL "/[Oo][12]" opt_flags "${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_${uppercase_CMAKE_BUILD_TYPE}}") 12 if (opt_flags) 13 if(opt_flags MATCHES "1$") 14 set(opt_flags "/Od;/Os;/Oy;/Ob2;/GF;/Gy") 15 elseif (opt_flags MATCHES "2$") 16 set(opt_flags "/Od;/Oi;/Ot;/Oy;/Ob2;/GF;/Gy") 17 endif() 18 set_source_files_properties(StandardLibrary.cpp PROPERTIES COMPILE_OPTIONS "${opt_flags}") 19 endif() 20endif() 21 22add_clang_library(clangToolingInclusionsStdlib 23 StandardLibrary.cpp 24 25 LINK_LIBS 26 clangAST 27 ) 28