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

From: Juraj Lutter <otis_at_FreeBSD.org>
Date: Sun, 13 Aug 2023 21:37:56 UTC

> On 13 Aug 2023, at 23:13, Mark Millard <marklmi@yahoo.com> wrote:
> 
> 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
> 

If you look closer, you will see that:

WITH_LLVM_TARGET_AARCH64=yes
WITH_LLVM_TARGET_X86=yes

is in effect when I do “make buildworld” without any TARGET and TARGET_ARCH, i.e. when I build the OS for the host (that is, 14.0/amd64).

But once I specify make TARGET=arm64 TARGET_ARCH=aarch64, only the lines:

WITH_LLVM_TARGET_AARCH64=yes
WITH_LLVM_TARGET_ARM=yes

are in effect. The line “WITH_LLVM_TARGET_ARM=yes” has only been added today for a test, but it did not make any difference.


—
Juraj Lutter
otis@FreeBSD.org