git: 2e47f35be5dc - main - Convert libllvm, libclang and liblldb into private shared libraries

From: Dimitry Andric <dim_at_FreeBSD.org>
Date: Fri, 25 Apr 2025 17:59:59 UTC
The branch main has been updated by dim:

URL: https://cgit.FreeBSD.org/src/commit/?id=2e47f35be5dc61945afdbd1a70e8fd505c032c94

commit 2e47f35be5dc61945afdbd1a70e8fd505c032c94
Author:     Dimitry Andric <dim@FreeBSD.org>
AuthorDate: 2025-04-25 17:56:39 +0000
Commit:     Dimitry Andric <dim@FreeBSD.org>
CommitDate: 2025-04-25 17:56:39 +0000

    Convert libllvm, libclang and liblldb into private shared libraries
    
    This allows clang, lld, lldb, and other llvm tools to be linked against
    these shared libraries, which makes them smaller and avoids duplication.
    
    Since these are not quite the same as the shared libraries shipped by
    the upstream llvm build system, and we do not want to expose the ABI to
    external programs such as ports, make them private libraries.
    
    Note that during the cross-tools stage they are still built as static
    libraries, so the cross compiler and linker are static binaries, as they
    have always been.
    
    This also requires a depend-cleanup.sh kludge which will be added in a
    follow-up commit, to ensure binaries are rebuilt against the shared
    libraries in case of incremental builds.
    
    MFC after:      2 weeks
    Differential Revision: https://reviews.freebsd.org/D49967
---
 lib/clang/libclang/Makefile              |  83 ++++++++++++-----
 lib/clang/liblldb/Makefile               |  23 ++++-
 lib/clang/libllvm/Makefile               | 152 +++++++++++++++++--------------
 tools/build/mk/OptionalObsoleteFiles.inc |  10 ++
 usr.bin/clang/Makefile.inc               |   2 +
 usr.bin/clang/clang.prog.mk              |  12 ++-
 usr.bin/clang/lld/Makefile               |  12 ++-
 usr.bin/clang/lldb-server/Makefile       |   7 +-
 usr.bin/clang/lldb/Makefile              |   7 +-
 usr.bin/clang/llvm.prog.mk               |   8 +-
 10 files changed, 211 insertions(+), 105 deletions(-)

diff --git a/lib/clang/libclang/Makefile b/lib/clang/libclang/Makefile
index d7e1532d2a8c..dc9e0010e309 100644
--- a/lib/clang/libclang/Makefile
+++ b/lib/clang/libclang/Makefile
@@ -1,7 +1,22 @@
 .include <bsd.init.mk>
 .include "../clang.pre.mk"
 
+.if defined(TOOLS_PREFIX)
+# Build static library during cross-tools stage
 LIB=		clang
+INTERNALLIB=
+.else
+PACKAGE=	clang
+SHLIB_CXX=	clang
+SHLIB_MAJOR=	19
+PRIVATELIB=
+.if ${MACHINE} == "powerpc"
+# Work around "relocation R_PPC_GOT16 out of range" errors
+PICFLAG=        -fPIC
+.endif
+.endif
+
+SHARED_CXXFLAGS+=	-UPIC # To avoid compile errors
 
 CFLAGS+=	-I${.OBJDIR}
 CFLAGS+=	-I${OBJTOP}/lib/clang/libllvm
@@ -70,7 +85,7 @@ SRCS_MIN+=	AST/CommentParser.cpp
 SRCS_MIN+=	AST/CommentSema.cpp
 SRCS_MIN+=	AST/ComparisonCategories.cpp
 SRCS_MIN+=	AST/ComputeDependence.cpp
-SRCS_FUL+=	AST/DataCollection.cpp
+SRCS_MIN+=	AST/DataCollection.cpp
 SRCS_MIN+=	AST/Decl.cpp
 SRCS_MIN+=	AST/DeclBase.cpp
 SRCS_MIN+=	AST/DeclCXX.cpp
@@ -158,7 +173,9 @@ SRCS_MIN+=	AST/VTableBuilder.cpp
 SRCS_MIN+=	ASTMatchers/ASTMatchFinder.cpp
 SRCS_MIN+=	ASTMatchers/ASTMatchersInternal.cpp
 SRCS_MIN+=	ASTMatchers/Dynamic/Diagnostics.cpp
+SRCS_MIN+=	ASTMatchers/Dynamic/Marshallers.cpp
 SRCS_MIN+=	ASTMatchers/Dynamic/Registry.cpp
+SRCS_MIN+=	ASTMatchers/Dynamic/VariantValue.cpp
 SRCS_MIN+=	Analysis/AnalysisDeclContext.cpp
 SRCS_MIN+=	Analysis/BodyFarm.cpp
 SRCS_MIN+=	Analysis/CFG.cpp
@@ -424,27 +441,27 @@ SRCS_MIN+=	ExtractAPI/DeclarationFragments.cpp
 SRCS_MIN+=	ExtractAPI/ExtractAPIConsumer.cpp
 SRCS_MIN+=	ExtractAPI/Serialization/SymbolGraphSerializer.cpp
 SRCS_MIN+=	ExtractAPI/TypedefUnderlyingTypeResolver.cpp
