summaryrefslogtreecommitdiffstats
path: root/meta/classes
diff options
context:
space:
mode:
Diffstat (limited to 'meta/classes')
-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):
47 kernel_cc = kernel_cc.strip() 47 kernel_cc = kernel_cc.strip()
48 return kernel_cc 48 return kernel_cc
49 49
50def get_icecc(d):
51 return d.getVar('ICECC_PATH') or os.popen("which icecc").read()[:-1]
52
50def create_path(compilers, bb, d): 53def create_path(compilers, bb, d):
51 """ 54 """
52 Create Symlinks for the icecc in the staging directory 55 Create Symlinks for the icecc in the staging directory
@@ -56,7 +59,7 @@ def create_path(compilers, bb, d):
56 staging += "-kernel" 59 staging += "-kernel"
57 60
58 #check if the icecc path is set by the user 61 #check if the icecc path is set by the user
59 icecc = d.getVar('ICECC_PATH') or os.popen("which icecc").read()[:-1] 62 icecc = get_icecc(d)
60 63
61 # Create the dir if necessary 64 # Create the dir if necessary
62 try: 65 try:
@@ -151,6 +154,11 @@ def icc_path(bb,d):
151 prefix = d.expand('${HOST_PREFIX}') 154 prefix = d.expand('${HOST_PREFIX}')
152 return create_path( [prefix+"gcc", prefix+"g++"], bb, d) 155 return create_path( [prefix+"gcc", prefix+"g++"], bb, d)
153 156
157def icc_get_external_tool(bb, d, tool):
158 external_toolchain_bindir = d.expand('${EXTERNAL_TOOLCHAIN}${bindir_cross}')
159 target_prefix = d.expand('${TARGET_PREFIX}')
160 return os.path.join(external_toolchain_bindir, '%s%s' % (target_prefix, tool))
161
154def icc_get_tool(bb, d, tool): 162def icc_get_tool(bb, d, tool):
155 if icc_is_native(bb, d): 163 if icc_is_native(bb, d):
156 return os.popen("which %s" % tool).read()[:-1] 164 return os.popen("which %s" % tool).read()[:-1]
@@ -159,7 +167,26 @@ def icc_get_tool(bb, d, tool):
159 else: 167 else:
160 ice_dir = d.expand('${STAGING_BINDIR_TOOLCHAIN}') 168 ice_dir = d.expand('${STAGING_BINDIR_TOOLCHAIN}')
161 target_sys = d.expand('${TARGET_SYS}') 169 target_sys = d.expand('${TARGET_SYS}')
162 return os.path.join(ice_dir, "%s-%s" % (target_sys, tool)) 170 tool_bin = os.path.join(ice_dir, "%s-%s" % (target_sys, tool))
171 if os.path.isfile(tool_bin):
172 return tool_bin
173 else:
174 external_tool_bin = icc_get_external_tool(bb, d, tool)
175 if os.path.isfile(external_tool_bin):
176 return external_tool_bin
177 else:
178 return ""
179
180def icc_get_and_check_tool(bb, d, tool):
181 # Check that g++ or gcc is not a symbolic link to icecc binary in
182 # PATH or icecc-create-env script will silently create an invalid
183 # compiler environment package.
184 t = icc_get_tool(bb, d, tool)
185 if t and os.popen("readlink -f %s" % t).read()[:-1] == get_icecc(d):
186 bb.error("%s is a symlink to %s in PATH and this prevents icecc from working" % (t, get_icecc(d)))
187 return ""
188 else:
189 return t
163 190
164set_icecc_env() { 191set_icecc_env() {
165 if [ "x${ICECC_DISABLED}" != "x" ] 192 if [ "x${ICECC_DISABLED}" != "x" ]
@@ -178,8 +205,8 @@ set_icecc_env() {
178 return 205 return
179 fi 206 fi
180 207
181 ICECC_CC="${@icc_get_tool(bb,d, "gcc")}" 208 ICECC_CC="${@icc_get_and_check_tool(bb, d, "gcc")}"
182 ICECC_CXX="${@icc_get_tool(bb,d, "g++")}" 209 ICECC_CXX="${@icc_get_and_check_tool(bb, d, "g++")}"
183 if [ ! -x "${ICECC_CC}" -o ! -x "${ICECC_CXX}" ] 210 if [ ! -x "${ICECC_CC}" -o ! -x "${ICECC_CXX}" ]
184 then 211 then
185 return 212 return
@@ -207,6 +234,8 @@ set_icecc_env() {
207 export ICECC_VERSION ICECC_CC ICECC_CXX 234 export ICECC_VERSION ICECC_CC ICECC_CXX
208 export PATH="$ICE_PATH:$PATH" 235 export PATH="$ICE_PATH:$PATH"
209 export CCACHE_PATH="$PATH" 236 export CCACHE_PATH="$PATH"
237
238 bbnote "Using icecc"
210} 239}
211 240
212do_configure_prepend() { 241do_configure_prepend() {