using native-xtools's make and MACHINE, MACHINE_ARCH values
Guy Yur
guyyur at gmail.com
Sat Nov 18 22:52:52 UTC 2017
Hi,
On 18 November 2017 at 23:44, Bryan Drewery <bdrewery at freebsd.org> wrote:
> On 11/18/17 7:26 AM, Guy Yur wrote:
>> Hi,
>>
>> I am trying to use native-xtools's make (amd64 targeting armv7)
>> on an amd64 host in an armv7 chroot.
>
> My guess is that it's because you're using a chroot rather than a jail.
> When poudriere creates the jail with 'jail -c' it does not do things
> like setup the make.conf or even setup nxb-bin hardlinks. It only does
> this stuff at Jail Startup time (bulk/testport/jail -s).
> Checkout jail -s and jail -k rather than using a chroot.
>
>
>> (qemu-arm-static and binmiscctl used for the arm binaries.)
>> Running /nxb-bin/usr/bin/make -V MACHINE and -V MACHINE_ARCH it
>> reports amd64, amd64 not arm, armv7.
>> (12.0-CURRENT r325963)
>>
>> Do I need to override MACHINE and MACHINE_ARCH explicitly when
>> running nxb's make or should it report the target values?
>>
>> bmake is compiled with -DMAKE_NATIVE in usr.bin/bmake/Makefile
>> so it uses uname, sysctl to get the values.
>> If I add -UMAKE_NATIVE -DMAKE_MACHINE=\"${MACHINE}\"
>> -DMACHINE_ARCH=\"${MACHINE_ARCH}\" to the nxb's make
>> compilation it reports arm and armv7.
>> Turning off MAKE_NATIVE also affects other things so it is
>> probably not be the correct change to make.
>>
>
>
> Poudriere sets MACHINE and MACHINE_ARCH in /etc/make.conf. It seems ok
> to me in a Jail.
>
>> # grep MACHINE /etc/make.conf
>> MACHINE=arm64
>> MACHINE_ARCH=aarch64
>> # /nxb-bin/usr/bin/make -V MACHINE -V MACHINE_ARCH
>> arm64
>> aarch64
>
> If I change it to something else it takes the value.
>
>> # grep MACHINE /etc/make.conf
>> MACHINE=machine
>> MACHINE_ARCH=machine_arch
>> # /nxb-bin/usr/bin/make -V MACHINE -V MACHINE_ARCH
>> machine
>> machine_arch
>
> As for chroot it's wrong:
>
>> # /nxb-bin/usr/bin/make -V MACHINE -V MACHINE_ARCH
>> amd64
>> amd64
>
If I set them in /etc/make.conf it works in a chroot as well.
But shouldn't a crosstool make have the MACHINE and MACHINE_ARCH
of the target regardless of where it is running?
clang built by native-xtools has Target set to the target arch.
I can try to prepare and try to upstream a patch for an option
to compile bmake for cross-compilation of same os version but
different archs if it will be useful.
>
> It's not using uname as far as I can tell. The /etc/make.conf is setup
> at Jail Startup time but the jail's /etc/login.conf is setup at 'jail
> -c' time currently, which sets UNAME_m and UNAME_p so uname should be
> fine anyway:
>
>
>> # grep arm /etc/login.conf
>> :setenv=MAIL=/var/mail/$,BLOCKSIZE=K,UNAME_r=12.0-CURRENT,UNAME_v=FreeBSD 12.0-CURRENT 1200051,OSVERSION=1200051,ABI_FILE=/usr/lib/crt1.o,UNAME_m=arm64,UNAME_p=aarch64:\
>
make uses uname(3) for MACHINE and I see UNAME_m affects it.
For MACHINE_ARCH it uses HW_MACHINE_ARCH sysctl(3)
which isn't effected by UNAME_p.
Of course, MACHINE/MACHINE_ARCH can be overriden in
/etc/make.conf after the initial value is set by uname/sysctl.
So I guess I will have to set MACHINE and MACHINE_ARCH
explicitly in make.conf like Poudriere.
Thanks,
Guy
>
> --
> Regards,
> Bryan Drewery
>
More information about the freebsd-questions
mailing list