-SRCS_EXT+=	Format/AffectedRangeManager.cpp
-SRCS_EXT+=	Format/BreakableToken.cpp
-SRCS_EXT+=	Format/ContinuationIndenter.cpp
-SRCS_EXT+=	Format/DefinitionBlockSeparator.cpp
-SRCS_EXT+=	Format/Format.cpp
-SRCS_EXT+=	Format/FormatToken.cpp
-SRCS_EXT+=	Format/FormatTokenLexer.cpp
-SRCS_EXT+=	Format/IntegerLiteralSeparatorFixer.cpp
-SRCS_EXT+=	Format/MacroCallReconstructor.cpp
-SRCS_EXT+=	Format/MacroExpander.cpp
+SRCS_MIN+=	Format/AffectedRangeManager.cpp
+SRCS_MIN+=	Format/BreakableToken.cpp
+SRCS_MIN+=	Format/ContinuationIndenter.cpp
+SRCS_MIN+=	Format/DefinitionBlockSeparator.cpp
+SRCS_MIN+=	Format/Format.cpp
+SRCS_MIN+=	Format/FormatToken.cpp
+SRCS_MIN+=	Format/FormatTokenLexer.cpp
+SRCS_MIN+=	Format/IntegerLiteralSeparatorFixer.cpp
+SRCS_MIN+=	Format/MacroCallReconstructor.cpp
+SRCS_MIN+=	Format/MacroExpander.cpp
 SRCS_EXT+=	Format/MatchFilePath.cpp
-SRCS_EXT+=	Format/NamespaceEndCommentsFixer.cpp
-SRCS_EXT+=	Format/ObjCPropertyAttributeOrderFixer.cpp
-SRCS_EXT+=	Format/QualifierAlignmentFixer.cpp
-SRCS_EXT+=	Format/SortJavaScriptImports.cpp
-SRCS_EXT+=	Format/TokenAnalyzer.cpp
-SRCS_EXT+=	Format/TokenAnnotator.cpp
-SRCS_EXT+=	Format/UnwrappedLineFormatter.cpp
-SRCS_EXT+=	Format/UnwrappedLineParser.cpp
-SRCS_EXT+=	Format/UsingDeclarationsSorter.cpp
-SRCS_EXT+=	Format/WhitespaceManager.cpp
+SRCS_MIN+=	Format/NamespaceEndCommentsFixer.cpp
+SRCS_MIN+=	Format/ObjCPropertyAttributeOrderFixer.cpp
+SRCS_MIN+=	Format/QualifierAlignmentFixer.cpp
+SRCS_MIN+=	Format/SortJavaScriptImports.cpp
+SRCS_MIN+=	Format/TokenAnalyzer.cpp
+SRCS_MIN+=	Format/TokenAnnotator.cpp
+SRCS_MIN+=	Format/UnwrappedLineFormatter.cpp
+SRCS_MIN+=	Format/UnwrappedLineParser.cpp
+SRCS_MIN+=	Format/UsingDeclarationsSorter.cpp
+SRCS_MIN+=	Format/WhitespaceManager.cpp
 SRCS_MIN+=	Frontend/ASTConsumers.cpp
 SRCS_MIN+=	Frontend/ASTMerge.cpp
 SRCS_MIN+=	Frontend/ASTUnit.cpp
@@ -824,9 +841,12 @@ SRCS_MIN+=	Tooling/ArgumentsAdjusters.cpp
 SRCS_MIN+=	Tooling/CommonOptionsParser.cpp
 SRCS_MIN+=	Tooling/CompilationDatabase.cpp
 SRCS_MIN+=	Tooling/Core/Replacement.cpp
+SRCS_MIN+=	Tooling/ExpandResponseFilesCompilationDatabase.cpp
 SRCS_MIN+=	Tooling/FileMatchTrie.cpp
-SRCS_EXT+=	Tooling/Inclusions/HeaderIncludes.cpp
-SRCS_EXT+=	Tooling/Inclusions/IncludeStyle.cpp
+SRCS_MIN+=	Tooling/GuessTargetAndModeCompilationDatabase.cpp
+SRCS_MIN+=	Tooling/Inclusions/HeaderIncludes.cpp
+SRCS_MIN+=	Tooling/Inclusions/IncludeStyle.cpp
+SRCS_MIN+=	Tooling/InterpolatingCompilationDatabase.cpp
 SRCS_MIN+=	Tooling/JSONCompilationDatabase.cpp
 SRCS_MIN+=	Tooling/Refactoring.cpp
 SRCS_MIN+=	Tooling/RefactoringCallbacks.cpp
@@ -844,6 +864,21 @@ SRCS_ALL+=	${SRCS_LDB}
 .endif
 SRCS+=		${SRCS_ALL:O}
 
+LIBDEPS+=	llvm
+
+.if defined(TOOLS_PREFIX)
+LIBPRIV=
+LIBEXT=		a
+.else
+LIBPRIV=	private
+LIBEXT=		so
+.endif
+
+.for lib in ${LIBDEPS}
+DPADD+=		${OBJTOP}/lib/clang/lib${lib}/lib${LIBPRIV}${lib}.${LIBEXT}
+LDADD+=		${OBJTOP}/lib/clang/lib${lib}/lib${LIBPRIV}${lib}.${LIBEXT}
+.endfor
+
 clang/AST/AbstractBasicReader.inc: \
 	${CLANG_SRCS}/include/clang/AST/PropertiesBase.td
 	${CLANG_TBLGEN} -gen-clang-basic-reader \
