@@ -19,6 +19,15 @@ PACKAGECONFIG_CONFARGS ??= ""
inherit metadata_scm
+TOOLCHAIN ??= "gcc"
+TOOLCHAIN:class-native ??= "gcc"
+TOOLCHAIN:class-cross ??= "gcc"
+TOOLCHAIN:class-crosssdk ??= "gcc"
+TOOLCHAIN:class-nativesdk ??= "gcc"
+
+inherit toolchain/gcc-native
+inherit_defer toolchain/${TOOLCHAIN}
+
def lsb_distro_identifier(d):
adjust = d.getVar('LSB_DISTRO_ADJUST')
adjust_func = None
similarity index 100%
rename from meta/conf/toolchain/clang.inc
rename to meta/classes/toolchain/clang.bbclass
similarity index 100%
rename from meta/conf/toolchain/build-gcc.inc
rename to meta/classes/toolchain/gcc-native.bbclass
similarity index 100%
rename from meta/conf/toolchain/gcc.inc
rename to meta/classes/toolchain/gcc.bbclass
@@ -834,9 +834,6 @@ include conf/licenses.conf
require conf/sanity.conf
include conf/bblock.conf
-require toolchain/gcc.inc
-require toolchain/build-gcc.inc
-
##################################################################
# Weak variables (usually to retain backwards compatibility)
##################################################################
@@ -9,6 +9,8 @@ TARGET_ARCH[vardepvalue] = "${TARGET_ARCH}"
INHIBIT_DEFAULT_DEPS = "1"
INHIBIT_AUTOTOOLS_DEPS = "1"
+TOOLCHAIN = "gcc"
+
SRC_URI += "file://0002-binutils-cross-Do-not-generate-linker-script-directo.patch"
# Specify lib-path else we use a load of search dirs which we don't use
@@ -11,6 +11,7 @@ PN = "clang-cross-${TARGET_ARCH}"
require common-clang.inc
require common-source.inc
inherit cross
+TOOLCHAIN = "clang"
DEPENDS += "clang-native virtual/cross-binutils"
#INHIBIT_PACKAGE_STRIP = "1"
@@ -11,6 +11,7 @@ PN = "clang-crosssdk-${SDK_SYS}"
require common-clang.inc
require common-source.inc
inherit crosssdk
+TOOLCHAIN = "clang"
DEPENDS += "clang-native nativesdk-clang-glue virtual/nativesdk-cross-binutils virtual/nativesdk-libc"
do_install() {
This implements a toolchain selection mechanism, defaulting to gcc as per the existing defaults. Introduce a variable called TOOLCHAIN, which denotes the familiar name for toolchain e.g. "gcc" which selects GNU compiler + binutils as default C/C++ toolchain or "clang" which will use LLVM/Clang Compiler TOOLCHAIN variable has a global fallback to "gcc" in configuration metadata. A distro can switch to using say "clang" as default system compiler by defining TOOLCHAIN ?= "clang" In local.conf or other distro specific global configuration metadata It is also selectable at recipe scope, since not all packages are buildable with either clang or gcc, a recipe can explicitly demand a given toolchain e.g. glibc can not be built with clang therefore glibc recipe sets. TOOLCHAIN = "gcc" Based on ideas/work by Khem Raj <raj.khem@gmail.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org> --- meta/classes-global/base.bbclass | 9 +++++++++ .../clang.inc => classes/toolchain/clang.bbclass} | 0 .../toolchain/gcc-native.bbclass} | 0 .../toolchain/gcc.inc => classes/toolchain/gcc.bbclass} | 0 meta/conf/bitbake.conf | 3 --- meta/recipes-devtools/binutils/binutils-cross.inc | 2 ++ meta/recipes-devtools/clang/clang-cross_git.bb | 1 + meta/recipes-devtools/clang/clang-crosssdk_git.bb | 1 + 8 files changed, 13 insertions(+), 3 deletions(-) rename meta/{conf/toolchain/clang.inc => classes/toolchain/clang.bbclass} (100%) rename meta/{conf/toolchain/build-gcc.inc => classes/toolchain/gcc-native.bbclass} (100%) rename meta/{conf/toolchain/gcc.inc => classes/toolchain/gcc.bbclass} (100%)