1 | //===--- TargetOptions.h ----------------------------------------*- C++ -*-===// |
2 | // |
3 | // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. |
4 | // See https://llvm.org/LICENSE.txt for license information. |
5 | // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
6 | // |
7 | //===----------------------------------------------------------------------===// |
8 | /// |
9 | /// \file |
10 | /// Defines the clang::TargetOptions class. |
11 | /// |
12 | //===----------------------------------------------------------------------===// |
13 | |
14 | #ifndef LLVM_CLANG_BASIC_TARGETOPTIONS_H |
15 | #define LLVM_CLANG_BASIC_TARGETOPTIONS_H |
16 | |
17 | #include "clang/Basic/OpenCLOptions.h" |
18 | #include "llvm/Support/VersionTuple.h" |
19 | #include "llvm/Target/TargetOptions.h" |
20 | #include <string> |
21 | #include <vector> |
22 | |
23 | namespace clang { |
24 | |
25 | /// Options for controlling the target. |
26 | class TargetOptions { |
27 | public: |
28 | /// The name of the target triple to compile for. |
29 | std::string Triple; |
30 | |
31 | /// When compiling for the device side, contains the triple used to compile |
32 | /// for the host. |
33 | std::string HostTriple; |
34 | |
35 | /// If given, the name of the target CPU to generate code for. |
36 | std::string CPU; |
37 | |
38 | /// If given, the name of the target CPU to tune code for. |
39 | std::string TuneCPU; |
40 | |
41 | /// If given, the unit to use for floating point math. |
42 | std::string FPMath; |
43 | |
44 | /// If given, the name of the target ABI to use. |
45 | std::string ABI; |
46 | |
47 | /// The EABI version to use |
48 | llvm::EABI EABIVersion = llvm::EABI::Default; |
49 | |
50 | /// If given, the version string of the linker in use. |
51 | std::string LinkerVersion; |
52 | |
53 | /// The list of target specific features to enable or disable, as written on the command line. |
54 | std::vector<std::string> FeaturesAsWritten; |
55 | |
56 | /// The list of target specific features to enable or disable -- this should |
57 | /// be a list of strings starting with by '+' or '-'. |
58 | std::vector<std::string> Features; |
59 | |
60 | /// The map of which features have been enabled disabled based on the command |
61 | /// line. |
62 | llvm::StringMap<bool> FeatureMap; |
63 | |
64 | /// Supported OpenCL extensions and optional core features. |
65 | llvm::StringMap<bool> OpenCLFeaturesMap; |
66 | |
67 | /// The list of OpenCL extensions to enable or disable, as written on |
68 | /// the command line. |
69 | std::vector<std::string> OpenCLExtensionsAsWritten; |
70 | |
71 | /// If given, enables support for __int128_t and __uint128_t types. |
72 | bool ForceEnableInt128 = false; |
73 | |
74 | /// \brief If enabled, use 32-bit pointers for accessing const/local/shared |
75 | /// address space. |
76 | bool NVPTXUseShortPointers = false; |
77 | |
78 | /// \brief If enabled, allow AMDGPU unsafe floating point atomics. |
79 | bool AllowAMDGPUUnsafeFPAtomics = false; |
80 | |
81 | /// \brief Code object version for AMDGPU. |
82 | llvm::CodeObjectVersionKind CodeObjectVersion = |
83 | llvm::CodeObjectVersionKind::COV_None; |
84 | |
85 | /// \brief Enumeration values for AMDGPU printf lowering scheme |
86 | enum class AMDGPUPrintfKind { |
87 | /// printf lowering scheme involving hostcalls, currently used by HIP |
88 | /// programs by default |
89 | Hostcall = 0, |
90 | |
91 | /// printf lowering scheme involving implicit printf buffers, |
92 | Buffered = 1, |
93 | }; |
94 | |
95 | /// \brief AMDGPU Printf lowering scheme |
96 | AMDGPUPrintfKind AMDGPUPrintfKindVal = AMDGPUPrintfKind::Hostcall; |
97 | |
98 | // The code model to be used as specified by the user. Corresponds to |
99 | // CodeModel::Model enum defined in include/llvm/Support/CodeGen.h, plus |
100 | // "default" for the case when the user has not explicitly specified a |
101 | // code model. |
102 | std::string CodeModel; |
103 | |
104 | // The large data threshold used for certain code models on certain |
105 | // architectures. |
106 | uint64_t LargeDataThreshold; |
107 | |
108 | /// The version of the SDK which was used during the compilation. |
109 | /// The option is used for two different purposes: |
110 | /// * on darwin the version is propagated to LLVM where it's used |
111 | /// to support SDK Version metadata (See D55673). |
112 | /// * CUDA compilation uses it to control parts of CUDA compilation |
113 | /// in clang that depend on specific version of the CUDA SDK. |
114 | llvm::VersionTuple SDKVersion; |
115 | |
116 | /// The name of the darwin target- ariant triple to compile for. |
117 | std::string DarwinTargetVariantTriple; |
118 | |
119 | /// The version of the darwin target variant SDK which was used during the |
120 | /// compilation. |
121 | llvm::VersionTuple DarwinTargetVariantSDKVersion; |
122 | |
123 | /// The validator version for dxil. |
124 | std::string DxilValidatorVersion; |
125 | |
126 | /// The entry point name for HLSL shader being compiled as specified by -E. |
127 | std::string HLSLEntry; |
128 | }; |
129 | |
130 | } // end namespace clang |
131 | |
132 | #endif |
133 | |