@@ -1299,6 +1334,4 @@ CLEANFILES+=	${TGHDRS} ${TGHDRS:C/$/.d/}
 
 .include "../clang.build.mk"
 
-INTERNALLIB=
-
 .include <bsd.lib.mk>
diff --git a/lib/clang/liblldb/Makefile b/lib/clang/liblldb/Makefile
index 26edeb966992..a3ff8e367864 100644
--- a/lib/clang/liblldb/Makefile
+++ b/lib/clang/liblldb/Makefile
@@ -1,7 +1,13 @@
 .include <bsd.init.mk>
 .include "../lldb.pre.mk"
 
-LIB=		lldb
+PACKAGE=	lldb
+SHLIB_CXX=	lldb
+SHLIB_MAJOR=	19
+PRIVATELIB=
+
+SHARED_CXXFLAGS+=	-UPIC # To avoid compile errors
+
 SRCDIR=		lldb/source
 
 CFLAGS+=	-I${LLDB_SRCS}/include
@@ -744,6 +750,19 @@ SRCS+=		Utility/VMRange.cpp
 SRCS+=		Utility/XcodeSDK.cpp
 SRCS+=		Version/Version.cpp
 
+LIBDEPS+=	clang
+LIBDEPS+=	llvm
+
+LIBPRIV=	private
+LIBEXT=		so
+
+.for lib in ${LIBDEPS}
+DPADD+=		${OBJTOP}/lib/clang/lib${lib}/lib${LIBPRIV}${lib}.${LIBEXT}
+LDADD+=		${OBJTOP}/lib/clang/lib${lib}/lib${LIBPRIV}${lib}.${LIBEXT}
+.endfor
+
+LIBADD+=	kvm
+
 LLDB_TBLGEN?=	lldb-tblgen
 
 CommandOptions.inc: ${LLDB_SRCS}/source/Commands/Options.td
@@ -779,8 +798,6 @@ CLEANFILES+=	${TGHDRS} ${TGHDRS:C/$/.d/}
 
 .include "../clang.build.mk"
 
-INTERNALLIB=
-
 # Building lldb's bindings requires swig, but we do not want to include it in
 # the FreeBSD base system (as a build tool) because it has non-trivial
 # dependencies.  As a workaround we commit the generated file.  Requires the
diff --git a/lib/clang/libllvm/Makefile b/lib/clang/libllvm/Makefile
index 55bbc56eeb8f..e634a72b4f90 100644
--- a/lib/clang/libllvm/Makefile
+++ b/lib/clang/libllvm/Makefile
@@ -1,8 +1,22 @@
 .include <bsd.init.mk>
 .include "../llvm.pre.mk"
 
+.if defined(TOOLS_PREFIX)
+# Build static library during cross-tools stage
 LIB=		llvm
 INTERNALLIB=
+.else
+PACKAGE=	clang
+SHLIB_CXX=	llvm
+SHLIB_MAJOR=	19
+PRIVATELIB=
+.if ${MACHINE} == "powerpc"
+# Work around "relocation R_PPC_GOT16 out of range" errors
+PICFLAG=        -fPIC
+.endif
+.endif
+
+SHARED_CXXFLAGS+=	-UPIC # To avoid compile errors
 
 CFLAGS+=	-I${.OBJDIR}
 CFLAGS+=	-I${SRCTOP}/sys/contrib/zstd/lib
@@ -508,24 +522,24 @@ SRCS_EXT+=	DWP/DWP.cpp
 SRCS_EXT+=	DWP/DWPError.cpp
 SRCS_MIW+=	DebugInfo/BTF/BTFContext.cpp
 SRCS_MIW+=	DebugInfo/BTF/BTFParser.cpp
-SRCS_EXT+=	DebugInfo/CodeView/AppendingTypeTableBuilder.cpp
+SRCS_MIN+=	DebugInfo/CodeView/AppendingTypeTableBuilder.cpp
 SRCS_MIN+=	DebugInfo/CodeView/CVSymbolVisitor.cpp
 SRCS_MIN+=	DebugInfo/CodeView/CVTypeVisitor.cpp
 SRCS_MIN+=	DebugInfo/CodeView/CodeViewError.cpp
 SRCS_MIN+=	DebugInfo/CodeView/CodeViewRecordIO.cpp
 SRCS_MIN+=	DebugInfo/CodeView/ContinuationRecordBuilder.cpp
 SRCS_MIN+=	DebugInfo/CodeView/DebugChecksumsSubsection.cpp
-SRCS_EXT+=	DebugInfo/CodeView/DebugCrossExSubsection.cpp
-SRCS_EXT+=	DebugInfo/CodeView/DebugCrossImpSubsection.cpp
+SRCS_MIN+=	DebugInfo/CodeView/DebugCrossExSubsection.cpp
+SRCS_MIN+=	DebugInfo/CodeView/DebugCrossImpSubsection.cpp
 SRCS_MIN+=	DebugInfo/CodeView/DebugFrameDataSubsection.cpp
 SRCS_MIN+=	DebugInfo/CodeView/DebugInlineeLinesSubsection.cpp
 SRCS_MIN+=	DebugInfo/CodeView/DebugLinesSubsection.cpp
 SRCS_MIN+=	DebugInfo/CodeView/DebugStringTableSubsection.cpp
