xref: /llvm-project/clang/lib/Tooling/Inclusions/Stdlib/CMakeLists.txt (revision 437366b668cebefbf3cb7bd354fa4bfb5d90ccbb)
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