From 75bc38b9169af8b2414ba98c56ccb28cff6225bc Mon Sep 17 00:00:00 2001 From: Ed Maste Date: Wed, 31 Aug 2016 21:18:38 +0000 Subject: [PATCH] Add WITH_/WITHOUT_LLD knobs to enable the lld linker Use this to control inclusion of the libllvm functionality required by lld. Enable by default on arm64 and amd64, the two platforms where lld is most usable for testing. Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D7713 --- lib/clang/libllvm/Makefile | 44 +++++++++++++++++++-------------- share/mk/src.opts.mk | 1 + tools/build/options/WITHOUT_LLD | 2 ++ tools/build/options/WITH_LLD | 2 ++ usr.bin/clang/Makefile | 3 +++ 5 files changed, 33 insertions(+), 19 deletions(-) create mode 100644 tools/build/options/WITHOUT_LLD create mode 100644 tools/build/options/WITH_LLD diff --git a/lib/clang/libllvm/Makefile b/lib/clang/libllvm/Makefile index e91a591ea373..bcbbc8bbff1c 100644 --- a/lib/clang/libllvm/Makefile +++ b/lib/clang/libllvm/Makefile @@ -468,12 +468,12 @@ SRCS_MIN+= IR/ValueSymbolTable.cpp SRCS_MIN+= IR/ValueTypes.cpp SRCS_MIN+= IR/Verifier.cpp SRCS_MIN+= IRReader/IRReader.cpp -SRCS_EXT+= LTO/LTO.cpp -SRCS_EXT+= LTO/LTOCodeGenerator.cpp -SRCS_EXT+= LTO/LTOModule.cpp -SRCS_EXT+= LTO/ThinLTOCodeGenerator.cpp -SRCS_EXT+= LTO/UpdateCompilerUsed.cpp -SRCS_EXT+= LibDriver/LibDriver.cpp +SRCS_EXL+= LTO/LTO.cpp +SRCS_EXL+= LTO/LTOCodeGenerator.cpp +SRCS_EXL+= LTO/LTOModule.cpp +SRCS_EXL+= LTO/ThinLTOCodeGenerator.cpp +SRCS_EXL+= LTO/UpdateCompilerUsed.cpp +SRCS_EXL+= LibDriver/LibDriver.cpp SRCS_MIN+= LineEditor/LineEditor.cpp SRCS_MIN+= Linker/IRMover.cpp SRCS_MIN+= Linker/LinkModules.cpp @@ -489,11 +489,11 @@ SRCS_MIN+= MC/MCAssembler.cpp SRCS_MIN+= MC/MCCodeEmitter.cpp SRCS_MIN+= MC/MCCodeView.cpp SRCS_MIN+= MC/MCContext.cpp -SRCS_XDB+= MC/MCDisassembler/Disassembler.cpp -SRCS_XDB+= MC/MCDisassembler/MCDisassembler.cpp -SRCS_XDB+= MC/MCDisassembler/MCExternalSymbolizer.cpp +SRCS_XDL+= MC/MCDisassembler/Disassembler.cpp +SRCS_XDL+= MC/MCDisassembler/MCDisassembler.cpp +SRCS_XDL+= MC/MCDisassembler/MCExternalSymbolizer.cpp SRCS_MIN+= MC/MCDisassembler/MCRelocationInfo.cpp -SRCS_XDB+= MC/MCDisassembler/MCSymbolizer.cpp +SRCS_XDL+= MC/MCDisassembler/MCSymbolizer.cpp SRCS_MIN+= MC/MCDwarf.cpp SRCS_MIN+= MC/MCELFObjectTargetWriter.cpp SRCS_MIN+= MC/MCELFStreamer.cpp @@ -564,7 +564,7 @@ SRCS_MIN+= Option/Arg.cpp SRCS_MIN+= Option/ArgList.cpp SRCS_MIN+= Option/OptTable.cpp SRCS_MIN+= Option/Option.cpp -SRCS_EXT+= Passes/PassBuilder.cpp +SRCS_EXL+= Passes/PassBuilder.cpp SRCS_MIN+= ProfileData/Coverage/CoverageMapping.cpp SRCS_MIN+= ProfileData/Coverage/CoverageMappingReader.cpp SRCS_MIN+= ProfileData/Coverage/CoverageMappingWriter.cpp @@ -601,7 +601,7 @@ SRCS_MIN+= Support/DynamicLibrary.cpp SRCS_MIN+= Support/Errno.cpp SRCS_MIN+= Support/Error.cpp SRCS_MIN+= Support/ErrorHandling.cpp -SRCS_EXT+= Support/FileOutputBuffer.cpp +SRCS_EXL+= Support/FileOutputBuffer.cpp SRCS_EXT+= Support/FileUtilities.cpp SRCS_MIN+= Support/FoldingSet.cpp SRCS_MIN+= Support/FormattedStream.cpp @@ -651,7 +651,7 @@ SRCS_EXT+= Support/SystemUtils.cpp SRCS_MIN+= Support/TargetParser.cpp SRCS_MIN+= Support/TargetRegistry.cpp SRCS_MIN+= Support/ThreadLocal.cpp -SRCS_EXT+= Support/ThreadPool.cpp +SRCS_EXL+= Support/ThreadPool.cpp SRCS_MIN+= Support/Threading.cpp SRCS_MIN+= Support/TimeValue.cpp SRCS_MIN+= Support/Timer.cpp @@ -709,7 +709,7 @@ SRCS_MIN+= Target/AArch64/AArch64TargetMachine.cpp SRCS_MIN+= Target/AArch64/AArch64TargetObjectFile.cpp SRCS_MIN+= Target/AArch64/AArch64TargetTransformInfo.cpp SRCS_MIN+= Target/AArch64/AsmParser/AArch64AsmParser.cpp -SRCS_XDB+= Target/AArch64/Disassembler/AArch64Disassembler.cpp +SRCS_XDL+= Target/AArch64/Disassembler/AArch64Disassembler.cpp SRCS_MIN+= Target/AArch64/Disassembler/AArch64ExternalSymbolizer.cpp SRCS_MIN+= Target/AArch64/InstPrinter/AArch64InstPrinter.cpp SRCS_MIN+= Target/AArch64/MCTargetDesc/AArch64AsmBackend.cpp @@ -771,7 +771,7 @@ SRCS_MIN+= Target/ARM/Thumb2InstrInfo.cpp SRCS_MIN+= Target/ARM/Thumb2SizeReduction.cpp SRCS_MIN+= Target/ARM/ThumbRegisterInfo.cpp SRCS_MIN+= Target/Mips/AsmParser/MipsAsmParser.cpp -SRCS_XDB+= Target/Mips/Disassembler/MipsDisassembler.cpp +SRCS_XDL+= Target/Mips/Disassembler/MipsDisassembler.cpp SRCS_MIN+= Target/Mips/InstPrinter/MipsInstPrinter.cpp SRCS_MIN+= Target/Mips/MCTargetDesc/MipsABIFlagsSection.cpp SRCS_MIN+= Target/Mips/MCTargetDesc/MipsABIInfo.cpp @@ -860,7 +860,7 @@ SRCS_MIN+= Target/PowerPC/PPCVSXSwapRemoval.cpp SRCS_MIN+= Target/PowerPC/TargetInfo/PowerPCTargetInfo.cpp SRCS_MIN+= Target/Sparc/AsmParser/SparcAsmParser.cpp SRCS_MIN+= Target/Sparc/DelaySlotFiller.cpp -SRCS_XDB+= Target/Sparc/Disassembler/SparcDisassembler.cpp +SRCS_XDL+= Target/Sparc/Disassembler/SparcDisassembler.cpp SRCS_MIN+= Target/Sparc/InstPrinter/SparcInstPrinter.cpp SRCS_MIN+= Target/Sparc/LeonPasses.cpp SRCS_MIN+= Target/Sparc/MCTargetDesc/SparcAsmBackend.cpp @@ -891,8 +891,8 @@ SRCS_MIN+= Target/TargetRecip.cpp SRCS_MIN+= Target/TargetSubtargetInfo.cpp SRCS_MIN+= Target/X86/AsmParser/X86AsmInstrumentation.cpp SRCS_MIN+= Target/X86/AsmParser/X86AsmParser.cpp -SRCS_XDB+= Target/X86/Disassembler/X86Disassembler.cpp -SRCS_XDB+= Target/X86/Disassembler/X86DisassemblerDecoder.cpp +SRCS_XDL+= Target/X86/Disassembler/X86Disassembler.cpp +SRCS_XDL+= Target/X86/Disassembler/X86DisassemblerDecoder.cpp SRCS_MIN+= Target/X86/InstPrinter/X86ATTInstPrinter.cpp SRCS_MIN+= Target/X86/InstPrinter/X86InstComments.cpp SRCS_MIN+= Target/X86/InstPrinter/X86IntelInstPrinter.cpp @@ -1018,7 +1018,7 @@ SRCS_MIN+= Transforms/Scalar/LoopDataPrefetch.cpp SRCS_MIN+= Transforms/Scalar/LoopDeletion.cpp SRCS_MIN+= Transforms/Scalar/LoopDistribute.cpp SRCS_MIN+= Transforms/Scalar/LoopIdiomRecognize.cpp -SRCS_EXT+= Transforms/Scalar/LoopInstSimplify.cpp +SRCS_EXL+= Transforms/Scalar/LoopInstSimplify.cpp SRCS_MIN+= Transforms/Scalar/LoopInterchange.cpp SRCS_MIN+= Transforms/Scalar/LoopLoadElimination.cpp SRCS_MIN+= Transforms/Scalar/LoopRerollPass.cpp @@ -1108,9 +1108,15 @@ SRCS_ALL+= ${SRCS_EXT} .if ${MK_CLANG_FULL} != "no" SRCS_ALL+= ${SRCS_FUL} .endif +.if ${MK_CLANG_EXTRAS} != "no" || ${MK_LLD} != "no" +SRCS_ALL+= ${SRCS_EXL} +.endif .if ${MK_CLANG_EXTRAS} != "no" || ${MK_LLDB} != "no" SRCS_ALL+= ${SRCS_XDB} .endif +.if ${MK_CLANG_EXTRAS} != "no" || ${MK_LLDB} != "no" || ${MK_LLD} != "no" +SRCS_ALL+= ${SRCS_XDL} +.endif SRCS+= ${SRCS_ALL:O} llvm/IR/Attributes.inc: ${LLVM_SRCS}/include/llvm/IR/Attributes.td diff --git a/share/mk/src.opts.mk b/share/mk/src.opts.mk index 06a9ac98c3c9..b249790dc0b2 100644 --- a/share/mk/src.opts.mk +++ b/share/mk/src.opts.mk @@ -184,6 +184,7 @@ __DEFAULT_NO_OPTIONS = \ EISA \ HESIOD \ LIBSOFT \ + LLD \ NAND \ OFED \ OPENLDAP \ diff --git a/tools/build/options/WITHOUT_LLD b/tools/build/options/WITHOUT_LLD new file mode 100644 index 000000000000..78bb7de9e228 --- /dev/null +++ b/tools/build/options/WITHOUT_LLD @@ -0,0 +1,2 @@ +.\" $FreeBSD$ +Set to not build LLVM's lld linker. diff --git a/tools/build/options/WITH_LLD b/tools/build/options/WITH_LLD new file mode 100644 index 000000000000..e6aef39d5feb --- /dev/null +++ b/tools/build/options/WITH_LLD @@ -0,0 +1,2 @@ +.\" $FreeBSD$ +Set to build LLVM's lld linker. diff --git a/usr.bin/clang/Makefile b/usr.bin/clang/Makefile index d560a8a08c68..c6ba2b3aa141 100644 --- a/usr.bin/clang/Makefile +++ b/usr.bin/clang/Makefile @@ -33,6 +33,9 @@ SUBDIR+= llvm-symbolizer SUBDIR+= opt .endif +.if ${MK_LLD} != "no" +SUBDIR+= lld +.endif .if ${MK_LLDB} != "no" SUBDIR+= lldb .endif # MK_LLDB