On Jun 21, 2011, at 7:06 PM, Warner Losh wrote:
>
> On Jun 21, 2011, at 3:12 AM, Damjan Marion wrote:
>>
>> On Jun 17, 2011, at 9:16 PM, Warner Losh wrote:
>>>
>>> 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).
>>>
>>> It works by accident for i386 on amd64, I think. as treats the more or
>>> less as the same.
>>
>> 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.
>>
>> For me it works well, even when I use clang on Darwin host, it calls proper
>> as/ld.
>>
>> # /opt/llvm/bin/clang -ccc-host-triple arm-unknown-freebsd -mfloat-abi=soft
>> 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
>>
>>
>> Is this what we need to support cross-compiling freebsd with clang?
>
> 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'.
>
> Do we want to switch? Maybe.
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.
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.
--- share/mk/bsd.own.mk (revision 223366)
+++ share/mk/bsd.own.mk (working copy)
@@ -415,7 +415,7 @@
__T=${MACHINE_ARCH}
.endif
# Clang is only for x86 and 32-bit powerpc right now, by default.
-.if ${__T} == "amd64" || ${__T} == "i386" || ${__T} == "powerpc"
+.if ${__T} == "amd64" || ${__T} == "i386" || ${__T} == "powerpc" || ${__T} ==
"arm"
__DEFAULT_YES_OPTIONS+=CLANG
.else
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
Damjan
_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-toolchain
To unsubscribe, send any mail to "[email protected]"