summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--meta/classes/icecc.bbclass37
1 files changed, 33 insertions, 4 deletions
diff --git a/meta/classes/icecc.bbclass b/meta/classes/icecc.bbclass
index f3e89a9747..cf3f23d93a 100644
--- a/meta/classes/icecc.bbclass
+++ b/meta/classes/icecc.bbclass
@@ -47,6 +47,9 @@ def get_cross_kernel_cc(bb,d):
kernel_cc = kernel_cc.strip()
return kernel_cc
+def get_icecc(d):
+ return d.getVar('ICECC_PATH') or os.popen("which icecc").read()[:-1]
+
def create_path(compilers, bb, d):
"""
Create Symlinks for the icecc in the staging directory
@@ -56,7 +59,7 @@ def create_path(compilers, bb, d):
staging += "-kernel"
#check if the icecc path is set by the user
- icecc = d.getVar('ICECC_PATH') or os.popen("which icecc").read()[:-1]
+ icecc = get_icecc(d)
# Create the dir if necessary
try:
@@ -151,6 +154,11 @@ def icc_path(bb,d):
prefix = d.expand('${HOST_PREFIX}')
return create_path( [prefix+"gcc", prefix+"g++"], bb, d)
+def icc_get_external_tool(bb, d, tool):
+ external_toolchain_bindir = d.expand('${EXTERNAL_TOOLCHAIN}${bindir_cross}')
+ target_prefix = d.expand('${TARGET_PREFIX}')
+ return os.path.join(external_toolchain_bindir, '%s%s' % (target_prefix, tool))
+
def icc_get_tool(bb, d, tool):
if icc_is_native(bb, d):
return os.popen("which %s" % tool).read()[:-1]
@@ -159,7 +167,26 @@ def icc_get_tool(bb, d, tool):
else:
ice_dir = d.expand('${STAGING_BINDIR_TOOLCHAIN}')
target_sys = d.expand('${TARGET_SYS}')
- return os.path.join(ice_dir, "%s-%s" % (target_sys, tool))
+ tool_bin = os.path.join(ice_dir, "%s-%s" % (target_sys, tool))
+ if os.path.isfile(tool_bin):
+ return tool_bin
+ else:
+ external_tool_bin = icc_get_external_tool(bb, d, tool)
+ if os.path.isfile(external_tool_bin):
+ return external_tool_bin
+ else:
+ return ""
+
+def icc_get_and_check_tool(bb, d, tool):
+ # Check that g++ or gcc is not a symbolic link to icecc binary in
+ # PATH or icecc-create-env script will silently create an invalid
+ # compiler environment package.
+ t = icc_get_tool(bb, d, tool)
+ if t and os.popen("readlink -f %s" % t).read()[:-1] == get_icecc(d):
+ bb.error("%s is a symlink to %s in PATH and this prevents icecc from working" % (t, get_icecc(d)))
+ return ""
+ else:
+ return t
set_icecc_env() {
if [ "x${ICECC_DISABLED}" != "x" ]
@@ -178,8 +205,8 @@ set_icecc_env() {
return
fi
- ICECC_CC="${@icc_get_tool(bb,d, "gcc")}"
- ICECC_CXX="${@icc_get_tool(bb,d, "g++")}"
+ ICECC_CC="${@icc_get_and_check_tool(bb, d, "gcc")}"
+ ICECC_CXX="${@icc_get_and_check_tool(bb, d, "g++")}"
if [ ! -x "${ICECC_CC}" -o ! -x "${ICECC_CXX}" ]
then
return
@@ -207,6 +234,8 @@ set_icecc_env() {
export ICECC_VERSION ICECC_CC ICECC_CXX
export PATH="$ICE_PATH:$PATH"
export CCACHE_PATH="$PATH"
+
+ bbnote "Using icecc"
}
do_configure_prepend() {