-SRCS_MIW+=	DebugInfo/CodeView/DebugSubsection.cpp
-SRCS_EXT+=	DebugInfo/CodeView/DebugSubsectionRecord.cpp
-SRCS_EXT+=	DebugInfo/CodeView/DebugSubsectionVisitor.cpp
-SRCS_EXT+=	DebugInfo/CodeView/DebugSymbolRVASubsection.cpp
-SRCS_EXT+=	DebugInfo/CodeView/DebugSymbolsSubsection.cpp
+SRCS_MIN+=	DebugInfo/CodeView/DebugSubsection.cpp
+SRCS_MIN+=	DebugInfo/CodeView/DebugSubsectionRecord.cpp
+SRCS_MIN+=	DebugInfo/CodeView/DebugSubsectionVisitor.cpp
+SRCS_MIN+=	DebugInfo/CodeView/DebugSymbolRVASubsection.cpp
+SRCS_MIN+=	DebugInfo/CodeView/DebugSymbolsSubsection.cpp
 SRCS_MIN+=	DebugInfo/CodeView/EnumTables.cpp
 SRCS_MIN+=	DebugInfo/CodeView/Formatters.cpp
 SRCS_MIN+=	DebugInfo/CodeView/GlobalTypeTableBuilder.cpp
@@ -539,7 +553,7 @@ SRCS_EXT+=	DebugInfo/CodeView/StringsAndChecksums.cpp
 SRCS_MIN+=	DebugInfo/CodeView/SymbolDumper.cpp
 SRCS_MIN+=	DebugInfo/CodeView/SymbolRecordHelpers.cpp
 SRCS_MIN+=	DebugInfo/CodeView/SymbolRecordMapping.cpp
-SRCS_EXT+=	DebugInfo/CodeView/SymbolSerializer.cpp
+SRCS_MIN+=	DebugInfo/CodeView/SymbolSerializer.cpp
 SRCS_MIN+=	DebugInfo/CodeView/TypeDumpVisitor.cpp
 SRCS_MIN+=	DebugInfo/CodeView/TypeHashing.cpp
 SRCS_MIN+=	DebugInfo/CodeView/TypeIndex.cpp
@@ -548,37 +562,37 @@ SRCS_EXT+=	DebugInfo/CodeView/TypeRecordHelpers.cpp
 SRCS_MIN+=	DebugInfo/CodeView/TypeRecordMapping.cpp
 SRCS_MIN+=	DebugInfo/CodeView/TypeStreamMerger.cpp
 SRCS_MIN+=	DebugInfo/CodeView/TypeTableCollection.cpp
-SRCS_MIW+=	DebugInfo/DWARF/DWARFAbbreviationDeclaration.cpp
-SRCS_MIW+=	DebugInfo/DWARF/DWARFAcceleratorTable.cpp
-SRCS_MIW+=	DebugInfo/DWARF/DWARFAddressRange.cpp
-SRCS_MIW+=	DebugInfo/DWARF/DWARFCompileUnit.cpp
-SRCS_MIW+=	DebugInfo/DWARF/DWARFContext.cpp
-SRCS_MIW+=	DebugInfo/DWARF/DWARFDataExtractor.cpp
-SRCS_MIW+=	DebugInfo/DWARF/DWARFDebugAbbrev.cpp
-SRCS_MIW+=	DebugInfo/DWARF/DWARFDebugAddr.cpp
-SRCS_MIW+=	DebugInfo/DWARF/DWARFDebugArangeSet.cpp
-SRCS_MIW+=	DebugInfo/DWARF/DWARFDebugAranges.cpp
-SRCS_MIW+=	DebugInfo/DWARF/DWARFDebugFrame.cpp
-SRCS_MIW+=	DebugInfo/DWARF/DWARFDebugInfoEntry.cpp
-SRCS_MIW+=	DebugInfo/DWARF/DWARFDebugLine.cpp
-SRCS_MIW+=	DebugInfo/DWARF/DWARFDebugLoc.cpp
-SRCS_MIW+=	DebugInfo/DWARF/DWARFDebugMacro.cpp
-SRCS_MIW+=	DebugInfo/DWARF/DWARFDebugPubTable.cpp
-SRCS_MIW+=	DebugInfo/DWARF/DWARFDebugRangeList.cpp
-SRCS_MIW+=	DebugInfo/DWARF/DWARFDebugRnglists.cpp
-SRCS_MIW+=	DebugInfo/DWARF/DWARFDie.cpp
+SRCS_MIN+=	DebugInfo/DWARF/DWARFAbbreviationDeclaration.cpp
+SRCS_MIN+=	DebugInfo/DWARF/DWARFAcceleratorTable.cpp
+SRCS_MIN+=	DebugInfo/DWARF/DWARFAddressRange.cpp
+SRCS_MIN+=	DebugInfo/DWARF/DWARFCompileUnit.cpp
+SRCS_MIN+=	DebugInfo/DWARF/DWARFContext.cpp
+SRCS_MIN+=	DebugInfo/DWARF/DWARFDataExtractor.cpp
+SRCS_MIN+=	DebugInfo/DWARF/DWARFDebugAbbrev.cpp
+SRCS_MIN+=	DebugInfo/DWARF/DWARFDebugAddr.cpp
+SRCS_MIN+=	DebugInfo/DWARF/DWARFDebugArangeSet.cpp
+SRCS_MIN+=	DebugInfo/DWARF/DWARFDebugAranges.cpp
+SRCS_MIN+=	DebugInfo/DWARF/DWARFDebugFrame.cpp
+SRCS_MIN+=	DebugInfo/DWARF/DWARFDebugInfoEntry.cpp
+SRCS_MIN+=	DebugInfo/DWARF/DWARFDebugLine.cpp
+SRCS_MIN+=	DebugInfo/DWARF/DWARFDebugLoc.cpp
+SRCS_MIN+=	DebugInfo/DWARF/DWARFDebugMacro.cpp
+SRCS_MIN+=	DebugInfo/DWARF/DWARFDebugPubTable.cpp
+SRCS_MIN+=	DebugInfo/DWARF/DWARFDebugRangeList.cpp
+SRCS_MIN+=	DebugInfo/DWARF/DWARFDebugRnglists.cpp
+SRCS_MIN+=	DebugInfo/DWARF/DWARFDie.cpp
 SRCS_MIN+=	DebugInfo/DWARF/DWARFExpression.cpp
