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>