1*67e74705SXin Li //===--- Action.cpp - Abstract compilation steps --------------------------===//
2*67e74705SXin Li //
3*67e74705SXin Li // The LLVM Compiler Infrastructure
4*67e74705SXin Li //
5*67e74705SXin Li // This file is distributed under the University of Illinois Open Source
6*67e74705SXin Li // License. See LICENSE.TXT for details.
7*67e74705SXin Li //
8*67e74705SXin Li //===----------------------------------------------------------------------===//
9*67e74705SXin Li
10*67e74705SXin Li #include "clang/Driver/Action.h"
11*67e74705SXin Li #include "llvm/ADT/StringSwitch.h"
12*67e74705SXin Li #include "llvm/Support/ErrorHandling.h"
13*67e74705SXin Li #include "llvm/Support/Regex.h"
14*67e74705SXin Li #include <cassert>
15*67e74705SXin Li using namespace clang::driver;
16*67e74705SXin Li using namespace llvm::opt;
17*67e74705SXin Li
~Action()18*67e74705SXin Li Action::~Action() {}
19*67e74705SXin Li
getClassName(ActionClass AC)20*67e74705SXin Li const char *Action::getClassName(ActionClass AC) {
21*67e74705SXin Li switch (AC) {
22*67e74705SXin Li case InputClass: return "input";
23*67e74705SXin Li case BindArchClass: return "bind-arch";
24*67e74705SXin Li case CudaDeviceClass: return "cuda-device";
25*67e74705SXin Li case CudaHostClass: return "cuda-host";
26*67e74705SXin Li case PreprocessJobClass: return "preprocessor";
27*67e74705SXin Li case PrecompileJobClass: return "precompiler";
28*67e74705SXin Li case AnalyzeJobClass: return "analyzer";
29*67e74705SXin Li case MigrateJobClass: return "migrator";
30*67e74705SXin Li case CompileJobClass: return "compiler";
31*67e74705SXin Li case BackendJobClass: return "backend";
32*67e74705SXin Li case AssembleJobClass: return "assembler";
33*67e74705SXin Li case LinkJobClass: return "linker";
34*67e74705SXin Li case LipoJobClass: return "lipo";
35*67e74705SXin Li case DsymutilJobClass: return "dsymutil";
36*67e74705SXin Li case VerifyDebugInfoJobClass: return "verify-debug-info";
37*67e74705SXin Li case VerifyPCHJobClass: return "verify-pch";
38*67e74705SXin Li }
39*67e74705SXin Li
40*67e74705SXin Li llvm_unreachable("invalid class");
41*67e74705SXin Li }
42*67e74705SXin Li
anchor()43*67e74705SXin Li void InputAction::anchor() {}
44*67e74705SXin Li
InputAction(const Arg & _Input,types::ID _Type)45*67e74705SXin Li InputAction::InputAction(const Arg &_Input, types::ID _Type)
46*67e74705SXin Li : Action(InputClass, _Type), Input(_Input) {
47*67e74705SXin Li }
48*67e74705SXin Li
anchor()49*67e74705SXin Li void BindArchAction::anchor() {}
50*67e74705SXin Li
BindArchAction(Action * Input,const char * _ArchName)51*67e74705SXin Li BindArchAction::BindArchAction(Action *Input, const char *_ArchName)
52*67e74705SXin Li : Action(BindArchClass, Input), ArchName(_ArchName) {}
53*67e74705SXin Li
anchor()54*67e74705SXin Li void CudaDeviceAction::anchor() {}
55*67e74705SXin Li
CudaDeviceAction(Action * Input,clang::CudaArch Arch,bool AtTopLevel)56*67e74705SXin Li CudaDeviceAction::CudaDeviceAction(Action *Input, clang::CudaArch Arch,
57*67e74705SXin Li bool AtTopLevel)
58*67e74705SXin Li : Action(CudaDeviceClass, Input), GpuArch(Arch), AtTopLevel(AtTopLevel) {}
59*67e74705SXin Li
anchor()60*67e74705SXin Li void CudaHostAction::anchor() {}
61*67e74705SXin Li
CudaHostAction(Action * Input,const ActionList & DeviceActions)62*67e74705SXin Li CudaHostAction::CudaHostAction(Action *Input, const ActionList &DeviceActions)
63*67e74705SXin Li : Action(CudaHostClass, Input), DeviceActions(DeviceActions) {}
64*67e74705SXin Li
anchor()65*67e74705SXin Li void JobAction::anchor() {}
66*67e74705SXin Li
JobAction(ActionClass Kind,Action * Input,types::ID Type)67*67e74705SXin Li JobAction::JobAction(ActionClass Kind, Action *Input, types::ID Type)
68*67e74705SXin Li : Action(Kind, Input, Type) {}
69*67e74705SXin Li
JobAction(ActionClass Kind,const ActionList & Inputs,types::ID Type)70*67e74705SXin Li JobAction::JobAction(ActionClass Kind, const ActionList &Inputs, types::ID Type)
71*67e74705SXin Li : Action(Kind, Inputs, Type) {
72*67e74705SXin Li }
73*67e74705SXin Li
anchor()74*67e74705SXin Li void PreprocessJobAction::anchor() {}
75*67e74705SXin Li
PreprocessJobAction(Action * Input,types::ID OutputType)76*67e74705SXin Li PreprocessJobAction::PreprocessJobAction(Action *Input, types::ID OutputType)
77*67e74705SXin Li : JobAction(PreprocessJobClass, Input, OutputType) {}
78*67e74705SXin Li
anchor()79*67e74705SXin Li void PrecompileJobAction::anchor() {}
80*67e74705SXin Li
PrecompileJobAction(Action * Input,types::ID OutputType)81*67e74705SXin Li PrecompileJobAction::PrecompileJobAction(Action *Input, types::ID OutputType)
82*67e74705SXin Li : JobAction(PrecompileJobClass, Input, OutputType) {}
83*67e74705SXin Li
anchor()84*67e74705SXin Li void AnalyzeJobAction::anchor() {}
85*67e74705SXin Li
AnalyzeJobAction(Action * Input,types::ID OutputType)86*67e74705SXin Li AnalyzeJobAction::AnalyzeJobAction(Action *Input, types::ID OutputType)
87*67e74705SXin Li : JobAction(AnalyzeJobClass, Input, OutputType) {}
88*67e74705SXin Li
anchor()89*67e74705SXin Li void MigrateJobAction::anchor() {}
90*67e74705SXin Li
MigrateJobAction(Action * Input,types::ID OutputType)91*67e74705SXin Li MigrateJobAction::MigrateJobAction(Action *Input, types::ID OutputType)
92*67e74705SXin Li : JobAction(MigrateJobClass, Input, OutputType) {}
93*67e74705SXin Li
anchor()94*67e74705SXin Li void CompileJobAction::anchor() {}
95*67e74705SXin Li
CompileJobAction(Action * Input,types::ID OutputType)96*67e74705SXin Li CompileJobAction::CompileJobAction(Action *Input, types::ID OutputType)
97*67e74705SXin Li : JobAction(CompileJobClass, Input, OutputType) {}
98*67e74705SXin Li
anchor()99*67e74705SXin Li void BackendJobAction::anchor() {}
100*67e74705SXin Li
BackendJobAction(Action * Input,types::ID OutputType)101*67e74705SXin Li BackendJobAction::BackendJobAction(Action *Input, types::ID OutputType)
102*67e74705SXin Li : JobAction(BackendJobClass, Input, OutputType) {}
103*67e74705SXin Li
anchor()104*67e74705SXin Li void AssembleJobAction::anchor() {}
105*67e74705SXin Li
AssembleJobAction(Action * Input,types::ID OutputType)106*67e74705SXin Li AssembleJobAction::AssembleJobAction(Action *Input, types::ID OutputType)
107*67e74705SXin Li : JobAction(AssembleJobClass, Input, OutputType) {}
108*67e74705SXin Li
anchor()109*67e74705SXin Li void LinkJobAction::anchor() {}
110*67e74705SXin Li
LinkJobAction(ActionList & Inputs,types::ID Type)111*67e74705SXin Li LinkJobAction::LinkJobAction(ActionList &Inputs, types::ID Type)
112*67e74705SXin Li : JobAction(LinkJobClass, Inputs, Type) {
113*67e74705SXin Li }
114*67e74705SXin Li
anchor()115*67e74705SXin Li void LipoJobAction::anchor() {}
116*67e74705SXin Li
LipoJobAction(ActionList & Inputs,types::ID Type)117*67e74705SXin Li LipoJobAction::LipoJobAction(ActionList &Inputs, types::ID Type)
118*67e74705SXin Li : JobAction(LipoJobClass, Inputs, Type) {
119*67e74705SXin Li }
120*67e74705SXin Li
anchor()121*67e74705SXin Li void DsymutilJobAction::anchor() {}
122*67e74705SXin Li
DsymutilJobAction(ActionList & Inputs,types::ID Type)123*67e74705SXin Li DsymutilJobAction::DsymutilJobAction(ActionList &Inputs, types::ID Type)
124*67e74705SXin Li : JobAction(DsymutilJobClass, Inputs, Type) {
125*67e74705SXin Li }
126*67e74705SXin Li
anchor()127*67e74705SXin Li void VerifyJobAction::anchor() {}
128*67e74705SXin Li
VerifyJobAction(ActionClass Kind,Action * Input,types::ID Type)129*67e74705SXin Li VerifyJobAction::VerifyJobAction(ActionClass Kind, Action *Input,
130*67e74705SXin Li types::ID Type)
131*67e74705SXin Li : JobAction(Kind, Input, Type) {
132*67e74705SXin Li assert((Kind == VerifyDebugInfoJobClass || Kind == VerifyPCHJobClass) &&
133*67e74705SXin Li "ActionClass is not a valid VerifyJobAction");
134*67e74705SXin Li }
135*67e74705SXin Li
anchor()136*67e74705SXin Li void VerifyDebugInfoJobAction::anchor() {}
137*67e74705SXin Li
VerifyDebugInfoJobAction(Action * Input,types::ID Type)138*67e74705SXin Li VerifyDebugInfoJobAction::VerifyDebugInfoJobAction(Action *Input,
139*67e74705SXin Li types::ID Type)
140*67e74705SXin Li : VerifyJobAction(VerifyDebugInfoJobClass, Input, Type) {}
141*67e74705SXin Li
anchor()142*67e74705SXin Li void VerifyPCHJobAction::anchor() {}
143*67e74705SXin Li
VerifyPCHJobAction(Action * Input,types::ID Type)144*67e74705SXin Li VerifyPCHJobAction::VerifyPCHJobAction(Action *Input, types::ID Type)
145*67e74705SXin Li : VerifyJobAction(VerifyPCHJobClass, Input, Type) {}
146