From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 968 invoked by alias); 28 Nov 2011 18:33:44 -0000 Received: (qmail 959 invoked by uid 22791); 28 Nov 2011 18:33:43 -0000 X-SWARE-Spam-Status: No, hits=-1.5 required=5.0 tests=AWL,BAYES_00,RCVD_IN_DNSWL_NONE,TW_BJ,TW_GC,TW_JC X-Spam-Check-By: sourceware.org Received: from smtp09.smtpout.orange.fr (HELO smtp.smtpout.orange.fr) (80.12.242.131) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Mon, 28 Nov 2011 18:33:28 +0000 Received: from treguer.localnet ([90.32.37.166]) by mwinf5d32 with ME id 2iZT1i0043b4rwA03iZT0V; Mon, 28 Nov 2011 19:33:27 +0100 From: "Yann E. MORIN" To: crossgcc@sourceware.org Subject: Re: [PATCH] scripts: support building with the LSB wrappers Date: Mon, 28 Nov 2011 18:33:00 -0000 User-Agent: KMail/1.13.5 (Linux/3.1.1-treguer; KDE/4.4.5; x86_64; ; ) Cc: Michael Hope , patches@linaro.org References: In-Reply-To: MIME-Version: 1.0 Content-Type: Text/Plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit Message-Id: <201111281933.26626.yann.morin.1998@anciens.enib.fr> Mailing-List: contact crossgcc-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: crossgcc-owner@sourceware.org X-SW-Source: 2011-11/txt/msg00193.txt.bz2 Michael, All, On Monday 28 November 2011 00:57:27 Michael Hope wrote: > # 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 That sounds like a test should be made at runtime to check that the available gcc is the correct version. > + and local patches to the LSB build tree. And this sounds like a show-stopper. This would require that the user does patch his/her system, and that's definitely not something we want to impose on him/her. :-( > 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 (OK, I saw your second mail about s/BUILD/HOST/) I don't like the 'target' variable name. Why don't you overload the existing variable 'tool'? > # 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, Otherwise, nothing to say. I'll have to look here how it behaves before I can comment more. Thank you! Regards, Yann E. MORIN. -- .-----------------.--------------------.------------------.--------------------. | Yann E. MORIN | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: | | +33 662 376 056 | Software Designer | \ / CAMPAIGN | ___ | | +33 223 225 172 `------------.-------: X AGAINST | \e/ There is no | | http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL | v conspiracy. | '------------------------------^-------^------------------^--------------------' -- For unsubscribe information see http://sourceware.org/lists.html#faq