aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--contrib/llvm/tools/clang/include/clang/Basic/DiagnosticFrontendKinds.td2
-rw-r--r--contrib/llvm/tools/clang/lib/FrontendTool/ExecuteCompilerInvocation.cpp46
-rw-r--r--lib/clang/Makefile25
-rw-r--r--lib/clang/clang.build.mk6
-rw-r--r--lib/clang/libclanganalysis/Makefile2
-rw-r--r--lib/clang/libclangarcmigrate/Makefile2
-rw-r--r--lib/clang/libclangast/Makefile2
-rw-r--r--lib/clang/libclangbasic/Makefile2
-rw-r--r--lib/clang/libclangcodegen/Makefile2
-rw-r--r--lib/clang/libclangdriver/Makefile2
-rw-r--r--lib/clang/libclangedit/Makefile2
-rw-r--r--lib/clang/libclangfrontend/Makefile2
-rw-r--r--lib/clang/libclangfrontendtool/Makefile2
-rw-r--r--lib/clang/libclanglex/Makefile2
-rw-r--r--lib/clang/libclangparse/Makefile2
-rw-r--r--lib/clang/libclangrewritecore/Makefile2
-rw-r--r--lib/clang/libclangrewritefrontend/Makefile2
-rw-r--r--lib/clang/libclangsema/Makefile2
-rw-r--r--lib/clang/libclangserialization/Makefile2
-rw-r--r--lib/clang/libclangstaticanalyzercheckers/Makefile2
-rw-r--r--lib/clang/libclangstaticanalyzercore/Makefile2
-rw-r--r--lib/clang/libclangstaticanalyzerfrontend/Makefile2
-rw-r--r--lib/clang/libllvmarchive/Makefile2
-rw-r--r--lib/clang/libllvmarmasmparser/Makefile2
-rw-r--r--lib/clang/libllvmarmcodegen/Makefile2
-rw-r--r--lib/clang/libllvmarmdesc/Makefile2
-rw-r--r--lib/clang/libllvmarmdisassembler/Makefile2
-rw-r--r--lib/clang/libllvmarminfo/Makefile2
-rw-r--r--lib/clang/libllvmarminstprinter/Makefile2
-rw-r--r--lib/clang/libllvmasmparser/Makefile2
-rw-r--r--lib/clang/libllvmasmprinter/Makefile2
-rw-r--r--lib/clang/libllvmbitreader/Makefile2
-rw-r--r--lib/clang/libllvmbitwriter/Makefile2
-rw-r--r--lib/clang/libllvmcodegen/Makefile2
-rw-r--r--lib/clang/libllvmcore/Makefile2
-rw-r--r--lib/clang/libllvmdebuginfo/Makefile2
-rw-r--r--lib/clang/libllvmexecutionengine/Makefile2
-rw-r--r--lib/clang/libllvminstcombine/Makefile2
-rw-r--r--lib/clang/libllvminstrumentation/Makefile2
-rw-r--r--lib/clang/libllvminterpreter/Makefile2
-rw-r--r--lib/clang/libllvmjit/Makefile2
-rw-r--r--lib/clang/libllvmlinker/Makefile2
-rw-r--r--lib/clang/libllvmmcdisassembler/Makefile2
-rw-r--r--lib/clang/libllvmmcparser/Makefile2
-rw-r--r--lib/clang/libllvmmipsasmparser/Makefile2
-rw-r--r--lib/clang/libllvmmipscodegen/Makefile2
-rw-r--r--lib/clang/libllvmmipsdesc/Makefile2
-rw-r--r--lib/clang/libllvmmipsdisassembler/Makefile2
-rw-r--r--lib/clang/libllvmmipsinfo/Makefile2
-rw-r--r--lib/clang/libllvmmipsinstprinter/Makefile2
-rw-r--r--lib/clang/libllvmobject/Makefile2
-rw-r--r--lib/clang/libllvmpowerpccodegen/Makefile2
-rw-r--r--lib/clang/libllvmpowerpcdesc/Makefile2
-rw-r--r--lib/clang/libllvmpowerpcinfo/Makefile2
-rw-r--r--lib/clang/libllvmpowerpcinstprinter/Makefile2
-rw-r--r--lib/clang/libllvmruntimedyld/Makefile2
-rw-r--r--lib/clang/libllvmselectiondag/Makefile2
-rw-r--r--lib/clang/libllvmtablegen/Makefile2
-rw-r--r--lib/clang/libllvmtarget/Makefile2
-rw-r--r--lib/clang/libllvmvectorize/Makefile2
-rw-r--r--lib/clang/libllvmx86asmparser/Makefile2
-rw-r--r--lib/clang/libllvmx86codegen/Makefile2
-rw-r--r--lib/clang/libllvmx86desc/Makefile2
-rw-r--r--lib/clang/libllvmx86info/Makefile2
-rw-r--r--lib/clang/libllvmx86instprinter/Makefile2
-rw-r--r--lib/clang/libllvmx86utils/Makefile2
-rw-r--r--share/mk/bsd.own.mk5
-rw-r--r--tools/build/options/WITHOUT_CLANG_FULL3
-rw-r--r--tools/build/options/WITH_CLANG_FULL3
-rw-r--r--usr.bin/clang/clang/Makefile22
70 files changed, 218 insertions, 18 deletions
diff --git a/contrib/llvm/tools/clang/include/clang/Basic/DiagnosticFrontendKinds.td b/contrib/llvm/tools/clang/include/clang/Basic/DiagnosticFrontendKinds.td
index b7a84764391b..d12b5d6d63c0 100644
--- a/contrib/llvm/tools/clang/include/clang/Basic/DiagnosticFrontendKinds.td
+++ b/contrib/llvm/tools/clang/include/clang/Basic/DiagnosticFrontendKinds.td
@@ -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)">,
diff --git a/contrib/llvm/tools/clang/lib/FrontendTool/ExecuteCompilerInvocation.cpp b/contrib/llvm/tools/clang/lib/FrontendTool/ExecuteCompilerInvocation.cpp
index c7c55b021145..60a264a615ea 100644
--- a/contrib/llvm/tools/clang/lib/FrontendTool/ExecuteCompilerInvocation.cpp
+++ b/contrib/llvm/tools/clang/lib/FrontendTool/ExecuteCompilerInvocation.cpp
@@ -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;
diff --git a/lib/clang/Makefile b/lib/clang/Makefile
index cfc1554b0ae0..a77d241986f3 100644
--- a/lib/clang/Makefile
+++ b/lib/clang/Makefile
@@ -3,8 +3,20 @@
.include <bsd.own.mk>
.if !make(install)
+.if !defined(EARLY_BUILD) && defined(MK_CLANG_FULL) && ${MK_CLANG_FULL} != "no"
+_libclangstaticanalyzer= \
+ libclangstaticanalyzercheckers \
+ libclangstaticanalyzercore \
+ libclangstaticanalyzerfrontend
+_libclangarcmigrate= \
+ libclangarcmigrate
+_libclangrewriter= \
+ libclangrewritecore \
+ libclangrewritefrontend
+.endif # !EARLY_BUILD && MK_CLANG_FULL
+
SUBDIR= libclanganalysis \
- libclangarcmigrate \
+ ${_libclangarcmigrate} \
libclangast \
libclangbasic \
libclangcodegen \
@@ -14,13 +26,10 @@ SUBDIR= libclanganalysis \
libclangfrontendtool \
libclanglex \
libclangparse \
- libclangrewritecore \
- libclangrewritefrontend \
+ ${_libclangrewriter} \
libclangsema \
libclangserialization \
- libclangstaticanalyzercheckers \
- libclangstaticanalyzercore \
- libclangstaticanalyzerfrontend \
+ ${_libclangstaticanalyzer} \
\
libllvmanalysis \
libllvmarchive \
@@ -78,8 +87,8 @@ SUBDIR+=libllvmdebuginfo \
libllvmmcdisassembler \
libllvmmcjit \
libllvmruntimedyld
-.endif
-.endif
+.endif # MK_CLANG_EXTRAS
+.endif # !make(install)
SUBDIR+= include
diff --git a/lib/clang/clang.build.mk b/lib/clang/clang.build.mk
index 298a2eb3c98f..0015e3d12bdb 100644
--- a/lib/clang/clang.build.mk
+++ b/lib/clang/clang.build.mk
@@ -8,6 +8,12 @@ CFLAGS+= -I${LLVM_SRCS}/include -I${CLANG_SRCS}/include \
-DLLVM_ON_UNIX -DLLVM_ON_FREEBSD \
-D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS #-DNDEBUG
+.if !defined(EARLY_BUILD) && defined(MK_CLANG_FULL) && ${MK_CLANG_FULL} != "no"
+CFLAGS+= -DCLANG_ENABLE_ARCMT \
+ -DCLANG_ENABLE_REWRITER \
+ -DCLANG_ENABLE_STATIC_ANALYZER
+.endif # !EARLY_BUILD && MK_CLANG_FULL
+
# LLVM is not strict aliasing safe as of 12/31/2011
CFLAGS+= -fno-strict-aliasing
diff --git a/lib/clang/libclanganalysis/Makefile b/lib/clang/libclanganalysis/Makefile
index 61c45be5add0..76bf1e5c8db6 100644
--- a/lib/clang/libclanganalysis/Makefile
+++ b/lib/clang/libclanganalysis/Makefile
@@ -1,5 +1,7 @@
# $FreeBSD$
+.include <bsd.own.mk>
+
LIB= clanganalysis
SRCDIR= tools/clang/lib/Analysis
diff --git a/lib/clang/libclangarcmigrate/Makefile b/lib/clang/libclangarcmigrate/Makefile
index 654480530bd3..7597e9c67f15 100644
--- a/lib/clang/libclangarcmigrate/Makefile
+++ b/lib/clang/libclangarcmigrate/Makefile
@@ -1,5 +1,7 @@
# $FreeBSD$
+.include <bsd.own.mk>
+
LIB= clangarcmigrate
SRCDIR= tools/clang/lib/ARCMigrate
diff --git a/lib/clang/libclangast/Makefile b/lib/clang/libclangast/Makefile
index 0b851e616c82..0ddeb53080de 100644
--- a/lib/clang/libclangast/Makefile
+++ b/lib/clang/libclangast/Makefile
@@ -1,5 +1,7 @@
# $FreeBSD$
+.include <bsd.own.mk>
+
LIB= clangast
SRCDIR= tools/clang/lib/AST
diff --git a/lib/clang/libclangbasic/Makefile b/lib/clang/libclangbasic/Makefile
index f0efd7443662..eec941a2fe16 100644
--- a/lib/clang/libclangbasic/Makefile
+++ b/lib/clang/libclangbasic/Makefile
@@ -1,5 +1,7 @@
# $FreeBSD$
+.include <bsd.own.mk>
+
LIB= clangbasic
SRCDIR= tools/clang/lib/Basic
diff --git a/lib/clang/libclangcodegen/Makefile b/lib/clang/libclangcodegen/Makefile
index 5252e7cd40d1..7aefa7c64489 100644
--- a/lib/clang/libclangcodegen/Makefile
+++ b/lib/clang/libclangcodegen/Makefile
@@ -1,5 +1,7 @@
# $FreeBSD$
+.include <bsd.own.mk>
+
LIB= clangcodegen
SRCDIR= tools/clang/lib/CodeGen
diff --git a/lib/clang/libclangdriver/Makefile b/lib/clang/libclangdriver/Makefile
index 4950cface397..aae2a057f589 100644
--- a/lib/clang/libclangdriver/Makefile
+++ b/lib/clang/libclangdriver/Makefile
@@ -1,5 +1,7 @@
# $FreeBSD$
+.include <bsd.own.mk>
+
LIB= clangdriver
SRCDIR= tools/clang/lib/Driver
diff --git a/lib/clang/libclangedit/Makefile b/lib/clang/libclangedit/Makefile
index a0e45a9c43d2..59b0b54e4e0d 100644
--- a/lib/clang/libclangedit/Makefile
+++ b/lib/clang/libclangedit/Makefile
@@ -1,5 +1,7 @@
# $FreeBSD$
+.include <bsd.own.mk>
+
LIB= clangedit
SRCDIR= tools/clang/lib/Edit
diff --git a/lib/clang/libclangfrontend/Makefile b/lib/clang/libclangfrontend/Makefile
index c2813b4caef4..44ba2fb74325 100644
--- a/lib/clang/libclangfrontend/Makefile
+++ b/lib/clang/libclangfrontend/Makefile
@@ -1,5 +1,7 @@
# $FreeBSD$
+.include <bsd.own.mk>
+
LIB= clangfrontend
SRCDIR= tools/clang/lib/Frontend
diff --git a/lib/clang/libclangfrontendtool/Makefile b/lib/clang/libclangfrontendtool/Makefile
index f37979f9a8c8..f20aa35a11a8 100644
--- a/lib/clang/libclangfrontendtool/Makefile
+++ b/lib/clang/libclangfrontendtool/Makefile
@@ -1,5 +1,7 @@
# $FreeBSD$
+.include <bsd.own.mk>
+
LIB= clangfrontendtool
SRCDIR= tools/clang/lib/FrontendTool
diff --git a/lib/clang/libclanglex/Makefile b/lib/clang/libclanglex/Makefile
index 3ad0e3f78c23..768d43c1e79c 100644
--- a/lib/clang/libclanglex/Makefile
+++ b/lib/clang/libclanglex/Makefile
@@ -1,5 +1,7 @@
# $FreeBSD$
+.include <bsd.own.mk>
+
LIB= clanglex
SRCDIR= tools/clang/lib/Lex
diff --git a/lib/clang/libclangparse/Makefile b/lib/clang/libclangparse/Makefile
index 599a034cfbcc..dbe9adb03fb9 100644
--- a/lib/clang/libclangparse/Makefile
+++ b/lib/clang/libclangparse/Makefile
@@ -1,5 +1,7 @@
# $FreeBSD$
+.include <bsd.own.mk>
+
LIB= clangparse
SRCDIR= tools/clang/lib/Parse
diff --git a/lib/clang/libclangrewritecore/Makefile b/lib/clang/libclangrewritecore/Makefile
index 3a628d0a9a6b..80115ee01891 100644
--- a/lib/clang/libclangrewritecore/Makefile
+++ b/lib/clang/libclangrewritecore/Makefile
@@ -1,5 +1,7 @@
# $FreeBSD$
+.include <bsd.own.mk>
+
LIB= clangrewritecore
SRCDIR= tools/clang/lib/Rewrite/Core
diff --git a/lib/clang/libclangrewritefrontend/Makefile b/lib/clang/libclangrewritefrontend/Makefile
index 35de008b5651..ffa11b4fe328 100644
--- a/lib/clang/libclangrewritefrontend/Makefile
+++ b/lib/clang/libclangrewritefrontend/Makefile
@@ -1,5 +1,7 @@
# $FreeBSD$
+.include <bsd.own.mk>
+
LIB= clangrewritefrontend
SRCDIR= tools/clang/lib/Rewrite/Frontend
diff --git a/lib/clang/libclangsema/Makefile b/lib/clang/libclangsema/Makefile
index 235fa13c3498..9ced8b4c6895 100644
--- a/lib/clang/libclangsema/Makefile
+++ b/lib/clang/libclangsema/Makefile
@@ -1,5 +1,7 @@
# $FreeBSD$
+.include <bsd.own.mk>
+
LIB= clangsema
SRCDIR= tools/clang/lib/Sema
diff --git a/lib/clang/libclangserialization/Makefile b/lib/clang/libclangserialization/Makefile
index 75f68bf74e6a..962bbf09b5c8 100644
--- a/lib/clang/libclangserialization/Makefile
+++ b/lib/clang/libclangserialization/Makefile
@@ -1,5 +1,7 @@
# $FreeBSD$
+.include <bsd.own.mk>
+
LIB= clangserialization
SRCDIR= tools/clang/lib/Serialization
diff --git a/lib/clang/libclangstaticanalyzercheckers/Makefile b/lib/clang/libclangstaticanalyzercheckers/Makefile
index 96274d997f5d..95361519d8d8 100644
--- a/lib/clang/libclangstaticanalyzercheckers/Makefile
+++ b/lib/clang/libclangstaticanalyzercheckers/Makefile
@@ -1,5 +1,7 @@
# $FreeBSD$
+.include <bsd.own.mk>
+
LIB= clangstaticanalyzercheckers
SRCDIR= tools/clang/lib/StaticAnalyzer/Checkers
diff --git a/lib/clang/libclangstaticanalyzercore/Makefile b/lib/clang/libclangstaticanalyzercore/Makefile
index 82ff5a3ca550..9c263f03d5b5 100644
--- a/lib/clang/libclangstaticanalyzercore/Makefile
+++ b/lib/clang/libclangstaticanalyzercore/Makefile
@@ -1,5 +1,7 @@
# $FreeBSD$
+.include <bsd.own.mk>
+
LIB= clangstaticanalyzercore
SRCDIR= tools/clang/lib/StaticAnalyzer/Core
diff --git a/lib/clang/libclangstaticanalyzerfrontend/Makefile b/lib/clang/libclangstaticanalyzerfrontend/Makefile
index 5c7cd4109fa9..9e19f923d7a0 100644
--- a/lib/clang/libclangstaticanalyzerfrontend/Makefile
+++ b/lib/clang/libclangstaticanalyzerfrontend/Makefile
@@ -1,5 +1,7 @@
# $FreeBSD$
+.include <bsd.own.mk>
+
LIB= clangstaticanalyzerfrontend
SRCDIR= tools/clang/lib/StaticAnalyzer/Frontend
diff --git a/lib/clang/libllvmarchive/Makefile b/lib/clang/libllvmarchive/Makefile
index a28f2f510a69..d5534050083c 100644
--- a/lib/clang/libllvmarchive/Makefile
+++ b/lib/clang/libllvmarchive/Makefile
@@ -1,5 +1,7 @@
# $FreeBSD$
+.include <bsd.own.mk>
+
LIB= llvmarchive
SRCDIR= lib/Archive
diff --git a/lib/clang/libllvmarmasmparser/Makefile b/lib/clang/libllvmarmasmparser/Makefile
index c3d0d8902321..05e6263aa894 100644
--- a/lib/clang/libllvmarmasmparser/Makefile
+++ b/lib/clang/libllvmarmasmparser/Makefile
@@ -1,5 +1,7 @@
# $FreeBSD$
+.include <bsd.own.mk>
+
LIB= llvmarmasmparser
SRCDIR= lib/Target/ARM/AsmParser
diff --git a/lib/clang/libllvmarmcodegen/Makefile b/lib/clang/libllvmarmcodegen/Makefile
index 6ae9251eb942..6a10eaf0825f 100644
--- a/lib/clang/libllvmarmcodegen/Makefile
+++ b/lib/clang/libllvmarmcodegen/Makefile
@@ -1,5 +1,7 @@
# $FreeBSD$
+.include <bsd.own.mk>
+
LIB= llvmarmcodegen
SRCDIR= lib/Target/ARM
diff --git a/lib/clang/libllvmarmdesc/Makefile b/lib/clang/libllvmarmdesc/Makefile
index bd2e0cb96b7d..61679a666683 100644
--- a/lib/clang/libllvmarmdesc/Makefile
+++ b/lib/clang/libllvmarmdesc/Makefile
@@ -1,5 +1,7 @@
# $FreeBSD$
+.include <bsd.own.mk>
+
LIB= llvmarmdesc
SRCDIR= lib/Target/ARM/MCTargetDesc
diff --git a/lib/clang/libllvmarmdisassembler/Makefile b/lib/clang/libllvmarmdisassembler/Makefile
index a3d16f78416b..eb4673672b1d 100644
--- a/lib/clang/libllvmarmdisassembler/Makefile
+++ b/lib/clang/libllvmarmdisassembler/Makefile
@@ -1,5 +1,7 @@
# $FreeBSD$
+.include <bsd.own.mk>
+
LIB= llvmarmdisassembler
SRCDIR= lib/Target/ARM/Disassembler
diff --git a/lib/clang/libllvmarminfo/Makefile b/lib/clang/libllvmarminfo/Makefile
index ec88367bc328..1da434c71a0d 100644
--- a/lib/clang/libllvmarminfo/Makefile
+++ b/lib/clang/libllvmarminfo/Makefile
@@ -1,5 +1,7 @@
# $FreeBSD$
+.include <bsd.own.mk>
+
LIB= llvmarminfo
SRCDIR= lib/Target/ARM/TargetInfo
diff --git a/lib/clang/libllvmarminstprinter/Makefile b/lib/clang/libllvmarminstprinter/Makefile
index ca7e7d4ff0a8..67b8fee26965 100644
--- a/lib/clang/libllvmarminstprinter/Makefile
+++ b/lib/clang/libllvmarminstprinter/Makefile
@@ -1,5 +1,7 @@
# $FreeBSD$
+.include <bsd.own.mk>
+
LIB= llvmarminstprinter
SRCDIR= lib/Target/ARM/InstPrinter
diff --git a/lib/clang/libllvmasmparser/Makefile b/lib/clang/libllvmasmparser/Makefile
index 8ceba6934928..bb8f0dfda238 100644
--- a/lib/clang/libllvmasmparser/Makefile
+++ b/lib/clang/libllvmasmparser/Makefile
@@ -1,5 +1,7 @@
# $FreeBSD$
+.include <bsd.own.mk>
+
LIB= llvmasmparser
SRCDIR= lib/AsmParser
diff --git a/lib/clang/libllvmasmprinter/Makefile b/lib/clang/libllvmasmprinter/Makefile
index 36e626fc3427..97bc73d3f41d 100644
--- a/lib/clang/libllvmasmprinter/Makefile
+++ b/lib/clang/libllvmasmprinter/Makefile
@@ -1,5 +1,7 @@
# $FreeBSD$
+.include <bsd.own.mk>
+
LIB= llvmasmprinter
SRCDIR= lib/CodeGen/AsmPrinter
diff --git a/lib/clang/libllvmbitreader/Makefile b/lib/clang/libllvmbitreader/Makefile
index c426680b32ce..094e0e773304 100644
--- a/lib/clang/libllvmbitreader/Makefile
+++ b/lib/clang/libllvmbitreader/Makefile
@@ -1,5 +1,7 @@
# $FreeBSD$
+.include <bsd.own.mk>
+
LIB= llvmbitreader
SRCDIR= lib/Bitcode/Reader
diff --git a/lib/clang/libllvmbitwriter/Makefile b/lib/clang/libllvmbitwriter/Makefile
index 3431b219886b..1cb9d411281e 100644
--- a/lib/clang/libllvmbitwriter/Makefile
+++ b/lib/clang/libllvmbitwriter/Makefile
@@ -1,5 +1,7 @@
# $FreeBSD$
+.include <bsd.own.mk>
+
LIB= llvmbitwriter
SRCDIR= lib/Bitcode/Writer
diff --git a/lib/clang/libllvmcodegen/Makefile b/lib/clang/libllvmcodegen/Makefile
index 8beb5834505c..e65d19ce275d 100644
--- a/lib/clang/libllvmcodegen/Makefile
+++ b/lib/clang/libllvmcodegen/Makefile
@@ -1,5 +1,7 @@
# $FreeBSD$
+.include <bsd.own.mk>
+
LIB= llvmcodegen
SRCDIR= lib/CodeGen
diff --git a/lib/clang/libllvmcore/Makefile b/lib/clang/libllvmcore/Makefile
index 5b597fedf9a5..d2010c0d97dd 100644
--- a/lib/clang/libllvmcore/Makefile
+++ b/lib/clang/libllvmcore/Makefile
@@ -1,5 +1,7 @@
# $FreeBSD$
+.include <bsd.own.mk>
+
LIB= llvmcore
SRCDIR= lib/VMCore
diff --git a/lib/clang/libllvmdebuginfo/Makefile b/lib/clang/libllvmdebuginfo/Makefile
index e12289b7c5ed..757b9097a38d 100644
--- a/lib/clang/libllvmdebuginfo/Makefile
+++ b/lib/clang/libllvmdebuginfo/Makefile
@@ -1,5 +1,7 @@
# $FreeBSD$
+.include <bsd.own.mk>
+
LIB= llvmdebuginfo
SRCDIR= lib/DebugInfo
diff --git a/lib/clang/libllvmexecutionengine/Makefile b/lib/clang/libllvmexecutionengine/Makefile
index c0dde71debb4..3ec39c78658f 100644
--- a/lib/clang/libllvmexecutionengine/Makefile
+++ b/lib/clang/libllvmexecutionengine/Makefile
@@ -1,5 +1,7 @@
# $FreeBSD$
+.include <bsd.own.mk>
+
LIB= llvmexecutionengine
SRCDIR= lib/ExecutionEngine
diff --git a/lib/clang/libllvminstcombine/Makefile b/lib/clang/libllvminstcombine/Makefile
index e989fa5af01f..3752aef1987f 100644
--- a/lib/clang/libllvminstcombine/Makefile
+++ b/lib/clang/libllvminstcombine/Makefile
@@ -1,5 +1,7 @@
# $FreeBSD$
+.include <bsd.own.mk>
+
LIB= llvminstcombine
SRCDIR= lib/Transforms/InstCombine
diff --git a/lib/clang/libllvminstrumentation/Makefile b/lib/clang/libllvminstrumentation/Makefile
index ef093702d2dc..6d666e518dca 100644
--- a/lib/clang/libllvminstrumentation/Makefile
+++ b/lib/clang/libllvminstrumentation/Makefile
@@ -1,5 +1,7 @@
# $FreeBSD$
+.include <bsd.own.mk>
+
LIB= llvminstrumentation
SRCDIR= lib/Transforms/Instrumentation
diff --git a/lib/clang/libllvminterpreter/Makefile b/lib/clang/libllvminterpreter/Makefile
index 6a1b453459b2..06fcca4fb9f9 100644
--- a/lib/clang/libllvminterpreter/Makefile
+++ b/lib/clang/libllvminterpreter/Makefile
@@ -1,5 +1,7 @@
# $FreeBSD$
+.include <bsd.own.mk>
+
LIB= llvminterpreter
SRCDIR= lib/ExecutionEngine/Interpreter
diff --git a/lib/clang/libllvmjit/Makefile b/lib/clang/libllvmjit/Makefile
index ff852d5047b7..682f704b441e 100644
--- a/lib/clang/libllvmjit/Makefile
+++ b/lib/clang/libllvmjit/Makefile
@@ -1,5 +1,7 @@
# $FreeBSD$
+.include <bsd.own.mk>
+
LIB= llvmjit
SRCDIR= lib/ExecutionEngine/JIT
diff --git a/lib/clang/libllvmlinker/Makefile b/lib/clang/libllvmlinker/Makefile
index 73f153b378fb..7275131fc6ab 100644
--- a/lib/clang/libllvmlinker/Makefile
+++ b/lib/clang/libllvmlinker/Makefile
@@ -1,5 +1,7 @@
# $FreeBSD$
+.include <bsd.own.mk>
+
LIB= llvmlinker
SRCDIR= lib/Linker
diff --git a/lib/clang/libllvmmcdisassembler/Makefile b/lib/clang/libllvmmcdisassembler/Makefile
index dc5f29437e0c..94aff3e90576 100644
--- a/lib/clang/libllvmmcdisassembler/Makefile
+++ b/lib/clang/libllvmmcdisassembler/Makefile
@@ -1,5 +1,7 @@
# $FreeBSD$
+.include <bsd.own.mk>
+
LIB= llvmmcdisassembler
SRCDIR= lib/MC/MCDisassembler
diff --git a/lib/clang/libllvmmcparser/Makefile b/lib/clang/libllvmmcparser/Makefile
index 48deadfee43f..b39926a0d712 100644
--- a/lib/clang/libllvmmcparser/Makefile
+++ b/lib/clang/libllvmmcparser/Makefile
@@ -1,5 +1,7 @@
# $FreeBSD$
+.include <bsd.own.mk>
+
LIB= llvmmcparser
SRCDIR= lib/MC/MCParser
diff --git a/lib/clang/libllvmmipsasmparser/Makefile b/lib/clang/libllvmmipsasmparser/Makefile
index f5fb3c35a066..0572f8d225b7 100644
--- a/lib/clang/libllvmmipsasmparser/Makefile
+++ b/lib/clang/libllvmmipsasmparser/Makefile
@@ -1,5 +1,7 @@
# $FreeBSD$
+.include <bsd.own.mk>
+
LIB= llvmmipsasmparser
SRCDIR= lib/Target/Mips/AsmParser
diff --git a/lib/clang/libllvmmipscodegen/Makefile b/lib/clang/libllvmmipscodegen/Makefile
index c33d9548396a..7675a01666c5 100644
--- a/lib/clang/libllvmmipscodegen/Makefile
+++ b/lib/clang/libllvmmipscodegen/Makefile
@@ -1,5 +1,7 @@
# $FreeBSD$
+.include <bsd.own.mk>
+
LIB= llvmmipscodegen
SRCDIR= lib/Target/Mips
diff --git a/lib/clang/libllvmmipsdesc/Makefile b/lib/clang/libllvmmipsdesc/Makefile
index 120b86634955..4ddb64635367 100644
--- a/lib/clang/libllvmmipsdesc/Makefile
+++ b/lib/clang/libllvmmipsdesc/Makefile
@@ -1,5 +1,7 @@
# $FreeBSD$
+.include <bsd.own.mk>
+
LIB= llvmmipsdesc
SRCDIR= lib/Target/Mips/MCTargetDesc
diff --git a/lib/clang/libllvmmipsdisassembler/Makefile b/lib/clang/libllvmmipsdisassembler/Makefile
index 7cdd982ca830..1c0a4b66fb4c 100644
--- a/lib/clang/libllvmmipsdisassembler/Makefile
+++ b/lib/clang/libllvmmipsdisassembler/Makefile
@@ -1,5 +1,7 @@
# $FreeBSD$
+.include <bsd.own.mk>
+
LIB= llvmmipsdisassembler
SRCDIR= lib/Target/Mips/Disassembler
diff --git a/lib/clang/libllvmmipsinfo/Makefile b/lib/clang/libllvmmipsinfo/Makefile
index c5b96cda11dd..c65c8c86f743 100644
--- a/lib/clang/libllvmmipsinfo/Makefile
+++ b/lib/clang/libllvmmipsinfo/Makefile
@@ -1,5 +1,7 @@
# $FreeBSD$
+.include <bsd.own.mk>
+
LIB= llvmmipsinfo
SRCDIR= lib/Target/Mips/TargetInfo
diff --git a/lib/clang/libllvmmipsinstprinter/Makefile b/lib/clang/libllvmmipsinstprinter/Makefile
index 36d3b0470906..39df7cc59ef3 100644
--- a/lib/clang/libllvmmipsinstprinter/Makefile
+++ b/lib/clang/libllvmmipsinstprinter/Makefile
@@ -1,5 +1,7 @@
# $FreeBSD$
+.include <bsd.own.mk>
+
LIB= llvmmipsinstprinter
SRCDIR= lib/Target/Mips/InstPrinter
diff --git a/lib/clang/libllvmobject/Makefile b/lib/clang/libllvmobject/Makefile
index d056dc7c15d3..c8c8068ed3c1 100644
--- a/lib/clang/libllvmobject/Makefile
+++ b/lib/clang/libllvmobject/Makefile
@@ -1,5 +1,7 @@
# $FreeBSD$
+.include <bsd.own.mk>
+
LIB= llvmobject
SRCDIR= lib/Object
diff --git a/lib/clang/libllvmpowerpccodegen/Makefile b/lib/clang/libllvmpowerpccodegen/Makefile
index a97c3528c135..a09da599a9bb 100644
--- a/lib/clang/libllvmpowerpccodegen/Makefile
+++ b/lib/clang/libllvmpowerpccodegen/Makefile
@@ -1,5 +1,7 @@
# $FreeBSD$
+.include <bsd.own.mk>
+
LIB= llvmpowerpccodegen
SRCDIR= lib/Target/PowerPC
diff --git a/lib/clang/libllvmpowerpcdesc/Makefile b/lib/clang/libllvmpowerpcdesc/Makefile
index 2a5ef6eabf66..e48b484d00f9 100644
--- a/lib/clang/libllvmpowerpcdesc/Makefile
+++ b/lib/clang/libllvmpowerpcdesc/Makefile
@@ -1,5 +1,7 @@
# $FreeBSD$
+.include <bsd.own.mk>
+
LIB= llvmpowerpcdesc
SRCDIR= lib/Target/PowerPC/MCTargetDesc
diff --git a/lib/clang/libllvmpowerpcinfo/Makefile b/lib/clang/libllvmpowerpcinfo/Makefile
index 8310378a9e2f..03bba0e72931 100644
--- a/lib/clang/libllvmpowerpcinfo/Makefile
+++ b/lib/clang/libllvmpowerpcinfo/Makefile
@@ -1,5 +1,7 @@
# $FreeBSD$
+.include <bsd.own.mk>
+
LIB= llvmpowerpcinfo
SRCDIR= lib/Target/PowerPC/TargetInfo
diff --git a/lib/clang/libllvmpowerpcinstprinter/Makefile b/lib/clang/libllvmpowerpcinstprinter/Makefile
index c1528aee9b0d..ac98321db91c 100644
--- a/lib/clang/libllvmpowerpcinstprinter/Makefile
+++ b/lib/clang/libllvmpowerpcinstprinter/Makefile
@@ -1,5 +1,7 @@
# $FreeBSD$
+.include <bsd.own.mk>
+
LIB= llvmpowerpcinstprinter
SRCDIR= lib/Target/PowerPC/InstPrinter
diff --git a/lib/clang/libllvmruntimedyld/Makefile b/lib/clang/libllvmruntimedyld/Makefile
index d5d5447e8e92..02ca4bd0f1ae 100644
--- a/lib/clang/libllvmruntimedyld/Makefile
+++ b/lib/clang/libllvmruntimedyld/Makefile
@@ -1,5 +1,7 @@
# $FreeBSD$
+.include <bsd.own.mk>
+
LIB= llvmruntimedyld
SRCDIR= lib/ExecutionEngine/RuntimeDyld
diff --git a/lib/clang/libllvmselectiondag/Makefile b/lib/clang/libllvmselectiondag/Makefile
index e69501273443..754310286dc8 100644
--- a/lib/clang/libllvmselectiondag/Makefile
+++ b/lib/clang/libllvmselectiondag/Makefile
@@ -1,5 +1,7 @@
# $FreeBSD$
+.include <bsd.own.mk>
+
LIB= llvmselectiondag
SRCDIR= lib/CodeGen/SelectionDAG
diff --git a/lib/clang/libllvmtablegen/Makefile b/lib/clang/libllvmtablegen/Makefile
index 8dffad0c22b7..069cec0b0e3e 100644
--- a/lib/clang/libllvmtablegen/Makefile
+++ b/lib/clang/libllvmtablegen/Makefile
@@ -1,5 +1,7 @@
# $FreeBSD$
+.include <bsd.own.mk>
+
LIB= llvmtablegen
SRCDIR= lib/TableGen
diff --git a/lib/clang/libllvmtarget/Makefile b/lib/clang/libllvmtarget/Makefile
index b82377e0e00d..595d2ccbc504 100644
--- a/lib/clang/libllvmtarget/Makefile
+++ b/lib/clang/libllvmtarget/Makefile
@@ -1,5 +1,7 @@
# $FreeBSD$
+.include <bsd.own.mk>
+
LIB= llvmtarget
SRCDIR= lib/Target
diff --git a/lib/clang/libllvmvectorize/Makefile b/lib/clang/libllvmvectorize/Makefile
index 444d672c3535..d0f5b73fd5e0 100644
--- a/lib/clang/libllvmvectorize/Makefile
+++ b/lib/clang/libllvmvectorize/Makefile
@@ -1,5 +1,7 @@
# $FreeBSD$
+.include <bsd.own.mk>
+
LIB= llvmvectorize
SRCDIR= lib/Transforms/Vectorize
diff --git a/lib/clang/libllvmx86asmparser/Makefile b/lib/clang/libllvmx86asmparser/Makefile
index c1402688d3a8..252b2d09a7e8 100644
--- a/lib/clang/libllvmx86asmparser/Makefile
+++ b/lib/clang/libllvmx86asmparser/Makefile
@@ -1,5 +1,7 @@
# $FreeBSD$
+.include <bsd.own.mk>
+
LIB= llvmx86asmparser
SRCDIR= lib/Target/X86/AsmParser
diff --git a/lib/clang/libllvmx86codegen/Makefile b/lib/clang/libllvmx86codegen/Makefile
index bcc7aa033831..939b257ffb90 100644
--- a/lib/clang/libllvmx86codegen/Makefile
+++ b/lib/clang/libllvmx86codegen/Makefile
@@ -1,5 +1,7 @@
# $FreeBSD$
+.include <bsd.own.mk>
+
LIB= llvmx86codegen
SRCDIR= lib/Target/X86
diff --git a/lib/clang/libllvmx86desc/Makefile b/lib/clang/libllvmx86desc/Makefile
index 3d2a9dd9bfd7..a1771293738c 100644
--- a/lib/clang/libllvmx86desc/Makefile
+++ b/lib/clang/libllvmx86desc/Makefile
@@ -1,5 +1,7 @@
# $FreeBSD$
+.include <bsd.own.mk>
+
LIB= llvmx86desc
SRCDIR= lib/Target/X86/MCTargetDesc
diff --git a/lib/clang/libllvmx86info/Makefile b/lib/clang/libllvmx86info/Makefile
index 85155a883379..bc1a7d7efbda 100644
--- a/lib/clang/libllvmx86info/Makefile
+++ b/lib/clang/libllvmx86info/Makefile
@@ -1,5 +1,7 @@
# $FreeBSD$
+.include <bsd.own.mk>
+
LIB= llvmx86info
SRCDIR= lib/Target/X86/TargetInfo
diff --git a/lib/clang/libllvmx86instprinter/Makefile b/lib/clang/libllvmx86instprinter/Makefile
index a44006cc32e4..308f91c8020e 100644
--- a/lib/clang/libllvmx86instprinter/Makefile
+++ b/lib/clang/libllvmx86instprinter/Makefile
@@ -1,5 +1,7 @@
# $FreeBSD$
+.include <bsd.own.mk>
+
LIB= llvmx86instprinter
SRCDIR= lib/Target/X86/InstPrinter
diff --git a/lib/clang/libllvmx86utils/Makefile b/lib/clang/libllvmx86utils/Makefile
index bbed6b0cf047..8355e7e7ccf9 100644
--- a/lib/clang/libllvmx86utils/Makefile
+++ b/lib/clang/libllvmx86utils/Makefile
@@ -1,5 +1,7 @@
# $FreeBSD$
+.include <bsd.own.mk>
+
LIB= llvmx86utils
SRCDIR= lib/Target/X86/Utils
diff --git a/share/mk/bsd.own.mk b/share/mk/bsd.own.mk
index 8b28602995f1..aea33d3eae77 100644
--- a/share/mk/bsd.own.mk
+++ b/share/mk/bsd.own.mk
@@ -391,9 +391,9 @@ __T=${MACHINE_ARCH}
.endif
# Clang is only for x86 and powerpc right now, by default.
.if ${__T} == "amd64" || ${__T} == "i386" || ${__T:Mpowerpc*}
-__DEFAULT_YES_OPTIONS+=CLANG
+__DEFAULT_YES_OPTIONS+=CLANG CLANG_FULL
.else
-__DEFAULT_NO_OPTIONS+=CLANG
+__DEFAULT_NO_OPTIONS+=CLANG CLANG_FULL
.endif
# Clang the default system compiler only on x86.
.if ${__T} == "amd64" || ${__T} == "i386"
@@ -524,6 +524,7 @@ MK_GDB:= no
.if ${MK_CLANG} == "no"
MK_CLANG_EXTRAS:= no
+MK_CLANG_FULL:= no
MK_CLANG_IS_CC:= no
.endif
diff --git a/tools/build/options/WITHOUT_CLANG_FULL b/tools/build/options/WITHOUT_CLANG_FULL
new file mode 100644
index 000000000000..418b7d657f67
--- /dev/null
+++ b/tools/build/options/WITHOUT_CLANG_FULL
@@ -0,0 +1,3 @@
+.\" $FreeBSD$
+Set to avoid building the ARCMigrate, Rewriter and StaticAnalyzer components of
+the Clang C/C++ compiler.
diff --git a/tools/build/options/WITH_CLANG_FULL b/tools/build/options/WITH_CLANG_FULL
new file mode 100644
index 000000000000..59b4dec6fd63
--- /dev/null
+++ b/tools/build/options/WITH_CLANG_FULL
@@ -0,0 +1,3 @@
+.\" $FreeBSD$
+Set to build the ARCMigrate, Rewriter and StaticAnalyzer components of the
+Clang C/C++ compiler.
diff --git a/usr.bin/clang/clang/Makefile b/usr.bin/clang/clang/Makefile
index 6fa9b802d8e1..18a768be849e 100644
--- a/usr.bin/clang/clang/Makefile
+++ b/usr.bin/clang/clang/Makefile
@@ -35,6 +35,19 @@ TGHDRS= CC1AsOptions \
DiagnosticLexKinds \
DiagnosticSemaKinds \
Options
+
+.if !defined(EARLY_BUILD) && defined(MK_CLANG_FULL) && ${MK_CLANG_FULL} != "no"
+_clangstaticanalyzer= \
+ clangstaticanalyzerfrontend \
+ clangstaticanalyzercheckers \
+ clangstaticanalyzercore
+_clangarcmigrate= \
+ clangarcmigrate
+_clangrewriter= \
+ clangrewritefrontend \
+ clangrewritecore
+.endif # !EARLY_BUILD && MK_CLANG_FULL
+
LIBDEPS=clangfrontendtool \
clangfrontend \
clangdriver \
@@ -42,13 +55,10 @@ LIBDEPS=clangfrontendtool \
clangcodegen \
clangparse \
clangsema \
- clangstaticanalyzerfrontend \
- clangstaticanalyzercheckers \
- clangstaticanalyzercore \
+ ${_clangstaticanalyzer} \
clanganalysis \
- clangarcmigrate \
- clangrewritefrontend \
- clangrewritecore \
+ ${_clangarcmigrate} \
+ ${_clangrewriter} \
clangedit \
clangast \
clanglex \