xref: /llvm-project/clang/lib/CodeGen/CMakeLists.txt (revision c3fe727181818d3efdd2ce96598bfe6a2d3ffb83)
1set(LLVM_LINK_COMPONENTS
2  AggressiveInstCombine
3  Analysis
4  BitReader
5  BitWriter
6  CodeGenTypes
7  Core
8  Coroutines
9  Coverage
10  Demangle
11  Extensions
12  FrontendDriver
13  FrontendHLSL
14  FrontendOpenMP
15  FrontendOffloading
16  HIPStdPar
17  IPO
18  IRPrinter
19  IRReader
20  InstCombine
21  Instrumentation
22  LTO
23  Linker
24  MC
25  ObjCARCOpts
26  Object
27  Passes
28  ProfileData
29  ScalarOpts
30  Support
31  Target
32  TargetParser
33  TransformUtils
34  )
35
36# Workaround for MSVC ARM64 performance regression:
37# https://developercommunity.visualstudio.com/t/Compiling-a-specific-code-for-ARM64-with/10444970
38# Since /O1 and /O2 represent a set of optimizations,
39# our goal is to disable the /Og flag while retaining the other optimizations from the /O1|/O2 set
40if(MSVC AND NOT CMAKE_CXX_COMPILER_ID MATCHES Clang
41    AND MSVC_VERSION VERSION_GREATER_EQUAL 1932
42    AND MSVC_VERSION VERSION_LESS 1939
43    AND CMAKE_SYSTEM_PROCESSOR MATCHES "ARM64")
44
45  string(TOUPPER "${CMAKE_BUILD_TYPE}" uppercase_CMAKE_BUILD_TYPE)
46  string(REGEX MATCHALL "/[Oo][12]" opt_flags "${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_${uppercase_CMAKE_BUILD_TYPE}}")
47  if (opt_flags)
48    if(opt_flags MATCHES "1$")
49      set(opt_flags "/Od;/Os;/Oy;/Ob2;/GF;/Gy")
50    elseif (opt_flags MATCHES "2$")
51      set(opt_flags "/Od;/Oi;/Ot;/Oy;/Ob2;/GF;/Gy")
52    endif()
53    set_source_files_properties(CGBuiltin.cpp PROPERTIES COMPILE_OPTIONS "${opt_flags}")
54  endif()
55endif()
56
57add_clang_library(clangCodeGen
58  ABIInfo.cpp
59  ABIInfoImpl.cpp
60  BackendUtil.cpp
61  CGAtomic.cpp
62  CGBlocks.cpp
63  CGBuiltin.cpp
64  CGCUDANV.cpp
65  CGCUDARuntime.cpp
66  CGCXX.cpp
67  CGCXXABI.cpp
68  CGCall.cpp
69  CGClass.cpp
70  CGCleanup.cpp
71  CGCoroutine.cpp
72  CGDebugInfo.cpp
73  CGDecl.cpp
74  CGDeclCXX.cpp
75  CGException.cpp
76  CGExpr.cpp
77  CGExprAgg.cpp
78  CGExprCXX.cpp
79  CGExprComplex.cpp
80  CGExprConstant.cpp
81  CGExprScalar.cpp
82  CGGPUBuiltin.cpp
83  CGHLSLRuntime.cpp
84  CGLoopInfo.cpp
85  CGNonTrivialStruct.cpp
86  CGObjC.cpp
87  CGObjCGNU.cpp
88  CGObjCMac.cpp
89  CGObjCRuntime.cpp
90  CGOpenCLRuntime.cpp
91  CGOpenMPRuntime.cpp
92  CGOpenMPRuntimeGPU.cpp
93  CGPointerAuth.cpp
94  CGRecordLayoutBuilder.cpp
95  CGStmt.cpp
96  CGStmtOpenMP.cpp
97  CGVTT.cpp
98  CGVTables.cpp
99  CodeGenABITypes.cpp
100  CodeGenAction.cpp
101  CodeGenFunction.cpp
102  CodeGenModule.cpp
103  CodeGenPGO.cpp
104  CodeGenTBAA.cpp
105  CodeGenTypes.cpp
106  ConstantInitBuilder.cpp
107  CoverageMappingGen.cpp
108  ItaniumCXXABI.cpp
109  LinkInModulesPass.cpp
110  MacroPPCallbacks.cpp
111  MicrosoftCXXABI.cpp
112  ModuleBuilder.cpp
113  ObjectFilePCHContainerWriter.cpp
114  PatternInit.cpp
115  SanitizerMetadata.cpp
116  SwiftCallingConv.cpp
117  TargetInfo.cpp
118  Targets/AArch64.cpp
119  Targets/AMDGPU.cpp
120  Targets/ARC.cpp
121  Targets/ARM.cpp
122  Targets/AVR.cpp
123  Targets/BPF.cpp
124  Targets/CSKY.cpp
125  Targets/DirectX.cpp
126  Targets/Hexagon.cpp
127  Targets/Lanai.cpp
128  Targets/LoongArch.cpp
129  Targets/M68k.cpp
130  Targets/MSP430.cpp
131  Targets/Mips.cpp
132  Targets/NVPTX.cpp
133  Targets/PNaCl.cpp
134  Targets/PPC.cpp
135  Targets/RISCV.cpp
136  Targets/SPIR.cpp
137  Targets/Sparc.cpp
138  Targets/SystemZ.cpp
139  Targets/TCE.cpp
140  Targets/VE.cpp
141  Targets/WebAssembly.cpp
142  Targets/X86.cpp
143  Targets/XCore.cpp
144  VarBypassDetector.cpp
145
146  DEPENDS
147  vt_gen
148  intrinsics_gen
149  ClangDriverOptions
150  # These generated headers are included transitively.
151  ARMTargetParserTableGen
152  AArch64TargetParserTableGen
153
154  LINK_LIBS
155  clangAST
156  clangAnalysis
157  clangBasic
158  clangFrontend
159  clangLex
160  clangSerialization
161  )
162