This is the mail archive of the crossgcc@sourceware.org mailing list for the crossgcc project.

See the CrossGCC FAQ for lots more information.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: native builds


Roland,
All,

On Friday 27 February 2009 20:00:31 Roland Schwarz wrote:
> Yann E. MORIN wrote:
> > What are you refering to by "running on the same host"?
> > Are you saying the _compilers_ are to run on the same machine?
> > Or do you mean that the compilers should _produce_ code that run on the
> > same machine?
> The compiler shall (be able to) run on the same machine for which it is
> producing code.

I'd rather say the opposite: "the compilers should be able to generate
code for the same machine they are running on".

> The biaries just should be linked to a different glibc. 
> (Does this make sense?)

> > What do you mean by "on the same host"?
> > Are you saying that the machine the compilers produce code for is the
> > same machine as the compilers run on?
> Hmm, let me try to rephrase:
> On my development machine I want to have several compilers (toolchains)
> which are able to produce code that could run on my development machine
> if I would install an older version of glibc.

If you change to an older version of glibc, you might (will!) get
in trouble: expect to see breakage all over the place.

> (Not sure if this makes thing clearer.)

You explained your goal OK. Not quite sure downgrading the libc makes sense,
though.

> What I ultimately want to achieve is to have several compilers on
> my box, so I can generate executables for customers who run systems
> with different versions of glibc and/or linux-headers.

Ah! That's not the same! You indeed want a cross-compiler!
In your case, the machines happen to use the same _processor_ as your
development machine. But they are *not* the same _machine_.

Just consider that your customers' machines are totaly alien to you.

If they had ARM-based machines, you'd want a cross-compiler, surely.
Your tuple would be i486-pc-linux-gnu, while theirs would be something
like arm-unkown-linux-gnu.

If they had the exact same hardware as you, but were using uClibc as their
C library, you'd still need a cross-compiler. Your tuple would still be
i486-pc-linux-gnu, but theirs would be something like i486-pc-linux-uclibc.

So, changing the C library, or the kernel headers (or any other component
for that matters), means you want a cross-compiler.

> One of them hopefully be the mingw target, but I understand that mingw
> is not feasasible yet.

Ah. I really want to do this, so I can cross-build my own Cygwin distribution.
That'd be fun, wouldn't it? :-]

> > You could work this around using the "Vendor string" option (in the menu
> > "Toolchain options"), and set it to something different from your host's
> > tuple. Then you'd build a cross-compiler.
> I tried this, and my
> build  is i486-linux-gnu
> host   is i486-linux-gnu and
> target is i386-custom-linux-gnu
> but during
> [INFO ]  Installing shared core C compiler
> I get:
[--SNIP--]
> [ALL  ]    make[1]: *** No rule to make target
> `../build-i486-build_pc-linux-gnu/libiberty/libiberty.a', needed by
> `build/genmodes'.  Stop.
[--SNIP--]
> I have no idea why ../build-i486-build_pc-linux-gnu/libiberty/libiberty.a
> would be needed at all. Wouldn't this only be needed for executables
> that "run" on the build meachine?

gcc builds some "helper" code for the host. The idea is to get protection
against a badly-coded C library, should that happen. (well it can happen on
weird hosts that do not use a standards-compilant C library).

Hence the iberty library (which is a joke: to link against a library, one has
to use the "-l" flag, directly followed with the library name, "iberty" in
this case, which gives -liberty. gcc folks... ).

> > (In the spirit of crosstool-NG, a "native" compiler whould be able to install
> >  in /, and be used as a replacement for the existing compiler. This raises a
> >  few interesting points, such as headers and library search paths, run-time
> >  paths, and so on...)
> 
> Hmm, the I do not understand what you wrote in overview.txt
> > 1) build == host == target
> >     This is a plain native toolchain, targetting the exact same machine as the
> >     one it is built on, and running again on this exact same machine. You have
> >     to build such a toolchain when you want to use an updated component, such
> >     as a newer gcc for example.
> >     crosstool-NG calls it "native".

This is exactly what I said above. A "native" compiler is meant to be able
to replace the existing native one on the build system/machine, and generate
code for that machine.

> Currently it looks to me as if host != target implies they must not be
> the same machine, yes? (Hmm, altough you said:
> > in the copmpiler land, a "machine" is not only referring
> > to the hardware, but also to a few other parts

Here's what is describinf a "machine": its tuple. If two tuple are the
same, then the two machines are the same. If the tuple differ, then
the machines are not the same.

A tuple is made of 3 or 4 parts:

- 3-part tuple: cpu-vendor-os
  - cpu: the actual CPU used in the machine: i386, arm, mipsel...
  - vendor: a free string (with no dash nor space), also refered to
    as "manufacturer"
  - os: the OS running on the target (although that field is mis-named
    for bare metal machines)

- 4-part tuple: cpu-vendor-kernel-os
  - cpu and vendor: see above
  - kernel: the kernel running on the machine: linux, hurd(?) ...
  - os: the OS variant: gnu, uclibc, gnueabi (for ARM or PPC) ...

Unfortunately, there's no provision for the "gnu" OS version (some OS,
like "winnt", have variants, like "winnt3.5"). So if you want to target
a "gnu" system using a different version of the glibc/kernel headers/gcc/...
you have to differentiate with the "vendor" part.

Unfortunately, you are hitting a bug with what I call "seemingly native
toolchains". Please look in docs/known-issues.txt for the explanations.

> Do you have any suggestions what else I could try?

Sorry. x86 is not my main interest in the (cross-)compiler land. If it
works, I had support. If it breaks I leave in the state, until I have
to make it work for myself, or someone comes with a patch.

Regards, and good luck!
Yann E. MORIN.

-- 
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +0/33 662376056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| --==< ^_^ >==-- `------------.-------:  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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]