blob: 6fe2a5034640419d7b8dcb9dedb705d4a0cdd47c [file] [log] [blame]
Nick Lewycky6da90772010-12-31 17:31:54 +00001//===--- Action.cpp - Abstract compilation steps --------------------------===//
Daniel Dunbarf479c122009-03-12 18:40:18 +00002//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
10#include "clang/Driver/Action.h"
David Blaikie79000202011-09-23 05:57:42 +000011#include "llvm/Support/ErrorHandling.h"
Daniel Dunbarf479c122009-03-12 18:40:18 +000012#include <cassert>
13using namespace clang::driver;
Reid Kleckner898229a2013-06-14 17:17:23 +000014using namespace llvm::opt;
Daniel Dunbarf479c122009-03-12 18:40:18 +000015
Daniel Dunbarf0eddb82009-03-18 02:55:38 +000016Action::~Action() {
Daniel Dunbar66187b32010-03-11 18:04:58 +000017 if (OwnsInputs) {
18 for (iterator it = begin(), ie = end(); it != ie; ++it)
19 delete *it;
20 }
Daniel Dunbarf0eddb82009-03-18 02:55:38 +000021}
Daniel Dunbar80665fb2009-03-13 12:17:08 +000022
23const char *Action::getClassName(ActionClass AC) {
24 switch (AC) {
25 case InputClass: return "input";
26 case BindArchClass: return "bind-arch";
Artem Belevich0ff05cd2015-07-13 23:27:56 +000027 case CudaDeviceClass: return "cuda-device";
28 case CudaHostClass: return "cuda-host";
Daniel Dunbar7326ad52009-03-13 17:52:07 +000029 case PreprocessJobClass: return "preprocessor";
30 case PrecompileJobClass: return "precompiler";
31 case AnalyzeJobClass: return "analyzer";
Ted Kremenekf7639e12012-03-06 20:06:33 +000032 case MigrateJobClass: return "migrator";
Daniel Dunbar7326ad52009-03-13 17:52:07 +000033 case CompileJobClass: return "compiler";
Bob Wilson23a55f12014-12-21 07:00:00 +000034 case BackendJobClass: return "backend";
Daniel Dunbar7326ad52009-03-13 17:52:07 +000035 case AssembleJobClass: return "assembler";
36 case LinkJobClass: return "linker";
Daniel Dunbar80665fb2009-03-13 12:17:08 +000037 case LipoJobClass: return "lipo";
Daniel Dunbar88299622010-06-04 18:28:36 +000038 case DsymutilJobClass: return "dsymutil";
Ben Langmuir9b9a8d32014-02-06 18:53:25 +000039 case VerifyDebugInfoJobClass: return "verify-debug-info";
40 case VerifyPCHJobClass: return "verify-pch";
Daniel Dunbar80665fb2009-03-13 12:17:08 +000041 }
Mike Stump11289f42009-09-09 15:08:12 +000042
David Blaikie83d382b2011-09-23 05:06:16 +000043 llvm_unreachable("invalid class");
Daniel Dunbar80665fb2009-03-13 12:17:08 +000044}
Daniel Dunbar3f261ff2009-03-13 23:08:03 +000045
David Blaikie68e081d2011-12-20 02:48:34 +000046void InputAction::anchor() {}
47
Mike Stump11289f42009-09-09 15:08:12 +000048InputAction::InputAction(const Arg &_Input, types::ID _Type)
Daniel Dunbar3f261ff2009-03-13 23:08:03 +000049 : Action(InputClass, _Type), Input(_Input) {
50}
51
David Blaikie68e081d2011-12-20 02:48:34 +000052void BindArchAction::anchor() {}
53
David Blaikie486f4402014-08-29 07:25:23 +000054BindArchAction::BindArchAction(std::unique_ptr<Action> Input,
55 const char *_ArchName)
56 : Action(BindArchClass, std::move(Input)), ArchName(_ArchName) {}
Daniel Dunbar3f261ff2009-03-13 23:08:03 +000057
Artem Belevich0ff05cd2015-07-13 23:27:56 +000058void CudaDeviceAction::anchor() {}
59
60CudaDeviceAction::CudaDeviceAction(std::unique_ptr<Action> Input,
Artem Belevichdb35a3e2015-07-20 21:59:31 +000061 const char *ArchName,
62 const char *DeviceTriple, bool AtTopLevel)
Artem Belevich0ff05cd2015-07-13 23:27:56 +000063 : Action(CudaDeviceClass, std::move(Input)), GpuArchName(ArchName),
Artem Belevichdb35a3e2015-07-20 21:59:31 +000064 DeviceTriple(DeviceTriple), AtTopLevel(AtTopLevel) {}
Artem Belevich0ff05cd2015-07-13 23:27:56 +000065
66void CudaHostAction::anchor() {}
67
68CudaHostAction::CudaHostAction(std::unique_ptr<Action> Input,
Artem Belevich5bde4e02015-07-20 20:02:54 +000069 const ActionList &DeviceActions)
70 : Action(CudaHostClass, std::move(Input)), DeviceActions(DeviceActions) {}
Artem Belevich0ff05cd2015-07-13 23:27:56 +000071
72CudaHostAction::~CudaHostAction() {
Artem Belevich5bde4e02015-07-20 20:02:54 +000073 for (auto &DA : DeviceActions)
74 delete DA;
Artem Belevich0ff05cd2015-07-13 23:27:56 +000075}
76
David Blaikie68e081d2011-12-20 02:48:34 +000077void JobAction::anchor() {}
78
David Blaikie486f4402014-08-29 07:25:23 +000079JobAction::JobAction(ActionClass Kind, std::unique_ptr<Action> Input,
80 types::ID Type)
81 : Action(Kind, std::move(Input), Type) {}
Daniel Dunbar3f261ff2009-03-13 23:08:03 +000082
Mike Stump11289f42009-09-09 15:08:12 +000083JobAction::JobAction(ActionClass Kind, const ActionList &Inputs, types::ID Type)
Daniel Dunbar3f261ff2009-03-13 23:08:03 +000084 : Action(Kind, Inputs, Type) {
85}
86
David Blaikie68e081d2011-12-20 02:48:34 +000087void PreprocessJobAction::anchor() {}
88
David Blaikie486f4402014-08-29 07:25:23 +000089PreprocessJobAction::PreprocessJobAction(std::unique_ptr<Action> Input,
90 types::ID OutputType)
91 : JobAction(PreprocessJobClass, std::move(Input), OutputType) {}
Daniel Dunbar3f261ff2009-03-13 23:08:03 +000092
David Blaikie68e081d2011-12-20 02:48:34 +000093void PrecompileJobAction::anchor() {}
94
David Blaikie486f4402014-08-29 07:25:23 +000095PrecompileJobAction::PrecompileJobAction(std::unique_ptr<Action> Input,
96 types::ID OutputType)
97 : JobAction(PrecompileJobClass, std::move(Input), OutputType) {}
Daniel Dunbar3f261ff2009-03-13 23:08:03 +000098
David Blaikie68e081d2011-12-20 02:48:34 +000099void AnalyzeJobAction::anchor() {}
100
David Blaikie486f4402014-08-29 07:25:23 +0000101AnalyzeJobAction::AnalyzeJobAction(std::unique_ptr<Action> Input,
102 types::ID OutputType)
103 : JobAction(AnalyzeJobClass, std::move(Input), OutputType) {}
Daniel Dunbar3f261ff2009-03-13 23:08:03 +0000104
Ted Kremenekf7639e12012-03-06 20:06:33 +0000105void MigrateJobAction::anchor() {}
106
David Blaikie486f4402014-08-29 07:25:23 +0000107MigrateJobAction::MigrateJobAction(std::unique_ptr<Action> Input,
108 types::ID OutputType)
109 : JobAction(MigrateJobClass, std::move(Input), OutputType) {}
Ted Kremenekf7639e12012-03-06 20:06:33 +0000110
David Blaikie68e081d2011-12-20 02:48:34 +0000111void CompileJobAction::anchor() {}
112
David Blaikie486f4402014-08-29 07:25:23 +0000113CompileJobAction::CompileJobAction(std::unique_ptr<Action> Input,
114 types::ID OutputType)
115 : JobAction(CompileJobClass, std::move(Input), OutputType) {}
Daniel Dunbar3f261ff2009-03-13 23:08:03 +0000116
Bob Wilson23a55f12014-12-21 07:00:00 +0000117void BackendJobAction::anchor() {}
118
119BackendJobAction::BackendJobAction(std::unique_ptr<Action> Input,
120 types::ID OutputType)
121 : JobAction(BackendJobClass, std::move(Input), OutputType) {}
122
David Blaikie68e081d2011-12-20 02:48:34 +0000123void AssembleJobAction::anchor() {}
124
David Blaikie486f4402014-08-29 07:25:23 +0000125AssembleJobAction::AssembleJobAction(std::unique_ptr<Action> Input,
126 types::ID OutputType)
127 : JobAction(AssembleJobClass, std::move(Input), OutputType) {}
Daniel Dunbar3f261ff2009-03-13 23:08:03 +0000128
David Blaikie68e081d2011-12-20 02:48:34 +0000129void LinkJobAction::anchor() {}
130
Mike Stump11289f42009-09-09 15:08:12 +0000131LinkJobAction::LinkJobAction(ActionList &Inputs, types::ID Type)
Daniel Dunbar3f261ff2009-03-13 23:08:03 +0000132 : JobAction(LinkJobClass, Inputs, Type) {
133}
134
David Blaikie68e081d2011-12-20 02:48:34 +0000135void LipoJobAction::anchor() {}
136
Mike Stump11289f42009-09-09 15:08:12 +0000137LipoJobAction::LipoJobAction(ActionList &Inputs, types::ID Type)
Daniel Dunbar3f261ff2009-03-13 23:08:03 +0000138 : JobAction(LipoJobClass, Inputs, Type) {
139}
Daniel Dunbar88299622010-06-04 18:28:36 +0000140
David Blaikie68e081d2011-12-20 02:48:34 +0000141void DsymutilJobAction::anchor() {}
142
Daniel Dunbar88299622010-06-04 18:28:36 +0000143DsymutilJobAction::DsymutilJobAction(ActionList &Inputs, types::ID Type)
144 : JobAction(DsymutilJobClass, Inputs, Type) {
145}
Eric Christopher551ef452011-08-23 17:56:55 +0000146
David Blaikie68e081d2011-12-20 02:48:34 +0000147void VerifyJobAction::anchor() {}
148
David Blaikie486f4402014-08-29 07:25:23 +0000149VerifyJobAction::VerifyJobAction(ActionClass Kind,
150 std::unique_ptr<Action> Input, types::ID Type)
151 : JobAction(Kind, std::move(Input), Type) {
Ben Langmuir9b9a8d32014-02-06 18:53:25 +0000152 assert((Kind == VerifyDebugInfoJobClass || Kind == VerifyPCHJobClass) &&
153 "ActionClass is not a valid VerifyJobAction");
154}
155
Ben Langmuir9b9a8d32014-02-06 18:53:25 +0000156void VerifyDebugInfoJobAction::anchor() {}
157
David Blaikie486f4402014-08-29 07:25:23 +0000158VerifyDebugInfoJobAction::VerifyDebugInfoJobAction(
159 std::unique_ptr<Action> Input, types::ID Type)
160 : VerifyJobAction(VerifyDebugInfoJobClass, std::move(Input), Type) {}
Ben Langmuir9b9a8d32014-02-06 18:53:25 +0000161
162void VerifyPCHJobAction::anchor() {}
163
David Blaikie486f4402014-08-29 07:25:23 +0000164VerifyPCHJobAction::VerifyPCHJobAction(std::unique_ptr<Action> Input,
165 types::ID Type)
166 : VerifyJobAction(VerifyPCHJobClass, std::move(Input), Type) {}