Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 12 Mar 2015 02:36:50 -0700
From:      Mark Millard <markmi@dsl-only.net>
To:        FreeBSD PowerPC ML <freebsd-ppc@freebsd.org>, freebsd-toolchain@freebsd.org
Subject:   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:  <764C9B46-5AF9-46D0-AE9E-BE52809DA1D7@dsl-only.net>

next in thread | raw e-mail | index | archive | help
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-NODEBU=
G  powerpc


As COMPILER_FEATURES context first I note that bsd.compiler.mk uses the =
rule...

.if ${COMPILER_TYPE} =3D=3D "clang" || \
        (${COMPILER_TYPE} =3D=3D "gcc" && ${COMPILER_VERSION} >=3D =
40800)
COMPILER_FEATURES=3D      c++11
.else
COMPILER_FEATURES=3D
.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...

.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+=3DGCC GCC_BOOTSTRAP GNUCXX
__DEFAULT_NO_OPTIONS+=3DCLANG CLANG_BOOTSTRAP CLANG_FULL CLANG_IS_CC
.elif ${__T} =3D=3D "amd64" || ${__T} =3D=3D "i386"
# On x86, clang is enabled, and will be installed as the default cc.
__DEFAULT_YES_OPTIONS+=3DCLANG CLANG_BOOTSTRAP CLANG_FULL CLANG_IS_CC
__DEFAULT_NO_OPTIONS+=3DGCC GCC_BOOTSTRAP GNUCXX
.elif ${__TT} =3D=3D "arm" && ${__T:Marm*eb*} =3D=3D ""
# 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+=3DCLANG CLANG_BOOTSTRAP CLANG_IS_CC
__DEFAULT_NO_OPTIONS+=3DCLANG_FULL GCC GCC_BOOTSTRAP GNUCXX
.elif ${__T:Mpowerpc*}
# On powerpc, clang is enabled, but gcc is installed as the default cc.
__DEFAULT_YES_OPTIONS+=3DCLANG CLANG_FULL GCC GCC_BOOTSTRAP GNUCXX
__DEFAULT_NO_OPTIONS+=3DCLANG_BOOTSTRAP CLANG_IS_CC
.else
# Everything else disables clang, and uses gcc instead.
__DEFAULT_YES_OPTIONS+=3DGCC GCC_BOOTSTRAP GNUCXX
__DEFAULT_NO_OPTIONS+=3DCLANG 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} =3D=3D "amd64" || ${__T} =3D=3D "i386" || ${__T:Mpowerpc*}
__DEFAULT_YES_OPTIONS+=3DCLANG CLANG_FULL
.elif ${__T} =3D=3D "arm" || ${__T} =3D=3D "armv6"
__DEFAULT_YES_OPTIONS+=3DCLANG
# GCC is unable to build the full clang on arm, disable it by default.
__DEFAULT_NO_OPTIONS+=3DCLANG_FULL
.else
__DEFAULT_NO_OPTIONS+=3DCLANG CLANG_FULL
.endif
# Clang the default system compiler only on little-endian arm and x86.
.if ${__T} =3D=3D "amd64" || ${__T} =3D=3D "arm" || ${__T} =3D=3D =
"armv6" || \
    ${__T} =3D=3D "i386"
__DEFAULT_YES_OPTIONS+=3DCLANG_IS_CC
# The pc98 bootloader requires gcc to build and so we must leave gcc =
enabled
# for pc98 for now.
.if ${__TT} =3D=3D "pc98"
__DEFAULT_NO_OPTIONS+=3DGNUCXX
__DEFAULT_YES_OPTIONS+=3DGCC
.else
__DEFAULT_NO_OPTIONS+=3DGCC GNUCXX
.endif
.else
# If clang is not cc, then build gcc by default
__DEFAULT_NO_OPTIONS+=3DCLANG_IS_CC
__DEFAULT_YES_OPTIONS+=3DGCC
# And if g++ is c++, build the rest of the GNU C++ stack
.if defined(WITHOUT_CXX)
__DEFAULT_NO_OPTIONS+=3DGNUCXX
.else
__DEFAULT_YES_OPTIONS+=3DGNUCXX
.endif
.endif


=3D=3D=3D
Mark Millard
markmi at dsl-only.net




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?764C9B46-5AF9-46D0-AE9E-BE52809DA1D7>