From owner-dev-commits-src-all@freebsd.org Sun Sep 19 08:37:23 2021 Return-Path: Delivered-To: dev-commits-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 9A9B16AF546; Sun, 19 Sep 2021 08:37:23 +0000 (UTC) (envelope-from herbert@gojira.at) Received: from mail.bsd4all.net (mail.bsd4all.net [94.130.200.20]) (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 "mail.bsd4all.net", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4HC1Jx4mJNz4pSJ; Sun, 19 Sep 2021 08:37:21 +0000 (UTC) (envelope-from herbert@gojira.at) Date: Sun, 19 Sep 2021 10:34:52 +0200 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=gojira.at; s=mail202005; t=1632040634; bh=rjjS9omAeRTKnIdzQi4iSJa1fRHWABd+ER8AB0iBrTs=; h=Date:Message-ID:From:To:Subject:MIME-Version:Content-Type; b=JiUWZ24b4H7kZZwZQUz/mW+DXyg9A0vAL74xeBHp2nwXXZpElM8pwtrI3LZTLpbAP foNr7hUIfmbLLhyXJ9rX9g1JdI8+YeuPaUp0IgyUvJyfJRtFgciPVeTmfP1tTs9lqG eAWuYlbxy6Md3D5O6IQqRuN1qPAXqviu9AR4HGvn9YCDjfz/2pq2Ss/ECIjHERTtQ3 6x82B1JP0bgMXyUA8KlOSKygGebh9KpWRGuK3MM1Gq6Eud5v4UzlF+7+2+9xbHQf28 Ga5z4b/kZTZ9HvJlQKomxp/+6M8iZfZLftwdy6inbwWdTz7SJpuLtRQ/+FHRu2xATn gs0d6xZHznE8w== Message-ID: <87sfy1rmj7.wl-herbert@gojira.at> From: "Herbert J. Skuhra" To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org Subject: Re: git: 021385aba562 - main - Add WITH_LLVM_BINUTILS to install LLVM binutils instead of Elftoolchain In-Reply-To: <202109060924.1869O2Dk045877@gitrepo.freebsd.org> References: <202109060924.1869O2Dk045877@gitrepo.freebsd.org> User-Agent: Wanderlust/2.15.9 (Almost Unreal) Emacs/28.0 Mule/6.0 MIME-Version: 1.0 (generated by SEMI-EPG 1.14.7 - "Harue") Content-Type: text/plain; charset=US-ASCII X-Rspamd-Queue-Id: 4HC1Jx4mJNz4pSJ X-Spamd-Bar: -- Authentication-Results: mx1.freebsd.org; dkim=pass header.d=gojira.at header.s=mail202005 header.b=JiUWZ24b; dmarc=none; spf=pass (mx1.freebsd.org: domain of herbert@gojira.at designates 94.130.200.20 as permitted sender) smtp.mailfrom=herbert@gojira.at X-Spamd-Result: default: False [-2.50 / 15.00]; ARC_NA(0.00)[]; NEURAL_HAM_MEDIUM(-1.00)[-1.000]; R_DKIM_ALLOW(-0.20)[gojira.at:s=mail202005]; FROM_HAS_DN(0.00)[]; RCPT_COUNT_THREE(0.00)[3]; R_SPF_ALLOW(-0.20)[+ip4:94.130.200.20:c]; TO_MATCH_ENVRCPT_ALL(0.00)[]; MIME_GOOD(-0.10)[text/plain]; TO_DN_NONE(0.00)[]; DMARC_NA(0.00)[gojira.at]; NEURAL_HAM_LONG(-1.00)[-1.000]; DKIM_TRACE(0.00)[gojira.at:+]; NEURAL_HAM_SHORT(-1.00)[-0.995]; MID_CONTAINS_FROM(1.00)[]; RCVD_COUNT_ZERO(0.00)[0]; FROM_EQ_ENVFROM(0.00)[]; MIME_TRACE(0.00)[0:+]; ASN(0.00)[asn:24940, ipnet:94.130.0.0/16, country:DE]; MAILMAN_DEST(0.00)[dev-commits-src-all,dev-commits-src-main] X-BeenThere: dev-commits-src-all@freebsd.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Commit messages for all branches of the src repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 19 Sep 2021 08:37:23 -0000 On Mon, 06 Sep 2021 11:24:02 +0200, Alex Richardson wrote: > > The branch main has been updated by arichardson: > > URL: https://cgit.FreeBSD.org/src/commit/?id=021385aba56279febcfdcc64d23673a0106ae45d > > commit 021385aba56279febcfdcc64d23673a0106ae45d > Author: Alex Richardson > AuthorDate: 2021-09-06 08:49:49 +0000 > Commit: Alex Richardson > CommitDate: 2021-09-06 08:49:49 +0000 > > Add WITH_LLVM_BINUTILS to install LLVM binutils instead of Elftoolchain > > When WITH_LLVM_BINUTILS is set, we will install the LLVM binutils as > ar/ranlib/nm/objcopy/etc. instead of the elftoolchain ones. > Having the LLVM binutils instead of the elftoolchain ones allows us to use > features such as LTO that depend on binutils that understand LLVM IR. > Another benefit will be an improved user-experience when compiling with > AddressSanitizer, since ASAN does not symbolize backtraces correctly if > addr2line is elftoolchain addr2line instead of llvm-symbolizer. > See https://lists.freebsd.org/archives/freebsd-toolchain/2021-July/000062.html > for more details. > > This is currently off by default but will be turned on by default at some > point in the near future. > > Reviewed By: emaste > > Differential Revision: https://reviews.freebsd.org/D31060 > --- > Makefile.inc1 | 4 +++- > lib/Makefile | 5 ++++- > lib/clang/Makefile | 4 +++- > lib/clang/libllvm/Makefile | 6 +++--- > share/mk/src.opts.mk | 8 ++++++++ > tools/build/options/WITH_LLVM_BINUTILS | 2 ++ > usr.bin/Makefile | 16 +++++++++++----- > usr.bin/clang/Makefile | 13 +++++++++---- > usr.bin/clang/llvm-ar/Makefile | 7 +++++++ > usr.bin/clang/llvm-nm/Makefile | 7 +++++++ > usr.bin/clang/llvm-objcopy/Makefile | 7 +++++++ > usr.bin/clang/llvm-objdump/Makefile | 7 +++++++ > usr.bin/clang/llvm-size/Makefile | 7 +++++++ > usr.bin/clang/llvm-symbolizer/Makefile | 7 +++++++ > 14 files changed, 85 insertions(+), 15 deletions(-) > > diff --git a/Makefile.inc1 b/Makefile.inc1 > index b59c1913f8ce..478824675382 100644 > --- a/Makefile.inc1 > +++ b/Makefile.inc1 > @@ -771,6 +771,7 @@ XMAKE= ${BMAKE} \ > TARGET=${TARGET} TARGET_ARCH=${TARGET_ARCH} \ > MK_CLANG_IS_CC=${MK_CLANG_BOOTSTRAP} \ > MK_LLDB=no \ > + MK_LLVM_BINUTILS=no \ > MK_TESTS=no > > # kernel-tools stage > @@ -2339,9 +2340,10 @@ _gensnmptree= usr.sbin/bsnmpd/gensnmptree > > # We need to build tblgen when we're building clang or lld, either as > # bootstrap tools, or as the part of the normal build. > +# llvm-tblgen is also needed for various llvm binutils (e.g. objcopy). > .if ${MK_CLANG_BOOTSTRAP} != "no" || ${MK_CLANG} != "no" || \ > ${MK_LLD_BOOTSTRAP} != "no" || ${MK_LLD} != "no" || \ > - ${MK_LLDB} != "no" > + ${MK_LLDB} != "no" || ${MK_LLVM_BINUTILS} != "no" > _clang_tblgen= \ > lib/clang/libllvmminimal \ > usr.bin/clang/llvm-tblgen > diff --git a/lib/Makefile b/lib/Makefile > index 674368a19ffd..1e375bb456e6 100644 > --- a/lib/Makefile > +++ b/lib/Makefile > @@ -157,7 +157,10 @@ SUBDIR.${MK_BLUETOOTH}+=libbluetooth libsdp > SUBDIR.${MK_BSNMP}+= libbsnmp > > .if !defined(COMPAT_32BIT) && !defined(COMPAT_SOFTFP) > -SUBDIR.${MK_CLANG}+= clang > +.if ${MK_CLANG} != "no" || ${MK_LLD} != "no" || \ > + ${MK_LLDB} != "no" || ${MK_LLVM_BINUTILS} != "no" > +SUBDIR+= clang > +.endif > .endif > > SUBDIR.${MK_CUSE}+= libcuse > diff --git a/lib/clang/Makefile b/lib/clang/Makefile > index bc09ea62dc67..df4aa01a2653 100644 > --- a/lib/clang/Makefile > +++ b/lib/clang/Makefile > @@ -4,10 +4,12 @@ > > # These have to be built in order. > SUBDIR= libllvm > +.if ${MK_CLANG} != "no" > SUBDIR+= libclang > +SUBDIR+= headers > +.endif > .if ${MK_LLDB} != "no" > SUBDIR+= liblldb > .endif > -SUBDIR+= headers > > .include > diff --git a/lib/clang/libllvm/Makefile b/lib/clang/libllvm/Makefile > index 09d6336c01d9..7eaedf65dcb3 100644 > --- a/lib/clang/libllvm/Makefile > +++ b/lib/clang/libllvm/Makefile > @@ -830,7 +830,7 @@ SRCS_MIN+= Object/IRObjectFile.cpp > SRCS_MIN+= Object/IRSymtab.cpp > SRCS_MIN+= Object/MachOObjectFile.cpp > SRCS_MIW+= Object/MachOUniversal.cpp > -SRCS_EXT+= Object/MachOUniversalWriter.cpp > +SRCS_MIW+= Object/MachOUniversalWriter.cpp > SRCS_MIW+= Object/Minidump.cpp > SRCS_MIN+= Object/ModuleSymbolTable.cpp > SRCS_EXT+= Object/Object.cpp > @@ -920,7 +920,7 @@ SRCS_MIN+= Support/Errno.cpp > SRCS_MIN+= Support/Error.cpp > SRCS_MIN+= Support/ErrorHandling.cpp > SRCS_MIN+= Support/FileCollector.cpp > -SRCS_EXL+= Support/FileOutputBuffer.cpp > +SRCS_MIW+= Support/FileOutputBuffer.cpp > SRCS_MIN+= Support/FileUtilities.cpp > SRCS_MIN+= Support/FoldingSet.cpp > SRCS_MIN+= Support/FormatVariadic.cpp > @@ -945,7 +945,7 @@ SRCS_MIN+= Support/MD5.cpp > SRCS_MIN+= Support/ManagedStatic.cpp > SRCS_MIN+= Support/MathExtras.cpp > SRCS_MIN+= Support/MemAlloc.cpp > -SRCS_XDL+= Support/Memory.cpp > +SRCS_MIW+= Support/Memory.cpp > SRCS_MIN+= Support/MemoryBuffer.cpp > SRCS_MIN+= Support/MemoryBufferRef.cpp > SRCS_MIN+= Support/NativeFormatting.cpp > diff --git a/share/mk/src.opts.mk b/share/mk/src.opts.mk > index 32346e31a752..5363cb6e78f9 100644 > --- a/share/mk/src.opts.mk > +++ b/share/mk/src.opts.mk > @@ -203,6 +203,7 @@ __DEFAULT_NO_OPTIONS = \ > LOADER_FIREWIRE \ > LOADER_VERBOSE \ > LOADER_VERIEXEC_PASS_MANIFEST \ > + LLVM_BINUTILS \ > MALLOC_PRODUCTION \ > OFED_EXTRA \ > OPENLDAP \ > @@ -459,6 +460,7 @@ MK_CLANG:= no > MK_INCLUDES:= no > MK_LLD:= no > MK_LLDB:= no > +MK_LLVM_BINUTILS:= no > .endif > > .if ${MK_CLANG} == "no" > @@ -468,6 +470,12 @@ MK_CLANG_FULL:= no > MK_LLVM_COV:= no > .endif > > +.if ${MK_LLVM_BINUTILS} == "yes" > +# MK_LLVM_CXXFILT is a subset of MK_LLVM_BINUTILS and should therefore be > +# enabled if MK_LLVM_BINUTILS is set. > +MK_LLVM_CXXFILT:= yes > +.endif > + > .if ${MK_LOADER_VERIEXEC} == "no" > MK_LOADER_VERIEXEC_PASS_MANIFEST := no > .endif > diff --git a/tools/build/options/WITH_LLVM_BINUTILS b/tools/build/options/WITH_LLVM_BINUTILS > new file mode 100644 > index 000000000000..8fa2c55f31a9 > --- /dev/null > +++ b/tools/build/options/WITH_LLVM_BINUTILS > @@ -0,0 +1,2 @@ > +.\" $FreeBSD$ > +Install LLVM's binutils (ar, addr2line, nm, etc.) instead of ELF Tool Chain's. > diff --git a/usr.bin/Makefile b/usr.bin/Makefile > index f1b07a7007be..e8be161db01a 100644 > --- a/usr.bin/Makefile > +++ b/usr.bin/Makefile > @@ -195,7 +195,10 @@ SUBDIR.${MK_ATM}+= atm > SUBDIR.${MK_BLUETOOTH}+= bluetooth > SUBDIR.${MK_BSD_CPIO}+= cpio > SUBDIR.${MK_CALENDAR}+= calendar > -SUBDIR.${MK_CLANG}+= clang > +.if ${MK_CLANG} != "no" || ${MK_LLVM_BINUTILS} != "no" || \ > + ${MK_LLD} != "no" || ${MK_LLDB} != "no" > +SUBDIR+= clang > +.endif > SUBDIR.${MK_DIALOG}+= dpv > SUBDIR.${MK_EE}+= ee > SUBDIR.${MK_FILE}+= file > @@ -251,25 +254,28 @@ SUBDIR.${MK_TESTS_SUPPORT}.${MK_CXX}+= kyua > SUBDIR.${MK_TESTS}+= tests > SUBDIR.${MK_TEXTPROC}+= ul > SUBDIR.${MK_TFTP}+= tftp > +.if ${MK_LLVM_BINUTILS} == "no" > +# Only build the elftoolchain tools if we aren't using the LLVM ones. > SUBDIR.${MK_TOOLCHAIN}+= addr2line > SUBDIR.${MK_TOOLCHAIN}+= ar > +SUBDIR.${MK_TOOLCHAIN}+= nm > +SUBDIR.${MK_TOOLCHAIN}+= objcopy > +SUBDIR.${MK_TOOLCHAIN}+= readelf > +SUBDIR.${MK_TOOLCHAIN}+= size > +.endif > SUBDIR.${MK_TOOLCHAIN}+= c89 > SUBDIR.${MK_TOOLCHAIN}+= c99 > SUBDIR.${MK_TOOLCHAIN}+= ctags > .if ${MK_LLVM_CXXFILT} == "no" > SUBDIR.${MK_TOOLCHAIN}+= cxxfilt > .endif > -SUBDIR.${MK_TOOLCHAIN}+= objcopy > SUBDIR.${MK_TOOLCHAIN}+= file2c > SUBDIR.${MK_TOOLCHAIN}+= gprof > SUBDIR.${MK_TOOLCHAIN}+= indent > SUBDIR.${MK_TOOLCHAIN}+= lex > SUBDIR.${MK_TOOLCHAIN}+= mkstr > -SUBDIR.${MK_TOOLCHAIN}+= nm > -SUBDIR.${MK_TOOLCHAIN}+= readelf > SUBDIR.${MK_TOOLCHAIN}+= rpcgen > SUBDIR.${MK_TOOLCHAIN}+= unifdef > -SUBDIR.${MK_TOOLCHAIN}+= size > SUBDIR.${MK_TOOLCHAIN}+= xstr > SUBDIR.${MK_TOOLCHAIN}+= yacc > SUBDIR.${MK_VI}+= vi > diff --git a/usr.bin/clang/Makefile b/usr.bin/clang/Makefile > index 1c53e94965f7..7fc31e8df194 100644 > --- a/usr.bin/clang/Makefile > +++ b/usr.bin/clang/Makefile > @@ -7,12 +7,20 @@ SUBDIR+= clang > .endif > > .if !defined(TOOLS_PREFIX) > +# LLVM binutils are needed to support features such as LTO, so we build them > +# by default if clang is enabled. If MK_LLVM_BINUTILS is set, we also use them > +# as the default binutils (ar,nm,addr2line, etc.). > +.if ${MK_CLANG} != "no" || ${MK_LLVM_BINUTILS} != "no" > SUBDIR+= llvm-ar > SUBDIR+= llvm-nm > +SUBDIR+= llvm-objcopy > SUBDIR+= llvm-objdump > +SUBDIR+= llvm-size > +SUBDIR+= llvm-strings > SUBDIR+= llvm-symbolizer > +.endif Update tools/build/mk/OptionalObsoleteFiles.inc? # make delete-old >>> Removing old files (only deletes safe to delete libs) remove /usr/bin/llvm-objcopy? n remove /usr/bin/llvm-size? n remove /usr/bin/llvm-strings? n remove /usr/share/man/man1/llvm-objcopy.1.gz? n remove /usr/share/man/man1/llvm-size.1.gz? n remove /usr/share/man/man1/llvm-strings.1.gz? n -- Herbert