-SRCS_MIW+=	DebugInfo/DWARF/DWARFFormValue.cpp
-SRCS_MIW+=	DebugInfo/DWARF/DWARFGdbIndex.cpp
-SRCS_MIW+=	DebugInfo/DWARF/DWARFListTable.cpp
-SRCS_MIW+=	DebugInfo/DWARF/DWARFTypePrinter.cpp
-SRCS_MIW+=	DebugInfo/DWARF/DWARFTypeUnit.cpp
-SRCS_MIW+=	DebugInfo/DWARF/DWARFUnit.cpp
-SRCS_MIW+=	DebugInfo/DWARF/DWARFUnitIndex.cpp
-SRCS_MIW+=	DebugInfo/DWARF/DWARFVerifier.cpp
+SRCS_MIN+=	DebugInfo/DWARF/DWARFFormValue.cpp
+SRCS_MIN+=	DebugInfo/DWARF/DWARFGdbIndex.cpp
+SRCS_MIN+=	DebugInfo/DWARF/DWARFListTable.cpp
+SRCS_MIN+=	DebugInfo/DWARF/DWARFTypePrinter.cpp
+SRCS_MIN+=	DebugInfo/DWARF/DWARFTypeUnit.cpp
+SRCS_MIN+=	DebugInfo/DWARF/DWARFUnit.cpp
+SRCS_MIN+=	DebugInfo/DWARF/DWARFUnitIndex.cpp
+SRCS_MIN+=	DebugInfo/DWARF/DWARFVerifier.cpp
 SRCS_MIN+=	DebugInfo/MSF/MSFBuilder.cpp
 SRCS_MIN+=	DebugInfo/MSF/MSFCommon.cpp
-SRCS_EXT+=	DebugInfo/MSF/MSFError.cpp
+SRCS_MIN+=	DebugInfo/MSF/MSFError.cpp
 SRCS_MIN+=	DebugInfo/MSF/MappedBlockStream.cpp
 SRCS_EXT+=	DebugInfo/PDB/GenericError.cpp
 SRCS_EXT+=	DebugInfo/PDB/IPDBSourceFile.cpp
@@ -866,7 +880,7 @@ SRCS_MIN+=	LTO/LTO.cpp
 SRCS_MIN+=	LTO/LTOBackend.cpp
 SRCS_EXL+=	LTO/LTOCodeGenerator.cpp
 SRCS_EXL+=	LTO/LTOModule.cpp
-SRCS_EXL+=	LTO/SummaryBasedOptimizations.cpp
+SRCS_MIN+=	LTO/SummaryBasedOptimizations.cpp
 SRCS_EXL+=	LTO/ThinLTOCodeGenerator.cpp
 SRCS_MIN+=	LTO/UpdateCompilerUsed.cpp
 SRCS_MIN+=	Linker/IRMover.cpp
@@ -891,7 +905,7 @@ SRCS_MIN+=	MC/MCContext.cpp
 SRCS_MIN+=	MC/MCDXContainerStreamer.cpp
 SRCS_MIN+=	MC/MCDXContainerWriter.cpp
 SRCS_XDL+=	MC/MCDisassembler/Disassembler.cpp
-SRCS_XDW+=	MC/MCDisassembler/MCDisassembler.cpp
+SRCS_MIN+=	MC/MCDisassembler/MCDisassembler.cpp
 SRCS_XDW+=	MC/MCDisassembler/MCExternalSymbolizer.cpp
 SRCS_MIN+=	MC/MCDisassembler/MCRelocationInfo.cpp
 SRCS_XDW+=	MC/MCDisassembler/MCSymbolizer.cpp
@@ -1005,9 +1019,9 @@ SRCS_MIW+=	ObjCopy/wasm/WasmWriter.cpp
 SRCS_MIN+=	Object/Archive.cpp
 SRCS_MIN+=	Object/ArchiveWriter.cpp
 SRCS_MIN+=	Object/Binary.cpp
-SRCS_MIW+=	Object/BuildID.cpp
+SRCS_MIN+=	Object/BuildID.cpp
 SRCS_MIN+=	Object/COFFImportFile.cpp
-SRCS_MIW+=	Object/COFFModuleDefinition.cpp
+SRCS_MIN+=	Object/COFFModuleDefinition.cpp
 SRCS_MIN+=	Object/COFFObjectFile.cpp
 SRCS_MIN+=	Object/Decompressor.cpp
 SRCS_MIN+=	Object/ELF.cpp
