Date: Sat, 28 Oct 2017 01:10:41 +0300 From: =?UTF-8?Q?Eddy_Petri=C8=99or?= <eddy.petrisor@gmail.com> To: Mark Millard <markmi@dsl-only.net> Cc: FreeBSD Toolchain <freebsd-toolchain@freebsd.org>, freebsd-arm@freebsd.org Subject: Re: lib/clan/llvm.build.mk: Shouldn't BUILD_TRIPLE definition rely host 'cc -dumpmachine'? Message-ID: <CAK0XTWd%2BkbOL38LKTgTXARmbJDc=obsR9T5ONSc9btkiz4CVsw@mail.gmail.com> In-Reply-To: <87903F19-EF1B-4242-B36E-379E31152D43@dsl-only.net> References: <CAK0XTWczya8vg_sQZPqz-ZyYZRMq1v6p%2Bjs90S%2BjaDHxo2=1gA@mail.gmail.com> <87903F19-EF1B-4242-B36E-379E31152D43@dsl-only.net>
next in thread | previous in thread | raw e-mail | index | archive | help
2017-10-27 11:19 GMT+03:00 Mark Millard <markmi@dsl-only.net>: > On 2017-Oct-26, at 11:23 PM, Eddy Petri=C8=99or <eddy.petrisor@gmail.com>= wrote: > >> I am trying to make the FreeBSD code base build from a Linux host and >> found this bit which defines BUILD_TRIPLE in a way which to my >> untrained eyes look like overengineering. >> >> .if ${TARGET_ARCH:Marmv6*} && (!defined(CPUTYPE) || ${CPUTYPE:M*soft*} = =3D=3D "") >> TARGET_ABI=3D -gnueabihf >> .elif ${TARGET_ARCH:Marm*} >> TARGET_ABI=3D -gnueabi >> .else >> TARGET_ABI=3D >> .endif >> VENDOR=3D unknown >> OS_VERSION=3D freebsd12.0 > > I'm using a context where armv[67]* would now > likely be in use above, in fact the context is > from an armv7 build, no longer armv6 . I am kind of confused by this part since I expect the BUILD architecture would not be that often and arm system. Maybe in my wish to provide some context, I added too much and sabotaged my own question :) >> TARGET_TRIPLE?=3D >> ${TARGET_ARCH:C/amd64/x86_64/:C/arm64/aarch64/}-${VENDOR}-${OS_VERSION}$= {TARGET_ABI} >> BUILD_TRIPLE?=3D >> ${BUILD_ARCH:C/amd64/x86_64/:C/arm64/aarch64/}-${VENDOR}-${OS_VERSION} >> >> >> To support a Linux host I made these changes that is using 'cc >> -dumpmachine' to get the correct BUILD_TRIPLE, but I am wondering if >> it shouldn't be OK for building on a FreeBSD host > > Using an arm FreeBSD head -r324743 context as an example. . . > > For reference: > > # grep BUILD_ARCH Makefile* > Makefile.inc1:BUILD_ARCH!=3D uname -p > Makefile.inc1:.if ${MACHINE_ARCH} !=3D ${BUILD_ARCH} > > > # uname -ap > FreeBSD bpim3 12.0-CURRENT FreeBSD 12.0-CURRENT r324743M arm armv7 [..] > [After looking into the details my preliminary > guess seemed to be correct: the only dependable > uname output among -m -p -i was for -m for linux. > The uname.c code used varies from distribution > to distribution and that changed the other > options' results.] I am not that concerned about this aspect in the context of my proposal, especially since NetBSD's build.sh takes better care of this on the host side: https://github.com/NetBSD/src/blob/d0543c2b811d0d1d5748e02597d906e04743316b= /build.sh#L486 > Back to the armv7 FreeBSD head -r324743 context. . . > > # cc -dumpmachine > armv7-unknown-freebsd12.0-gnueabihf > > Compare that to the results of: > > ${BUILD_ARCH:C/amd64/x86_64/:C/arm64/aarch64/}-${VENDOR}-${OS_VERSION} > > Note that on FreeBSD itself on that machine BUILD_ARCH > would historically not have the "-gnueabihf" suffix for > such a host. Would the build tolerate it? Why would a FreeBSD host compiler report the triple with -gnueabi suffix? OOTH, if we're talking about using clang, the exact triple reported by the actual toolchain would be used in the clang/llvm compilation to define -DLLVM_HOST_TRIPLE with the exact value that makes sense for the host triple, which seems the right choice anyway, at least to me. > # cc --version > FreeBSD clang version 5.0.0 (tags/RELEASE_500/final 312559) (based on LLV= M 5.0.0svn) > Target: armv7-unknown-freebsd12.0-gnueabihf > Thread model: posix > InstalledDir: /usr/bin > > Note the "armv7" for what Linux might instead have > something like "armv7l" for a little endian, hard-float > context. Would this matter? Would the build tolerate a > armv7l (or other such) in BUILD_ARCH? My point exactly, gcc and clang are supposed to behave identically from an interface PoV, so I expect the BUILD_TRIPLE gotten via -dumpmachine to be identical between them. >> +.if ${BUILD_OS} =3D=3D FreeBSD >> BUILD_TRIPLE?=3D >> ${BUILD_ARCH:C/amd64/x86_64/:C/arm64/aarch64/}-${VENDOR}-${OS_VERSION} >> +.else >> +HOST_CC_DUMPMACHINE!=3D cc -dumpmachine >> +BUILD_TRIPLE?=3D ${HOST_CC_DUMPMACHINE} >> +.endif > > Keeping the historical BUILD_ARCH content for FreeBSD > hosts might be important. I was only wondering about BUILD_TRIPLE in the context of llvm building. > But for non-FreeBSD hosts, such as a Linux distribution, > might other mismatches with FreeBSD conventions > matter? (See earlier above.) If we're on a Linux host the BUILD_TRIPLE should be the one approrpiate for the linux host, not the FreeBSD. If your point is that I will have to take such things into account for the cross building from Linux, I am aware of that, but that's not that important now since I am still stuck in the bootstrap phase for the cross compiler (linux host, freebsd target). > Also: What of using alternative compilers (${CC} vs. > cc in classic notations, may be ${HOST_CC} or some such > here because multiple compilers can be involved)? Would > "cc" always exist and be appropriate? That's why I said "host 'cc -dumpmachine'". I didn't care much for now for all sorts of checks or corrections such as using HOST_CC, I was just curious if the idea of using the '-dumpmachine' output to define the BUILD_TRIPLE. > In fact on FreeBSD it is possible to buildworld > buildkernel using a non-system compiler, such as > via the devel/powerpc64-gcc port, even on a > powerpc64 system. (This allows a modern build > instead of what gcc 4.2.1 is limited to since > lang does not sufficiently yet.) For that > context: > > # /usr/local/bin/powerpc64-unknown-freebsd12.0-gcc -dumpmachine > powerpc64-unknown-freebsd12.0 yes, and the HOST_CC or whatever mechanism was chosen to select the host toolchain would have to pick the desired cc. But from what I can see here, the BUILD_TRIPLE would be correct for FreeBSD if using -dumpmachine. > # /usr/local/bin/powerpc64-unknown-freebsd12.0-gcc --version > powerpc64-unknown-freebsd12.0-gcc (FreeBSD Ports Collection for powerpc64= ) 6.3.0 > I'd expect that the historical BUILD_ARCH content > for a FreeBSD host should be kept instead of ending > up with things like "-gnueabihf" tacked on sometimes. Are you saying that based on BUILD_TRIPLE there is some later BUILD_ARCH definition? That sounds wrong. --=20 Eddy Petri=C8=99or
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAK0XTWd%2BkbOL38LKTgTXARmbJDc=obsR9T5ONSc9btkiz4CVsw>