Message ID | 63c2936e-6bc7-67e3-eaf3-0123333381f8@landley.net (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Patches used to build mkroot. | expand |
On Wed, Feb 22, 2023 at 5:41 AM Rob Landley <rob@landley.net> wrote: > > Distros like debian install the generic "cc" name for both gcc and clang, > and the plumbing already does CC_VERSION_TEXT to include Makefile.clang. > > Previously: https://lkml.iu.edu/hypermail/linux/kernel/2202.0/01505.html > Signed-off-by: Rob Landley <rob@landley.net> > --- > Makefile | 5 +++-- > 1 file changed, 3 insertions(+), 2 deletions(-) > > diff --git a/Makefile b/Makefile > index 3f6628780eb2..0ac57ae3b45f 100644 > --- a/Makefile > +++ b/Makefile > @@ -456,7 +456,7 @@ endif > HOSTCC = $(LLVM_PREFIX)clang$(LLVM_SUFFIX) > HOSTCXX = $(LLVM_PREFIX)clang++$(LLVM_SUFFIX) > else > -HOSTCC = gcc > +HOSTCC := $(shell cc --version >/dev/null 2>&1 && echo cc || echo gcc) 'cc' only makes sense for the host compiler, which is configured by 'update-alternative'. I tried it before, but LLVM folks preferred using $(LLVM) to choose clang/gcc. > HOSTCXX = g++ > endif > HOSTRUSTC = rustc > @@ -503,7 +503,8 @@ OBJDUMP = $(LLVM_PREFIX)llvm-objdump$(LLVM_SUFFIX) > READELF = $(LLVM_PREFIX)llvm-readelf$(LLVM_SUFFIX) > STRIP = $(LLVM_PREFIX)llvm-strip$(LLVM_SUFFIX) > else > -CC = $(CROSS_COMPILE)gcc > +CC := $(CROSS_COMPILE)$(shell $(CROSS_COMPILE)cc --version \ > + >/dev/null 2>&1 && echo cc || echo gcc) This hunk sets up GCC/binutils. So, cc does not make sense. NACK. > LD = $(CROSS_COMPILE)ld > AR = $(CROSS_COMPILE)ar > NM = $(CROSS_COMPILE)nm
On 2/22/23 23:31, Masahiro Yamada wrote: > On Wed, Feb 22, 2023 at 5:41 AM Rob Landley <rob@landley.net> wrote: >> >> Distros like debian install the generic "cc" name for both gcc and clang, >> and the plumbing already does CC_VERSION_TEXT to include Makefile.clang. >> >> Previously: https://lkml.iu.edu/hypermail/linux/kernel/2202.0/01505.html >> Signed-off-by: Rob Landley <rob@landley.net> >> --- >> Makefile | 5 +++-- >> 1 file changed, 3 insertions(+), 2 deletions(-) >> >> diff --git a/Makefile b/Makefile >> index 3f6628780eb2..0ac57ae3b45f 100644 >> --- a/Makefile >> +++ b/Makefile >> @@ -456,7 +456,7 @@ endif >> HOSTCC = $(LLVM_PREFIX)clang$(LLVM_SUFFIX) >> HOSTCXX = $(LLVM_PREFIX)clang++$(LLVM_SUFFIX) >> else >> -HOSTCC = gcc >> +HOSTCC := $(shell cc --version >/dev/null 2>&1 && echo cc || echo gcc) > > 'cc' only makes sense for the host compiler, It was the generic posix name for "C compiler" until posix decided to put an expiration date in the command name, which seems as widely honored as the tar->pax switch or the removal of cpio. The name "gcc" was like "gmake" and "gawk". (On macos homebrew there's "gsed".) > which is configured by 'update-alternative'. Hexagon only has llvm support, not gcc, so I had to add an llvm cross compiler to my cross compiler set, prefixed hexagon-unknown-linux-musl-*, but the linux kernel wants to call it as hexagon-unknown-linux-musl-gcc. The kernel builds find with a "gcc" symlink to clang, but there _is_ a generic name, which is widely installed. > I tried it before, but LLVM folks preferred > using $(LLVM) to choose clang/gcc. So if we want generic behavior without having to specify, we should create a "gcc" symlink to clang? >> HOSTCXX = g++ >> endif >> HOSTRUSTC = rustc >> @@ -503,7 +503,8 @@ OBJDUMP = $(LLVM_PREFIX)llvm-objdump$(LLVM_SUFFIX) >> READELF = $(LLVM_PREFIX)llvm-readelf$(LLVM_SUFFIX) >> STRIP = $(LLVM_PREFIX)llvm-strip$(LLVM_SUFFIX) >> else >> -CC = $(CROSS_COMPILE)gcc >> +CC := $(CROSS_COMPILE)$(shell $(CROSS_COMPILE)cc --version \ >> + >/dev/null 2>&1 && echo cc || echo gcc) > > This hunk sets up GCC/binutils. This is the codepath that's taken when you don't explicitly specify "LLVM=1". The test there is falling back to (appropriately prefixed) gcc when it can't find a working (appropriately prefixed) cc. > So, cc does not make sense. NACK. Do you explicitly specify the "gold" linker vs the previous gnu one vs lld.llvm.org on the kernel build command line? Rob
On Thu, Feb 23, 2023 at 10:36 PM Rob Landley <rob@landley.net> wrote: > > On 2/22/23 23:31, Masahiro Yamada wrote: > > On Wed, Feb 22, 2023 at 5:41 AM Rob Landley <rob@landley.net> wrote: > >> > >> Distros like debian install the generic "cc" name for both gcc and clang, > >> and the plumbing already does CC_VERSION_TEXT to include Makefile.clang. > >> > >> Previously: https://lkml.iu.edu/hypermail/linux/kernel/2202.0/01505.html > >> Signed-off-by: Rob Landley <rob@landley.net> > >> --- > >> Makefile | 5 +++-- > >> 1 file changed, 3 insertions(+), 2 deletions(-) > >> > >> diff --git a/Makefile b/Makefile > >> index 3f6628780eb2..0ac57ae3b45f 100644 > >> --- a/Makefile > >> +++ b/Makefile > >> @@ -456,7 +456,7 @@ endif > >> HOSTCC = $(LLVM_PREFIX)clang$(LLVM_SUFFIX) > >> HOSTCXX = $(LLVM_PREFIX)clang++$(LLVM_SUFFIX) > >> else > >> -HOSTCC = gcc > >> +HOSTCC := $(shell cc --version >/dev/null 2>&1 && echo cc || echo gcc) > > > > 'cc' only makes sense for the host compiler, > > It was the generic posix name for "C compiler" until posix decided to put an > expiration date in the command name, which seems as widely honored as the > tar->pax switch or the removal of cpio. > > The name "gcc" was like "gmake" and "gawk". (On macos homebrew there's "gsed".) > > > which is configured by 'update-alternative'. > > Hexagon only has llvm support, not gcc, so I had to add an llvm cross compiler > to my cross compiler set, prefixed hexagon-unknown-linux-musl-*, but the linux > kernel wants to call it as hexagon-unknown-linux-musl-gcc. > > The kernel builds find with a "gcc" symlink to clang, but there _is_ a generic > name, which is widely installed. In the discussion in the past [1], we decided to go with LLVM=1 switch rather than 'cc'. We do not need both. [1]: https://lkml.org/lkml/2020/3/28/494 > > > I tried it before, but LLVM folks preferred > > using $(LLVM) to choose clang/gcc. > > So if we want generic behavior without having to specify, we should create a > "gcc" symlink to clang? If you mean "without LLVM=1 or HOSTCC=clang specified", I think the answer is yes. > > >> HOSTCXX = g++ > >> endif > >> HOSTRUSTC = rustc > >> @@ -503,7 +503,8 @@ OBJDUMP = $(LLVM_PREFIX)llvm-objdump$(LLVM_SUFFIX) > >> READELF = $(LLVM_PREFIX)llvm-readelf$(LLVM_SUFFIX) > >> STRIP = $(LLVM_PREFIX)llvm-strip$(LLVM_SUFFIX) > >> else > >> -CC = $(CROSS_COMPILE)gcc > >> +CC := $(CROSS_COMPILE)$(shell $(CROSS_COMPILE)cc --version \ > >> + >/dev/null 2>&1 && echo cc || echo gcc) > > > > This hunk sets up GCC/binutils. > > This is the codepath that's taken when you don't explicitly specify "LLVM=1". > The test there is falling back to (appropriately prefixed) gcc when it can't > find a working (appropriately prefixed) cc. Unless LLVM=1 is specified, the toolchain defaults to GCC/binutils, there is no need for such additional complexity. > > > So, cc does not make sense. NACK. > > Do you explicitly specify the "gold" linker vs the previous gnu one vs > lld.llvm.org on the kernel build command line? gold is unsupported. See 75959d44f9dc8e44410667009724e4e238515502 Yes, to override only LD, LD=ld.lld should be given in the command line. > > Rob
diff --git a/Makefile b/Makefile index 3f6628780eb2..0ac57ae3b45f 100644 --- a/Makefile +++ b/Makefile @@ -456,7 +456,7 @@ endif HOSTCC = $(LLVM_PREFIX)clang$(LLVM_SUFFIX) HOSTCXX = $(LLVM_PREFIX)clang++$(LLVM_SUFFIX) else -HOSTCC = gcc +HOSTCC := $(shell cc --version >/dev/null 2>&1 && echo cc || echo gcc) HOSTCXX = g++ endif HOSTRUSTC = rustc @@ -503,7 +503,8 @@ OBJDUMP = $(LLVM_PREFIX)llvm-objdump$(LLVM_SUFFIX) READELF = $(LLVM_PREFIX)llvm-readelf$(LLVM_SUFFIX) STRIP = $(LLVM_PREFIX)llvm-strip$(LLVM_SUFFIX) else -CC = $(CROSS_COMPILE)gcc +CC := $(CROSS_COMPILE)$(shell $(CROSS_COMPILE)cc --version \ + >/dev/null 2>&1 && echo cc || echo gcc) LD = $(CROSS_COMPILE)ld AR = $(CROSS_COMPILE)ar NM = $(CROSS_COMPILE)nm
Distros like debian install the generic "cc" name for both gcc and clang, and the plumbing already does CC_VERSION_TEXT to include Makefile.clang. Previously: https://lkml.iu.edu/hypermail/linux/kernel/2202.0/01505.html Signed-off-by: Rob Landley <rob@landley.net> --- Makefile | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)