diff options
Diffstat (limited to 'tools/driver')
-rw-r--r-- | tools/driver/CMakeLists.txt | 5 | ||||
-rw-r--r-- | tools/driver/Makefile | 7 | ||||
-rw-r--r-- | tools/driver/cc1_main.cpp | 22 |
3 files changed, 26 insertions, 8 deletions
diff --git a/tools/driver/CMakeLists.txt b/tools/driver/CMakeLists.txt index 90fb09c..c4320b0 100644 --- a/tools/driver/CMakeLists.txt +++ b/tools/driver/CMakeLists.txt @@ -1,12 +1,13 @@ set(LLVM_NO_RTTI 1) set( LLVM_USED_LIBS - clangDriver clangFrontend + clangDriver clangCodeGen + clangSema + clangChecker clangAnalysis clangRewrite - clangSema clangAST clangParse clangLex diff --git a/tools/driver/Makefile b/tools/driver/Makefile index 6ec8291..e5a9280 100644 --- a/tools/driver/Makefile +++ b/tools/driver/Makefile @@ -13,7 +13,6 @@ ifndef CLANG_IS_PRODUCTION TOOLALIAS = clang++ endif CPPFLAGS += -I$(PROJ_SRC_DIR)/../../include -I$(PROJ_OBJ_DIR)/../../include -CXXFLAGS = -fno-rtti # Clang tool has no plugins, optimize startup time. TOOL_NO_EXPORTS = 1 @@ -24,9 +23,9 @@ TOOL_NO_EXPORTS = 1 include $(LEVEL)/Makefile.config LINK_COMPONENTS := $(TARGETS_TO_BUILD) bitreader bitwriter codegen ipo selectiondag -USEDLIBS = clangFrontend.a clangDriver.a clangCodeGen.a clangAnalysis.a \ - clangRewrite.a clangSema.a clangAST.a clangParse.a \ - clangLex.a clangBasic.a +USEDLIBS = clangFrontend.a clangDriver.a clangCodeGen.a clangSema.a \ + clangChecker.a clangAnalysis.a clangRewrite.a clangAST.a \ + clangParse.a clangLex.a clangBasic.a include $(LLVM_SRC_ROOT)/Makefile.rules diff --git a/tools/driver/cc1_main.cpp b/tools/driver/cc1_main.cpp index d2f1017..05fb698 100644 --- a/tools/driver/cc1_main.cpp +++ b/tools/driver/cc1_main.cpp @@ -51,7 +51,7 @@ void LLVMErrorHandler(void *UserData, const std::string &Message) { exit(1); } -static FrontendAction *CreateFrontendAction(CompilerInstance &CI) { +static FrontendAction *CreateFrontendBaseAction(CompilerInstance &CI) { using namespace clang::frontend; switch (CI.getFrontendOpts().ProgramAction) { @@ -70,6 +70,7 @@ static FrontendAction *CreateFrontendAction(CompilerInstance &CI) { case EmitHTML: return new HTMLPrintAction(); case EmitLLVM: return new EmitLLVMAction(); case EmitLLVMOnly: return new EmitLLVMOnlyAction(); + case EmitObj: return new EmitObjAction(); case FixIt: return new FixItAction(); case GeneratePCH: return new GeneratePCHAction(); case GeneratePTH: return new GeneratePTHAction(); @@ -111,6 +112,21 @@ static FrontendAction *CreateFrontendAction(CompilerInstance &CI) { } } +static FrontendAction *CreateFrontendAction(CompilerInstance &CI) { + // Create the underlying action. + FrontendAction *Act = CreateFrontendBaseAction(CI); + if (!Act) + return 0; + + // If there are any AST files to merge, create a frontend action + // adaptor to perform the merge. + if (!CI.getFrontendOpts().ASTMergeFiles.empty()) + Act = new ASTMergeAction(Act, &CI.getFrontendOpts().ASTMergeFiles[0], + CI.getFrontendOpts().ASTMergeFiles.size()); + + return Act; +} + // FIXME: Define the need for this testing away. static int cc1_test(Diagnostic &Diags, const char **ArgBegin, const char **ArgEnd) { @@ -179,7 +195,9 @@ static int cc1_test(Diagnostic &Diags, int cc1_main(const char **ArgBegin, const char **ArgEnd, const char *Argv0, void *MainAddr) { - CompilerInstance Clang(&llvm::getGlobalContext(), false); + CompilerInstance Clang; + + Clang.setLLVMContext(new llvm::LLVMContext); // Run clang -cc1 test. if (ArgBegin != ArgEnd && llvm::StringRef(ArgBegin[0]) == "-cc1test") { |