[oe-commits] [openembedded-core] 06/68: icecc: Don't generate recipe-sysroot symlinks at recipe-parsing time

git at git.openembedded.org git at git.openembedded.org
Mon Jan 28 17:07:05 UTC 2019


This is an automated email from the git hooks/post-receive script.

rpurdie pushed a commit to branch thud-next
in repository openembedded-core.

commit 46db052def5c4fa0de7943262092582c8d897117
Author: Douglas Royds <douglas.royds at taitradio.com>
AuthorDate: Thu Dec 20 11:59:47 2018 +1300

    icecc: Don't generate recipe-sysroot symlinks at recipe-parsing time
    
    The python function icecc_path() was being invoked inline by set_icecc_env(),
    meaning that it was being invoked at recipe-parsing time.
    As a side-effect, icecc_path() was creating the recipe-sysroot directory and
    symlinking icecc into it. Because this was done at parsing time (rather than
    configure time), we were generating otherwise-empty WORKDIRs for *all* parsed
    recipes, and for all virtual classes (-native, -nativesdk).
    In my build, this generated more than 800 of these otherwise-empty WORKDIRs.
    
    I have simplified icecc_path() to return only the intended path to the icecc
    symlinks in the recipe-sysroot, with no side-effect.
    We then create the directory and the icecc symlinks at configure time.
    
    Because get_cross_kernel_cc() is still invoked at parse-time,
    it needs a guard-clause for the non-kernel case.
    We are now finding the host icecc at do_configure time,
    so icecc needs to be in the HOSTTOOLS. I have made this non-fatal,
    so that we can still inherit icecc without icecc installed.
    
    (From OE-Core rev: d2fcaeb153fdc3f8d7143ea823139f1537055ff1)
    
    Signed-off-by: Douglas Royds <douglas.royds at taitradio.com>
    Signed-off-by: Richard Purdie <richard.purdie at linuxfoundation.org>
    Signed-off-by: Armin Kuster <akuster808 at gmail.com>
---
 meta/classes/icecc.bbclass | 62 +++++++++++++++++++---------------------------
 1 file changed, 25 insertions(+), 37 deletions(-)

diff --git a/meta/classes/icecc.bbclass b/meta/classes/icecc.bbclass
index 2171e11..4959717 100644
--- a/meta/classes/icecc.bbclass
+++ b/meta/classes/icecc.bbclass
@@ -38,6 +38,8 @@ BB_HASHBASE_WHITELIST += "ICECC_PARALLEL_MAKE ICECC_DISABLED ICECC_USER_PACKAGE_
 
 ICECC_ENV_EXEC ?= "${STAGING_BINDIR_NATIVE}/icecc-create-env"
 
+HOSTTOOLS_NONFATAL += "icecc"
+
 # This version can be incremented when changes are made to the environment that
 # invalidate the version on the compile nodes. Changing it will cause a new
 # environment to be created.
@@ -98,9 +100,11 @@ DEPENDS_prepend += "${@icecc_dep_prepend(d)} "
 
 get_cross_kernel_cc[vardepsexclude] += "KERNEL_CC"
 def get_cross_kernel_cc(bb,d):
-    kernel_cc = d.getVar('KERNEL_CC')
+    if not icecc_is_kernel(bb, d):
+        return None
 
     # evaluate the expression by the shell if necessary
+    kernel_cc = d.getVar('KERNEL_CC')
     if '`' in kernel_cc or '$(' in kernel_cc:
         import subprocess
         kernel_cc = subprocess.check_output("echo %s" % kernel_cc, shell=True).decode("utf-8")[:-1]
@@ -113,38 +117,6 @@ def get_cross_kernel_cc(bb,d):
 def get_icecc(d):
     return d.getVar('ICECC_PATH') or bb.utils.which(os.getenv("PATH"), "icecc")
 
-def create_path(compilers, bb, d):
-    """
-    Create Symlinks for the icecc in the staging directory
-    """
-    staging = os.path.join(d.expand('${STAGING_BINDIR}'), "ice")
-    if icecc_is_kernel(bb, d):
-        staging += "-kernel"
-
-    #check if the icecc path is set by the user
-    icecc = get_icecc(d)
-
-    # Create the dir if necessary
-    try:
-        os.stat(staging)
-    except:
-        try:
-            os.makedirs(staging)
-        except:
-            pass
-
-    for compiler in compilers:
-        gcc_path = os.path.join(staging, compiler)
-        try:
-            os.stat(gcc_path)
-        except:
-            try:
-                os.symlink(icecc, gcc_path)
-            except:
-                pass
-
-    return staging
-
 def use_icecc(bb,d):
     if d.getVar('ICECC_DISABLED') == "1":
         # don't even try it, when explicitly disabled
@@ -248,12 +220,11 @@ def icecc_path(bb,d):
         # don't create unnecessary directories when icecc is disabled
         return
 
+    staging = os.path.join(d.expand('${STAGING_BINDIR}'), "ice")
     if icecc_is_kernel(bb, d):
-        return create_path( [get_cross_kernel_cc(bb,d), ], bb, d)
+        staging += "-kernel"
 
-    else:
-        prefix = d.expand('${HOST_PREFIX}')
-        return create_path( [prefix+"gcc", prefix+"g++"], bb, d)
+    return staging
 
 def icecc_get_external_tool(bb, d, tool):
     external_toolchain_bindir = d.expand('${EXTERNAL_TOOLCHAIN}${bindir_cross}')
@@ -350,6 +321,23 @@ set_icecc_env() {
         return
     fi
 
+    ICECC_BIN="${@get_icecc(d)}"
+    if [ -z "${ICECC_BIN}" ]; then
+        bbwarn "Cannot use icecc: icecc binary not found"
+        return
+    fi
+
+    # Create symlinks to icecc in the recipe-sysroot directory
+    mkdir -p ${ICE_PATH}
+    if [ -n "${KERNEL_CC}" ]; then
+        compilers="${@get_cross_kernel_cc(bb,d)}"
+    else
+        compilers="${HOST_PREFIX}gcc ${HOST_PREFIX}g++"
+    fi
+    for compiler in $compilers; do
+        ln -sf ${ICECC_BIN} ${ICE_PATH}/$compiler
+    done
+
     ICECC_CC="${@icecc_get_and_check_tool(bb, d, "gcc")}"
     ICECC_CXX="${@icecc_get_and_check_tool(bb, d, "g++")}"
     # cannot use icecc_get_and_check_tool here because it assumes as without target_sys prefix

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.


More information about the Openembedded-commits mailing list