소스 검색

Merge pull request #82 from MentorEmbedded/blacklist_dynamic

Split out a blacklist_dynamic class
Christopher Larson 8 년 전
부모
커밋
c19653c29d
2개의 변경된 파일51개의 추가작업 그리고 29개의 파일을 삭제
  1. 41 0
      classes/blacklist_dynamic.bbclass
  2. 10 29
      conf/distro/include/tcmode-external-sourcery.inc

+ 41 - 0
classes/blacklist_dynamic.bbclass

@@ -0,0 +1,41 @@
+# Blacklist recipe names which include variable references, handling
+# multilibs.
+#
+# Ex. PNBLACKLIST_DYNAMIC += "${MLPREFIX}gcc-cross-${TARGET_ARCH}"
+
+PNBLACKLIST_DYNAMIC ?= ""
+
+inherit blacklist
+
+python pnblacklist_dynamic_setup () {
+    d = e.data
+
+    blacklisted = d.getVar('PNBLACKLIST_DYNAMIC', False)
+    if not blacklisted.strip():
+        return
+
+    multilibs = d.getVar('MULTILIBS', True) or ''
+
+    # this block has been copied from base.bbclass so keep it in sync
+    prefixes = []
+    for ext in multilibs.split():
+        eext = ext.split(':')
+        if len(eext) > 1 and eext[0] == 'multilib':
+            prefixes.append(eext[1])
+
+    to_blacklist = set()
+    for prefix in [''] + prefixes:
+        localdata = bb.data.createCopy(d)
+        if prefix:
+            localdata.setVar('MLPREFIX', prefix + '-')
+            override = ':virtclass-multilib-' + prefix
+            localdata.setVar('OVERRIDES', localdata.getVar('OVERRIDES', False) + override)
+            bb.data.update_data(localdata)
+
+        to_blacklist |= set(filter(None, localdata.expand(blacklisted).split()))
+
+    for blrecipe in to_blacklist:
+        d.setVarFlag('PNBLACKLIST', blrecipe, 'blacklisted by PNBLACKLIST_DYNAMIC')
+}
+pnblacklist_dynamic_setup[eventmask] = "bb.event.ConfigParsed"
+addhandler pnblacklist_dynamic_setup

+ 10 - 29
conf/distro/include/tcmode-external-sourcery.inc

@@ -45,7 +45,7 @@ PREFERRED_PROVIDER_libgcc = "libgcc-external"
 PREFERRED_PROVIDER_linux-libc-headers = "linux-libc-headers-external"
 
 # Ensure that we don't pull in any internal toolchain recipes
-INHERIT += "blacklist"
+INHERIT += "blacklist blacklist_dynamic"
 PNBLACKLIST[uclibc] = "not building with an external toolchain"
 PNBLACKLIST[uclibc-initial] = "not building with an external toolchain"
 PNBLACKLIST[glibc] = "not building with an external toolchain"
@@ -53,17 +53,20 @@ PNBLACKLIST[glibc-initial] = "not building with an external toolchain"
 PNBLACKLIST[glibc-intermediate] = "not building with an external toolchain"
 PNBLACKLIST[gcc-runtime] = "not building with an external toolchain"
 PNBLACKLIST[gcc-sanitizers] = "not building with an external toolchain"
+PNBLACKLIST[gcc-source] = "not building with an external toolchain"
 PNBLACKLIST[libgcc-initial] = "not building with an external toolchain"
 PNBLACKLIST[libgcc] = "not building with an external toolchain"
 PNBLACKLIST[linux-libc-headers] = "not building with an external toolchain"
 PNBLACKLIST[linux-libc-headers-yocto] = "not building with an external toolchain"
 PNBLACKLIST[external-sourcery-toolchain] = "using meta-sourcery, not poky's external toolchain"
-EXTERNAL_PNBLACKLIST_MULTILIB += "\
-    gcc-cross-${TARGET_ARCH} \
-    gcc-cross-initial-${TARGET_ARCH} \
-    binutils-cross-${TARGET_ARCH} \
+
+PNBLACKLIST_DYNAMIC += "\
+    ${MLPREFIX}gcc-cross-${TARGET_ARCH} \
+    ${MLPREFIX}gcc-cross-initial-${TARGET_ARCH} \
+    ${MLPREFIX}binutils-cross-${TARGET_ARCH} \
+    \
+    gcc-source-${@'${GCCVERSION}'.replace('%', '')} \
 "
-EXTERNAL_PNBLACKLIST_MULTILIB[doc] = "List of recipes to blacklist whose names vary in more than just prefix between multilib variants."
 
 # Determine the prefixes to check for based on the target architecture (before
 # any classes alter TARGET_ARCH)
@@ -155,29 +158,6 @@ python toolchain_metadata_setup () {
             pass
         else:
             d.appendVar('TUNE_CCARGS', ' -msgxx-glibc')
-
-    blacklisted = d.getVar('EXTERNAL_PNBLACKLIST_MULTILIB', False)
-    for var in d.expand(blacklisted).split():
-        d.setVarFlag('PNBLACKLIST', var, 'not building with an external toolchain')
-
-    multilibs = d.getVar('MULTILIBS', True)
-    if not multilibs:
-        return
-
-    # this block has been copied from base.bbclass so keep it in sync
-    prefixes = []
-    for ext in multilibs.split():
-        eext = ext.split(':')
-        if len(eext) > 1 and eext[0] == 'multilib':
-            prefixes.append(eext[1])
-
-    for prefix in prefixes:
-        localdata = bb.data.createCopy(d)
-        override = ':virtclass-multilib-' + prefix
-        localdata.setVar('OVERRIDES', localdata.getVar('OVERRIDES', False) + override)
-        bb.data.update_data(localdata)
-        for var in localdata.expand(blacklisted).split():
-            e.data.setVarFlag('PNBLACKLIST', prefix + '-' + var, 'not building with an external toolchain')
 }
 toolchain_metadata_setup[eventmask] = "bb.event.ConfigParsed"
 addhandler toolchain_metadata_setup
@@ -211,6 +191,7 @@ addhandler toolchain_sanity_check
 
 require conf/distro/include/external-run.inc
 
+GCCVERSION ?= "${@'.'.join('${GCC_VERSION}'.split('.')[:2])}%"
 GCC_VERSION = "${@external_run(d, 'gcc', '-dumpversion').rstrip()}"
 GCC_VERSION_allarch = ""
 GCC_VERSION[vardepvalue] = "${GCC_VERSION}"