Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 12 Mar 2015 10:04:50 -0700
From:      Nathan Whitehorn <nwhitehorn@freebsd.org>
To:        freebsd-toolchain@freebsd.org, FreeBSD PowerPC ML <freebsd-ppc@freebsd.org>
Subject:   Re: powerpc/powerpc64 11.0-CURRENT not building clang by default: src.opt.mk not equivalent to 10.1-STABLE bsd.own.mk on the issue
Message-ID:  <5501C732.7050502@freebsd.org>
In-Reply-To: <7A17FBA1-9499-4862-83DF-1C4010D96003@dsl-only.net>
References:  <DBD1D803-FD36-490E-9661-5347CBD55D94@dsl-only.net> <B5B7E302-09E0-4E94-8251-ED08EB75D38E@bsdimp.com> <7A17FBA1-9499-4862-83DF-1C4010D96003@dsl-only.net>

next in thread | previous in thread | raw e-mail | index | archive | help
This is not the right one. That is related to clang 3.4. The issue is 
that clang 3.5+ require a C++11 compiler to build. GCC 4.2 is not a 
C++11 compiler and so the clang build was disabled. This makes the 
upgrade path when clang becomes the default compiler a little bumpy, but 
that did not seem to be a reason to hold off on the 3.5 upgrade across 
the board.
-Nathan

