build: Boostrap LLVM_BINUTILS for cross-tools

Reported by:	vexeduxr, jrtc27
Reviewed by:	imp
Sponsored by:	The FreeBSD Foundation
Pull request:	https://github.com/freebsd/freebsd-src/pull/2084
Differential Revision: https://reviews.freebsd.org/D55923
This commit is contained in:
Ed Maste
2026-03-18 11:09:53 -04:00
parent dc2687bf71
commit 17494c6e6b
4 changed files with 43 additions and 2 deletions
+17 -2
View File
@@ -239,6 +239,12 @@ X${BINUTIL}?= ${${BINUTIL}}
MK_LLD_BOOTSTRAP= no MK_LLD_BOOTSTRAP= no
.endif .endif
# If full paths to all standard bintuils are given, don't build LLVM binutils.
.if ${XAR:M/*} && ${XNM:M/*} && ${XOBJCOPY:M/*} && ${XRANLIB:M/*} && \
${XSIZE:M/*} && ${XSTRINGS:M/*} && ${XSTRIPBIN:M/*}
MK_LLVM_BINUTILS_BOOTSTRAP= no
.endif
# We also want the X_LINKER* variables if we are using an external toolchain. # We also want the X_LINKER* variables if we are using an external toolchain.
_WANT_TOOLCHAIN_CROSS_VARS= t _WANT_TOOLCHAIN_CROSS_VARS= t
.include "share/mk/bsd.linker.mk" .include "share/mk/bsd.linker.mk"
@@ -2701,7 +2707,8 @@ _gensnmptree= usr.sbin/bsnmpd/gensnmptree
# llvm-tblgen is also needed for various llvm binutils (e.g. objcopy). # llvm-tblgen is also needed for various llvm binutils (e.g. objcopy).
.if ${MK_CLANG_BOOTSTRAP} != "no" || ${MK_CLANG} != "no" || \ .if ${MK_CLANG_BOOTSTRAP} != "no" || ${MK_CLANG} != "no" || \
${MK_LLD_BOOTSTRAP} != "no" || ${MK_LLD} != "no" || \ ${MK_LLD_BOOTSTRAP} != "no" || ${MK_LLD} != "no" || \
${MK_LLDB} != "no" || ${MK_LLVM_BINUTILS} != "no" ${MK_LLDB} != "no" || \
${MK_LLVM_BINUTILS_BOOTSTRAP} != "no" || ${MK_LLVM_BINUTILS} != "no"
_clang_tblgen= \ _clang_tblgen= \
lib/clang/libllvmminimal \ lib/clang/libllvmminimal \
usr.bin/clang/llvm-min-tblgen \ usr.bin/clang/llvm-min-tblgen \
@@ -3061,9 +3068,16 @@ _clang= usr.bin/clang/clang
.if ${MK_LLD_BOOTSTRAP} != "no" .if ${MK_LLD_BOOTSTRAP} != "no"
_lld= usr.bin/clang/lld _lld= usr.bin/clang/lld
.endif .endif
.if ${MK_CLANG_BOOTSTRAP} != "no" || ${MK_LLD_BOOTSTRAP} != "no" .if ${MK_CLANG_BOOTSTRAP} != "no" || ${MK_LLD_BOOTSTRAP} != "no" || \
${MK_LLVM_BINUTILS_BOOTSTRAP} != "no"
_clang_libs= lib/clang _clang_libs= lib/clang
.endif .endif
.if ${MK_LLVM_BINUTILS_BOOTSTRAP}} != "no"
_llvm_binutils= usr.bin/clang/llvm-ar \
usr.bin/clang/llvm-nm \
usr.bin/clang/llvm-objcopy \
usr.bin/clang/llvm-size
.endif
.if ${MK_USB} != "no" .if ${MK_USB} != "no"
_usb_tools= stand/usb/tools _usb_tools= stand/usb/tools
.endif .endif
@@ -3079,6 +3093,7 @@ cross-tools: .MAKE .PHONY
${_clang_libs} \ ${_clang_libs} \
${_clang} \ ${_clang} \
${_lld} \ ${_lld} \
${_llvm_binutils} \
${_elftctools} \ ${_elftctools} \
${_dtrace_tools} \ ${_dtrace_tools} \
${_btxld} \ ${_btxld} \
+13
View File
@@ -989,6 +989,19 @@ and
.Xr objdump 1 . .Xr objdump 1 .
.Xr strings 1 .Xr strings 1
is always provided by ELF Tool Chain. is always provided by ELF Tool Chain.
.It Va WITHOUT_LLVM_BINUTILS_BOOTSTRAP
Do not build LLVM binary utilities during the bootstrap phase of
the build.
To be able to build the system alternate binary utilities must be provided via
.Ev XAR ,
.Ev XNM ,
.Ev XOBJCOPY ,
.Ev XRANLIB ,
.Ev XSIZE ,
.Ev XSTRINGS ,
and
.Ev XSTRIPBIN .
.It Va WITHOUT_LLVM_COV .It Va WITHOUT_LLVM_COV
Do not build the Do not build the
.Xr llvm-cov 1 .Xr llvm-cov 1
+1
View File
@@ -124,6 +124,7 @@ __DEFAULT_YES_OPTIONS = \
LLD_BOOTSTRAP \ LLD_BOOTSTRAP \
LLVM_ASSERTIONS \ LLVM_ASSERTIONS \
LLVM_BINUTILS \ LLVM_BINUTILS \
LLVM_BINUTILS_BOOTSTRAP \
LLVM_COV \ LLVM_COV \
LOADER_BIOS_TEXTONLY \ LOADER_BIOS_TEXTONLY \
LOADER_GELI \ LOADER_GELI \
@@ -0,0 +1,12 @@
Do not build LLVM binary utilities during the bootstrap phase of
the build.
To be able to build the system alternate binary utilities must be provided via
.Ev XAR ,
.Ev XNM ,
.Ev XOBJCOPY ,
.Ev XRANLIB ,
.Ev XSIZE ,
.Ev XSTRINGS ,
and
.Ev XSTRIPBIN .