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";
36f857186fd1995b34185d063a29b11ad4f948519fEric Christopher  case VerifyJobClass: return "verify";
3785da0071a4ab7d6f06831d20bad79122d7407df7Daniel Dunbar  }
381eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump
39b219cfc4d75f0a03630b7c4509ef791b7e97b2c8David Blaikie  llvm_unreachable("invalid class");
4085da0071a4ab7d6f06831d20bad79122d7407df7Daniel Dunbar}
41f40ed17472a39097cc5039ed437445289487c9bfDaniel Dunbar
4299ba9e3bd70671f3441fb974895f226a83ce0e66David Blaikievoid InputAction::anchor() {}
4399ba9e3bd70671f3441fb974895f226a83ce0e66David Blaikie
441eb4433ac451dc16f4133a88af2d002ac26c58efMike StumpInputAction::InputAction(const Arg &_Input, types::ID _Type)
45f40ed17472a39097cc5039ed437445289487c9bfDaniel Dunbar  : Action(InputClass, _Type), Input(_Input) {
46f40ed17472a39097cc5039ed437445289487c9bfDaniel Dunbar}
47f40ed17472a39097cc5039ed437445289487c9bfDaniel Dunbar
4899ba9e3bd70671f3441fb974895f226a83ce0e66David Blaikievoid BindArchAction::anchor() {}
4999ba9e3bd70671f3441fb974895f226a83ce0e66David Blaikie
501eb4433ac451dc16f4133a88af2d002ac26c58efMike StumpBindArchAction::BindArchAction(Action *Input, const char *_ArchName)
51f40ed17472a39097cc5039ed437445289487c9bfDaniel Dunbar  : Action(BindArchClass, Input, Input->getType()), ArchName(_ArchName) {
52f40ed17472a39097cc5039ed437445289487c9bfDaniel Dunbar}
53f40ed17472a39097cc5039ed437445289487c9bfDaniel Dunbar
5499ba9e3bd70671f3441fb974895f226a83ce0e66David Blaikievoid JobAction::anchor() {}
5599ba9e3bd70671f3441fb974895f226a83ce0e66David Blaikie
56f40ed17472a39097cc5039ed437445289487c9bfDaniel DunbarJobAction::JobAction(ActionClass Kind, Action *Input, types::ID Type)
57f40ed17472a39097cc5039ed437445289487c9bfDaniel Dunbar  : Action(Kind, Input, Type) {
58f40ed17472a39097cc5039ed437445289487c9bfDaniel Dunbar}
59f40ed17472a39097cc5039ed437445289487c9bfDaniel Dunbar
601eb4433ac451dc16f4133a88af2d002ac26c58efMike StumpJobAction::JobAction(ActionClass Kind, const ActionList &Inputs, types::ID Type)
61f40ed17472a39097cc5039ed437445289487c9bfDaniel Dunbar  : Action(Kind, Inputs, Type) {
62f40ed17472a39097cc5039ed437445289487c9bfDaniel Dunbar}
63f40ed17472a39097cc5039ed437445289487c9bfDaniel Dunbar
6499ba9e3bd70671f3441fb974895f226a83ce0e66David Blaikievoid PreprocessJobAction::anchor() {}
6599ba9e3bd70671f3441fb974895f226a83ce0e66David Blaikie
66f40ed17472a39097cc5039ed437445289487c9bfDaniel DunbarPreprocessJobAction::PreprocessJobAction(Action *Input, types::ID OutputType)
67f40ed17472a39097cc5039ed437445289487c9bfDaniel Dunbar  : JobAction(PreprocessJobClass, Input, OutputType) {
68f40ed17472a39097cc5039ed437445289487c9bfDaniel Dunbar}
69f40ed17472a39097cc5039ed437445289487c9bfDaniel Dunbar
7099ba9e3bd70671f3441fb974895f226a83ce0e66David Blaikievoid PrecompileJobAction::anchor() {}
7199ba9e3bd70671f3441fb974895f226a83ce0e66David Blaikie
72f40ed17472a39097cc5039ed437445289487c9bfDaniel DunbarPrecompileJobAction::PrecompileJobAction(Action *Input, types::ID OutputType)
73f40ed17472a39097cc5039ed437445289487c9bfDaniel Dunbar  : JobAction(PrecompileJobClass, Input, OutputType) {
74f40ed17472a39097cc5039ed437445289487c9bfDaniel Dunbar}
75f40ed17472a39097cc5039ed437445289487c9bfDaniel Dunbar
7699ba9e3bd70671f3441fb974895f226a83ce0e66David Blaikievoid AnalyzeJobAction::anchor() {}
7799ba9e3bd70671f3441fb974895f226a83ce0e66David Blaikie
78f40ed17472a39097cc5039ed437445289487c9bfDaniel DunbarAnalyzeJobAction::AnalyzeJobAction(Action *Input, types::ID OutputType)
79f40ed17472a39097cc5039ed437445289487c9bfDaniel Dunbar  : JobAction(AnalyzeJobClass, Input, OutputType) {
80f40ed17472a39097cc5039ed437445289487c9bfDaniel Dunbar}
81f40ed17472a39097cc5039ed437445289487c9bfDaniel Dunbar
8230660a898545416f0fea2d717f16f75640001e38Ted Kremenekvoid MigrateJobAction::anchor() {}
8330660a898545416f0fea2d717f16f75640001e38Ted Kremenek
8430660a898545416f0fea2d717f16f75640001e38Ted KremenekMigrateJobAction::MigrateJobAction(Action *Input, types::ID OutputType)
8530660a898545416f0fea2d717f16f75640001e38Ted Kremenek  : JobAction(MigrateJobClass, Input, OutputType) {
8630660a898545416f0fea2d717f16f75640001e38Ted Kremenek}
8730660a898545416f0fea2d717f16f75640001e38Ted Kremenek
8899ba9e3bd70671f3441fb974895f226a83ce0e66David Blaikievoid CompileJobAction::anchor() {}
8999ba9e3bd70671f3441fb974895f226a83ce0e66David Blaikie
90f40ed17472a39097cc5039ed437445289487c9bfDaniel DunbarCompileJobAction::CompileJobAction(Action *Input, types::ID OutputType)
91f40ed17472a39097cc5039ed437445289487c9bfDaniel Dunbar  : JobAction(CompileJobClass, Input, OutputType) {
92f40ed17472a39097cc5039ed437445289487c9bfDaniel Dunbar}
93f40ed17472a39097cc5039ed437445289487c9bfDaniel Dunbar
9499ba9e3bd70671f3441fb974895f226a83ce0e66David Blaikievoid AssembleJobAction::anchor() {}
9599ba9e3bd70671f3441fb974895f226a83ce0e66David Blaikie
96f40ed17472a39097cc5039ed437445289487c9bfDaniel DunbarAssembleJobAction::AssembleJobAction(Action *Input, types::ID OutputType)
97f40ed17472a39097cc5039ed437445289487c9bfDaniel Dunbar  : JobAction(AssembleJobClass, Input, OutputType) {
98f40ed17472a39097cc5039ed437445289487c9bfDaniel Dunbar}
99f40ed17472a39097cc5039ed437445289487c9bfDaniel Dunbar
10099ba9e3bd70671f3441fb974895f226a83ce0e66David Blaikievoid LinkJobAction::anchor() {}
10199ba9e3bd70671f3441fb974895f226a83ce0e66David Blaikie
1021eb4433ac451dc16f4133a88af2d002ac26c58efMike StumpLinkJobAction::LinkJobAction(ActionList &Inputs, types::ID Type)
103f40ed17472a39097cc5039ed437445289487c9bfDaniel Dunbar  : JobAction(LinkJobClass, Inputs, Type) {
104f40ed17472a39097cc5039ed437445289487c9bfDaniel Dunbar}
105f40ed17472a39097cc5039ed437445289487c9bfDaniel Dunbar
10699ba9e3bd70671f3441fb974895f226a83ce0e66David Blaikievoid LipoJobAction::anchor() {}
10799ba9e3bd70671f3441fb974895f226a83ce0e66David Blaikie
1081eb4433ac451dc16f4133a88af2d002ac26c58efMike StumpLipoJobAction::LipoJobAction(ActionList &Inputs, types::ID Type)
109f40ed17472a39097cc5039ed437445289487c9bfDaniel Dunbar  : JobAction(LipoJobClass, Inputs, Type) {
110f40ed17472a39097cc5039ed437445289487c9bfDaniel Dunbar}
1116e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar
11299ba9e3bd70671f3441fb974895f226a83ce0e66David Blaikievoid DsymutilJobAction::anchor() {}
11399ba9e3bd70671f3441fb974895f226a83ce0e66David Blaikie
1146e0f25483b1a801cd1155ea89c2b725feab16332Daniel DunbarDsymutilJobAction::DsymutilJobAction(ActionList &Inputs, types::ID Type)
1156e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar  : JobAction(DsymutilJobClass, Inputs, Type) {
1166e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar}
117f857186fd1995b34185d063a29b11ad4f948519fEric Christopher
11899ba9e3bd70671f3441fb974895f226a83ce0e66David Blaikievoid VerifyJobAction::anchor() {}
11999ba9e3bd70671f3441fb974895f226a83ce0e66David Blaikie
120f857186fd1995b34185d063a29b11ad4f948519fEric ChristopherVerifyJobAction::VerifyJobAction(ActionList &Inputs, types::ID Type)
121f857186fd1995b34185d063a29b11ad4f948519fEric Christopher  : JobAction(VerifyJobClass, Inputs, Type) {
122f857186fd1995b34185d063a29b11ad4f948519fEric Christopher}
123