Received: by 2002:a25:6193:0:0:0:0:0 with SMTP id v141csp2787718ybb; Sun, 5 Apr 2020 16:57:27 -0700 (PDT) X-Google-Smtp-Source: APiQypKsG/rL5dKc2p8dhaOoziBs0RTcAiRQMf8y1ttq+F4rG3Jey8uWVTtmKSDF5IPGIm+9MCRk X-Received: by 2002:a05:6830:403d:: with SMTP id i29mr14367758ots.353.1586131047122; Sun, 05 Apr 2020 16:57:27 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1586131047; cv=none; d=google.com; s=arc-20160816; b=gsz38WxvB0D9DQUWpDcTSPfR+Xxe1IUrhXpVm3h1xD+sTFZQzEM74/guM8RWMvPfnn C+9hHLu5C0jcv5IVbatSsATiWoQyVzDIJfDxeHPU5uIT3cLhyAHE0zgebyEOtvXFu/DV 9yOa+a9VO3twdHSnQePcpnGwzmjSpovQIdwOmqhWEvacHhhlR0I4iCaX894TPqwxtCH7 S/qzJTsGlw+G5it0Lu+e5SFiw9zmcM553H+QNUxzkRockD64DsqZLUougnSoUSszHkJf +K+FZ0q2ErLcrwhcBy1qkY84EzaeYLwrE4LDQYYSvRdfP3HhcdsHHXHXuPwF9P4DO3QM zyeg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:in-reply-to:content-disposition :mime-version:references:message-id:subject:cc:to:from:date :dkim-signature; bh=5IvCPMwMgCr9TiZep7pvcdmLlTzfKXXbeNVllBb7ZKM=; b=ciAHHyRnC5Ac8vAedPoibop0/Yse9L26pA8oss3YjrKBKFXJGUHEamkIH0VEVs4lrx t5Zhtz5Z5g7xD1kkiZ2KnQHTOw/bO+d1rPiITZcffiFGiwBIHTplkwufdgyCXgMaG/Nb YdgxbZlt4mMnpFY0KkffKHDbGLDHIFFH4YoB7bdVBggpzDzs5Z4saj628wFdNEuo5l7w reZDDrzPNu37/vrkyiOg9rSxNoneup/tgvb8rGsQr9Rj2Nt8HJVCo1B1jZYtF48ohaoG 6uFXgqmc6M9bxxTMdULIPpKRhus8qEW+NIJRe+R8aulN0Om8uhyKc61rS8dlVjUM9fd7 g3Pw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=QacU9d9p; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id h10si6716581otm.153.2020.04.05.16.57.14; Sun, 05 Apr 2020 16:57:27 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=QacU9d9p; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727857AbgDEXzN (ORCPT + 99 others); Sun, 5 Apr 2020 19:55:13 -0400 Received: from mail-pf1-f196.google.com ([209.85.210.196]:42573 "EHLO mail-pf1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727742AbgDEXzM (ORCPT ); Sun, 5 Apr 2020 19:55:12 -0400 Received: by mail-pf1-f196.google.com with SMTP id 22so6668053pfa.9 for ; Sun, 05 Apr 2020 16:55:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:in-reply-to; bh=5IvCPMwMgCr9TiZep7pvcdmLlTzfKXXbeNVllBb7ZKM=; b=QacU9d9pgbn2olpWmTytcz2R44kVUGbsZmsvrcAiUW+hnrmXGAvzwG2IEyIdfujH71 V6C+F6jDLwtzOw29rjDEO7xkx5DXlnvv8CXhr4B8mkxqd+dNkaFVLyRxb8XD4lLtJC4K tyGcIJzQM8wl+DtJ9LHfOY+08hnPdKaSL66pgn8LlP0TBQ4zeyV1d+3He5DSwCP3EW3e C5rN7O/wgXEyLSKR6nnFAA8UPh6PaSKsjY9BWnDSEu4hoZo07lKCe5xX9YjYoYPXgQgh BlCDWOvXHhlKOtFwXrWsknNfdq1sQC5vHiy1SQPwjR+fmScNPDl3+m797RWYQ38crji4 RV3A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:in-reply-to; bh=5IvCPMwMgCr9TiZep7pvcdmLlTzfKXXbeNVllBb7ZKM=; b=UnMA6aVRBpSKQJ/I3/K64il70eKfO7VQZQn/W5PEk8V+zKybwj1aSct1Od8P+6lWAT f9LxgqMt0+Z2PiQUrmTtcKvqSZAXevq/dSz3DReNnHHtZZlrG/f4YsG/d5sHTIsGZSqc ibp2gFCjJC3ZQ2rtIJ9cVwUWBMqquzXVxjDJ849Jw7AKVZvbUuHK16TleBuGM84c4CAn HggnU1mNKvnSHecCLoq7Z88uDDZ/gha04jaNonCZmiwL+iWif1veeNbYK3iUIAcfcDRv Ds0pmyuwi5OOoV1d054HFjiCdqm8hMG3zobmMXiiCIV3zUQyvhz0ZUCTL/8iC5+3SjIO pDgQ== X-Gm-Message-State: AGi0PuYx0LMZEEESRiJsVgZzL8TXCy3XrBOfP+gvZ70qxJvJoCPzO+f+ BGFJJWmbJSoufsf3NqIuwLFkRg== X-Received: by 2002:a63:be49:: with SMTP id g9mr18779316pgo.30.1586130910539; Sun, 05 Apr 2020 16:55:10 -0700 (PDT) Received: from google.com ([2620:15c:2ce:0:9efe:9f1:9267:2b27]) by smtp.gmail.com with ESMTPSA id v8sm6477353pfn.213.2020.04.05.16.55.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 05 Apr 2020 16:55:09 -0700 (PDT) Date: Sun, 5 Apr 2020 16:55:07 -0700 From: Fangrui Song To: Masahiro Yamada , Nick Desaulniers Cc: Linux Kbuild mailing list , Nathan Chancellor , clang-built-linux , Jonathan Corbet , Michal Marek , Linux Doc Mailing List , LKML , Matthias =?utf-8?Q?M=C3=A4nnich?= , Sandeep Patil Subject: Re: [PATCH] kbuild: support 'LLVM' to switch the default tools to Clang/LLVM Message-ID: <20200405235507.psjjhqa3cxw57xra@google.com> References: <20200403051709.22407-1-masahiroy@kernel.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Disposition: inline In-Reply-To: Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 2020-04-06, Masahiro Yamada wrote: >On Sat, Apr 4, 2020 at 3:24 AM Nick Desaulniers wrote: >> >> On Thu, Apr 2, 2020 at 10:17 PM Masahiro Yamada wrote: >> > >> > As Documentation/kbuild/llvm.rst implies, building the kernel with a >> > full set of LLVM tools gets very verbose and unwieldy. >> > >> > Provide a single switch 'LLVM' to use Clang and LLVM tools instead of >> > GCC and Binutils. You can pass LLVM=1 from the command line or as an >> > environment variable. Then, Kbuild will use LLVM toolchains in your >> > PATH environment. >> > >> > Please note LLVM=1 does not turn on the LLVM integrated assembler. >> > You need to explicitly pass AS=clang to use it. When the upstream >> > kernel is ready for the integrated assembler, I think we can make >> > it default. >> >> Having this behavior change over time may be surprising. I'd rather >> that if you want to not use the integrated assembler, you explicitly >> negate it, or just don't use the LLVM=1 syntax, ie. `make CC=clang >> LD=ld.lld ...`. >> >> We could modify how `-no-integrated-as` is chosen when LLVM=1. >> >> make LLVM=1 LLVMIA=0 ... # add `-no-integrated-as` >> # what the flag is doesn't really matter to me, something shorter might be nice. >> make LLVM=1 # use all LLVM tools >> >> Since we got rid of $(AS), it would be appropriate to remove/change it >> there, since no one really relies on AS=clang right now. (We do have 1 >> of our 60+ CI targets using it, but we can also change that trivially. >> So I think we have a lot of freedom to change how `-no-integrated-as` >> is set. >> >> This could even be independent of this patch. > > >I also thought a boolean flag is preferred. > >AS=clang will not live long anyway, and >I hesitated to break the compatibility >for the short-term workaround. > >But, if this is not a big deal, I can >replace AS=clang with LLVMIA=1. My mere complaint is that it may be difficult to infer the intention (integrated assembler) from the abbreviation "IA" in "LLVMIA" :/ Something with "AS" in the name may be easier for a user to understand, e.g. CLANG_AS or LLVM_AS. >> > >> > We discussed what we need, and we agreed to go with a simple boolean >> > switch (https://lkml.org/lkml/2020/3/28/494). >> > >> > Some items in the discussion: >> > >> > - LLVM_DIR >> > >> > When multiple versions of LLVM are installed, I just thought supporting >> > LLVM_DIR=/path/to/my/llvm/bin/ might be useful. >> > >> > CC = $(LLVM_DIR)clang >> > LD = $(LLVM_DIR)ld.lld >> > ... >> > >> > However, we can handle this by modifying PATH. So, we decided to not do >> > this. >> > >> > - LLVM_SUFFIX >> > >> > Some distributions (e.g. Debian) package specific versions of LLVM with >> > naming conventions that use the version as a suffix. >> > >> > CC = clang$(LLVM_SUFFIX) >> > LD = ld.lld(LLVM_SUFFIX) >> > ... >> > >> > will allow a user to pass LLVM_SUFFIX=-11 to use clang-11 etc., >> > but the suffixed versions in /usr/bin/ are symlinks to binaries in >> > /usr/lib/llvm-#/bin/, so this can also be handled by PATH. >> > >> > - HOSTCC, HOSTCXX, etc. >> > >> > We can switch the host compilers in the same way: >> > >> > ifneq ($(LLVM),) >> > HOSTCC = clang >> > HOSTCXX = clang++ >> > else >> > HOSTCC = gcc >> > HOSTCXX = g++ >> > endif >> > >> > This may the right thing to do, but I could not make up my mind. >> > Because we do not frequently switch the host compiler, a counter >> > solution I had in my mind was to leave it to the default of the >> > system. >> > >> > HOSTCC = cc >> > HOSTCXX = c++ >> > >> > Many distributions support update-alternatives to switch the default >> > to GCC, Clang, or whatever, but reviewers were opposed to this >> > approach. So, this commit does not touch the host tools. >> >> update-alternatives assumes you've installed Clang via a package manager? >> $ update-alternatives --list cc >> /usr/bin/gcc >> On my system even though clang and friends are in my PATH. >> >> And previously, there was feedback that maybe folks don't want to >> change `cc` on their systems just for Clang kernel builds. >> https://lkml.org/lkml/2020/3/30/836 >> https://lkml.org/lkml/2020/3/30/838 >> >> A goal for ClangBuiltLinux is to build a kernel image with no GCC or >> binutils installed on the host. Let the record reflect that. And >> there's been multiple complaints that the existing syntax is too long >> for specifying all of the tools. >> >> LLVM=1 is meant to be one flag. Not `make LLVM=1 HOSTCC=clang >> HOSTCXX=clang`. If folks want fine grain flexibility, use the >> existing command line interface, which this patch does not change. >> LLVM=1 is opinionated, and inflexible, because it makes a strong >> choice to enable LLVM for everything. >> >> Another reason why I don't want to change these over time, and why I >> want them all to be in sync is that there are 4 different CI systems >> for the kernel, and they are currently fragmented in terms of who is >> using what tools: >> >> KernelCI: CC=clang only >> Kbuild test robot aka 0day bot: CC=clang LD=ld.lld >> Linaro TCWG: CC=clang only >> our CI: a complete mix due to combinatorial explosion, but more >> coverage of LLVM than everyone else. >> >> That is a mess that we must solve. Having 1 flag that works >> consistently across systems is one solution. Now if those were all >> using LLVM=1, but some were enabling Clang's integrated assembler, and >> some weren't because we changed the default over time, then we'd be >> right back to this mismatch between systems. I'd much rather draw the >> line in the sand, and say "this is how this flag will work, since day >> 1." Maybe it's too rigid, but it's important to me that if we create >> something new to solve multiple objectives (1. simplifies existing >> interface. 2. turns on everything.) that it does so. It is a partial >> solution, if it eliminates some of the flags while leaving others. I >> want a full solution. >> >> If folks want the flexibility to mix and match tools, the existing >> interface is capable. But for us to track who is using what, we need >> 1 flag that we know is not different depending on the cc of the >> system. Once clang's integrated assembler is good to go, we will >> begin recommending LLVM=1 to everyone. And we want feedback if we >> regress building the host utilities during a kernel build, even if >> there are not many. >> >> I'm on the fence about having all of the above satisfied by one patch, >> or taking this patch as is and following up on the above two points >> (related to disabling `-no-integrated-as` and setting HOSTCC). I >> trust your judgement and respect your decisions, so I'll defer to you >> Masahiro, but I need to make explicit the design goals. Maybe with >> this additional context it can help inform the design. >> Tested-by: Nick Desaulniers > > >Thanks for the comments. > >I'd rather want to do this incrementally, >making sure I am doing right. > > >The meaning of LLVM=1 may change over time. >It means "the recommended settings" at the moment. > >If CI does not want to change the behavior across >kernel versions, it can pass individual variables >explicitly. > >-- >Best Regards >Masahiro Yamada > >-- >You received this message because you are subscribed to the Google Groups "Clang Built Linux" group. >To unsubscribe from this group and stop receiving emails from it, send an email to clang-built-linux+unsubscribe@googlegroups.com. >To view this discussion on the web visit https://groups.google.com/d/msgid/clang-built-linux/CAK7LNAQybfcYiosNU%2Bybd-Q7-Y2dbLqBVN2XA00wCRnFAoqdew%40mail.gmail.com.