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