[OE-core] [RFC] icecc: Allow to use this bbclass together with external toolchains
Martin Jansa
martin.jansa at gmail.com
Thu Apr 4 06:21:47 UTC 2013
On Mon, Mar 18, 2013 at 11:10:08AM +0100, Martin Jansa wrote:
> * original implementation by Antti Harju
Nobody using external TC, interested in icecc?
> Signed-off-by: Martin Jansa <Martin.Jansa at gmail.com>
> ---
> meta/classes/icecc.bbclass | 37 +++++++++++++++++++++++++++++++++----
> 1 file changed, 33 insertions(+), 4 deletions(-)
>
> diff --git a/meta/classes/icecc.bbclass b/meta/classes/icecc.bbclass
> index f3e89a9..cf3f23d 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() {
> --
> 1.8.1.5
>
--
Martin 'JaMa' Jansa jabber: Martin.Jansa at gmail.com
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 198 bytes
Desc: Digital signature
URL: <http://lists.openembedded.org/pipermail/openembedded-core/attachments/20130404/e8ff4680/attachment-0002.sig>
More information about the Openembedded-core
mailing list