On 03/12/15 10:01, Mark Millard wrote:
> Well there is an entry but when I read it I did not find it clear about the 10.x status.
>
> I think the implication is that the 9.x paragraph also applies to 10.x:
>
>          On 9.x [and 10.x] installations where clang is enabled by default, e.g. on x86 and
>          powerpc, libc++ will not be enabled by default, so libc++ should be
>          built (with clang) and installed first.  If both clang and libc++ are
>          missing, build clang first, then use it to build libc++.
>
> ===
> Mark Millard
> markmi@dsl-only.net
>
> On 2015-Mar-12, at 05:00 AM, Warner Losh <imp@bsdimp.com> wrote:
>
>
>> On Mar 12, 2015, at 6:36 PM, Mark Millard <markmi@dsl-only.net> wrote:
>>
>> Basic context for the observation (powerpc64 example):
>>
>> # freebsd-version -ku; uname -a
>> 11.0-CURRENT
>> 11.0-CURRENT
>> FreeBSD FBSDG5C0 11.0-CURRENT FreeBSD 11.0-CURRENT #0 r279514M: Wed Mar 11 19:23:14 PDT 2015     root@FBSDG4C0:/usr/obj/powerpc.powerpc64/usr/srcC/sys/GENERIC64vtsc-NODEBUG  powerpc
>>
>>
>> As COMPILER_FEATURES context first I note that bsd.compiler.mk uses the rule...
>>
>> .if ${COMPILER_TYPE} == "clang" || \
>>        (${COMPILER_TYPE} == "gcc" && ${COMPILER_VERSION} >= 40800)
>> COMPILER_FEATURES=      c++11
>> .else
>> COMPILER_FEATURES=
>> .endif
>>
>> So powerpc/powerpc64 ends up with COMPILER_FEATURES being empty unless COMPILER_TYPE has been forced to be "clang" or ${CC} already is clang based.
>>
>> But src.opts.mk will never indicate to build clang when !${COMPILER_FEATURES:Mc++11} : that logic has priority over things like ${__T:Mpowerpc*} tests…
> Clang can only be built by a new gcc or clang. Old gcc can’t build it, so if you don’t have a new gcc, you can’t build clang. The default compiler was gcc on 10.1. There likely should be an UPDATING entry to make this clear.
>
> Warner
>
>
>> .include <bsd.compiler.mk>
>> .if !${COMPILER_FEATURES:Mc++11}
>> # If the compiler is not C++11 capable, disable clang and use gcc instead.
>> __DEFAULT_YES_OPTIONS+=GCC GCC_BOOTSTRAP GNUCXX
>> __DEFAULT_NO_OPTIONS+=CLANG CLANG_BOOTSTRAP CLANG_FULL CLANG_IS_CC
>> .elif ${__T} == "amd64" || ${__T} == "i386"
>> # On x86, clang is enabled, and will be installed as the default cc.
>> __DEFAULT_YES_OPTIONS+=CLANG CLANG_BOOTSTRAP CLANG_FULL CLANG_IS_CC
>> __DEFAULT_NO_OPTIONS+=GCC GCC_BOOTSTRAP GNUCXX
>> .elif ${__TT} == "arm" && ${__T:Marm*eb*} == ""
>> # On little-endian arm, clang is enabled, and it is installed as the default
>> # cc, but since gcc is unable to build the full clang, disable it by default.
>> __DEFAULT_YES_OPTIONS+=CLANG CLANG_BOOTSTRAP CLANG_IS_CC
>> __DEFAULT_NO_OPTIONS+=CLANG_FULL GCC GCC_BOOTSTRAP GNUCXX
>> .elif ${__T:Mpowerpc*}
>> # On powerpc, clang is enabled, but gcc is installed as the default cc.
>> __DEFAULT_YES_OPTIONS+=CLANG CLANG_FULL GCC GCC_BOOTSTRAP GNUCXX
>> __DEFAULT_NO_OPTIONS+=CLANG_BOOTSTRAP CLANG_IS_CC
>> .else
>> # Everything else disables clang, and uses gcc instead.
>> __DEFAULT_YES_OPTIONS+=GCC GCC_BOOTSTRAP GNUCXX
>> __DEFAULT_NO_OPTIONS+=CLANG CLANG_BOOTSTRAP CLANG_FULL CLANG_IS_CC
>> .endif
>>
>>
>>
>> By contrast the old bsd.own.mk logic from 10.1-STABLE did not depend on testing !${COMPILER_FEATURES:Mc++11} (or analogous) before deciding for powerpc/powerpc64...
>>
>> # Clang is only for x86, powerpc and little-endian arm right now, by default.
>> .if ${__T} == "amd64" || ${__T} == "i386" || ${__T:Mpowerpc*}
>> __DEFAULT_YES_OPTIONS+=CLANG CLANG_FULL
>> .elif ${__T} == "arm" || ${__T} == "armv6"
>> __DEFAULT_YES_OPTIONS+=CLANG
>> # GCC is unable to build the full clang on arm, disable it by default.
>> __DEFAULT_NO_OPTIONS+=CLANG_FULL
>> .else
>> __DEFAULT_NO_OPTIONS+=CLANG CLANG_FULL
>> .endif
>> # Clang the default system compiler only on little-endian arm and x86.
>> .if ${__T} == "amd64" || ${__T} == "arm" || ${__T} == "armv6" || \
>>    ${__T} == "i386"
>> __DEFAULT_YES_OPTIONS+=CLANG_IS_CC
>> # The pc98 bootloader requires gcc to build and so we must leave gcc enabled
>> # for pc98 for now.
>> .if ${__TT} == "pc98"
>> __DEFAULT_NO_OPTIONS+=GNUCXX
>> __DEFAULT_YES_OPTIONS+=GCC
>> .else
>> __DEFAULT_NO_OPTIONS+=GCC GNUCXX
>> .endif
>> .else
>> # If clang is not cc, then build gcc by default
>> __DEFAULT_NO_OPTIONS+=CLANG_IS_CC
>> __DEFAULT_YES_OPTIONS+=GCC
>> # And if g++ is c++, build the rest of the GNU C++ stack
>> .if defined(WITHOUT_CXX)
>> __DEFAULT_NO_OPTIONS+=GNUCXX
>> .else
>> __DEFAULT_YES_OPTIONS+=GNUCXX
>> .endif
>> .endif
>>
>>
>> ===
>> Mark Millard
>> markmi at dsl-only.net
>>
>> _______________________________________________
>> freebsd-toolchain@freebsd.org mailing list
>> http://lists.freebsd.org/mailman/listinfo/freebsd-toolchain
>> To unsubscribe, send any mail to "freebsd-toolchain-unsubscribe@freebsd.org"
>
> _______________________________________________
> freebsd-toolchain@freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-toolchain
> To unsubscribe, send any mail to "freebsd-toolchain-unsubscribe@freebsd.org"
>




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?5501C732.7050502>