1 | //===--- Types.h - Input & Temporary Driver Types ---------------*- 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 | #ifndef LLVM_CLANG_DRIVER_TYPES_H |
10 | #define LLVM_CLANG_DRIVER_TYPES_H |
11 | |
12 | #include "clang/Driver/Phases.h" |
13 | #include "llvm/ADT/SmallVector.h" |
14 | |
15 | namespace llvm { |
16 | class StringRef; |
17 | } |
18 | namespace clang { |
19 | namespace driver { |
20 | namespace types { |
21 | enum ID { |
22 | TY_INVALID, |
23 | #define TYPE(NAME, ID, PP_TYPE, TEMP_SUFFIX, FLAGS) TY_##ID, |
24 | #include "clang/Driver/Types.def" |
25 | #undef TYPE |
26 | TY_LAST |
27 | }; |
28 | |
29 | /// getTypeName - Return the name of the type for \p Id. |
30 | const char *getTypeName(ID Id); |
31 | |
32 | /// getPreprocessedType - Get the ID of the type for this input when |
33 | /// it has been preprocessed, or INVALID if this input is not |
34 | /// preprocessed. |
35 | ID getPreprocessedType(ID Id); |
36 | |
37 | /// getPrecompiledType - Get the ID of the type for this input when |
38 | /// it has been precompiled, or INVALID if this input is not |
39 | /// precompiled. |
40 | ID getPrecompiledType(ID Id); |
41 | |
42 | /// getTypeTempSuffix - Return the suffix to use when creating a |
43 | /// temp file of this type, or null if unspecified. |
44 | const char *getTypeTempSuffix(ID Id, bool CLMode = false); |
45 | |
46 | /// onlyAssembleType - Should this type only be assembled. |
47 | bool onlyAssembleType(ID Id); |
48 | |
49 | /// onlyPrecompileType - Should this type only be precompiled. |
50 | bool onlyPrecompileType(ID Id); |
51 | |
52 | /// canTypeBeUserSpecified - Can this type be specified on the |
53 | /// command line (by the type name); this is used when forwarding |
54 | /// commands to gcc. |
55 | bool canTypeBeUserSpecified(ID Id); |
56 | |
57 | /// appendSuffixForType - When generating outputs of this type, |
58 | /// should the suffix be appended (instead of replacing the existing |
59 | /// suffix). |
60 | bool appendSuffixForType(ID Id); |
61 | |
62 | /// canLipoType - Is this type acceptable as the output of a |
63 | /// universal build (currently, just the Nothing, Image, and Object |
64 | /// types). |
65 | bool canLipoType(ID Id); |
66 | |
67 | /// isAcceptedByClang - Can clang handle this input type. |
68 | bool isAcceptedByClang(ID Id); |
69 | |
70 | /// isCXX - Is this a "C++" input (C++ and Obj-C++ sources and headers). |
71 | bool isCXX(ID Id); |
72 | |
73 | /// Is this LLVM IR. |
74 | bool isLLVMIR(ID Id); |
75 | |
76 | /// isCuda - Is this a CUDA input. |
77 | bool isCuda(ID Id); |
78 | |
79 | /// isHIP - Is this a HIP input. |
80 | bool isHIP(ID Id); |
81 | |
82 | /// isObjC - Is this an "ObjC" input (Obj-C and Obj-C++ sources and headers). |
83 | bool isObjC(ID Id); |
84 | |
85 | /// isSrcFile - Is this a source file, i.e. something that still has to be |
86 | /// preprocessed. The logic behind this is the same that decides if the first |
87 | /// compilation phase is a preprocessing one. |
88 | bool isSrcFile(ID Id); |
89 | |
90 | /// lookupTypeForExtension - Lookup the type to use for the file |
91 | /// extension \p Ext. |
92 | ID lookupTypeForExtension(llvm::StringRef Ext); |
93 | |
94 | /// lookupTypeForTypSpecifier - Lookup the type to use for a user |
95 | /// specified type name. |
96 | ID lookupTypeForTypeSpecifier(const char *Name); |
97 | |
98 | /// getCompilationPhases - Get the list of compilation phases ('Phases') to be |
99 | /// done for type 'Id'. |
100 | void getCompilationPhases( |
101 | ID Id, |
102 | llvm::SmallVectorImpl<phases::ID> &Phases); |
103 | |
104 | /// lookupCXXTypeForCType - Lookup CXX input type that corresponds to given |
105 | /// C type (used for clang++ emulation of g++ behaviour) |
106 | ID lookupCXXTypeForCType(ID Id); |
107 | |
108 | /// Lookup header file input type that corresponds to given |
109 | /// source file type (used for clang-cl emulation of \Yc). |
110 | ID lookupHeaderTypeForSourceType(ID Id); |
111 | |
112 | } // end namespace types |
113 | } // end namespace driver |
114 | } // end namespace clang |
115 | |
116 | #endif |
117 |