From owner-dev-commits-src-all@freebsd.org Mon Sep 20 09:43:11 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 BFAB267C1C9; Mon, 20 Sep 2021 09:43:11 +0000 (UTC) (envelope-from herbert@gojira.at) Received: from mail.bsd4all.net (mail.bsd4all.net [IPv6:2a01:4f8:13b:240c::25]) (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 4HCfkR3skWz4VxH; Mon, 20 Sep 2021 09:43:11 +0000 (UTC) (envelope-from herbert@gojira.at) Date: Mon, 20 Sep 2021 11:43:03 +0200 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=gojira.at; s=mail202005; t=1632130983; bh=OwzbF0KvrUn8IzhPgS8ZLtf6mjppjUv+YHpfSxRC/zQ=; h=Date:From:To:Cc:Subject:Message-ID:MIME-Version:Content-Type; b=SsCroeUs4r7al4ezv7NOltO3vPLOlnOEQk+CKLHfc0QIdjzw1SdlxFn5ejxKcSCT4 92nC98aCrunFeXUToTzqFtbP6fWBU5vtRJ0wD8L2m0zIhUHEWSC2nCO7Y5JTOlDIwf xr1fAhWLJp3MVHmwK1aVSt6HeEy1b1C7Xn51O0F7HxFLw5PAFh/M7pHJ/QYbStiEyV LRxkoeOrEkW5anmeQ9cL9AbCmANmxRaV9IVsEYePJMkLG4tmHALfhL2fPlsdTJbag8 1aZOmRNOjJd4+CHf9L7/gbXWVoAX+DRUdsw4FXGfh9Szp/TJbk+M/0s/H8o69h3D10 5xZWpF3dtJBFw== From: "Herbert J. Skuhra" To: Alexander Richardson Cc: src-committers , "" , dev-commits-src-main@freebsd.org Subject: Re: git: 021385aba562 - main - Add WITH_LLVM_BINUTILS to install LLVM binutils instead of Elftoolchain Message-ID: References: <202109060924.1869O2Dk045877@gitrepo.freebsd.org> <87sfy1rmj7.wl-herbert@gojira.at> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: X-Rspamd-Queue-Id: 4HCfkR3skWz4VxH X-Spamd-Bar: ---- Authentication-Results: mx1.freebsd.org; none X-Spamd-Result: default: False [-4.00 / 15.00]; REPLY(-4.00)[] 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: Mon, 20 Sep 2021 09:43:11 -0000 On Mon, Sep 20, 2021 at 09:50:27AM +0100, Alexander Richardson wrote: > On Sun, 19 Sept 2021 at 09:37, Herbert J. Skuhra wrote: > > > > 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 > > Hi Herbert, > > Sorry about that, I've posted https://reviews.freebsd.org/D32022 which > should hopefully fix the issue? Thanks. 'make delete-old' still prompts to delete the man pages: >>> Removing old files (only deletes safe to delete libs) 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