@@ -1017,31 +1031,34 @@ SRCS_MIW+=	Object/FaultMapParser.cpp
 SRCS_MIN+=	Object/IRObjectFile.cpp
 SRCS_MIN+=	Object/IRSymtab.cpp
 SRCS_MIN+=	Object/MachOObjectFile.cpp
-SRCS_MIW+=	Object/MachOUniversal.cpp
+SRCS_MIN+=	Object/MachOUniversal.cpp
 SRCS_MIW+=	Object/MachOUniversalWriter.cpp
-SRCS_MIW+=	Object/Minidump.cpp
+SRCS_MIN+=	Object/Minidump.cpp
 SRCS_MIN+=	Object/ModuleSymbolTable.cpp
 SRCS_EXT+=	Object/Object.cpp
 SRCS_MIN+=	Object/ObjectFile.cpp
-SRCS_MIW+=	Object/OffloadBinary.cpp
+SRCS_MIN+=	Object/OffloadBinary.cpp
 SRCS_MIN+=	Object/RecordStreamer.cpp
-SRCS_MIW+=	Object/RelocationResolver.cpp
+SRCS_MIN+=	Object/RelocationResolver.cpp
 SRCS_MIW+=	Object/SymbolSize.cpp
 SRCS_MIN+=	Object/SymbolicFile.cpp
-SRCS_MIW+=	Object/TapiFile.cpp
-SRCS_MIW+=	Object/TapiUniversal.cpp
+SRCS_MIN+=	Object/TapiFile.cpp
+SRCS_MIN+=	Object/TapiUniversal.cpp
 SRCS_MIN+=	Object/WasmObjectFile.cpp
 SRCS_MIW+=	Object/WindowsMachineFlag.cpp
 SRCS_MIN+=	Object/WindowsResource.cpp
 SRCS_MIN+=	Object/XCOFFObjectFile.cpp
 SRCS_MIN+=	ObjectYAML/COFFYAML.cpp
-SRCS_EXT+=	ObjectYAML/CodeViewYAMLDebugSections.cpp
-SRCS_EXT+=	ObjectYAML/CodeViewYAMLSymbols.cpp
-SRCS_EXT+=	ObjectYAML/CodeViewYAMLTypes.cpp
+SRCS_MIN+=	ObjectYAML/CodeViewYAMLDebugSections.cpp
+SRCS_MIN+=	ObjectYAML/CodeViewYAMLSymbols.cpp
+SRCS_MIN+=	ObjectYAML/CodeViewYAMLTypeHashing.cpp
+SRCS_MIN+=	ObjectYAML/CodeViewYAMLTypes.cpp
+SRCS_MIN+=	ObjectYAML/DWARFEmitter.cpp
 SRCS_MIN+=	ObjectYAML/DWARFYAML.cpp
+SRCS_MIN+=	ObjectYAML/ELFEmitter.cpp
 SRCS_MIN+=	ObjectYAML/ELFYAML.cpp
 SRCS_MIN+=	ObjectYAML/MachOYAML.cpp
-SRCS_EXT+=	ObjectYAML/YAML.cpp
+SRCS_MIN+=	ObjectYAML/YAML.cpp
 SRCS_MIN+=	Option/Arg.cpp
 SRCS_MIN+=	Option/ArgList.cpp
 SRCS_MIN+=	Option/OptTable.cpp
@@ -1134,7 +1151,7 @@ SRCS_MIN+=	Support/ErrorHandling.cpp
 SRCS_MIN+=	Support/ExponentialBackoff.cpp
 SRCS_MIN+=	Support/ExtensibleRTTI.cpp
 SRCS_MIN+=	Support/FileCollector.cpp
-SRCS_MIW+=	Support/FileOutputBuffer.cpp
+SRCS_MIN+=	Support/FileOutputBuffer.cpp
 SRCS_MIN+=	Support/FileUtilities.cpp
 SRCS_MIN+=	Support/FloatingPointMode.cpp
 SRCS_MIN+=	Support/FoldingSet.cpp
@@ -1160,7 +1177,7 @@ SRCS_MIW+=	Support/MSP430Attributes.cpp
 SRCS_MIN+=	Support/ManagedStatic.cpp
 SRCS_MIN+=	Support/MathExtras.cpp
 SRCS_MIN+=	Support/MemAlloc.cpp
-SRCS_MIW+=	Support/Memory.cpp
+SRCS_MIN+=	Support/Memory.cpp
 SRCS_MIN+=	Support/MemoryBuffer.cpp
 SRCS_MIN+=	Support/MemoryBufferRef.cpp
 SRCS_MIN+=	Support/NativeFormatting.cpp
@@ -1199,7 +1216,7 @@ SRCS_MIN+=	Support/SuffixTree.cpp
 SRCS_MIN+=	Support/SuffixTreeNode.cpp
 SRCS_EXT+=	Support/SystemUtils.cpp
 SRCS_LLD+=	Support/TarWriter.cpp
-SRCS_MIW+=	Support/ThreadPool.cpp
+SRCS_MIN+=	Support/ThreadPool.cpp
 SRCS_MIN+=	Support/Threading.cpp
 SRCS_MIN+=	Support/TimeProfiler.cpp
 SRCS_MIN+=	Support/Timer.cpp
@@ -1694,21 +1711,22 @@ SRCS_MIN+=	TargetParser/SubtargetFeature.cpp
 SRCS_MIN+=	TargetParser/TargetParser.cpp
 SRCS_MIN+=	TargetParser/Triple.cpp
 SRCS_MIN+=	TargetParser/X86TargetParser.cpp
