From e7c5f947bf1d313f669d924909a232b86b696be1 Mon Sep 17 00:00:00 2001 From: Christopher Larson Date: Thu, 10 Apr 2014 08:15:22 -0700 Subject: [PATCH] tcmode: disable pseudo for gcc/g++/cpp The sourcery toolchain writes temporary files to /tmp, and includes the username. If multiple users are doing builds with pseudo enabled, it'll try to write to the other user's file, since both will use 'root', and the build will fail as a result. We don't want to wrap all the toolcahin binaries, as they don't all call the tools which write these lockfiles, and objcopy has to be excluded, as it modifies installed binaries when the packaging process splits out the debug info. If that operation occurs outside of pseudo's knowledge, Bad Things will happen. JIRA: MEIP-393, SB-1905 Signed-off-by: Christopher Larson --- .../include/tcmode-external-sourcery.inc | 21 +++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/conf/distro/include/tcmode-external-sourcery.inc b/conf/distro/include/tcmode-external-sourcery.inc index e761251..5102366 100644 --- a/conf/distro/include/tcmode-external-sourcery.inc +++ b/conf/distro/include/tcmode-external-sourcery.inc @@ -158,15 +158,24 @@ def populate_toolchain_links(d): bindir = d.getVar('STAGING_BINDIR_TOOLCHAIN', True) bb.utils.mkdirhier(bindir) + wrapped = ['gcc', 'g++', 'cpp'] for f in files: base = os.path.basename(f) newpath = os.path.join(bindir, base) - try: - os.symlink(f, newpath) - except OSError as exc: - if exc.errno == errno.EEXIST: - break - bb.fatal("Unable to populate toolchain binary symlink for %s: %s" % (newpath, exc)) + if not os.path.exists(newpath): + if any(base.endswith(w) for w in wrapped): + with open(newpath, 'w') as new: + new.write('#!/bin/sh\n') + new.write('export PSEUDO_UNLOAD=1\n') + new.write('exec {0} "$@"\n'.format(f)) + os.chmod(newpath, 0755) + else: + try: + os.symlink(f, newpath) + except OSError as exc: + if exc.errno == errno.EEXIST: + break + bb.fatal("Unable to populate toolchain binary symlink for %s: %s" % (newpath, exc)) # Ensure that we have a ld.bfd available, now that KERNEL_LD uses it ld = d.expand('${TARGET_PREFIX}ld')