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