diff options
-rw-r--r-- | meta/classes-recipe/populate_sdk_ext.bbclass | 2 | ||||
-rw-r--r-- | meta/classes/icecc.bbclass | 443 | ||||
-rw-r--r-- | meta/conf/distro/include/distro_alias.inc | 1 | ||||
-rw-r--r-- | meta/conf/distro/include/maintainers.inc | 2 | ||||
-rw-r--r-- | meta/conf/documentation.conf | 5 | ||||
-rw-r--r-- | meta/conf/layer.conf | 1 | ||||
-rwxr-xr-x | meta/recipes-devtools/icecc-create-env/icecc-create-env/icecc-create-env | 382 | ||||
-rw-r--r-- | meta/recipes-devtools/icecc-create-env/icecc-create-env_0.1.bb | 39 | ||||
-rw-r--r-- | meta/recipes-devtools/icecc-toolchain/icecc-toolchain/icecc-env.sh | 49 | ||||
-rw-r--r-- | meta/recipes-devtools/icecc-toolchain/icecc-toolchain/icecc-setup.sh | 38 | ||||
-rw-r--r-- | meta/recipes-devtools/icecc-toolchain/nativesdk-icecc-toolchain_0.1.bb | 39 |
11 files changed, 1 insertions, 1000 deletions
diff --git a/meta/classes-recipe/populate_sdk_ext.bbclass b/meta/classes-recipe/populate_sdk_ext.bbclass index de4799f013..2d7d661d25 100644 --- a/meta/classes-recipe/populate_sdk_ext.bbclass +++ b/meta/classes-recipe/populate_sdk_ext.bbclass | |||
@@ -40,7 +40,7 @@ ESDK_LOCALCONF_REMOVE ?= "CONF_VERSION \ | |||
40 | TMPDIR \ | 40 | TMPDIR \ |
41 | BB_SERVER_TIMEOUT \ | 41 | BB_SERVER_TIMEOUT \ |
42 | " | 42 | " |
43 | ESDK_CLASS_INHERIT_DISABLE ?= "buildhistory icecc" | 43 | ESDK_CLASS_INHERIT_DISABLE ?= "buildhistory" |
44 | SDK_UPDATE_URL ?= "" | 44 | SDK_UPDATE_URL ?= "" |
45 | 45 | ||
46 | SDK_TARGETS ?= "${PN}" | 46 | SDK_TARGETS ?= "${PN}" |
diff --git a/meta/classes/icecc.bbclass b/meta/classes/icecc.bbclass deleted file mode 100644 index 8a48f2ad63..0000000000 --- a/meta/classes/icecc.bbclass +++ /dev/null | |||
@@ -1,443 +0,0 @@ | |||
1 | # | ||
2 | # Copyright OpenEmbedded Contributors | ||
3 | # | ||
4 | # SPDX-License-Identifier: MIT | ||
5 | # | ||
6 | |||
7 | # Icecream distributed compiling support | ||
8 | # | ||
9 | # Stages directories with symlinks from gcc/g++ to icecc, for both | ||
10 | # native and cross compilers. Depending on each configure or compile, | ||
11 | # the directories are added at the head of the PATH list and ICECC_CXX | ||
12 | # and ICECC_CC are set. | ||
13 | # | ||
14 | # For the cross compiler, creates a tar.gz of our toolchain and sets | ||
15 | # ICECC_VERSION accordingly. | ||
16 | # | ||
17 | # The class now handles all 3 different compile 'stages' (i.e native ,cross-kernel and target) creating the | ||
18 | # necessary environment tar.gz file to be used by the remote machines. | ||
19 | # It also supports meta-toolchain generation. | ||
20 | # | ||
21 | # If ICECC_PATH is not set in local.conf then the class will try to locate it using 'bb.utils.which' | ||
22 | # but nothing is sure. ;) | ||
23 | # | ||
24 | # If ICECC_ENV_EXEC is set in local.conf, then it should point to the icecc-create-env script provided by the user | ||
25 | # or the default one provided by icecc-create-env_0.1.bb will be used. | ||
26 | # (NOTE that this is a modified version of the needed script and *not the one that comes with icecream*). | ||
27 | # | ||
28 | # User can specify if specific recipes or recipes inheriting specific classes should not use icecc to distribute | ||
29 | # compile jobs to remote machines, but handle them locally by defining ICECC_CLASS_DISABLE and ICECC_RECIPE_DISABLE | ||
30 | # with the appropriate values in local.conf. In addition the user can force to enable icecc for recipes | ||
31 | # which set an empty PARALLEL_MAKE variable by defining ICECC_RECIPE_ENABLE. | ||
32 | # | ||
33 | ######################################################################################### | ||
34 | # Error checking is kept to minimum so double check any parameters you pass to the class | ||
35 | ######################################################################################### | ||
36 | |||
37 | BB_BASEHASH_IGNORE_VARS += "ICECC_PARALLEL_MAKE ICECC_DISABLED ICECC_RECIPE_DISABLE \ | ||
38 | ICECC_CLASS_DISABLE ICECC_RECIPE_ENABLE ICECC_PATH ICECC_ENV_EXEC \ | ||
39 | ICECC_CARET_WORKAROUND ICECC_CFLAGS ICECC_ENV_VERSION \ | ||
40 | ICECC_DEBUG ICECC_LOGFILE ICECC_REPEAT_RATE ICECC_PREFERRED_HOST \ | ||
41 | ICECC_CLANG_REMOTE_CPP ICECC_IGNORE_UNVERIFIED ICECC_TEST_SOCKET \ | ||
42 | ICECC_ENV_DEBUG ICECC_REMOTE_CPP \ | ||
43 | " | ||
44 | |||
45 | ICECC_ENV_EXEC ?= "${STAGING_BINDIR_NATIVE}/icecc-create-env" | ||
46 | |||
47 | HOSTTOOLS_NONFATAL += "icecc patchelf" | ||
48 | |||
49 | # This version can be incremented when changes are made to the environment that | ||
50 | # invalidate the version on the compile nodes. Changing it will cause a new | ||
51 | # environment to be created. | ||
52 | # | ||
53 | # A useful thing to do for testing icecream changes locally is to add a | ||
54 | # subversion in local.conf: | ||
55 | # ICECC_ENV_VERSION:append = "-my-ver-1" | ||
56 | ICECC_ENV_VERSION = "2" | ||
57 | |||
58 | # Default to disabling the caret workaround, If set to "1" in local.conf, icecc | ||
59 | # will locally recompile any files that have warnings, which can adversely | ||
60 | # affect performance. | ||
61 | # | ||
62 | # See: https://github.com/icecc/icecream/issues/190 | ||
63 | export ICECC_CARET_WORKAROUND ??= "0" | ||
64 | |||
65 | export ICECC_REMOTE_CPP ??= "0" | ||
66 | |||
67 | ICECC_CFLAGS = "" | ||
68 | CFLAGS += "${ICECC_CFLAGS}" | ||
69 | CXXFLAGS += "${ICECC_CFLAGS}" | ||
70 | |||
71 | # Debug flags when generating environments | ||
72 | ICECC_ENV_DEBUG ??= "" | ||
73 | |||
74 | # Disable recipe list contains a list of recipes that can not distribute | ||
75 | # compile tasks for one reason or the other. When adding a new entry, please | ||
76 | # document why (how it failed) so that we can re-evaluate it later e.g. when | ||
77 | # there is a new version. | ||
78 | # | ||
79 | # libgcc-initial - fails with CPP sanity check error if host sysroot contains | ||
80 | # cross gcc built for another target tune/variant. | ||
81 | # pixman - prng_state: TLS reference mismatches non-TLS reference, possibly due to | ||
82 | # pragma omp threadprivate(prng_state). | ||
83 | # systemtap - _HelperSDT.c undefs macros and uses the identifiers in macros emitting | ||
84 | # inline assembly. | ||
85 | # target-sdk-provides-dummy - ${HOST_PREFIX} is empty which triggers the "NULL | ||
86 | # prefix" error. | ||
87 | ICECC_RECIPE_DISABLE += "\ | ||
88 | libgcc-initial \ | ||
89 | pixman \ | ||
90 | systemtap \ | ||
91 | target-sdk-provides-dummy \ | ||
92 | " | ||
93 | |||
94 | # Classes that should not use icecc. When adding a new entry, please | ||
95 | # document why (how it failed) so that we can re-evaluate it later. | ||
96 | # | ||
97 | # image - images aren't compiling, but the testing framework for images captures | ||
98 | # PARALLEL_MAKE as part of the test environment. Many tests won't use | ||
99 | # icecream, but leaving the high level of parallelism can cause them to | ||
100 | # consume an unnecessary amount of resources. | ||
101 | ICECC_CLASS_DISABLE += "\ | ||
102 | image \ | ||
103 | " | ||
104 | |||
105 | def get_icecc_dep(d): | ||
106 | # INHIBIT_DEFAULT_DEPS doesn't apply to the patch command. Whether or not | ||
107 | # we need that built is the responsibility of the patch function / class, not | ||
108 | # the application. | ||
109 | if not d.getVar('INHIBIT_DEFAULT_DEPS'): | ||
110 | return "icecc-create-env-native" | ||
111 | return "" | ||
112 | |||
113 | DEPENDS:prepend = "${@get_icecc_dep(d)} " | ||
114 | |||
115 | get_cross_kernel_cc[vardepsexclude] += "KERNEL_CC" | ||
116 | def get_cross_kernel_cc(bb,d): | ||
117 | if not icecc_is_kernel(bb, d): | ||
118 | return None | ||
119 | |||
120 | # evaluate the expression by the shell if necessary | ||
121 | kernel_cc = d.getVar('KERNEL_CC') | ||
122 | if '`' in kernel_cc or '$(' in kernel_cc: | ||
123 | import subprocess | ||
124 | kernel_cc = subprocess.check_output("echo %s" % kernel_cc, shell=True).decode("utf-8")[:-1] | ||
125 | |||
126 | kernel_cc = kernel_cc.replace('ccache', '').strip() | ||
127 | kernel_cc = kernel_cc.split(' ')[0] | ||
128 | kernel_cc = kernel_cc.strip() | ||
129 | return kernel_cc | ||
130 | |||
131 | def get_icecc(d): | ||
132 | return d.getVar('ICECC_PATH') or bb.utils.which(os.getenv("PATH"), "icecc") | ||
133 | |||
134 | def use_icecc(bb,d): | ||
135 | if d.getVar('ICECC_DISABLED') == "1": | ||
136 | # don't even try it, when explicitly disabled | ||
137 | return "no" | ||
138 | |||
139 | # allarch recipes don't use compiler | ||
140 | if icecc_is_allarch(bb, d): | ||
141 | return "no" | ||
142 | |||
143 | if icecc_is_cross_canadian(bb, d): | ||
144 | return "no" | ||
145 | |||
146 | pn = d.getVar('PN') | ||
147 | bpn = d.getVar('BPN') | ||
148 | |||
149 | # Enable/disable checks are made against BPN, because there is a good | ||
150 | # chance that if icecc should be skipped for a recipe, it should be skipped | ||
151 | # for all the variants of that recipe. PN is still checked in case a user | ||
152 | # specified a more specific recipe. | ||
153 | check_pn = set([pn, bpn]) | ||
154 | |||
155 | class_disable = (d.getVar('ICECC_CLASS_DISABLE') or "").split() | ||
156 | |||
157 | for bbclass in class_disable: | ||
158 | if bb.data.inherits_class(bbclass, d): | ||
159 | bb.debug(1, "%s: bbclass %s found in disable, disable icecc" % (pn, bbclass)) | ||
160 | return "no" | ||
161 | |||
162 | disabled_recipes = (d.getVar('ICECC_RECIPE_DISABLE') or "").split() | ||
163 | enabled_recipes = (d.getVar('ICECC_RECIPE_ENABLE') or "").split() | ||
164 | |||
165 | if check_pn & set(disabled_recipes): | ||
166 | bb.debug(1, "%s: found in disable list, disable icecc" % pn) | ||
167 | return "no" | ||
168 | |||
169 | if check_pn & set(enabled_recipes): | ||
170 | bb.debug(1, "%s: found in enabled recipes list, enable icecc" % pn) | ||
171 | return "yes" | ||
172 | |||
173 | if d.getVar('PARALLEL_MAKE') == "": | ||
174 | bb.debug(1, "%s: has empty PARALLEL_MAKE, disable icecc" % pn) | ||
175 | return "no" | ||
176 | |||
177 | return "yes" | ||
178 | |||
179 | def icecc_is_allarch(bb, d): | ||
180 | return d.getVar("PACKAGE_ARCH") == "all" | ||
181 | |||
182 | def icecc_is_kernel(bb, d): | ||
183 | return \ | ||
184 | bb.data.inherits_class("kernel", d); | ||
185 | |||
186 | def icecc_is_native(bb, d): | ||
187 | return \ | ||
188 | bb.data.inherits_class("cross", d) or \ | ||
189 | bb.data.inherits_class("native", d); | ||
190 | |||
191 | def icecc_is_cross_canadian(bb, d): | ||
192 | return bb.data.inherits_class("cross-canadian", d) | ||
193 | |||
194 | def icecc_dir(bb, d): | ||
195 | return d.expand('${TMPDIR}/work-shared/ice') | ||
196 | |||
197 | # Don't pollute allarch signatures with TARGET_FPU | ||
198 | icecc_version[vardepsexclude] += "TARGET_FPU" | ||
199 | def icecc_version(bb, d): | ||
200 | if use_icecc(bb, d) == "no": | ||
201 | return "" | ||
202 | |||
203 | parallel = d.getVar('ICECC_PARALLEL_MAKE') or "" | ||
204 | if not d.getVar('PARALLEL_MAKE') == "" and parallel: | ||
205 | d.setVar("PARALLEL_MAKE", parallel) | ||
206 | |||
207 | # Disable showing the caret in the GCC compiler output if the workaround is | ||
208 | # disabled | ||
209 | if d.getVar('ICECC_CARET_WORKAROUND') == '0': | ||
210 | d.setVar('ICECC_CFLAGS', '-fno-diagnostics-show-caret') | ||
211 | |||
212 | if icecc_is_native(bb, d): | ||
213 | archive_name = "local-host-env" | ||
214 | elif d.expand('${HOST_PREFIX}') == "": | ||
215 | bb.fatal(d.expand("${PN}"), " NULL prefix") | ||
216 | else: | ||
217 | prefix = d.expand('${HOST_PREFIX}' ) | ||
218 | distro = d.expand('${DISTRO}') | ||
219 | target_sys = d.expand('${TARGET_SYS}') | ||
220 | float = d.getVar('TARGET_FPU') or "hard" | ||
221 | archive_name = prefix + distro + "-" + target_sys + "-" + float | ||
222 | if icecc_is_kernel(bb, d): | ||
223 | archive_name += "-kernel" | ||
224 | |||
225 | import socket | ||
226 | ice_dir = icecc_dir(bb, d) | ||
227 | tar_file = os.path.join(ice_dir, "{archive}-{version}-@VERSION@-{hostname}.tar.gz".format( | ||
228 | archive=archive_name, | ||
229 | version=d.getVar('ICECC_ENV_VERSION'), | ||
230 | hostname=socket.gethostname() | ||
231 | )) | ||
232 | |||
233 | return tar_file | ||
234 | |||
235 | def icecc_path(bb,d): | ||
236 | if use_icecc(bb, d) == "no": | ||
237 | # don't create unnecessary directories when icecc is disabled | ||
238 | return | ||
239 | |||
240 | staging = os.path.join(d.expand('${STAGING_BINDIR}'), "ice") | ||
241 | if icecc_is_kernel(bb, d): | ||
242 | staging += "-kernel" | ||
243 | |||
244 | return staging | ||
245 | |||
246 | def icecc_get_external_tool(bb, d, tool): | ||
247 | external_toolchain_bindir = d.expand('${EXTERNAL_TOOLCHAIN}${bindir_cross}') | ||
248 | target_prefix = d.expand('${TARGET_PREFIX}') | ||
249 | return os.path.join(external_toolchain_bindir, '%s%s' % (target_prefix, tool)) | ||
250 | |||
251 | def icecc_get_tool_link(tool, d): | ||
252 | import subprocess | ||
253 | try: | ||
254 | return subprocess.check_output("readlink -f %s" % tool, shell=True).decode("utf-8")[:-1] | ||
255 | except subprocess.CalledProcessError as e: | ||
256 | bb.note("icecc: one of the tools probably disappeared during recipe parsing, cmd readlink -f %s returned %d:\n%s" % (tool, e.returncode, e.output.decode("utf-8"))) | ||
257 | return tool | ||
258 | |||
259 | def icecc_get_path_tool(tool, d): | ||
260 | # This is a little ugly, but we want to make sure we add an actual | ||
261 | # compiler to the toolchain, not ccache. Some distros (e.g. Fedora) | ||
262 | # have ccache enabled by default using symlinks in PATH, meaning ccache | ||
263 | # would be found first when looking for the compiler. | ||
264 | paths = os.getenv("PATH").split(':') | ||
265 | while True: | ||
266 | p, hist = bb.utils.which(':'.join(paths), tool, history=True) | ||
267 | if not p or os.path.basename(icecc_get_tool_link(p, d)) != 'ccache': | ||
268 | return p | ||
269 | paths = paths[len(hist):] | ||
270 | |||
271 | return "" | ||
272 | |||
273 | # Don't pollute native signatures with target TUNE_PKGARCH through STAGING_BINDIR_TOOLCHAIN | ||
274 | icecc_get_tool[vardepsexclude] += "STAGING_BINDIR_TOOLCHAIN" | ||
275 | def icecc_get_tool(bb, d, tool): | ||
276 | if icecc_is_native(bb, d): | ||
277 | return icecc_get_path_tool(tool, d) | ||
278 | elif icecc_is_kernel(bb, d): | ||
279 | return icecc_get_path_tool(get_cross_kernel_cc(bb, d), d) | ||
280 | else: | ||
281 | ice_dir = d.expand('${STAGING_BINDIR_TOOLCHAIN}') | ||
282 | target_sys = d.expand('${TARGET_SYS}') | ||
283 | for p in ice_dir.split(':'): | ||
284 | tool_bin = os.path.join(p, "%s-%s" % (target_sys, tool)) | ||
285 | if os.path.isfile(tool_bin): | ||
286 | return tool_bin | ||
287 | external_tool_bin = icecc_get_external_tool(bb, d, tool) | ||
288 | if os.path.isfile(external_tool_bin): | ||
289 | return external_tool_bin | ||
290 | return "" | ||
291 | |||
292 | def icecc_get_and_check_tool(bb, d, tool): | ||
293 | # Check that g++ or gcc is not a symbolic link to icecc binary in | ||
294 | # PATH or icecc-create-env script will silently create an invalid | ||
295 | # compiler environment package. | ||
296 | t = icecc_get_tool(bb, d, tool) | ||
297 | if t: | ||
298 | link_path = icecc_get_tool_link(t, d) | ||
299 | if link_path == get_icecc(d): | ||
300 | bb.error("%s is a symlink to %s in PATH and this prevents icecc from working" % (t, link_path)) | ||
301 | return "" | ||
302 | else: | ||
303 | return t | ||
304 | else: | ||
305 | return t | ||
306 | |||
307 | set_icecc_env[vardepsexclude] += "KERNEL_CC" | ||
308 | python set_icecc_env() { | ||
309 | import os | ||
310 | import subprocess | ||
311 | |||
312 | if use_icecc(bb, d) == "no": | ||
313 | return | ||
314 | ICECC_VERSION = icecc_version(bb, d) | ||
315 | if not ICECC_VERSION: | ||
316 | bb.warn("Cannot use icecc: could not get ICECC_VERSION") | ||
317 | return | ||
318 | |||
319 | ICE_PATH = icecc_path(bb, d) | ||
320 | if not ICE_PATH: | ||
321 | bb.warn("Cannot use icecc: could not get ICE_PATH") | ||
322 | return | ||
323 | |||
324 | ICECC_BIN = get_icecc(d) | ||
325 | if not ICECC_BIN: | ||
326 | bb.warn("Cannot use icecc: icecc binary not found") | ||
327 | return | ||
328 | |||
329 | if (not bb.utils.which(os.getenv("PATH"), "patchelf") and | ||
330 | not bb.utils.which(os.getenv("PATH"), "patchelf-uninative")): | ||
331 | bb.warn("Cannot use icecc: patchelf not found") | ||
332 | return | ||
333 | |||
334 | ICECC_CC = icecc_get_and_check_tool(bb, d, "gcc") | ||
335 | ICECC_CXX = icecc_get_and_check_tool(bb, d, "g++") | ||
336 | # cannot use icecc_get_and_check_tool here because it assumes as without target_sys prefix | ||
337 | ICECC_WHICH_AS = bb.utils.which(os.getenv('PATH'), 'as') | ||
338 | if (not os.access(ICECC_CC, os.X_OK) or | ||
339 | not os.access(ICECC_CXX, os.X_OK)): | ||
340 | bb.note("Cannot use icecc: could not get ICECC_CC or ICECC_CXX") | ||
341 | return | ||
342 | |||
343 | cmd = [] | ||
344 | try: | ||
345 | cmd = [ICECC_CC, '-dumpversion'] | ||
346 | ICE_VERSION = subprocess.check_output(cmd).decode("utf-8").strip() | ||
347 | except subprocess.CalledProcessError as e: | ||
348 | bb.warn("icecc: '{}' returned {}:\n{}".format(cmd, e.returncode, e.output.decode("utf-8"))) | ||
349 | return | ||
350 | |||
351 | ICECC_VERSION = ICECC_VERSION.replace("@VERSION@", ICE_VERSION) | ||
352 | |||
353 | if not os.access(d.getVar('ICECC_ENV_EXEC'), os.X_OK): | ||
354 | bb.warn("Cannot use icecc: invalid ICECC_ENV_EXEC") | ||
355 | return | ||
356 | |||
357 | # Create symlinks to icecc and wrapper-scripts in the recipe-sysroot directory | ||
358 | symlink_path = os.path.join(ICE_PATH, "symlinks") | ||
359 | bb.utils.mkdirhier(symlink_path) | ||
360 | compilers = [] | ||
361 | if icecc_is_kernel(bb, d): | ||
362 | compilers.append(get_cross_kernel_cc(bb,d)) | ||
363 | else: | ||
364 | host_prefix = d.getVar('HOST_PREFIX') | ||
365 | compilers.extend([host_prefix + 'gcc', host_prefix + 'g++']) | ||
366 | |||
367 | for compiler in compilers: | ||
368 | try: | ||
369 | os.symlink(ICECC_BIN, symlink_path + '/' + compiler) | ||
370 | except FileExistsError: | ||
371 | pass | ||
372 | wrapper_script = os.path.join(ICE_PATH, compiler) | ||
373 | with open(wrapper_script, 'w') as fd: | ||
374 | fd.write("#!/bin/sh -e\n") | ||
375 | fd.write("export ICECC_VERSION={}\n".format(ICECC_VERSION)) | ||
376 | fd.write("export ICECC_CC={}\n".format(ICECC_CC)) | ||
377 | fd.write("export ICECC_CXX={}\n".format(ICECC_CXX)) | ||
378 | fd.write("{} \"$@\"\n".format(os.path.join(ICE_PATH, "symlinks", compiler))) | ||
379 | os.chmod(wrapper_script, 0o755) | ||
380 | |||
381 | try: | ||
382 | cmd = [ICECC_CC, '-print-prog-name=as'] | ||
383 | ICECC_AS = subprocess.check_output(cmd).decode("utf-8").strip() | ||
384 | except subprocess.CalledProcessError as e: | ||
385 | bb.warn("icecc: '{}' returned {}:\n{}".format(cmd, e.returncode, e.output.decode("utf-8"))) | ||
386 | return | ||
387 | # for target recipes should return something like: | ||
388 | # /OE/tmp-eglibc/sysroots/x86_64-linux/usr/libexec/arm920tt-oe-linux-gnueabi/gcc/arm-oe-linux-gnueabi/4.8.2/as | ||
389 | # and just "as" for native, if it returns "as" in current directory (for whatever reason) use "as" from PATH | ||
390 | if not os.path.dirname(ICECC_AS): | ||
391 | ICECC_AS = ICECC_WHICH_AS | ||
392 | |||
393 | if not os.path.isfile(ICECC_VERSION + ".done"): | ||
394 | bb.utils.mkdirhier(os.path.dirname(ICECC_VERSION)) | ||
395 | |||
396 | # the ICECC_VERSION generation step must be locked by a mutex | ||
397 | # in order to prevent race conditions | ||
398 | lock = bb.utils.lockfile(ICECC_VERSION + '.lock') | ||
399 | try: | ||
400 | cmd = [d.getVar('ICECC_ENV_EXEC')] | ||
401 | if d.getVar('ICECC_ENV_DEBUG'): | ||
402 | cmd.append(d.getVar('ICECC_ENV_DEBUG')) | ||
403 | cmd.extend([ICECC_CC, ICECC_CXX, ICECC_AS, ICECC_VERSION]) | ||
404 | subprocess.check_output(cmd) | ||
405 | cmd = ['touch', ICECC_VERSION + '.done'] | ||
406 | subprocess.check_output(cmd) | ||
407 | except subprocess.CalledProcessError as e: | ||
408 | bb.warn("icecc: '{}' returned {}:\n{}".format(cmd, e.returncode, e.output.decode("utf-8"))) | ||
409 | bb.utils.unlockfile(lock) | ||
410 | return | ||
411 | bb.utils.unlockfile(lock) | ||
412 | |||
413 | # Don't let ccache find the icecream compiler links that have been created, otherwise | ||
414 | # it can end up invoking icecream recursively. | ||
415 | d.setVar('CCACHE_PATH', d.getVar('PATH')) | ||
416 | d.setVar('CCACHE_DISABLE', '1') | ||
417 | |||
418 | d.prependVar('PATH', ICE_PATH + ':') | ||
419 | |||
420 | bb.note("Using icecc path: {}".format(ICE_PATH)) | ||
421 | bb.note("Using icecc tarball: {}".format(ICECC_VERSION)) | ||
422 | } | ||
423 | |||
424 | do_configure[prefuncs] += "set_icecc_env" | ||
425 | do_compile[prefuncs] += "set_icecc_env" | ||
426 | do_compile_kernelmodules[prefuncs] += "set_icecc_env" | ||
427 | do_install[prefuncs] += "set_icecc_env" | ||
428 | |||
429 | # Icecream is not (currently) supported in the extensible SDK | ||
430 | ICECC_SDK_HOST_TASK = "nativesdk-icecc-toolchain" | ||
431 | ICECC_SDK_HOST_TASK:task-populate-sdk-ext = "" | ||
432 | |||
433 | # Don't include icecream in uninative tarball | ||
434 | ICECC_SDK_HOST_TASK:pn-uninative-tarball = "" | ||
435 | |||
436 | # Add the toolchain scripts to the SDK | ||
437 | TOOLCHAIN_HOST_TASK:append = " ${ICECC_SDK_HOST_TASK}" | ||
438 | |||
439 | python () { | ||
440 | if d.getVar('ICECC_DISABLED') != "1": | ||
441 | for task in ['do_configure', 'do_compile', 'do_compile_kernelmodules', 'do_install']: | ||
442 | d.setVarFlag(task, 'network', '1') | ||
443 | } | ||
diff --git a/meta/conf/distro/include/distro_alias.inc b/meta/conf/distro/include/distro_alias.inc index 8052464f1d..20882523c2 100644 --- a/meta/conf/distro/include/distro_alias.inc +++ b/meta/conf/distro/include/distro_alias.inc | |||
@@ -105,7 +105,6 @@ DISTRO_PN_ALIAS:pn-gtk-icon-utils-native = "OSPDT" | |||
105 | DISTRO_PN_ALIAS:pn-systemd-boot = "Ubuntu=systemd-boot Fedora=systemd-boot" | 105 | DISTRO_PN_ALIAS:pn-systemd-boot = "Ubuntu=systemd-boot Fedora=systemd-boot" |
106 | DISTRO_PN_ALIAS:pn-hello-mod = "OE-Core" | 106 | DISTRO_PN_ALIAS:pn-hello-mod = "OE-Core" |
107 | DISTRO_PN_ALIAS:pn-hwlatdetect = "OSPDT" | 107 | DISTRO_PN_ALIAS:pn-hwlatdetect = "OSPDT" |
108 | DISTRO_PN_ALIAS:pn-icecc-create-env = "OE-Core" | ||
109 | DISTRO_PN_ALIAS:pn-init-ifupdown = "Debian=ifupdown Ubuntu=ifupdown" | 108 | DISTRO_PN_ALIAS:pn-init-ifupdown = "Debian=ifupdown Ubuntu=ifupdown" |
110 | DISTRO_PN_ALIAS:pn-initramfs-boot = "OE-Core" | 109 | DISTRO_PN_ALIAS:pn-initramfs-boot = "OE-Core" |
111 | DISTRO_PN_ALIAS:pn-initramfs-framework = "OE-Core" | 110 | DISTRO_PN_ALIAS:pn-initramfs-framework = "OE-Core" |
diff --git a/meta/conf/distro/include/maintainers.inc b/meta/conf/distro/include/maintainers.inc index 674779fa3b..5c315d58cf 100644 --- a/meta/conf/distro/include/maintainers.inc +++ b/meta/conf/distro/include/maintainers.inc | |||
@@ -272,7 +272,6 @@ RECIPE_MAINTAINER:pn-hicolor-icon-theme = "Anuj Mittal <anuj.mittal@intel.com>" | |||
272 | RECIPE_MAINTAINER:pn-hwdata = "Hiago De Franco <hiago.franco@toradex.com>" | 272 | RECIPE_MAINTAINER:pn-hwdata = "Hiago De Franco <hiago.franco@toradex.com>" |
273 | RECIPE_MAINTAINER:pn-hwlatdetect = "Unassigned <unassigned@yoctoproject.org>" | 273 | RECIPE_MAINTAINER:pn-hwlatdetect = "Unassigned <unassigned@yoctoproject.org>" |
274 | RECIPE_MAINTAINER:pn-i2c-tools = "Anuj Mittal <anuj.mittal@intel.com>" | 274 | RECIPE_MAINTAINER:pn-i2c-tools = "Anuj Mittal <anuj.mittal@intel.com>" |
275 | RECIPE_MAINTAINER:pn-icecc-create-env = "Joshua Watt <JPEWhacker@gmail.com>" | ||
276 | RECIPE_MAINTAINER:pn-icon-naming-utils = "Richard Purdie <richard.purdie@linuxfoundation.org>" | 275 | RECIPE_MAINTAINER:pn-icon-naming-utils = "Richard Purdie <richard.purdie@linuxfoundation.org>" |
277 | RECIPE_MAINTAINER:pn-icu = "Unassigned <unassigned@yoctoproject.org>" | 276 | RECIPE_MAINTAINER:pn-icu = "Unassigned <unassigned@yoctoproject.org>" |
278 | RECIPE_MAINTAINER:pn-ifupdown = "Anuj Mittal <anuj.mittal@intel.com>" | 277 | RECIPE_MAINTAINER:pn-ifupdown = "Anuj Mittal <anuj.mittal@intel.com>" |
@@ -548,7 +547,6 @@ RECIPE_MAINTAINER:pn-musl-utils = "Khem Raj <raj.khem@gmail.com>" | |||
548 | RECIPE_MAINTAINER:pn-nasm = "Richard Purdie <richard.purdie@linuxfoundation.org>" | 547 | RECIPE_MAINTAINER:pn-nasm = "Richard Purdie <richard.purdie@linuxfoundation.org>" |
549 | RECIPE_MAINTAINER:pn-nativesdk-buildtools-perl-dummy = "Richard Purdie <richard.purdie@linuxfoundation.org>" | 548 | RECIPE_MAINTAINER:pn-nativesdk-buildtools-perl-dummy = "Richard Purdie <richard.purdie@linuxfoundation.org>" |
550 | RECIPE_MAINTAINER:pn-nativesdk-clang-glue = "Khem Raj <raj.khem@gmail.com>" | 549 | RECIPE_MAINTAINER:pn-nativesdk-clang-glue = "Khem Raj <raj.khem@gmail.com>" |
551 | RECIPE_MAINTAINER:pn-nativesdk-icecc-toolchain = "Joshua Watt <JPEWhacker@gmail.com>" | ||
552 | RECIPE_MAINTAINER:pn-nativesdk-libtool = "Richard Purdie <richard.purdie@linuxfoundation.org>" | 550 | RECIPE_MAINTAINER:pn-nativesdk-libtool = "Richard Purdie <richard.purdie@linuxfoundation.org>" |
553 | RECIPE_MAINTAINER:pn-nativesdk-packagegroup-sdk-host = "Ross Burton <ross.burton@arm.com>" | 551 | RECIPE_MAINTAINER:pn-nativesdk-packagegroup-sdk-host = "Ross Burton <ross.burton@arm.com>" |
554 | RECIPE_MAINTAINER:pn-nativesdk-qemu-helper = "Richard Purdie <richard.purdie@linuxfoundation.org>" | 552 | RECIPE_MAINTAINER:pn-nativesdk-qemu-helper = "Richard Purdie <richard.purdie@linuxfoundation.org>" |
diff --git a/meta/conf/documentation.conf b/meta/conf/documentation.conf index 570a604494..2710485227 100644 --- a/meta/conf/documentation.conf +++ b/meta/conf/documentation.conf | |||
@@ -201,11 +201,6 @@ HOST_VENDOR[doc] = "The name of the vendor. Normally same as the TARGET_VENDOR." | |||
201 | 201 | ||
202 | #I | 202 | #I |
203 | 203 | ||
204 | ICECC_ENV_EXEC[doc] = "Points to the icecc-create-env script that you provide." | ||
205 | ICECC_PATH[doc] = "The location of the icecc binary." | ||
206 | ICECC_CLASS_DISABLE[doc] = "Identifies user classes that you do not want the Icecream distributed compile support to consider." | ||
207 | ICECC_RECIPE_DISABLE[doc] = "Identifies user recipes that you do not want the Icecream distributed compile support to consider." | ||
208 | ICECC_RECIPE_ENABLE[doc] = "Identifies user recipes that use an empty PARALLEL_MAKE variable that you want to force remote distributed compilation on using the Icecream distributed compile support." | ||
209 | IMAGE_BASENAME[doc] = "The base name of image output files." | 204 | IMAGE_BASENAME[doc] = "The base name of image output files." |
210 | IMAGE_BOOT_FILES[doc] = "Whitespace separated list of files from ${DEPLOY_DIR_IMAGE} to place in boot partition. Entries will be installed under a same name as the source file. To change the destination file name, pass a desired name after a semicolon (eg. u-boot.img;uboot)." | 205 | IMAGE_BOOT_FILES[doc] = "Whitespace separated list of files from ${DEPLOY_DIR_IMAGE} to place in boot partition. Entries will be installed under a same name as the source file. To change the destination file name, pass a desired name after a semicolon (eg. u-boot.img;uboot)." |
211 | IMAGE_CLASSES[doc] = "A list of classes that all images should inherit." | 206 | IMAGE_CLASSES[doc] = "A list of classes that all images should inherit." |
diff --git a/meta/conf/layer.conf b/meta/conf/layer.conf index e19431e724..44267ce8e2 100644 --- a/meta/conf/layer.conf +++ b/meta/conf/layer.conf | |||
@@ -53,7 +53,6 @@ SIGGEN_EXCLUDE_SAFE_RECIPE_DEPS += " \ | |||
53 | *->quilt-native \ | 53 | *->quilt-native \ |
54 | *->subversion-native \ | 54 | *->subversion-native \ |
55 | *->git-native \ | 55 | *->git-native \ |
56 | *->icecc-create-env-native \ | ||
57 | gcc-cross-${TARGET_ARCH}->linux-libc-headers \ | 56 | gcc-cross-${TARGET_ARCH}->linux-libc-headers \ |
58 | ppp-dialin->ppp \ | 57 | ppp-dialin->ppp \ |
59 | resolvconf->bash \ | 58 | resolvconf->bash \ |
diff --git a/meta/recipes-devtools/icecc-create-env/icecc-create-env/icecc-create-env b/meta/recipes-devtools/icecc-create-env/icecc-create-env/icecc-create-env deleted file mode 100755 index 64b5e20785..0000000000 --- a/meta/recipes-devtools/icecc-create-env/icecc-create-env/icecc-create-env +++ /dev/null | |||
@@ -1,382 +0,0 @@ | |||
1 | #! /usr/bin/env bash | ||
2 | # icecc -- A simple distributed compiler system | ||
3 | # | ||
4 | # Copyright (C) 2004 by the Icecream Authors | ||
5 | # GPL | ||
6 | |||
7 | target_paths= | ||
8 | target_aliases= | ||
9 | |||
10 | # Always prints, optionally to a log file | ||
11 | print_output () | ||
12 | { | ||
13 | if test -n "$log_path"; then | ||
14 | echo "$@" | tee -a "$log_path" | ||
15 | else | ||
16 | echo "$@" | ||
17 | fi | ||
18 | } | ||
19 | |||
20 | # Only prints if the debug flag is specified | ||
21 | print_debug () | ||
22 | { | ||
23 | if test -n "$debug"; then | ||
24 | print_output "$@" | ||
25 | fi | ||
26 | } | ||
27 | |||
28 | is_dynamic_elf () | ||
29 | { | ||
30 | # Is the file an dynamically linked ELF executable? | ||
31 | (file -L "$1" | grep 'ELF' > /dev/null 2>&1) && (! file -L "$1" | grep 'static' > /dev/null 2>&1) | ||
32 | } | ||
33 | |||
34 | fix_rpath () | ||
35 | { | ||
36 | # Patches the RPATH for a file. When the program is executed in the chroot | ||
37 | # be iceccd, /proc is not mounted. As such, $ORIGIN can't be resolved. To | ||
38 | # work around this, replace all instances of $ORIGIN in RPATH with the | ||
39 | # known chroot path to the executables directory | ||
40 | local path="$1" | ||
41 | local origin="$2" | ||
42 | if ! is_dynamic_elf "$path"; then | ||
43 | return | ||
44 | fi | ||
45 | local old_rpath="`$PATCHELF --print-rpath "$path"`" | ||
46 | local new_rpath="`echo "$old_rpath" | \ | ||
47 | sed 's/.*\[\(.*\)\]/\1/g' | \ | ||
48 | sed "s,\\\$ORIGIN,/$origin,g"`" | ||
49 | |||
50 | if test -n "$new_rpath"; then | ||
51 | print_debug "Converting RPATH '$old_rpath' -> '$new_rpath'" | ||
52 | $PATCHELF --set-rpath "$new_rpath" "$path" | ||
53 | fi | ||
54 | } | ||
55 | |||
56 | add_path () | ||
57 | { | ||
58 | case " $target_paths " in | ||
59 | *" $1 "*) | ||
60 | return 1 | ||
61 | ;; | ||
62 | *) | ||
63 | target_paths="$target_paths $1" | ||
64 | return 0 | ||
65 | ;; | ||
66 | esac | ||
67 | } | ||
68 | |||
69 | add_alias () | ||
70 | { | ||
71 | if test "$1" != "$2"; then | ||
72 | local alias="$1=$2" | ||
73 | case " $target_aliases " in | ||
74 | *" $alias "*) | ||
75 | ;; | ||
76 | *) | ||
77 | print_debug "Adding alias '$2' -> '$1'" | ||
78 | target_aliases="$target_aliases $alias" | ||
79 | ;; | ||
80 | esac | ||
81 | fi | ||
82 | } | ||
83 | |||
84 | normalize_path () | ||
85 | { | ||
86 | # Normalizes the path to a file or directory, removing all "." and ".." | ||
87 | # entries. Use pwd -L to explicitly prevent symlink expansion | ||
88 | local path=$1 | ||
89 | if test -f "$path"; then | ||
90 | pushd $(dirname $path) > /dev/null 2>&1 | ||
91 | dir_path=$(pwd -L) | ||
92 | path=$dir_path/$(basename $path) | ||
93 | popd > /dev/null 2>&1 | ||
94 | elif test -d "$path"; then | ||
95 | pushd $path > /dev/null 2>&1 | ||
96 | path=$(pwd -L) | ||
97 | popd > /dev/null 2>&1 | ||
98 | fi | ||
99 | echo $path | ||
100 | } | ||
101 | |||
102 | add_file_common() | ||
103 | { | ||
104 | local p="$1" | ||
105 | local path="$2" | ||
106 | local alias="$3" | ||
107 | |||
108 | add_alias "$path" "$p" | ||
109 | if test -n "$alias"; then | ||
110 | add_alias "$path" "$alias" | ||
111 | fi | ||
112 | |||
113 | add_path "$path" || return 1 | ||
114 | print_debug "Adding file '$path'" | ||
115 | |||
116 | return 0 | ||
117 | } | ||
118 | |||
119 | add_deps() | ||
120 | { | ||
121 | local path="$1" | ||
122 | local interp="$2" | ||
123 | |||
124 | if test -n "$interp" && test -x "$interp"; then | ||
125 | # Use the dynamic loaders --list argument to list the | ||
126 | # dependencies. The program may have a different program | ||
127 | # interpreter (typical when using uninative tarballs), which is | ||
128 | # why we can't just call ldd. | ||
129 | deps="`$interp --list "$path"`" | ||
130 | else | ||
131 | deps="`ldd "$path"`" | ||
132 | fi | ||
133 | |||
134 | print_debug "Dependencies are:" | ||
135 | print_debug "$deps" | ||
136 | if test -n "$deps"; then | ||
137 | for lib in $deps; do | ||
138 | # ldd now outputs ld as /lib/ld-linux.so.xx on current nptl | ||
139 | # based glibc this regexp parse the outputs like: | ||
140 | # ldd /usr/bin/gcc | ||
141 | # linux-gate.so.1 => (0xffffe000) | ||
142 | # libc.so.6 => /lib/tls/libc.so.6 (0xb7e81000) | ||
143 | # /lib/ld-linux.so.2 (0xb7fe8000) | ||
144 | # covering both situations ( with => and without ) | ||
145 | lib="`echo "$lib" | sed -n 's,^[^/]*\(/[^ ]*\).*,\1,p'`" | ||
146 | |||
147 | test -f "$lib" || continue | ||
148 | # Check whether the same library also exists in the parent | ||
149 | # directory, and prefer that on the assumption that it is a | ||
150 | # more generic one. | ||
151 | local baselib=`echo "$lib" | sed 's,\(/[^/]*\)/.*\(/[^/]*\)$,\1\2,'` | ||
152 | test -f "$baselib" && lib=$baselib | ||
153 | add_dependency "$lib" "$interp" | ||
154 | done | ||
155 | fi | ||
156 | } | ||
157 | |||
158 | add_dependency() | ||
159 | { | ||
160 | local p=`normalize_path $1` | ||
161 | # readlink is required for Yocto, so we can use it | ||
162 | local path=`readlink -f "$p"` | ||
163 | local interp="$2" | ||
164 | |||
165 | add_file_common "$p" "$path" || return | ||
166 | |||
167 | if test -x "$path" && is_dynamic_elf "$path"; then | ||
168 | add_deps "$path" "$interp" | ||
169 | fi | ||
170 | } | ||
171 | |||
172 | add_file () | ||
173 | { | ||
174 | local p=`normalize_path $1` | ||
175 | # readlink is required for Yocto, so we can use it | ||
176 | local path=`readlink -f "$p"` | ||
177 | |||
178 | add_file_common "$p" "$path" "$2" || return | ||
179 | |||
180 | if test -x "$path" && is_dynamic_elf "$path"; then | ||
181 | # Request the program interpeter (dynamic loader) | ||
182 | interp=`readelf -W -l "$path" | grep "Requesting program interpreter:" | sed "s/\s*\[Requesting program interpreter:\s*\(.*\)\]/\1/g"` | ||
183 | print_debug "Interpreter is '$interp'" | ||
184 | |||
185 | add_deps "$path" "$interp" | ||
186 | fi | ||
187 | } | ||
188 | |||
189 | while test -n "$1"; do | ||
190 | case "$1" in | ||
191 | --respect-path) | ||
192 | # Ignore for backward compatability | ||
193 | ;; | ||
194 | --debug) | ||
195 | debug=1 | ||
196 | ;; | ||
197 | --log) | ||
198 | do_log=1 | ||
199 | ;; | ||
200 | --extra=*) | ||
201 | extra_tools="$extra_tools ${1#--extra=}" | ||
202 | ;; | ||
203 | *) | ||
204 | break | ||
205 | ;; | ||
206 | esac | ||
207 | shift | ||
208 | done | ||
209 | |||
210 | added_gcc=$1 | ||
211 | shift | ||
212 | added_gxx=$1 | ||
213 | shift | ||
214 | added_as=$1 | ||
215 | shift | ||
216 | archive_name=$1 | ||
217 | |||
218 | if test -n "$do_log"; then | ||
219 | log_path="$archive_name.log" | ||
220 | rm -f "$log_path" | ||
221 | fi | ||
222 | |||
223 | if test -z "$PATCHELF"; then | ||
224 | PATCHELF=`which patchelf 2> /dev/null` | ||
225 | fi | ||
226 | if test -z "$PATCHELF"; then | ||
227 | PATCHELF=`which patchelf-uninative 2> /dev/null` | ||
228 | fi | ||
229 | if test -z "$PATCHELF"; then | ||
230 | print_output "patchelf is required" | ||
231 | exit 1 | ||
232 | fi | ||
233 | |||
234 | if test -z "$added_gcc" || test -z "$added_gxx" ; then | ||
235 | print_output "usage: $0 <gcc_path> <g++_path>" | ||
236 | exit 1 | ||
237 | fi | ||
238 | |||
239 | if ! test -x "$added_gcc" ; then | ||
240 | print_output "'$added_gcc' is not executable." | ||
241 | exit 1 | ||
242 | fi | ||
243 | |||
244 | if ! test -x "$added_gxx" ; then | ||
245 | print_output "'$added_gcc' is not executable." | ||
246 | exit 1 | ||
247 | fi | ||
248 | |||
249 | |||
250 | |||
251 | add_file $added_gcc /usr/bin/gcc | ||
252 | add_file $added_gxx /usr/bin/g++ | ||
253 | |||
254 | if test -z "$added_as" ; then | ||
255 | add_file /usr/bin/as /usr/bin/as | ||
256 | else | ||
257 | if ! test -x "$added_as" ; then | ||
258 | print_output "'$added_as' is not executable." | ||
259 | exit 1 | ||
260 | fi | ||
261 | |||
262 | add_file $added_as /usr/bin/as | ||
263 | fi | ||
264 | |||
265 | add_file `$added_gcc -print-prog-name=cc1` /usr/bin/cc1 | ||
266 | add_file `$added_gxx -print-prog-name=cc1plus` /usr/bin/cc1plus | ||
267 | specfile=`$added_gcc -print-file-name=specs` | ||
268 | if test -n "$specfile" && test -e "$specfile"; then | ||
269 | add_file "$specfile" | ||
270 | fi | ||
271 | |||
272 | ltofile=`$added_gcc -print-prog-name=lto1` | ||
273 | pluginfile=`normalize_path "${ltofile%lto1}liblto_plugin.so"` | ||
274 | if test -r "$pluginfile" | ||
275 | then | ||
276 | add_file $pluginfile ${pluginfile#*usr} | ||
277 | add_file $pluginfile /usr${pluginfile#*usr} | ||
278 | fi | ||
279 | |||
280 | # for testing the environment is usable at all | ||
281 | if test -x /bin/true; then | ||
282 | add_file /bin/true | ||
283 | elif test -x /usr/bin/true; then | ||
284 | add_file /usr/bin/true /bin/true | ||
285 | else | ||
286 | print_output "'true' not found" | ||
287 | exit 1 | ||
288 | fi | ||
289 | |||
290 | for extra in $extra_tools; do | ||
291 | if test -x "$extra"; then | ||
292 | add_file "$extra" | ||
293 | else | ||
294 | print_output "'$extra' not found" | ||
295 | exit 1 | ||
296 | fi | ||
297 | done | ||
298 | |||
299 | link_rel () | ||
300 | { | ||
301 | local target="$1" | ||
302 | local name="$2" | ||
303 | local base="$3" | ||
304 | |||
305 | local prefix=`dirname $name` | ||
306 | |||
307 | prefix=`echo $prefix | sed 's,[^/]\+,..,g' | sed 's,^/*,,g'` | ||
308 | |||
309 | ln -s $prefix/$target $base/$name | ||
310 | } | ||
311 | |||
312 | tempdir=`mktemp -d /tmp/iceccenvXXXXXX` | ||
313 | target_files= | ||
314 | for path in $target_paths; do | ||
315 | mkdir -p $tempdir/`dirname $path` | ||
316 | cp -pH $path $tempdir/$path | ||
317 | |||
318 | if test -f $tempdir/$path -a -x $tempdir/$path; then | ||
319 | strip -s $tempdir/$path 2>/dev/null | ||
320 | fi | ||
321 | |||
322 | fix_rpath $tempdir/$path `dirname $path` | ||
323 | target_files="$target_files $path" | ||
324 | done | ||
325 | |||
326 | for i in $target_aliases; do | ||
327 | target=`echo $i | cut -d= -f1` | ||
328 | link_name=`echo $i | cut -d= -f2` | ||
329 | |||
330 | mkdir -p $tempdir/`dirname $link_name` | ||
331 | # Relative links are used because the files are checked for being | ||
332 | # executable outside the chroot | ||
333 | link_rel $target $link_name $tempdir | ||
334 | |||
335 | link_name=`echo $link_name | cut -b2-` | ||
336 | target_files="$target_files $link_name" | ||
337 | done | ||
338 | |||
339 | #sort the files | ||
340 | target_files=`for i in $target_files; do echo $i; done | sort` | ||
341 | |||
342 | #test if an archive name was supplied | ||
343 | #if not use the md5 of all files as the archive name | ||
344 | if test -z "$archive_name"; then | ||
345 | md5sum=NONE | ||
346 | for file in /usr/bin/md5sum /bin/md5 /usr/bin/md5; do | ||
347 | if test -x $file; then | ||
348 | md5sum=$file | ||
349 | break | ||
350 | fi | ||
351 | done | ||
352 | |||
353 | #calculate md5 and use it as the archive name | ||
354 | archive_name=`for i in $target_files; do test -f $tempdir/$i && $md5sum $tempdir/$i; done | sed -e 's/ .*$//' | $md5sum | sed -e 's/ .*$//'`.tar.gz || { | ||
355 | print_output "Couldn't compute MD5 sum." | ||
356 | exit 2 | ||
357 | } | ||
358 | mydir=`pwd` | ||
359 | else | ||
360 | mydir="`dirname "$archive_name"`" | ||
361 | |||
362 | #check if we have a full path or only a filename | ||
363 | if test "$mydir" = "." ; then | ||
364 | mydir=`pwd` | ||
365 | else | ||
366 | mydir="" | ||
367 | fi | ||
368 | fi | ||
369 | |||
370 | print_output "creating $archive_name" | ||
371 | |||
372 | cd $tempdir | ||
373 | # Add everything in the temp directory. Tar doesn't like to be given files with | ||
374 | # ".." in them, which frequently happens in $target_files, and will strip off | ||
375 | # the path prefix past the offending "..". This makes the archive generate | ||
376 | # incorrectly | ||
377 | tar -czf "$mydir/$archive_name" . || { | ||
378 | print_output "Couldn't create archive" | ||
379 | exit 3 | ||
380 | } | ||
381 | cd .. | ||
382 | rm -rf $tempdir | ||
diff --git a/meta/recipes-devtools/icecc-create-env/icecc-create-env_0.1.bb b/meta/recipes-devtools/icecc-create-env/icecc-create-env_0.1.bb deleted file mode 100644 index dd1b257b10..0000000000 --- a/meta/recipes-devtools/icecc-create-env/icecc-create-env_0.1.bb +++ /dev/null | |||
@@ -1,39 +0,0 @@ | |||
1 | SUMMARY = "icecc environment setup script" | ||
2 | DESCRIPTION = "This is a version of the icecc-create-env script that has \ | ||
3 | been modified in order to make it work with OE." | ||
4 | SECTION = "base" | ||
5 | # source file has just a "GPL" word, but upstream is GPL-2.0-or-later. | ||
6 | # most probably just GPL would be a mistake | ||
7 | LICENSE = "GPL-2.0-or-later" | ||
8 | LIC_FILES_CHKSUM = "file://icecc-create-env;beginline=2;endline=5;md5=ae1df3d6a058bfda40b66094c5f6065f" | ||
9 | |||
10 | |||
11 | DEPENDS = "" | ||
12 | INHIBIT_DEFAULT_DEPS = "1" | ||
13 | ICECC_DISABLED = "1" | ||
14 | |||
15 | # This is needed, because otherwise there is dependency loop from quilt-native | ||
16 | # Dependency loop #1 found: | ||
17 | # Task 10907 (meta/recipes-devtools/quilt/quilt-native_0.60.bb, do_install) (dependent Tasks ['quilt-native, do_compile']) | ||
18 | # Task 10908 (meta/recipes-devtools/quilt/quilt-native_0.60.bb, do_populate_sysroot) (dependent Tasks ['quilt-native, do_install']) | ||
19 | # Task 10997 (meta/recipes-devtools/icecc-create-env/icecc-create-env-native_0.1.bb, do_patch) (dependent Tasks ['icecc-create-env-native, do_unpack', 'quilt-native, do_populate_sysroot']) | ||
20 | # Task 11001 (meta/recipes-devtools/icecc-create-env/icecc-create-env-native_0.1.bb, do_configure) (dependent Tasks ['icecc-create-env-native, do_patch']) | ||
21 | # Task 11002 (meta/recipes-devtools/icecc-create-env/icecc-create-env-native_0.1.bb, do_compile) (dependent Tasks ['icecc-create-env-native, do_configure']) | ||
22 | # Task 10998 (meta/recipes-devtools/icecc-create-env/icecc-create-env-native_0.1.bb, do_install) (dependent Tasks ['icecc-create-env-native, do_compile']) | ||
23 | # Task 10999 (meta/recipes-devtools/icecc-create-env/icecc-create-env-native_0.1.bb, do_populate_sysroot) (dependent Tasks ['icecc-create-env-native, do_install']) | ||
24 | # Task 10910 (meta/recipes-devtools/quilt/quilt-native_0.60.bb, do_configure) (dependent Tasks ['quilt-native, do_patch', 'icecc-create-env-native, do_populate_sysroot']) | ||
25 | # Task 10911 (meta/recipes-devtools/quilt/quilt-native_0.60.bb, do_compile) (dependent Tasks ['quilt-native, do_configure']) | ||
26 | PATCHTOOL = "patch" | ||
27 | SRC_URI = "file://icecc-create-env" | ||
28 | |||
29 | S = "${WORKDIR}/sources" | ||
30 | UNPACKDIR = "${S}" | ||
31 | |||
32 | do_install() { | ||
33 | install -d ${D}/${bindir} | ||
34 | install -m 0755 ${S}/icecc-create-env ${D}/${bindir} | ||
35 | } | ||
36 | |||
37 | BBCLASSEXTEND = "native nativesdk" | ||
38 | |||
39 | RDEPENDS:${PN}:class-nativesdk = "patchelf" | ||
diff --git a/meta/recipes-devtools/icecc-toolchain/icecc-toolchain/icecc-env.sh b/meta/recipes-devtools/icecc-toolchain/icecc-toolchain/icecc-env.sh deleted file mode 100644 index 0dccc41c8a..0000000000 --- a/meta/recipes-devtools/icecc-toolchain/icecc-toolchain/icecc-env.sh +++ /dev/null | |||
@@ -1,49 +0,0 @@ | |||
1 | #! /bin/sh | ||
2 | # Copyright (c) 2018 Joshua Watt, Garmin International,Inc. | ||
3 | # | ||
4 | # Permission is hereby granted, free of charge, to any person obtaining a copy | ||
5 | # of this software and associated documentation files (the "Software"), to deal | ||
6 | # in the Software without restriction, including without limitation the rights | ||
7 | # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | ||
8 | # copies of the Software, and to permit persons to whom the Software is | ||
9 | # furnished to do so, subject to the following conditions: | ||
10 | # | ||
11 | # The above copyright notice and this permission notice shall be included in | ||
12 | # all copies or substantial portions of the Software. | ||
13 | # | ||
14 | # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
15 | # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
16 | # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
17 | # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||
18 | # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||
19 | # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | ||
20 | # SOFTWARE. | ||
21 | # | ||
22 | |||
23 | if [ -z "$ICECC_PATH" ]; then | ||
24 | ICECC_PATH=$(which icecc 2> /dev/null || true) | ||
25 | fi | ||
26 | |||
27 | if [ -n "$ICECC_PATH" ]; then | ||
28 | # Default to disabling the caret workaround. If set to "1", icecc will | ||
29 | # locally recompile any files that have warnings, which can adversely | ||
30 | # affect performance. | ||
31 | # | ||
32 | # See: https://github.com/icecc/icecream/issues/190 | ||
33 | if [ -z "$ICECC_CARET_WORKAROUND" ]; then | ||
34 | ICECC_CARET_WORKAROUND="0" | ||
35 | fi | ||
36 | if [ "$ICECC_CARET_WORKAROUND" != "1" ]; then | ||
37 | CFLAGS="$CFLAGS -fno-diagnostics-show-caret" | ||
38 | CXXFLAGS="$CXXFLAGS -fno-diagnostics-show-caret" | ||
39 | fi | ||
40 | export ICECC_PATH ICECC_CARET_WORKAROUND | ||
41 | export ICECC_VERSION="$(echo "$OECORE_NATIVE_SYSROOT/usr/share/${TARGET_PREFIX}icecream/@TOOLCHAIN_ENV@" | sed "s,@TARGET_PREFIX@,$TARGET_PREFIX,g")" | ||
42 | export ICECC="$(which ${CROSS_COMPILE}gcc)" | ||
43 | export ICECXX="$(which ${CROSS_COMPILE}g++)" | ||
44 | export ICEAS="$(which ${CROSS_COMPILE}as)" | ||
45 | export PATH="$OECORE_NATIVE_SYSROOT/usr/share/${TARGET_PREFIX}icecream/bin:$PATH" | ||
46 | else | ||
47 | echo "Icecc not found. Disabling distributed compiling" | ||
48 | fi | ||
49 | |||
diff --git a/meta/recipes-devtools/icecc-toolchain/icecc-toolchain/icecc-setup.sh b/meta/recipes-devtools/icecc-toolchain/icecc-toolchain/icecc-setup.sh deleted file mode 100644 index fbd9f038b8..0000000000 --- a/meta/recipes-devtools/icecc-toolchain/icecc-toolchain/icecc-setup.sh +++ /dev/null | |||
@@ -1,38 +0,0 @@ | |||
1 | #! /bin/sh | ||
2 | # Copyright (c) 2018 Joshua Watt, Garmin International,Inc. | ||
3 | # | ||
4 | # Permission is hereby granted, free of charge, to any person obtaining a copy | ||
5 | # of this software and associated documentation files (the "Software"), to deal | ||
6 | # in the Software without restriction, including without limitation the rights | ||
7 | # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | ||
8 | # copies of the Software, and to permit persons to whom the Software is | ||
9 | # furnished to do so, subject to the following conditions: | ||
10 | # | ||
11 | # The above copyright notice and this permission notice shall be included in | ||
12 | # all copies or substantial portions of the Software. | ||
13 | # | ||
14 | # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
15 | # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
16 | # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
17 | # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||
18 | # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||
19 | # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | ||
20 | # SOFTWARE. | ||
21 | # | ||
22 | |||
23 | # ICECC_PATH will have been found icecc-env.sh | ||
24 | if [ -z "$ICECC_PATH" ]; then | ||
25 | exit 0 | ||
26 | fi | ||
27 | |||
28 | echo "Setting up IceCream distributed compiling..." | ||
29 | |||
30 | # Create the environment | ||
31 | mkdir -p "`dirname $ICECC_VERSION`" | ||
32 | icecc-create-env $ICECC $ICECXX $ICEAS $ICECC_VERSION || exit $? | ||
33 | |||
34 | # Create symbolic links | ||
35 | d="$OECORE_NATIVE_SYSROOT/usr/share/${TARGET_PREFIX}icecream/bin" | ||
36 | mkdir -p "$d" | ||
37 | ln -sf "$ICECC_PATH" "$d/${CROSS_COMPILE}gcc" | ||
38 | ln -sf "$ICECC_PATH" "$d/${CROSS_COMPILE}g++" | ||
diff --git a/meta/recipes-devtools/icecc-toolchain/nativesdk-icecc-toolchain_0.1.bb b/meta/recipes-devtools/icecc-toolchain/nativesdk-icecc-toolchain_0.1.bb deleted file mode 100644 index a7f5fc4cb4..0000000000 --- a/meta/recipes-devtools/icecc-toolchain/nativesdk-icecc-toolchain_0.1.bb +++ /dev/null | |||
@@ -1,39 +0,0 @@ | |||
1 | # Copyright (c) 2018 Joshua Watt, Garmin International,Inc. | ||
2 | # Released under the MIT license (see COPYING.MIT for the terms) | ||
3 | SUMMARY = "Generates Icecream toolchain for SDK" | ||
4 | DESCRIPTION = "${SUMMARY}" | ||
5 | LICENSE = "MIT" | ||
6 | LIC_FILES_CHKSUM = "file://${UNPACKDIR}/icecc-env.sh;beginline=2;endline=20;md5=dd6b68c1efed8a9fb04e409b3b287d47" | ||
7 | |||
8 | INHIBIT_DEFAULT_DEPS = "1" | ||
9 | |||
10 | SRC_URI = "\ | ||
11 | file://icecc-env.sh \ | ||
12 | file://icecc-setup.sh \ | ||
13 | " | ||
14 | |||
15 | inherit nativesdk | ||
16 | |||
17 | ENV_NAME = "${DISTRO}-${TCLIBC}-${SDK_ARCH}-@TARGET_PREFIX@${DISTRO_VERSION}.tar.gz" | ||
18 | |||
19 | do_compile() { | ||
20 | } | ||
21 | |||
22 | do_install() { | ||
23 | install -d ${D}${SDKPATHNATIVE}${datadir}/icecream/bin | ||
24 | |||
25 | install -d ${D}${SDKPATHNATIVE}/environment-setup.d/ | ||
26 | install -m 0644 ${UNPACKDIR}/icecc-env.sh ${D}${SDKPATHNATIVE}/environment-setup.d/ | ||
27 | sed -i ${D}${SDKPATHNATIVE}/environment-setup.d/icecc-env.sh \ | ||
28 | -e 's,@TOOLCHAIN_ENV@,${ENV_NAME},g' | ||
29 | |||
30 | install -d ${D}${SDKPATHNATIVE}/post-relocate-setup.d/ | ||
31 | install -m 0755 ${UNPACKDIR}/icecc-setup.sh ${D}${SDKPATHNATIVE}/post-relocate-setup.d/ | ||
32 | sed -i ${D}${SDKPATHNATIVE}/post-relocate-setup.d/icecc-setup.sh \ | ||
33 | -e 's,@TOOLCHAIN_ENV@,${ENV_NAME},g' | ||
34 | } | ||
35 | |||
36 | PACKAGES = "${PN}" | ||
37 | FILES:${PN} = "${SDKPATHNATIVE}" | ||
38 | RDEPENDS:${PN} += "nativesdk-icecc-create-env" | ||
39 | |||