On Thu, Jul 8, 2021 at 8:04 PM 'Nick Desaulniers' via Clang Built Linux <clang-built-linux@xxxxxxxxxxxxxxxx> wrote: > > /usr/bin/powerpc64-linux-gnu-gcc-5.2.0 > > /usr/bin/powerpc64-linux-gnu-gcc -> powerpc64-linux-gnu-gcc-5.2.0 > > /usr/local/bin/ppc64le-linux-gcc-9 > > ~/bin/powerpc/powerpc-linux-unknown-gcc-12.0.20210708.experimental > > > > all of these should be able to cross-build any powerpc kernel, but > > there is no obvious first choice (highest version, first in path, > > ordered list of target triples, ...). I tried coming up with a heuristic > > to pick a reasonable toolchain, but at some point gave up because > > I failed to express that in a readable bash or Makefile syntax. > > Right; foremost in my mind was arm-linux-gnueabi-gcc vs > arm-linux-gnueabihf-gcc. That's not even to mention the versioned > suffixes. > > In terms of multiversion support; this series doesn't regress doing > things the hard/verbose way. But I think for most users we can have a > simpler common case; folks can play with their $PATH or focus on more > hermetic builds if they want this new feature (CROSS_COMPILE > inference) AND support for multiple versions of the same toolchain. Fair enough. So how something like this: powerpc-targets := powerpc32 powerpc64 powerpc32le \ powerpc32be powerpc64le powerpc64be ppc64le ppc64be arm-targets := arm-linux-gnueabi arm-linux-gnueabihf x86-targets := x86_64 i386 i686 x86_64-targets := x86 i386-targets := i686 x86 x86_64 parisc-targets := hppa64 hppa ... CROSS_COMPILE ?= `find-toolchain $(ARCH) $($(ARCH)-targets)` where find-toolchain just finds the first working toolchain based, looking for $(target)-linux-gcc $(target)-gcc $(target)-unknown-linux-gcc etc in $(PATH) but ignoring the versions? What I had actually planned was a set of helpers that allow you to do this in multiple steps: - if $(objtree)/scripts/cross/bin/gcc (or something else we pick) exists and CROSS_COMPILE is not set, set CROSS_COMPILE to $(objtree)/scripts/cross/bin/ in the Makefile - add script to enumerate the installed toolchains - add a second script to symlink one of those toolchains to $(objtree)/scripts/cross/bin - add a third script to download a cross-toolchain from kernel.org for $(ARCH) and install it to one of the locations that the first script looks for (/opt/cross/, $(HOME)/cross/, $(objtree)scripts/cross/) Arnd