forked from OSchip/llvm-project
Dont use/link ARCMT, StaticAnalyzer and Rewriter to clang when the user
specifies not to. Dont build ASTMatchers with Rewriter disabled and StaticAnalyzer when it's disabled. Without all those three, the clang binary shrinks (x86_64) from ~36MB to ~32MB (unstripped). llvm-svn: 170135
This commit is contained in:
parent
f2bb66b718
commit
d93c8c008e
|
@ -60,6 +60,8 @@ def warn_fe_cc_log_diagnostics_failure : Warning<
|
|||
"unable to open CC_LOG_DIAGNOSTICS file: %0 (using stderr)">;
|
||||
def err_fe_no_pch_in_dir : Error<
|
||||
"no suitable precompiled header file found in directory '%0'">;
|
||||
def err_fe_action_not_available : Error<
|
||||
"action %0 not compiled in">;
|
||||
|
||||
def warn_fe_serialized_diag_failure : Warning<
|
||||
"unable to open file %0 for serializing diagnostics (%1)">,
|
||||
|
|
|
@ -31,6 +31,7 @@ using namespace clang;
|
|||
|
||||
static FrontendAction *CreateFrontendBaseAction(CompilerInstance &CI) {
|
||||
using namespace clang::frontend;
|
||||
StringRef Action("unknown");
|
||||
|
||||
switch (CI.getFrontendOpts().ProgramAction) {
|
||||
case ASTDeclList: return new ASTDeclListAction();
|
||||
|
@ -42,12 +43,20 @@ static FrontendAction *CreateFrontendBaseAction(CompilerInstance &CI) {
|
|||
case DumpTokens: return new DumpTokensAction();
|
||||
case EmitAssembly: return new EmitAssemblyAction();
|
||||
case EmitBC: return new EmitBCAction();
|
||||
#ifdef CLANG_ENABLE_REWRITER
|
||||
case EmitHTML: return new HTMLPrintAction();
|
||||
#else
|
||||
case EmitHTML: Action = "EmitHTML"; break;
|
||||
#endif
|
||||
case EmitLLVM: return new EmitLLVMAction();
|
||||
case EmitLLVMOnly: return new EmitLLVMOnlyAction();
|
||||
case EmitCodeGenOnly: return new EmitCodeGenOnlyAction();
|
||||
case EmitObj: return new EmitObjAction();
|
||||
#ifdef CLANG_ENABLE_REWRITER
|
||||
case FixIt: return new FixItAction();
|
||||
#else
|
||||
case FixIt: Action = "FixIt"; break;
|
||||
#endif
|
||||
case GenerateModule: return new GenerateModuleAction;
|
||||
case GeneratePCH: return new GeneratePCHAction;
|
||||
case GeneratePTH: return new GeneratePTHAction();
|
||||
|
@ -74,19 +83,46 @@ static FrontendAction *CreateFrontendBaseAction(CompilerInstance &CI) {
|
|||
case PrintDeclContext: return new DeclContextPrintAction();
|
||||
case PrintPreamble: return new PrintPreambleAction();
|
||||
case PrintPreprocessedInput: {
|
||||
if (CI.getPreprocessorOutputOpts().RewriteIncludes)
|
||||
if (CI.getPreprocessorOutputOpts().RewriteIncludes) {
|
||||
#ifdef CLANG_ENABLE_REWRITER
|
||||
return new RewriteIncludesAction();
|
||||
#else
|
||||
Action = "RewriteIncludesAction";
|
||||
break;
|
||||
#endif
|
||||
}
|
||||
return new PrintPreprocessedAction();
|
||||
}
|
||||
|
||||
#ifdef CLANG_ENABLE_REWRITER
|
||||
case RewriteMacros: return new RewriteMacrosAction();
|
||||
case RewriteObjC: return new RewriteObjCAction();
|
||||
case RewriteTest: return new RewriteTestAction();
|
||||
case RunAnalysis: return new ento::AnalysisAction();
|
||||
#else
|
||||
case RewriteMacros: Action = "RewriteMacros"; break;
|
||||
case RewriteObjC: Action = "RewriteObjC"; break;
|
||||
case RewriteTest: Action = "RewriteTest"; break;
|
||||
#endif
|
||||
#ifdef CLANG_ENABLE_ARCMT
|
||||
case MigrateSource: return new arcmt::MigrateSourceAction();
|
||||
#else
|
||||
case MigrateSource: Action = "MigrateSource"; break;
|
||||
#endif
|
||||
#ifdef CLANG_ENABLE_STATIC_ANALYZER
|
||||
case RunAnalysis: return new ento::AnalysisAction();
|
||||
#else
|
||||
case RunAnalysis: Action = "RunAnalysis"; break;
|
||||
#endif
|
||||
case RunPreprocessorOnly: return new PreprocessOnlyAction();
|
||||
}
|
||||
|
||||
#if !defined(CLANG_ENABLE_ARCMT) || !defined(CLANG_ENABLE_STATIC_ANALYZER) \
|
||||
|| !defined(CLANG_ENABLE_REWRITER)
|
||||
CI.getDiagnostics().Report(diag::err_fe_action_not_available) << Action;
|
||||
return 0;
|
||||
#else
|
||||
llvm_unreachable("Invalid program action!");
|
||||
#endif
|
||||
}
|
||||
|
||||
static FrontendAction *CreateFrontendAction(CompilerInstance &CI) {
|
||||
|
@ -97,10 +133,13 @@ static FrontendAction *CreateFrontendAction(CompilerInstance &CI) {
|
|||
|
||||
const FrontendOptions &FEOpts = CI.getFrontendOpts();
|
||||
|
||||
#ifdef CLANG_ENABLE_REWRITER
|
||||
if (FEOpts.FixAndRecompile) {
|
||||
Act = new FixItRecompile(Act);
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef CLANG_ENABLE_ARCMT
|
||||
// Potentially wrap the base FE action in an ARC Migrate Tool action.
|
||||
switch (FEOpts.ARCMTAction) {
|
||||
case FrontendOptions::ARCMT_None:
|
||||
|
@ -124,6 +163,7 @@ static FrontendAction *CreateFrontendAction(CompilerInstance &CI) {
|
|||
FEOpts.ObjCMTAction & ~FrontendOptions::ObjCMT_Literals,
|
||||
FEOpts.ObjCMTAction & ~FrontendOptions::ObjCMT_Subscripting);
|
||||
}
|
||||
#endif
|
||||
|
||||
// If there are any AST files to merge, create a frontend action
|
||||
// adaptor to perform the merge.
|
||||
|
@ -176,12 +216,14 @@ bool clang::ExecuteCompilerInvocation(CompilerInstance *Clang) {
|
|||
llvm::cl::ParseCommandLineOptions(NumArgs + 1, Args);
|
||||
}
|
||||
|
||||
#ifdef CLANG_ENABLE_STATIC_ANALYZER
|
||||
// Honor -analyzer-checker-help.
|
||||
// This should happen AFTER plugins have been loaded!
|
||||
if (Clang->getAnalyzerOpts()->ShowCheckerHelp) {
|
||||
ento::printCheckerHelp(llvm::outs(), Clang->getFrontendOpts().Plugins);
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
// If there were errors in processing arguments, don't do anything else.
|
||||
bool Success = false;
|
||||
|
|
|
@ -11,3 +11,18 @@ CLANG_LEVEL := ../..
|
|||
LIBRARYNAME := clangFrontendTool
|
||||
|
||||
include $(CLANG_LEVEL)/Makefile
|
||||
include $(CLANG_LEVEL)/../../Makefile.config
|
||||
|
||||
ifeq ($(ENABLE_CLANG_ARCMT),1)
|
||||
CXX.Flags += -DCLANG_ENABLE_ARCMT
|
||||
endif
|
||||
|
||||
ifeq ($(ENABLE_CLANG_REWRITER),1)
|
||||
CXX.Flags += -DCLANG_ENABLE_REWRITER
|
||||
endif
|
||||
|
||||
ifeq ($(ENABLE_CLANG_STATIC_ANALYZER),1)
|
||||
CXX.Flags += -DCLANG_ENABLE_STATIC_ANALYZER
|
||||
endif
|
||||
|
||||
|
||||
|
|
|
@ -8,9 +8,19 @@
|
|||
##===----------------------------------------------------------------------===##
|
||||
CLANG_LEVEL := ..
|
||||
|
||||
PARALLEL_DIRS = Headers Basic Lex Parse AST ASTMatchers Sema CodeGen Analysis \
|
||||
StaticAnalyzer Edit Rewrite ARCMigrate Serialization Frontend \
|
||||
FrontendTool Tooling Driver Format
|
||||
# ARCMigrate and Rewrite are always needed because of libclang.
|
||||
PARALLEL_DIRS = Headers Basic Lex Parse AST Sema CodeGen Analysis Frontend \
|
||||
FrontendTool Tooling Driver Format Edit ARCMigrate Rewrite \
|
||||
Serialization
|
||||
|
||||
include $(CLANG_LEVEL)/../../Makefile.config
|
||||
|
||||
ifeq ($(ENABLE_CLANG_REWRITER),1)
|
||||
PARALLEL_DIRS += ASTMatchers
|
||||
endif
|
||||
|
||||
ifeq ($(ENABLE_CLANG_STATIC_ANALYZER),1)
|
||||
PARALLEL_DIRS += StaticAnalyzer
|
||||
endif
|
||||
|
||||
include $(CLANG_LEVEL)/Makefile
|
||||
|
||||
|
|
|
@ -32,12 +32,22 @@ include $(CLANG_LEVEL)/../../Makefile.config
|
|||
LINK_COMPONENTS := $(TARGETS_TO_BUILD) asmparser bitreader bitwriter codegen \
|
||||
instrumentation ipo linker selectiondag
|
||||
USEDLIBS = clangFrontendTool.a clangFrontend.a clangDriver.a \
|
||||
clangSerialization.a clangCodeGen.a clangParse.a clangSema.a \
|
||||
clangStaticAnalyzerFrontend.a clangStaticAnalyzerCheckers.a \
|
||||
clangStaticAnalyzerCore.a \
|
||||
clangAnalysis.a clangARCMigrate.a \
|
||||
clangRewriteFrontend.a clangRewriteCore.a \
|
||||
clangEdit.a clangAST.a clangLex.a clangBasic.a
|
||||
clangSerialization.a clangCodeGen.a clangParse.a clangSema.a
|
||||
|
||||
ifeq ($(ENABLE_CLANG_STATIC_ANALYZER),1)
|
||||
USEDLIBS += clangStaticAnalyzerFrontend.a clangStaticAnalyzerCheckers.a \
|
||||
clangStaticAnalyzerCore.a
|
||||
endif
|
||||
|
||||
ifeq ($(ENABLE_CLANG_ARCMT),1)
|
||||
USEDLIBS += clangARCMigrate.a
|
||||
endif
|
||||
|
||||
ifeq ($(ENABLE_CLANG_REWRITER),1)
|
||||
USEDLIBS += clangRewriteFrontend.a clangRewriteCore.a
|
||||
endif
|
||||
|
||||
USEDLIBS += clangAnalysis.a clangEdit.a clangAST.a clangBasic.a clangLex.a
|
||||
|
||||
include $(CLANG_LEVEL)/Makefile
|
||||
|
||||
|
|
|
@ -14,7 +14,21 @@ ifndef CLANG_LEVEL
|
|||
|
||||
IS_UNITTEST_LEVEL := 1
|
||||
CLANG_LEVEL := ..
|
||||
PARALLEL_DIRS = ASTMatchers Basic AST Frontend Lex Tooling Format
|
||||
PARALLEL_DIRS = Basic Lex
|
||||
|
||||
include $(CLANG_LEVEL)/../..//Makefile.config
|
||||
|
||||
ifeq ($(ENABLE_CLANG_REWRITER),1)
|
||||
PARALLEL_DIRS += Format
|
||||
endif
|
||||
|
||||
ifeq ($(ENABLE_CLANG_REWRITER),1)
|
||||
PARALLEL_DIRS += ASTMatchers AST Tooling
|
||||
endif
|
||||
|
||||
ifeq ($(ENABLE_CLANG_STATIC_ANALYZER),1)
|
||||
PARALLEL_DIRS += Frontend
|
||||
endif
|
||||
|
||||
endif # CLANG_LEVEL
|
||||
|
||||
|
|
Loading…
Reference in New Issue