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 unit to use for floating point math. |
39 | std::string FPMath; |
40 | |
41 | /// If given, the name of the target ABI to use. |
42 | std::string ABI; |
43 | |
44 | /// The EABI version to use |
45 | llvm::EABI EABIVersion; |
46 | |
47 | /// If given, the version string of the linker in use. |
48 | std::string LinkerVersion; |
49 | |
50 | /// The list of target specific features to enable or disable, as written on the command line. |
51 | std::vector<std::string> FeaturesAsWritten; |
52 | |
53 | /// The list of target specific features to enable or disable -- this should |
54 | /// be a list of strings starting with by '+' or '-'. |
55 | std::vector<std::string> Features; |
56 | |
57 | /// Supported OpenCL extensions and optional core features. |
58 | OpenCLOptions SupportedOpenCLOptions; |
59 | |
60 | /// The list of OpenCL extensions to enable or disable, as written on |
61 | /// the command line. |
62 | std::vector<std::string> OpenCLExtensionsAsWritten; |
63 | |
64 | /// If given, enables support for __int128_t and __uint128_t types. |
65 | bool ForceEnableInt128 = false; |
66 | |
67 | /// \brief If enabled, use 32-bit pointers for accessing const/local/shared |
68 | /// address space. |
69 | bool NVPTXUseShortPointers = false; |
70 | |
71 | // The code model to be used as specified by the user. Corresponds to |
72 | // CodeModel::Model enum defined in include/llvm/Support/CodeGen.h, plus |
73 | // "default" for the case when the user has not explicitly specified a |
74 | // code model. |
75 | std::string CodeModel; |
76 | |
77 | /// The version of the SDK which was used during the compilation. |
78 | /// The option is used for two different purposes: |
79 | /// * on darwin the version is propagated to LLVM where it's used |
80 | /// to support SDK Version metadata (See D55673). |
81 | /// * CUDA compilation uses it to control parts of CUDA compilation |
82 | /// in clang that depend on specific version of the CUDA SDK. |
83 | llvm::VersionTuple SDKVersion; |
84 | }; |
85 | |
86 | } // end namespace clang |
87 | |
88 | #endif |
89 |