Clang buildworld failure due to multiple definitions of __isnanf

Garrett Cooper yanegomi at gmail.com
Tue Jun 28 19:37:40 UTC 2011


On Mon, Jun 27, 2011 at 8:59 AM, Eric McCorkle <eric at shadowsun.net> wrote:
> On 6/27/11 8:29 AM, Dimitry Andric wrote:
>>
>> On 2011-06-27 04:32, Eric McCorkle wrote:
>>>
>>> I've both seen reports and experienced make buildworld with clang
>>> failing in usr.bin/xlint/lint1 (really, make kernel-toolchain is what
>>> fails), because lint1 is statically linked, and there is a definition of
>>> __isnanf in both libc and libm. GCC, on the other hand, builds just fine.
>>
>> ...
>>
>> I have never seen this failure, and neither does the clang buildbot, so
>> maybe there is something in your build environment causing this problem?
>> Can you please post:
>>
>> - Your build architecture (e.g. i386 or amd64)
>> - Your /etc/make.conf and /etc/src.conf, if applicable
>> - Any build-related environment variables (WITH_FOO, WITHOUT_FOO,
>> CFLAGS, etc)
>>
>
> Sorry.  It's an amd64 system, 9-CURRENT, last updated on friday.
>
> src.conf:
> LOADER_ZFS_SUPPORT="YES"
>
> make.conf:
> CPUTYPE?=core2
> .if !defined(CC) || ${CC} == "cc"
> CC=clang
> CFLAGS=-Qunused-arguments
> .endif
> .if !defined(CXX) || ${CXX} == "c++"
> CXX=clang++
> .endif
> NO_WERROR=
> WERROR=
> NO_FSCHG=
> PERL_VERSION=5.12.3
>
> Just noticed, the CFLAGS would disable optimization, which would explain why
> no one else seems to see this.  Still, I think the underlying issue warrants
> investigation.

Two things are wrong here:
1. You should use CC?=, CXX?=, etc in order to properly crossbuild (as
Warner pointed out to me in another thread).
2. You should use CFLAGS+=, CXXFLAGS+=, otherwise you're going to
obliterate any predefined CFLAGS, CXXFLAGS, etc. My guess is that if
you use += instead, things will actually work.
HTH,
-Garrett


More information about the freebsd-current mailing list