From nobody Fri Jan 2 20:52:26 2026 X-Original-To: dev-commits-src-all@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4djbVM1XwQz6MFpM for ; Fri, 02 Jan 2026 20:52:27 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R13" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4djbVL5HHQz3r38 for ; Fri, 02 Jan 2026 20:52:26 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1767387146; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=cMNtbO683O0zrCUQYn4uE4uNM67htOoSnObmVWGfYkM=; b=JBlM46QXt0fPfpYkMvsDzAgGQp0th9+3/DnRz54QCzS8PH6bk39neg7Ztlq0QuUkjRfjlQ OKdOkibbgXc2YdcrcK7t2zgk3pzpfhV173BnOpKhwLuCeTA8TKep7SutQutCrzpRtSGnvm bK1XYghY+StYlgrBADV/YJWcIYoSw0nwfVk9XEK3lNQxfJ5RalMddog1evjovjWMkMeJGU la5WI0DhCurysNSHNQeQPk2D3n8pCbCDmPNx++r9+Wz4k0PAaRYJQTUrgWyUE9gOgOYbz3 iZgw/tXOgGpX5g0cuGZpRprshFIKCek5h8+Rm032+3zxEX+kxpHhQO3KTC6Vdg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1767387146; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=cMNtbO683O0zrCUQYn4uE4uNM67htOoSnObmVWGfYkM=; b=ZDSWupyYE51ipXuN7I1CctcLTi3E1cs+lH8u+196ZNSf/VgO1T288Zrjg1xQcE3nc7S5gv c1FjkaXCuQEodfy+t8Ti9e4GbfUmn0MeD43dK3z39MjP7FBv8pFc4UH6MdYgoyfil9znif rk1f3zAvNTlDof/DCrbQ7b1oy9doSY2QBTBCmbNnubFOzdqDqyyFDTk9UNzhnEmfIJZg9x iEFcsXdwqFbXfaFcNF8y/sZmBSr+5arjGD6zYWIiUf5xAbs9NXwuebiad7dW51vwbODt1/ CiOTYpoI+X80Q1/W6xNYAdgeKWX6GfVgEW/2Eor4SnAHoMINqxXcqLg3jQ7tww== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1767387146; a=rsa-sha256; cv=none; b=H5zmXZE0o/94Li5y7OLKeqW9jMHMQsiCz00O6vJSl4oEXxXYUQDSf49id0Hxqu8gWBZEqH q3uo+zPl8FG/gzpgdp1QOO6zWlbo7M4lU/wxX7CDvE9v7CTJNfYX0YbQ4Sq/hHjnSHpLtG dsgKm5p9veN75d/hx7KfoYj7sIwCmPe2s0Wty4F6B7SQ1nWw+r+p52b5+E+P8vL5loX+5G BWptAK6wn+2SNqTuILlxk7y44wR0nMLBW0Cla6Jw43y5ooV8XrTiCwxUMRYi5iUPWasfvF WE2zt67VBJIupKJTwy3jWb4HspqqFj/qtU+Z6+bMK+IlkZaOWAUmo8hQf1hAyA== ARC-Authentication-Results: i=1; mx1.freebsd.org; none Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4djbVL4skXzZXP for ; Fri, 02 Jan 2026 20:52:26 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id b62d by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Fri, 02 Jan 2026 20:52:26 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Dimitry Andric Subject: git: 6acae3bbe337 - stable/13 - src.conf: Add WITH_LLVM_LINK_STATIC_LIBRARIES build knob List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-all@freebsd.org Sender: owner-dev-commits-src-all@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: dim X-Git-Repository: src X-Git-Refname: refs/heads/stable/13 X-Git-Reftype: branch X-Git-Commit: 6acae3bbe3377aa59fe44c8646dfb778c034ca78 Auto-Submitted: auto-generated Date: Fri, 02 Jan 2026 20:52:26 +0000 Message-Id: <6958300a.b62d.75918efd@gitrepo.freebsd.org> The branch stable/13 has been updated by dim: URL: https://cgit.FreeBSD.org/src/commit/?id=6acae3bbe3377aa59fe44c8646dfb778c034ca78 commit 6acae3bbe3377aa59fe44c8646dfb778c034ca78 Author: Dimitry Andric AuthorDate: 2025-06-18 10:06:25 +0000 Commit: Dimitry Andric CommitDate: 2026-01-02 20:48:56 +0000 src.conf: Add WITH_LLVM_LINK_STATIC_LIBRARIES build knob In commit 2e47f35be5dc libllvm, libclang and liblldb were converted into private shared libraries. This allowed clang, lld, lldb, and other llvm tools to be linked against these shared libraries, which makes them smaller and avoids duplication. However, this also comes at the cost of some performance, since the dynamic libraries are quite large, and contain lots of long symbols (mangled C++ identifiers). Add a WITH_LLVM_LINK_STATIC_LIBRARIES build knob that can be used to go back to the previous behavior: libllvm, libclang and liblldb are built as internal static libraries, i.e. only available during buildworld, and fully linked into the various executables such as clang, lld, etc. PR: 287447 Reviewed by: emaste MFC after: 1 week Differential Revision: https://reviews.freebsd.org/D50956 (cherry picked from commit 8d5a11cd0137d3ad70f6b06e063ea91a776d510a) --- lib/clang/libclang/Makefile | 9 ++++----- lib/clang/liblldb/Makefile | 14 ++++++++++++-- lib/clang/libllvm/Makefile | 10 ++++------ share/man/man5/src.conf.5 | 10 ++++++++-- share/mk/src.opts.mk | 1 + tools/build/mk/OptionalObsoleteFiles.inc | 11 ++++++++--- tools/build/options/WITH_LLVM_LINK_STATIC_LIBRARIES | 6 ++++++ usr.bin/clang/Makefile.inc | 2 +- usr.bin/clang/clang.prog.mk | 2 +- usr.bin/clang/lld/Makefile | 2 +- usr.bin/clang/lldb-server/Makefile | 5 +++++ usr.bin/clang/lldb/Makefile | 5 +++++ usr.bin/clang/llvm.prog.mk | 5 +++++ 13 files changed, 61 insertions(+), 21 deletions(-) diff --git a/lib/clang/libclang/Makefile b/lib/clang/libclang/Makefile index 9b9e0cbadcd7..56f6fd374fe5 100644 --- a/lib/clang/libclang/Makefile +++ b/lib/clang/libclang/Makefile @@ -1,9 +1,8 @@ - -.include +.include .include "../clang.pre.mk" -.if defined(TOOLS_PREFIX) -# Build static library during cross-tools stage +.if defined(TOOLS_PREFIX) || ${MK_LLVM_LINK_STATIC_LIBRARIES} == "yes" +# Build static library during cross-tools stage, or when explicitly requested. LIB= clang INTERNALLIB= .else @@ -873,7 +872,7 @@ SRCS+= ${SRCS_ALL:O} LIBDEPS+= llvm -.if defined(TOOLS_PREFIX) +.if defined(TOOLS_PREFIX) || ${MK_LLVM_LINK_STATIC_LIBRARIES} == "yes" LIBPRIV= LIBEXT= a .else diff --git a/lib/clang/liblldb/Makefile b/lib/clang/liblldb/Makefile index 408ebc440686..aa9e90b2f6f2 100644 --- a/lib/clang/liblldb/Makefile +++ b/lib/clang/liblldb/Makefile @@ -1,11 +1,16 @@ - -.include +.include .include "../lldb.pre.mk" +.if ${MK_LLVM_LINK_STATIC_LIBRARIES} == "yes" +# Build static library when explicitly requested. +LIB= lldb +INTERNALLIB= +.else PACKAGE= lldb SHLIB_CXX= lldb SHLIB_MAJOR= 19 PRIVATELIB= +.endif SHARED_CXXFLAGS+= -UPIC # To avoid compile errors @@ -754,8 +759,13 @@ SRCS+= Version/Version.cpp LIBDEPS+= clang LIBDEPS+= llvm +.if defined(TOOLS_PREFIX) || ${MK_LLVM_LINK_STATIC_LIBRARIES} == "yes" +LIBPRIV= +LIBEXT= a +.else LIBPRIV= private LIBEXT= so +.endif .for lib in ${LIBDEPS} DPADD+= ${OBJTOP}/lib/clang/lib${lib}/lib${LIBPRIV}${lib}.${LIBEXT} diff --git a/lib/clang/libllvm/Makefile b/lib/clang/libllvm/Makefile index 835da5545e81..05128550827a 100644 --- a/lib/clang/libllvm/Makefile +++ b/lib/clang/libllvm/Makefile @@ -1,9 +1,8 @@ - -.include +.include .include "../llvm.pre.mk" -.if defined(TOOLS_PREFIX) -# Build static library during cross-tools stage +.if defined(TOOLS_PREFIX) || ${MK_LLVM_LINK_STATIC_LIBRARIES} == "yes" +# Build static library during cross-tools stage, or when explicitly requested. LIB= llvm INTERNALLIB= .else @@ -15,6 +14,7 @@ PRIVATELIB= # Work around "relocation R_PPC_GOT16 out of range" errors PICFLAG= -fPIC .endif +CFLAGS+= -DLLVM_BUILD_LLVM_DYLIB .endif SHARED_CXXFLAGS+= -UPIC # To avoid compile errors @@ -49,8 +49,6 @@ CFLAGS+= -DBLAKE3_NO_AVX512 -DBLAKE3_NO_AVX2 -DBLAKE3_NO_SSE41 \ CFLAGS+= -DBLAKE3_USE_NEON=0 .endif -CFLAGS+= -DLLVM_BUILD_LLVM_DYLIB - SRCDIR= llvm/lib # Explanation of different SRCS variants below: diff --git a/share/man/man5/src.conf.5 b/share/man/man5/src.conf.5 index 01721e786aa1..eb501901008a 100644 --- a/share/man/man5/src.conf.5 +++ b/share/man/man5/src.conf.5 @@ -1,6 +1,5 @@ .\" DO NOT EDIT-- this file is @generated by tools/build/options/makeman. -.\" $FreeBSD$ -.Dd September 16, 2025 +.Dd December 21, 2025 .Dt SRC.CONF 5 .Os .Sh NAME @@ -922,6 +921,13 @@ Install ELF Tool Chain's cxxfilt as c++filt, instead of LLVM's llvm-cxxfilt. .It Va WITH_LLVM_FULL_DEBUGINFO Generate full debug information for LLVM libraries and tools, which uses more disk space and build resources, but allows for easier debugging. +.It Va WITH_LLVM_LINK_STATIC_LIBRARIES +Link LLVM libraries (libllvm, libclang, liblldb) statically into each of +the binaries that use them. + +This means that binaries linked against these libraries, such as clang, +ld.lld and lldb will be much larger and position dependent, but will +start more quickly. .It Va WITHOUT_LLVM_TARGET_AARCH64 Do not build LLVM target support for AArch64. The diff --git a/share/mk/src.opts.mk b/share/mk/src.opts.mk index d8872f93bfcd..dbc0cf31671f 100644 --- a/share/mk/src.opts.mk +++ b/share/mk/src.opts.mk @@ -212,6 +212,7 @@ __DEFAULT_NO_OPTIONS = \ LOADER_VERBOSE \ LOADER_VERIEXEC_PASS_MANIFEST \ LLVM_FULL_DEBUGINFO \ + LLVM_LINK_STATIC_LIBRARIES \ OFED_EXTRA \ OPENLDAP \ RPCBIND_WARMSTART_SUPPORT \ diff --git a/tools/build/mk/OptionalObsoleteFiles.inc b/tools/build/mk/OptionalObsoleteFiles.inc index b79dde1dd41f..2c07c61011e3 100644 --- a/tools/build/mk/OptionalObsoleteFiles.inc +++ b/tools/build/mk/OptionalObsoleteFiles.inc @@ -1157,12 +1157,14 @@ OLD_FILES+=usr/share/man/man8/zfsloader.8.gz OLD_FILES+=usr/share/man/man8/zpool.8.gz .endif -.if ${MK_CLANG} == no && ${MK_CLANG_FORMAT} == no && ${MK_LLDB} == no +.if ${MK_CLANG} == no && ${MK_CLANG_FORMAT} == no && ${MK_LLDB} == no && \ + ${MK_LLVM_LINK_STATIC_LIBRARIES} == 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 + ${MK_LLD} == no && ${MK_LLVM_BINUTILS} == no && ${MK_LLVM_COV} == no && \ + ${MK_LLVM_LINK_STATIC_LIBRARIES} == no OLD_LIBS+=usr/lib/libprivatellvm.so.19 .endif @@ -4327,10 +4329,13 @@ OLD_DIRS+=usr/include/c++/v1 OLD_FILES+=usr/bin/ld.lld .endif +.if ${MK_LLDB} == no && ${MK_LLVM_LINK_STATIC_LIBRARIES} == no +OLD_LIBS+=usr/lib/libprivatelldb.so.19 +.endif + .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/tools/build/options/WITH_LLVM_LINK_STATIC_LIBRARIES b/tools/build/options/WITH_LLVM_LINK_STATIC_LIBRARIES new file mode 100644 index 000000000000..7860ee862b1d --- /dev/null +++ b/tools/build/options/WITH_LLVM_LINK_STATIC_LIBRARIES @@ -0,0 +1,6 @@ +Link LLVM libraries (libllvm, libclang, liblldb) statically into each of +the binaries that use them. + +This means that binaries linked against these libraries, such as clang, +ld.lld and lldb will be much larger and position dependent, but will +start more quickly. diff --git a/usr.bin/clang/Makefile.inc b/usr.bin/clang/Makefile.inc index d5c9658b1d90..7d713c54d518 100644 --- a/usr.bin/clang/Makefile.inc +++ b/usr.bin/clang/Makefile.inc @@ -1,7 +1,7 @@ .include -.if defined(TOOLS_PREFIX) +.if defined(TOOLS_PREFIX) || ${MK_LLVM_LINK_STATIC_LIBRARIES} == "yes" MK_PIE:= no # Explicit libXXX.a references .endif diff --git a/usr.bin/clang/clang.prog.mk b/usr.bin/clang/clang.prog.mk index 36c601bcbe36..cf4e5e0ce47a 100644 --- a/usr.bin/clang/clang.prog.mk +++ b/usr.bin/clang/clang.prog.mk @@ -18,7 +18,7 @@ LIBADD+= z LIBADD+= zstd .endif -.if defined(TOOLS_PREFIX) +.if defined(TOOLS_PREFIX) || ${MK_LLVM_LINK_STATIC_LIBRARIES} == "yes" LIBPRIV= LIBEXT= a .else diff --git a/usr.bin/clang/lld/Makefile b/usr.bin/clang/lld/Makefile index f87677c2b384..8a8b11a438d5 100644 --- a/usr.bin/clang/lld/Makefile +++ b/usr.bin/clang/lld/Makefile @@ -86,7 +86,7 @@ SRCS+= tools/lld/lld.cpp LIBDEPS+= llvm -.if defined(TOOLS_PREFIX) +.if defined(TOOLS_PREFIX) || ${MK_LLVM_LINK_STATIC_LIBRARIES} == "yes" LIBPRIV= LIBEXT= a .else diff --git a/usr.bin/clang/lldb-server/Makefile b/usr.bin/clang/lldb-server/Makefile index 1a5c96b65806..d43fc3278e20 100644 --- a/usr.bin/clang/lldb-server/Makefile +++ b/usr.bin/clang/lldb-server/Makefile @@ -23,8 +23,13 @@ LIBDEPS+= lldb LIBDEPS+= clang LIBDEPS+= llvm +.if defined(TOOLS_PREFIX) || ${MK_LLVM_LINK_STATIC_LIBRARIES} == "yes" +LIBPRIV= +LIBEXT= a +.else LIBPRIV= private LIBEXT= so +.endif .for lib in ${LIBDEPS} DPADD+= ${OBJTOP}/lib/clang/lib${lib}/lib${LIBPRIV}${lib}.${LIBEXT} diff --git a/usr.bin/clang/lldb/Makefile b/usr.bin/clang/lldb/Makefile index 0e9a9ebef7e8..529906abf5c2 100644 --- a/usr.bin/clang/lldb/Makefile +++ b/usr.bin/clang/lldb/Makefile @@ -16,8 +16,13 @@ LIBDEPS+= lldb LIBDEPS+= clang LIBDEPS+= llvm +.if defined(TOOLS_PREFIX) || ${MK_LLVM_LINK_STATIC_LIBRARIES} == "yes" +LIBPRIV= +LIBEXT= a +.else LIBPRIV= private LIBEXT= so +.endif .for lib in ${LIBDEPS} DPADD+= ${OBJTOP}/lib/clang/lib${lib}/lib${LIBPRIV}${lib}.${LIBEXT} diff --git a/usr.bin/clang/llvm.prog.mk b/usr.bin/clang/llvm.prog.mk index 8c898b4087fb..3121648431de 100644 --- a/usr.bin/clang/llvm.prog.mk +++ b/usr.bin/clang/llvm.prog.mk @@ -14,8 +14,13 @@ LIBPRIV= LIBEXT= a .else LIBDEPS+= llvm +.if ${MK_LLVM_LINK_STATIC_LIBRARIES} == "yes" +LIBPRIV= +LIBEXT= a +.else LIBPRIV= private LIBEXT= so +.endif LIBADD+= z LIBADD+= zstd .endif