[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Cross compiling when in fact we aren't
From: |
Balint Joo |
Subject: |
Cross compiling when in fact we aren't |
Date: |
Mon, 25 Aug 2003 18:25:57 +0100 |
User-agent: |
Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.4) Gecko/20030624 |
Dear All,
I have a question which is almost 'theological'.
Consider a case, where your --host system (on which the code will run)
and the --build system (where you compile) have the same canonical
name, but yet you still don't want AC_PROG_CC to produce a test
executable and run it. How do you stop AC_PROC_CC from
attempting to run the test executable?
"Why would you want to do this?" you may ask. "It is after all a native
build."
In my case the answer is that I am trying to compile a parallel
program, which needs a special compiler (mpcc). However in order
to run the output of mpcc, I need to be in a batch queue. Outwith
the batch queue I cannot run executables compiled with the parallel environment.
so
CC=mpcc ./configure
breaks.
If I configure with:
CC=mpcc ./configure --host=powerpc-ibm-aix5.1.0.0
the configuration enters cross compilation mode. However this
is flagged as an obsolete feature in the autoconf documentation:
In section 15.6.3:
"To ease the transition between 2.13 and its successors, a more complicated
scheme is implemented. Do not rely on the following, as it will be removed in
the near future.
If you specify `--host', but not `--build', when configure performs the first
compiler test it will try to run an executable produced by the compiler. If the
execution fails, it will enter cross-compilation mode. This is fragile.
Moreover, by the time the compiler test is performed, it may be too late to
modify the build-system type: other tests may have already been performed.
Therefore, whenever you specify --host, be sure to specify --build too."
Hence I am not supposed to rely on this.
However when I do specify build as in:
CC=mpcc ./configure --host=powerpc-ibm-aix5.1.0.0 --build=powerpc-ibm-aix5.1.0.0
the configuration breaks (because host and build are the same):
bash-2.05a$ CC=mpcc ./configure --host=powerpc-ibm-aix5.1.0.0 --build=powerpc-ib
m-aix5.1.0.0
checking build system type... powerpc-ibm-aix5.1.0.0
checking host system type... powerpc-ibm-aix5.1.0.0
checking for a BSD-compatible install... ./config/install-sh -c
checking whether build environment is sane... yes
checking for gawk... no
checking for mawk... no
checking for nawk... nawk
checking whether make sets $(MAKE)... yes
checking whether make sets $(MAKE)... (cached) yes
checking for powerpc-ibm-aix5.1.0.0-gcc... mpcc
checking for C compiler default output... a.out
checking whether the C compiler works... configure: error: cannot run C compiled
programs.
While the now obsoleted method of specifying --host but no --build
works now, it is likely to go away in the future. How else can
I stop the test from trying to execute the executable but not use
an obsolete constructs?
Your thoughts would be much appreciated,
Balint
PS: The solution is not to claim that mpcc is just a wrapper and I should give
its -I and -L flags in the CXXFLAGS, LDFLAGS etc. This doesn't work because
the executable still won't run in interactive mode. Ciao, B
--
-------------------------------------------------------------------
Dr Balint Joo Post Doctoral Research Fellow
School of Physics
University of Edinburgh
Mayfield Road, Edinburgh EH9 3JZ
Scotland UK
Tel: 0131 650 6469 (from UK) +44-131-650-6469 (from outwith UK)
Fax: 0131 650 5902 (from UK) +44-131-650-5902 (from outwith UK)
email: address@hidden address@hidden
WWW : http://www.ph.ed.ac.uk/~bj
-------------------------------------------------------------------
- Cross compiling when in fact we aren't,
Balint Joo <=