You are not logged in.

#1 2011-09-09 07:10:23

W.F.Cody
Member
From: Ghent
Registered: 2010-11-18
Posts: 125

good instructions for making a GCC cross compiler?

Hi

I think this might be the best place to ask this since people probably have been making cross compilers. I am interested in trying to make a cross compiler of GCC targetting Plan9/i386. There is an old 3.0 version of GCC (http://cm.bell-labs.com/sources/extra/gcc/) ported to Plan9.

The thing that confuses me a bit about cross compilers is the use of binutils for the target architecture. How does that actually work? The host OS/architecture would not be able to execute those binaries. It feels a bit like a chicken-and-egg issure and I am not really sure how to get started. I have been trying to read up a bit on the PKGBUILDs for cross-arm but the whole theoretical issue of how to actually get the thing working in the first place is still a bit unclear to me.

Some good instructions/links/help would be appreciated smile
I could post my temporary PKGBUILD here if people want to help out with the actual build...


My AUR packages
Any package of mine is up for grabs. If you think you could mantain it better - just contact me!

Offline

#2 2011-09-09 09:22:33

bernarcher
Forum Fellow
From: Germany
Registered: 2009-02-17
Posts: 2,271

Re: good instructions for making a GCC cross compiler?

While not mainly aimed at a cross compiler you my find the information in Cross Linux From Scratch worthwhile.
It is quite some time ago that I last touched it but then I learned a lot from it.


To know or not to know ...
... the questions remain forever.

Offline

#3 2011-09-09 09:25:37

Allan
Developer
From: Brisbane, AU
Registered: 2007-06-09
Posts: 10,408
Website

Re: good instructions for making a GCC cross compiler?

Here goes sets of PKGBUILDs I used for i686-pc-mingw32 and i686-pc-gnu cross-compilers:
http://allanmcrae.com/packages/cross-i6 … w32.tar.gz
http://allanmcrae.com/packages/cross-i686-pc-gnu.tar.gz

They should hopefully be fairly simple to follow and point you in the right direction.

Offline

#4 2011-09-09 10:01:42

W.F.Cody
Member
From: Ghent
Registered: 2010-11-18
Posts: 125

Re: good instructions for making a GCC cross compiler?

GREAT! Thanks! I will check it out as soon as I got time (really eager to play with this smile )

hopefully this cross-compile method will be able to overcome some annoying GNUisms (mostly sed and autoconf related I think) that I noticed when I tried to compile stuff natively under 9vx using the GCC/gnubin port.

For a "better" (more modern) cross compiler - would you reccomend me looking into newlib or is that overkill?


My AUR packages
Any package of mine is up for grabs. If you think you could mantain it better - just contact me!

Offline

#5 2011-09-13 18:53:35

W.F.Cody
Member
From: Ghent
Registered: 2010-11-18
Posts: 125

Re: good instructions for making a GCC cross compiler?

A small update to my attempts:

This is my binutils package, it has failed at multiple levels during my attempts. The binutils ported to Plan9 are relatively old so some stuff needs to be patched up to build. Now it fails on not being able to recognize arlex.o . This seems a bit odd I think.

# Adapted from cross-arm-elf, cross-i686-pc-gnu and cross-i686-pc-mingw32

pkgname=cross-i386-plan9-binutils
pkgver=2.11.2
pkgrel=1
pkgdesc="The GNU Compiler Collection - Cross compiler for Plan9 i386 target"
arch=('i686' 'x86_64')
license=('GPL')
url="http://plan9.bell-labs.com/wiki/plan9/porting_alien_software_to_plan_9/index.html"
depends=('glibc' 'zlib')
options=('!libtool' '!distcc' '!ccache')
source=('http://plan9.bell-labs.com/sources/extra/gcc/gnusrc.tgz' \
'bucommh.patch')
md5sums=('39d23b7223b68de4cf333205257112ce' \
'2945c4e40dbcd966217ed1349195e312')

_target=i386-lucent-plan9
_sysroot=/usr/lib/cross-${_target}

build() {
  rm -rf ${srcdir}/build
  mkdir ${srcdir}/build #starting fresh

msg "building and packaging binutils"

  cp -ar ${srcdir}/binutils-2.11.2/* ${srcdir}/build/
  cd ${srcdir}/build

msg "cheating broken references to Plan9-ported GNU binutils"
  ln -s /usr/bin/ar "${_target}-ar"
  ln -s /usr/bin/as "${_target}-as"
  ln -s /usr/bin/ld "${_target}-ld"
  ln -s /usr/bin/ranlib "${_target}-ranlib"
  PATH=${srcdir}/build:$PATH
  CFLAGS='-O2 -static'

msg "patching up stuff"
  cd ${srcdir}/build/binutils
  patch bucomm.h -i $srcdir/bucommh.patch

msg "going back to build directory and start configure"  
  cd ${srcdir}/build
  ./configure --prefix=${_sysroot} --bindir=/usr/bin \
    --with-sysroot=${_sysroot} \
    --build=$CHOST --host=$CHOST --target=${_target} \
    --with-gcc --with-gnu-as --with-gnu-ld \
    --enable-shared --without-included-gettext \
    --disable-nls --disable-debug

msg "fixing some corrupt libraries"
  cp /usr/lib/libiberty.a ${srcdir}/build/libiberty/

msg "finally making the actual binutils"
  cd ${srcdir}/build
    make
    make DESTDIR=$pkgdir/ install

  # clean-up cross compiler root
  rm -r ${pkgdir}/${_sysroot}/share/{info,man}
  
  # needed for gcc build
  install -dm755 ${pkgdir}/${_sysroot}/include
}

this is the bucommh.patch:

81c81
< extern char *sbrk ();
---
> extern void *sbrk ();

Last edited by W.F.Cody (2011-09-13 18:57:17)


My AUR packages
Any package of mine is up for grabs. If you think you could mantain it better - just contact me!

Offline

Board footer

Powered by FluxBB