-SRCS_MIW+=	TextAPI/Architecture.cpp
-SRCS_MIW+=	TextAPI/ArchitectureSet.cpp
+SRCS_MIN+=	TextAPI/Architecture.cpp
+SRCS_MIN+=	TextAPI/ArchitectureSet.cpp
 SRCS_MIW+=	TextAPI/BinaryReader/DylibReader.cpp
-SRCS_MIW+=	TextAPI/InterfaceFile.cpp
-SRCS_MIW+=	TextAPI/PackedVersion.cpp
-SRCS_MIW+=	TextAPI/Platform.cpp
+SRCS_MIN+=	TextAPI/InterfaceFile.cpp
+SRCS_MIN+=	TextAPI/PackedVersion.cpp
+SRCS_MIN+=	TextAPI/Platform.cpp
 SRCS_MIW+=	TextAPI/RecordVisitor.cpp
-SRCS_MIW+=	TextAPI/Symbol.cpp
-SRCS_MIW+=	TextAPI/SymbolSet.cpp
-SRCS_MIW+=	TextAPI/Target.cpp
-SRCS_MIW+=	TextAPI/TextAPIError.cpp
-SRCS_MIW+=	TextAPI/TextStub.cpp
-SRCS_MIW+=	TextAPI/TextStubCommon.cpp
-SRCS_MIW+=	TextAPI/TextStubV5.cpp
-SRCS_MIW+=	TextAPI/Utils.cpp
+SRCS_MIW+=	TextAPI/RecordsSlice.cpp
+SRCS_MIN+=	TextAPI/Symbol.cpp
+SRCS_MIN+=	TextAPI/SymbolSet.cpp
+SRCS_MIN+=	TextAPI/Target.cpp
+SRCS_MIN+=	TextAPI/TextAPIError.cpp
+SRCS_MIN+=	TextAPI/TextStub.cpp
+SRCS_MIN+=	TextAPI/TextStubCommon.cpp
+SRCS_MIN+=	TextAPI/TextStubV5.cpp
+SRCS_MIN+=	TextAPI/Utils.cpp
 SRCS_MIN+=	ToolDrivers/llvm-dlltool/DlltoolDriver.cpp
 SRCS_MIW+=	ToolDrivers/llvm-lib/LibDriver.cpp
 SRCS_MIN+=	Transforms/AggressiveInstCombine/AggressiveInstCombine.cpp
diff --git a/tools/build/mk/OptionalObsoleteFiles.inc b/tools/build/mk/OptionalObsoleteFiles.inc
index b25f551d069b..bd0a0972500d 100644
--- a/tools/build/mk/OptionalObsoleteFiles.inc
+++ b/tools/build/mk/OptionalObsoleteFiles.inc
@@ -875,6 +875,15 @@ OLD_FILES+=usr/share/man/man4/ccd.4.gz
 OLD_FILES+=usr/share/man/man8/ccdconfig.8.gz
 .endif
 
+.if ${MK_CLANG} == no && ${MK_CLANG_FORMAT} == no && ${MK_LLDB} == no
+OLD_LIBS+=usr/lib/libprivateclang.so.19
+.endif
+
+.if ${MK_CLANG_EXTRAS} == no && ${MK_CLANG} == no && ${MK_LLDB} == no && \
+    ${MK_LLD} == no && ${MK_LLVM_BINUTILS} == no && ${MK_LLVM_COV} == no
+OLD_LIBS+=usr/lib/libprivatellvm.so.19
+.endif
+
 .if ${MK_CLANG} == no && ${MK_LLVM_BINUTILS} == no
 OLD_FILES+=usr/bin/llvm-addr2line
 OLD_FILES+=usr/bin/llvm-ar
@@ -3677,6 +3686,7 @@ OLD_FILES+=usr/bin/ld.lld
 .if ${MK_LLDB} == no
 OLD_FILES+=usr/bin/lldb
 OLD_FILES+=usr/bin/lldb-server
+OLD_LIBS+=usr/lib/libprivatelldb.so.19
 OLD_FILES+=usr/share/man/man1/lldb-server.1.gz
 OLD_FILES+=usr/share/man/man1/lldb.1.gz
 .endif
diff --git a/usr.bin/clang/Makefile.inc b/usr.bin/clang/Makefile.inc
index bf9fad4032e2..1e9998061cf6 100644
--- a/usr.bin/clang/Makefile.inc
+++ b/usr.bin/clang/Makefile.inc
@@ -1,6 +1,8 @@
 .include <src.opts.mk>
 
+.if defined(TOOLS_PREFIX)
 MK_PIE:=	no	# Explicit libXXX.a references
+.endif
 
 .if ${MK_LLVM_FULL_DEBUGINFO} == "no"
 .if ${COMPILER_TYPE} == "clang"
diff --git a/usr.bin/clang/clang.prog.mk b/usr.bin/clang/clang.prog.mk
index cf48f02359e9..36c601bcbe36 100644
--- a/usr.bin/clang/clang.prog.mk
+++ b/usr.bin/clang/clang.prog.mk
@@ -18,9 +18,17 @@ LIBADD+=	z
 LIBADD+=	zstd
 .endif
 
+.if defined(TOOLS_PREFIX)
+LIBPRIV=
+LIBEXT=		a
+.else
+LIBPRIV=	private
+LIBEXT=		so
+.endif
+
 .for lib in ${LIBDEPS}
