Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 21 Jun 2011 15:54:09 -0600
From:      Warner Losh <imp@bsdimp.com>
To:        Damjan Marion <damjan.marion@gmail.com>
Cc:        toolchain@freebsd.org
Subject:   Re: cross-compiling for arm with clang
Message-ID:  <CD7B0BF5-B3B7-483A-B2D4-44952D4C2422@bsdimp.com>
In-Reply-To: <932DB8CA-22DA-495F-89AC-F547146780B6@gmail.com>
References:  <D0F647ED-4AB2-4A61-AD37-423F0AF9805D@gmail.com> <C29B8240-9D19-46CC-A1FC-1B9150547B1D@bsdimp.com> <15B76B64-D26E-420D-AE37-B52A694CDF98@gmail.com> <BF24BE90-48B7-48A0-90FE-234C28AE9CA9@bsdimp.com> <8E65FA9C-330B-4055-8959-75EE06E557E8@gmail.com> <AC8BF81A-2EF4-48FF-ABDE-E928C1B4A06E@bsdimp.com> <932DB8CA-22DA-495F-89AC-F547146780B6@gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help

On Jun 21, 2011, at 3:31 PM, Damjan Marion wrote:

>=20
> On Jun 21, 2011, at 7:06 PM, Warner Losh wrote:
>>=20
>> On Jun 21, 2011, at 3:12 AM, Damjan Marion wrote:
>>>=20
>>> On Jun 17, 2011, at 9:16 PM, Warner Losh wrote:
>>>>=20
>>>> How it normally works is that we build a compiler that invokes the =
right as, ld, etc for the architecture in question.  Clang is clearly =
broken here in assuming that as can cope with anything other than native =
assembler :)  We normally either build gcc that knows where to find =
these files.  In the buildworld case, this is communicate with weird =
paths and shell variables.  With the whole 'xdev' series of targets =
(which are instructive to look at), we build into a specific location =
/usr/freebsd-xdev-arm/bin, etc).
>>>>=20
>>>> It works by accident for i386 on amd64, I think.  as treats the =
more or less as the same.
>>>=20
>>> I submitted a patch[1] to clang mailer which invokes =
xxx-yyy-zzz-as/ld based on -ccc-host-triple. Patch is copy of netbsd =
code which is already in clang.
>>>=20
>>> For me it works well, even when I use clang on Darwin host, it calls =
proper as/ld.
>>>=20
>>> # /opt/llvm/bin/clang -ccc-host-triple arm-unknown-freebsd =
-mfloat-abi=3Dsoft  test.c -o test -v -c
>>> clang version 3.0 (http://llvm.org/git/clang.git =
98138cdfdee05c0afbab2b209ce8cfe4a52474e1)
>>> Target: arm-unknown-freebsd
>>> Thread model: posix
>>> [snip]
>>> End of search list.
>>> "/opt/llvm/bin/arm-unknown-freebsd-as" -o test =
/var/folders/kb/kbDaYaFqFQaCg3mXbTLH5U+16gE/-Tmp-/cc-RMHOwf.s
>>>=20
>>>=20
>>> Is this what we need to support cross-compiling freebsd with clang?
>>=20
>> As we do it today?  No.  Today we build the binaries as 'as' which =
are part of the buildworld.  These binaries aren't called =
arm-unknown-freebsd-as, but instead 'as'.
>>=20
>> Do we want to switch? Maybe.
>=20
> Seems that clang will first try to run as/ld which is in the same =
directory like clang. That is exactly what we have in /usr/obj/.../bin =
so seems that buildworld should work out of the box.
>=20
> Problem with ARM is that clang is not build as part of cross-tools, so =
clang from /usr/bin is called instead which also means that as/ld from =
/usr/bin are used.
>=20
> --- share/mk/bsd.own.mk (revision 223366)
> +++ share/mk/bsd.own.mk (working copy)
> @@ -415,7 +415,7 @@
> __T=3D${MACHINE_ARCH}
> .endif
> # Clang is only for x86 and 32-bit powerpc right now, by default.
> -.if ${__T} =3D=3D "amd64" || ${__T} =3D=3D "i386" || ${__T} =3D=3D =
"powerpc"
> +.if ${__T} =3D=3D "amd64" || ${__T} =3D=3D "i386" || ${__T} =3D=3D =
"powerpc" || ${__T} =3D=3D "arm"
> __DEFAULT_YES_OPTIONS+=3DCLANG
> .else

Well, you'd need to add to the comment too :)

I'm not sure it is time to make this the default.  Adding -DWITH_CLANG =
to the cross build would also accomplish the same thing.  The reason we =
don't yet build arm is that it hasn't been very well tested...

> Unfortunately this doesn't mean that cross-compiling works fine now =
for ARM. It fails on building lib/libcompiler_rt.
> Here is output if anybody have idea how to fix it: =
http://pastebin.com/Ly2jARjd

Not sure how to fix that.

Warner=



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CD7B0BF5-B3B7-483A-B2D4-44952D4C2422>