Re: Error crosscompiling 14.0-ALPHA1 on amd64 for arm64.aarch64

From: Mark Millard <marklmi_at_yahoo.com>
Date: Sun, 13 Aug 2023 21:13:51 UTC
On Aug 13, 2023, at 14:01, Mark Millard <marklmi@yahoo.com> wrote:

> On Aug 13, 2023, at 13:19, Juraj Lutter <otis@freebsd.org> wrote:
> 
>>> On 13 Aug 2023, at 21:13, Mark Millard <marklmi@yahoo.com> wrote:
>>> 
>>> But the offical CI builds on amd64 do not have the problem.
>>> 
>>> We still have not found what is different about your context from the
>>> standard context used for CI builds and snapshot builds, all of which
>>> have worked find building on amd64 to target aarch64 with armv7 support.
>> 
>> My src.conf:
>> 
>> WITHOUT_PROFILE=yes
>> WITHOUT_TESTS=yes
>> WITHOUT_STATIC=yes
>> 
>> WITHOUT_LLVM_TARGET_ALL=yes
> 
> Starting below this is wrong presuming all
> builds are actually done on amd64:
> 
>> .if "${TARGET}" == "arm64" && "${TARGET_ARCH}" == "aarch64"
>> KERNCONF?=GENERIC-MMCCAM
>> REPODIR?=/data/poudriere/packages/pkgbase
>> MODULES_EXTRA="rpi_ft5406"
>> WITH_LLVM_TARGET_AARCH64=yes
>> WITH_LLVM_TARGET_ARM=yes
>> .else
>> KERNCONF?=GENERIC-NODEBUG
>> REPODIR?=/data/poudriere/packages/pkgbase
>> WITH_LLVM_TARGET_AARCH64=yes
>> WITH_LLVM_TARGET_X86=yes
>> .endif
> 
> Ending here.
> 
> This is written as if there were separate toolchains for
> each target. That is not how llvm/clang/lld works,
> unlike gcc. One toolchain covers all the targets. That
> is what the FreBSD llvm support is structured for.
> 
> You want the one llvm/clang/lld toolchain that includes
> everything required to build any/all of:
> 
> A) amd64
> B) i386 for amd64's lib32
> C) aarch64
> D) armv7 for aarch64's lib32
> 
> So the *_LLVM_TARGET_* parts would be more like:
> 
> WITHOUT_PROFILE=yes
> WITHOUT_TESTS=yes
> WITHOUT_STATIC=yes
> 
> WITHOUT_LLVM_TARGET_ALL=yes
> WITH_LLVM_TARGET_AARCH64=yes
> WITH_LLVM_TARGET_X86=yes
> WITH_LLVM_TARGET_AARCH64=yes
> WITH_LLVM_TARGET_ARM=yes

Dumb editing error, not having an AMD64 line
and having two AARCH64 lines. So, instead:

WITHOUT_LLVM_TARGET_ALL=yes
WITH_LLVM_TARGET_AMD64=yes
WITH_LLVM_TARGET_X86=yes
WITH_LLVM_TARGET_AARCH64=yes
WITH_LLVM_TARGET_ARM=yes

> So: outside the later conditional logic.
> 
> (Your REPODIR?= lines are identical and could also be factored
> out of the conditional logic if they are not expected to be
> independently changed. Only the KERNCONF?= lines are actually
> target specific, needing to be in the conditional logic.)
> 
>> make.conf is empty, git workdir has `main’ checked out, without any modifications (git status reports clean workdir)
>> 
> 

I should have noted that if the existing toolchain does not
cover all of ARM64, X86, AARCH64, and ARM then it may take
special activity to get to the point of having all 4 spanned
in each instance of the toolchain. Once in place, things
should be more self-propagating.

===
Mark Millard
marklmi at yahoo.com