-DPADD+=		${OBJTOP}/lib/clang/lib${lib}/lib${lib}.a
-LDADD+=		${OBJTOP}/lib/clang/lib${lib}/lib${lib}.a
+DPADD+=		${OBJTOP}/lib/clang/lib${lib}/lib${LIBPRIV}${lib}.${LIBEXT}
+LDADD+=		${OBJTOP}/lib/clang/lib${lib}/lib${LIBPRIV}${lib}.${LIBEXT}
 .endfor
 
 PACKAGE=	clang
diff --git a/usr.bin/clang/lld/Makefile b/usr.bin/clang/lld/Makefile
index 1c99bd716069..cbad6f2b3fcd 100644
--- a/usr.bin/clang/lld/Makefile
+++ b/usr.bin/clang/lld/Makefile
@@ -81,9 +81,17 @@ SRCS+=		tools/lld/lld.cpp
 
 LIBDEPS+=	llvm
 
+.if defined(TOOLS_PREFIX)
+LIBPRIV=
+LIBEXT=		a
+.else
+LIBPRIV=	private
+LIBEXT=		so
+.endif
+
 .for lib in ${LIBDEPS}
-DPADD+=		${OBJTOP}/lib/clang/lib${lib}/lib${lib}.a
-LDADD+=		${OBJTOP}/lib/clang/lib${lib}/lib${lib}.a
+DPADD+=		${OBJTOP}/lib/clang/lib${lib}/lib${LIBPRIV}${lib}.${LIBEXT}
+LDADD+=		${OBJTOP}/lib/clang/lib${lib}/lib${LIBPRIV}${lib}.${LIBEXT}
 .endfor
 
 INCFILE=	Options.inc
diff --git a/usr.bin/clang/lldb-server/Makefile b/usr.bin/clang/lldb-server/Makefile
index b4d6131d81ab..5042fa1fdf04 100644
--- a/usr.bin/clang/lldb-server/Makefile
+++ b/usr.bin/clang/lldb-server/Makefile
@@ -22,9 +22,12 @@ LIBDEPS+=	lldb
 LIBDEPS+=	clang
 LIBDEPS+=	llvm
 
+LIBPRIV=	private
+LIBEXT=		so
+
 .for lib in ${LIBDEPS}
-DPADD+=		${OBJTOP}/lib/clang/lib${lib}/lib${lib}.a
-LDADD+=		${OBJTOP}/lib/clang/lib${lib}/lib${lib}.a
+DPADD+=		${OBJTOP}/lib/clang/lib${lib}/lib${LIBPRIV}${lib}.${LIBEXT}
+LDADD+=		${OBJTOP}/lib/clang/lib${lib}/lib${LIBPRIV}${lib}.${LIBEXT}
 .endfor
 
 INCFILE=	LLGSOptions.inc
diff --git a/usr.bin/clang/lldb/Makefile b/usr.bin/clang/lldb/Makefile
index 4f01b1d8f0e0..452bfd23bfa2 100644
--- a/usr.bin/clang/lldb/Makefile
+++ b/usr.bin/clang/lldb/Makefile
@@ -15,9 +15,12 @@ LIBDEPS+=	lldb
 LIBDEPS+=	clang
 LIBDEPS+=	llvm
 
+LIBPRIV=	private
+LIBEXT=		so
+
 .for lib in ${LIBDEPS}
-DPADD+=		${OBJTOP}/lib/clang/lib${lib}/lib${lib}.a
-LDADD+=		${OBJTOP}/lib/clang/lib${lib}/lib${lib}.a
+DPADD+=		${OBJTOP}/lib/clang/lib${lib}/lib${LIBPRIV}${lib}.${LIBEXT}
+LDADD+=		${OBJTOP}/lib/clang/lib${lib}/lib${LIBPRIV}${lib}.${LIBEXT}
 .endfor
 
 INCFILE=	Options.inc
diff --git a/usr.bin/clang/llvm.prog.mk b/usr.bin/clang/llvm.prog.mk
index 27a3312726df..f702082e31bd 100644
--- a/usr.bin/clang/llvm.prog.mk
+++ b/usr.bin/clang/llvm.prog.mk
@@ -10,15 +10,19 @@ CFLAGS+=	-I${OBJTOP}/lib/clang/libllvm
     (${PROG_CXX} == "clang-tblgen" || ${PROG_CXX} == "lldb-tblgen" || \
      ${PROG_CXX} == "llvm-min-tblgen" || ${PROG_CXX} == "llvm-tblgen")
 LIBDEPS+=	llvmminimal
+LIBPRIV=
+LIBEXT=		a
 .else
 LIBDEPS+=	llvm
+LIBPRIV=	private
+LIBEXT=		so
 LIBADD+=	z
 LIBADD+=	zstd
 .endif
 
 .for lib in ${LIBDEPS}
-DPADD+=		${OBJTOP}/lib/clang/lib${lib}/lib${lib}.a
-LDADD+=		${OBJTOP}/lib/clang/lib${lib}/lib${lib}.a
+DPADD+=		${OBJTOP}/lib/clang/lib${lib}/lib${LIBPRIV}${lib}.${LIBEXT}
+LDADD+=		${OBJTOP}/lib/clang/lib${lib}/lib${LIBPRIV}${lib}.${LIBEXT}
 .endfor
 
 PACKAGE=	clang