From patchwork Sun Nov 27 23:57:27 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michael Hope X-Patchwork-Id: 5321 Return-Path: X-Original-To: patchwork@peony.canonical.com Delivered-To: patchwork@peony.canonical.com Received: from fiordland.canonical.com (fiordland.canonical.com [91.189.94.145]) by peony.canonical.com (Postfix) with ESMTP id ADC6223E19 for ; Sun, 27 Nov 2011 23:57:33 +0000 (UTC) Received: from mail-lpp01m010-f52.google.com (mail-lpp01m010-f52.google.com [209.85.215.52]) by fiordland.canonical.com (Postfix) with ESMTP id 7A5A6A18657 for ; Sun, 27 Nov 2011 23:57:33 +0000 (UTC) Received: by laah2 with SMTP id h2so564209laa.11 for ; Sun, 27 Nov 2011 15:57:33 -0800 (PST) Received: by 10.152.162.10 with SMTP id xw10mr26704323lab.12.1322438252987; Sun, 27 Nov 2011 15:57:32 -0800 (PST) X-Forwarded-To: linaro-patchwork@canonical.com X-Forwarded-For: patch@linaro.org linaro-patchwork@canonical.com Delivered-To: patches@linaro.org Received: by 10.152.41.198 with SMTP id h6cs416962lal; Sun, 27 Nov 2011 15:57:32 -0800 (PST) Received: by 10.50.169.97 with SMTP id ad1mr17472604igc.35.1322438250673; Sun, 27 Nov 2011 15:57:30 -0800 (PST) Received: from unit0.ironport.snap.net.nz (unit0.ironport.snap.net.nz. [202.37.100.104]) by mx.google.com with ESMTP id f3si2002787ibo.126.2011.11.27.15.57.29; Sun, 27 Nov 2011 15:57:30 -0800 (PST) Received-SPF: neutral (google.com: 202.37.100.104 is neither permitted nor denied by best guess record for domain of michael.hope@linaro.org) client-ip=202.37.100.104; Authentication-Results: mx.google.com; spf=neutral (google.com: 202.37.100.104 is neither permitted nor denied by best guess record for domain of michael.hope@linaro.org) smtp.mail=michael.hope@linaro.org X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: Av0EAOnN0k57/y/M/2dsb2JhbABEFqpygnk/LBM8FR9OE4gNtDyKYgSaCoxh X-IronPort-AV: E=Sophos;i="4.69,580,1315137600"; d="scan'208";a="87186395" Received: from rupert.snap.net.nz ([202.37.100.140]) by smtp0.ironport.snap.net.nz with ESMTP; 28 Nov 2011 12:57:28 +1300 X-Sender-IP: 123.255.47.204 X-Sender-IP: 123.255.47.204 X-Sender-IP: 123.255.47.204 Received: from [127.0.1.1] (204.47.255.123.static.snap.net.nz [123.255.47.204]) by rupert.snap.net.nz (Postfix) with ESMTPS id 301591FD37; Mon, 28 Nov 2011 12:57:28 +1300 (NZDT) MIME-Version: 1.0 Subject: [PATCH] scripts: support building with the LSB wrappers X-Mercurial-Node: edadd06cb17fd3a45501afe22ae39a76f4a76fa2 Message-Id: User-Agent: Mercurial-patchbomb/1.7.5 Date: Mon, 28 Nov 2011 12:57:27 +1300 From: Michael Hope To: "Yann E. MORIN" Cc: crossgcc@sourceware.org, patches@linaro.org # HG changeset patch # User Michael Hope # Date 1322438185 -46800 # Branch lsb # Node ID edadd06cb17fd3a45501afe22ae39a76f4a76fa2 # Parent 49af7802dcd538ec3cb64337030b03ac2c6344d2 scripts: support building with the LSB wrappers If set, look for 'lsbcc' instead of 'gcc' and 'lsbc++ instead of g++ and use them when building. The Linux Standard Base defines a set of libraries and APIs that are implemented by most distros. If you build against these APIs then in theory the program can run on any LSB distro instead of just the host. LSB provide a compiler wrapper for the host C and C++ compilers called 'lsbcc' and 'lsbc++'. The wrapper checks the executable name to figure out if you're calling the C or C++ compiler so you have to call these names exactly. Caveats: You need a 4.1 or 4.2 compiler to build. Various parts of the toolchain don't compile LSB 3.0+ header files. Some parts accidentally use the host include files. A patch that works around these is at: http://people.linaro.org/~michaelh/keep/00-crosstool-lsb-hacks.patch Nits: I'm abusing the case statement to do an AND but it makes the default value cleaner. Signed-off-by: Michael Hope diff -r 49af7802dcd5 -r edadd06cb17f config/toolchain.in --- a/config/toolchain.in Tue Nov 22 10:08:10 2011 +0100 +++ b/config/toolchain.in Mon Nov 28 12:56:25 2011 +1300 @@ -247,6 +247,18 @@ for that by checking the tools without the suffix in case it can not find some of the tool. +config BUILD_USE_LSBCC + bool + prompt "| Build using the Linux Standard Base compilers" + help + Set to use the LSB C and C++ compiler wrappers lsbcc and + lsbc++ instead of gcc and g++. + + LSB applications are more portable and should run on any LSB + compliant Linux based operating system. Note that building + against a LSB 3.0 system may require a pre-4.3 version of GCC + and local patches to the LSB build tree. + if CANADIAN comment "Host system" diff -r 49af7802dcd5 -r edadd06cb17f scripts/crosstool-NG.sh.in --- a/scripts/crosstool-NG.sh.in Tue Nov 22 10:08:10 2011 +0100 +++ b/scripts/crosstool-NG.sh.in Mon Nov 28 12:56:25 2011 +1300 @@ -390,6 +390,13 @@ fi for tool in ar as dlltool gcc g++ gcj gnatbind gnatmake ld nm objcopy objdump ranlib strip windres; do + # Re-map GCC and G++ to the corresponding LSB names + case "${CT_BUILD_USE_LSBCC},${m},${tool}" in + y,BUILD,gcc) target="lsbcc";; + y,BUILD,g++) target="lsbc++";; + *) target="${tool}";; + esac + # First try with prefix + suffix # Then try with prefix only # Then try with suffix only, but only for BUILD, and HOST iff REAL_BUILD == REAL_HOST @@ -397,17 +404,17 @@ # This is needed, because some tools have a prefix and # a suffix (eg. gcc), while others may have only one, # or even none (eg. binutils) - where=$(CT_Which "${t}${tool}${!s}") - [ -z "${where}" ] && where=$(CT_Which "${t}${tool}") + where=$(CT_Which "${t}${target}${!s}") + [ -z "${where}" ] && where=$(CT_Which "${t}${target}") if [ -z "${where}" \ -a \( "${m}" = "BUILD" \ -o "${CT_REAL_BUILD}" = "${!r}" \) ]; then - where=$(CT_Which "${tool}${!s}") + where=$(CT_Which "${target}${!s}") fi if [ -z "${where}" \ -a \( "${m}" = "BUILD" \ -o "${CT_REAL_BUILD}" = "${!r}" \) ]; then - where=$(CT_Which "${tool}") + where=$(CT_Which "${target}") fi # Not all tools are available for all platforms, but some are really,