13fdcc6fb12d7cf38d2a3111736f80f0dd55447b4Nick Lewycky//===--- Action.cpp - Abstract compilation steps --------------------------===//
22fe63e6adac0b9e5f52bcc3100b545e379417e6eDaniel Dunbar//
32fe63e6adac0b9e5f52bcc3100b545e379417e6eDaniel Dunbar//                     The LLVM Compiler Infrastructure
42fe63e6adac0b9e5f52bcc3100b545e379417e6eDaniel Dunbar//
52fe63e6adac0b9e5f52bcc3100b545e379417e6eDaniel Dunbar// This file is distributed under the University of Illinois Open Source
62fe63e6adac0b9e5f52bcc3100b545e379417e6eDaniel Dunbar// License. See LICENSE.TXT for details.
72fe63e6adac0b9e5f52bcc3100b545e379417e6eDaniel Dunbar//
82fe63e6adac0b9e5f52bcc3100b545e379417e6eDaniel Dunbar//===----------------------------------------------------------------------===//
92fe63e6adac0b9e5f52bcc3100b545e379417e6eDaniel Dunbar
102fe63e6adac0b9e5f52bcc3100b545e379417e6eDaniel Dunbar#include "clang/Driver/Action.h"
11548f6c8e8010b181cb151df92f0a989363cb993eDavid Blaikie#include "llvm/Support/ErrorHandling.h"
122fe63e6adac0b9e5f52bcc3100b545e379417e6eDaniel Dunbar#include <cassert>
132fe63e6adac0b9e5f52bcc3100b545e379417e6eDaniel Dunbarusing namespace clang::driver;
14b1e25a1bc03292dc538d336573e0be1490223171Reid Klecknerusing namespace llvm::opt;
152fe63e6adac0b9e5f52bcc3100b545e379417e6eDaniel Dunbar
1621549237f14505cfc2a18a06416372a36229d0ceDaniel DunbarAction::~Action() {
1732c1a2ae8b31f32e478c8e504ed81db8c8d25713Daniel Dunbar  if (OwnsInputs) {
1832c1a2ae8b31f32e478c8e504ed81db8c8d25713Daniel Dunbar    for (iterator it = begin(), ie = end(); it != ie; ++it)
1932c1a2ae8b31f32e478c8e504ed81db8c8d25713Daniel Dunbar      delete *it;
2032c1a2ae8b31f32e478c8e504ed81db8c8d25713Daniel Dunbar  }
2121549237f14505cfc2a18a06416372a36229d0ceDaniel Dunbar}
2285da0071a4ab7d6f06831d20bad79122d7407df7Daniel Dunbar
2385da0071a4ab7d6f06831d20bad79122d7407df7Daniel Dunbarconst char *Action::getClassName(ActionClass AC) {
2485da0071a4ab7d6f06831d20bad79122d7407df7Daniel Dunbar  switch (AC) {
2585da0071a4ab7d6f06831d20bad79122d7407df7Daniel Dunbar  case InputClass: return "input";
2685da0071a4ab7d6f06831d20bad79122d7407df7Daniel Dunbar  case BindArchClass: return "bind-arch";
27209333506a935c582a7d62ad470978baec71afdcDaniel Dunbar  case PreprocessJobClass: return "preprocessor";
28209333506a935c582a7d62ad470978baec71afdcDaniel Dunbar  case PrecompileJobClass: return "precompiler";
29209333506a935c582a7d62ad470978baec71afdcDaniel Dunbar  case AnalyzeJobClass: return "analyzer";
3030660a898545416f0fea2d717f16f75640001e38Ted Kremenek  case MigrateJobClass: return "migrator";
31209333506a935c582a7d62ad470978baec71afdcDaniel Dunbar  case CompileJobClass: return "compiler";
32209333506a935c582a7d62ad470978baec71afdcDaniel Dunbar  case AssembleJobClass: return "assembler";
33209333506a935c582a7d62ad470978baec71afdcDaniel Dunbar  case LinkJobClass: return "linker";
3485da0071a4ab7d6f06831d20bad79122d7407df7Daniel Dunbar  case LipoJobClass: return "lipo";
356e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar  case DsymutilJobClass: return "dsymutil";
36651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  case VerifyDebugInfoJobClass: return "verify-debug-info";
37651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  case VerifyPCHJobClass: return "verify-pch";
3885da0071a4ab7d6f06831d20bad79122d7407df7Daniel Dunbar  }
391eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump
40b219cfc4d75f0a03630b7c4509ef791b7e97b2c8David Blaikie  llvm_unreachable("invalid class");
4185da0071a4ab7d6f06831d20bad79122d7407df7Daniel Dunbar}
42f40ed17472a39097cc5039ed437445289487c9bfDaniel Dunbar
4399ba9e3bd70671f3441fb974895f226a83ce0e66David Blaikievoid InputAction::anchor() {}
4499ba9e3bd70671f3441fb974895f226a83ce0e66David Blaikie
451eb4433ac451dc16f4133a88af2d002ac26c58efMike StumpInputAction::InputAction(const Arg &_Input, types::ID _Type)
46f40ed17472a39097cc5039ed437445289487c9bfDaniel Dunbar  : Action(InputClass, _Type), Input(_Input) {
47f40ed17472a39097cc5039ed437445289487c9bfDaniel Dunbar}
48f40ed17472a39097cc5039ed437445289487c9bfDaniel Dunbar
4999ba9e3bd70671f3441fb974895f226a83ce0e66David Blaikievoid BindArchAction::anchor() {}
5099ba9e3bd70671f3441fb974895f226a83ce0e66David Blaikie
511eb4433ac451dc16f4133a88af2d002ac26c58efMike StumpBindArchAction::BindArchAction(Action *Input, const char *_ArchName)
52f40ed17472a39097cc5039ed437445289487c9bfDaniel Dunbar  : Action(BindArchClass, Input, Input->getType()), ArchName(_ArchName) {
53f40ed17472a39097cc5039ed437445289487c9bfDaniel Dunbar}
54f40ed17472a39097cc5039ed437445289487c9bfDaniel Dunbar
5599ba9e3bd70671f3441fb974895f226a83ce0e66David Blaikievoid JobAction::anchor() {}
5699ba9e3bd70671f3441fb974895f226a83ce0e66David Blaikie
57f40ed17472a39097cc5039ed437445289487c9bfDaniel DunbarJobAction::JobAction(ActionClass Kind, Action *Input, types::ID Type)
58f40ed17472a39097cc5039ed437445289487c9bfDaniel Dunbar  : Action(Kind, Input, Type) {
59f40ed17472a39097cc5039ed437445289487c9bfDaniel Dunbar}
60f40ed17472a39097cc5039ed437445289487c9bfDaniel Dunbar
611eb4433ac451dc16f4133a88af2d002ac26c58efMike StumpJobAction::JobAction(ActionClass Kind, const ActionList &Inputs, types::ID Type)
62f40ed17472a39097cc5039ed437445289487c9bfDaniel Dunbar  : Action(Kind, Inputs, Type) {
63f40ed17472a39097cc5039ed437445289487c9bfDaniel Dunbar}
64f40ed17472a39097cc5039ed437445289487c9bfDaniel Dunbar
6599ba9e3bd70671f3441fb974895f226a83ce0e66David Blaikievoid PreprocessJobAction::anchor() {}
6699ba9e3bd70671f3441fb974895f226a83ce0e66David Blaikie
67f40ed17472a39097cc5039ed437445289487c9bfDaniel DunbarPreprocessJobAction::PreprocessJobAction(Action *Input, types::ID OutputType)
68f40ed17472a39097cc5039ed437445289487c9bfDaniel Dunbar  : JobAction(PreprocessJobClass, Input, OutputType) {
69f40ed17472a39097cc5039ed437445289487c9bfDaniel Dunbar}
70f40ed17472a39097cc5039ed437445289487c9bfDaniel Dunbar
7199ba9e3bd70671f3441fb974895f226a83ce0e66David Blaikievoid PrecompileJobAction::anchor() {}
7299ba9e3bd70671f3441fb974895f226a83ce0e66David Blaikie
73f40ed17472a39097cc5039ed437445289487c9bfDaniel DunbarPrecompileJobAction::PrecompileJobAction(Action *Input, types::ID OutputType)
74f40ed17472a39097cc5039ed437445289487c9bfDaniel Dunbar  : JobAction(PrecompileJobClass, Input, OutputType) {
75f40ed17472a39097cc5039ed437445289487c9bfDaniel Dunbar}
76f40ed17472a39097cc5039ed437445289487c9bfDaniel Dunbar
7799ba9e3bd70671f3441fb974895f226a83ce0e66David Blaikievoid AnalyzeJobAction::anchor() {}
7899ba9e3bd70671f3441fb974895f226a83ce0e66David Blaikie
79f40ed17472a39097cc5039ed437445289487c9bfDaniel DunbarAnalyzeJobAction::AnalyzeJobAction(Action *Input, types::ID OutputType)
80f40ed17472a39097cc5039ed437445289487c9bfDaniel Dunbar  : JobAction(AnalyzeJobClass, Input, OutputType) {
81f40ed17472a39097cc5039ed437445289487c9bfDaniel Dunbar}
82f40ed17472a39097cc5039ed437445289487c9bfDaniel Dunbar
8330660a898545416f0fea2d717f16f75640001e38Ted Kremenekvoid MigrateJobAction::anchor() {}
8430660a898545416f0fea2d717f16f75640001e38Ted Kremenek
8530660a898545416f0fea2d717f16f75640001e38Ted KremenekMigrateJobAction::MigrateJobAction(Action *Input, types::ID OutputType)
8630660a898545416f0fea2d717f16f75640001e38Ted Kremenek  : JobAction(MigrateJobClass, Input, OutputType) {
8730660a898545416f0fea2d717f16f75640001e38Ted Kremenek}
8830660a898545416f0fea2d717f16f75640001e38Ted Kremenek
8999ba9e3bd70671f3441fb974895f226a83ce0e66David Blaikievoid CompileJobAction::anchor() {}
9099ba9e3bd70671f3441fb974895f226a83ce0e66David Blaikie
91f40ed17472a39097cc5039ed437445289487c9bfDaniel DunbarCompileJobAction::CompileJobAction(Action *Input, types::ID OutputType)
92f40ed17472a39097cc5039ed437445289487c9bfDaniel Dunbar  : JobAction(CompileJobClass, Input, OutputType) {
93f40ed17472a39097cc5039ed437445289487c9bfDaniel Dunbar}
94f40ed17472a39097cc5039ed437445289487c9bfDaniel Dunbar
9599ba9e3bd70671f3441fb974895f226a83ce0e66David Blaikievoid AssembleJobAction::anchor() {}
9699ba9e3bd70671f3441fb974895f226a83ce0e66David Blaikie
97f40ed17472a39097cc5039ed437445289487c9bfDaniel DunbarAssembleJobAction::AssembleJobAction(Action *Input, types::ID OutputType)
98f40ed17472a39097cc5039ed437445289487c9bfDaniel Dunbar  : JobAction(AssembleJobClass, Input, OutputType) {
99f40ed17472a39097cc5039ed437445289487c9bfDaniel Dunbar}
100f40ed17472a39097cc5039ed437445289487c9bfDaniel Dunbar
10199ba9e3bd70671f3441fb974895f226a83ce0e66David Blaikievoid LinkJobAction::anchor() {}
10299ba9e3bd70671f3441fb974895f226a83ce0e66David Blaikie
1031eb4433ac451dc16f4133a88af2d002ac26c58efMike StumpLinkJobAction::LinkJobAction(ActionList &Inputs, types::ID Type)
104f40ed17472a39097cc5039ed437445289487c9bfDaniel Dunbar  : JobAction(LinkJobClass, Inputs, Type) {
105f40ed17472a39097cc5039ed437445289487c9bfDaniel Dunbar}
106f40ed17472a39097cc5039ed437445289487c9bfDaniel Dunbar
10799ba9e3bd70671f3441fb974895f226a83ce0e66David Blaikievoid LipoJobAction::anchor() {}
10899ba9e3bd70671f3441fb974895f226a83ce0e66David Blaikie
1091eb4433ac451dc16f4133a88af2d002ac26c58efMike StumpLipoJobAction::LipoJobAction(ActionList &Inputs, types::ID Type)
110f40ed17472a39097cc5039ed437445289487c9bfDaniel Dunbar  : JobAction(LipoJobClass, Inputs, Type) {
111f40ed17472a39097cc5039ed437445289487c9bfDaniel Dunbar}
1126e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar
11399ba9e3bd70671f3441fb974895f226a83ce0e66David Blaikievoid DsymutilJobAction::anchor() {}
11499ba9e3bd70671f3441fb974895f226a83ce0e66David Blaikie
1156e0f25483b1a801cd1155ea89c2b725feab16332Daniel DunbarDsymutilJobAction::DsymutilJobAction(ActionList &Inputs, types::ID Type)
1166e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar  : JobAction(DsymutilJobClass, Inputs, Type) {
1176e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar}
118f857186fd1995b34185d063a29b11ad4f948519fEric Christopher
11999ba9e3bd70671f3441fb974895f226a83ce0e66David Blaikievoid VerifyJobAction::anchor() {}
12099ba9e3bd70671f3441fb974895f226a83ce0e66David Blaikie
121651f13cea278ec967336033dd032faef0e9fc2ecStephen HinesVerifyJobAction::VerifyJobAction(ActionClass Kind, Action *Input,
122651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines                                 types::ID Type)
123651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines    : JobAction(Kind, Input, Type) {
124651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  assert((Kind == VerifyDebugInfoJobClass || Kind == VerifyPCHJobClass) &&
125651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines         "ActionClass is not a valid VerifyJobAction");
126651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
127651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
128651f13cea278ec967336033dd032faef0e9fc2ecStephen HinesVerifyJobAction::VerifyJobAction(ActionClass Kind, ActionList &Inputs,
129651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines                                 types::ID Type)
130651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines    : JobAction(Kind, Inputs, Type) {
131651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  assert((Kind == VerifyDebugInfoJobClass || Kind == VerifyPCHJobClass) &&
132651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines           "ActionClass is not a valid VerifyJobAction");
133651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
134651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
135651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesvoid VerifyDebugInfoJobAction::anchor() {}
136651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
137651f13cea278ec967336033dd032faef0e9fc2ecStephen HinesVerifyDebugInfoJobAction::VerifyDebugInfoJobAction(Action *Input,
138651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines                                                   types::ID Type)
139651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines    : VerifyJobAction(VerifyDebugInfoJobClass, Input, Type) {
140651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
141651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
142651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesvoid VerifyPCHJobAction::anchor() {}
143651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
144651f13cea278ec967336033dd032faef0e9fc2ecStephen HinesVerifyPCHJobAction::VerifyPCHJobAction(Action *Input, types::ID Type)
145651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines    : VerifyJobAction(VerifyPCHJobClass, Input, Type) {
146f857186fd1995b34185d063a29b11ad4f948519fEric Christopher}
147