74 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			74 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
layout: post
 | 
						|
title: "Cross compiler"
 | 
						|
subtitle: "Setting up under OSX Lion"
 | 
						|
tags: [osdev]
 | 
						|
 | 
						|
For simplicity, I chose to set up a so-called cross compiler for osdeving.  In
 | 
						|
OSX Lion, this is what I did.
 | 
						|
 | 
						|
First of all, I installed Xcode from the Mac App store.  Since version 4.3,
 | 
						|
Xcode doesn't install any command line tools anymore, so this had to be done
 | 
						|
manually:
 | 
						|
 | 
						|
- Open Xcode
 | 
						|
- Go the Preferences
 | 
						|
- Choose Downloads
 | 
						|
- Find Command Line Tools and click Install.
 | 
						|
 | 
						|
This is better than some earlier versions, though, which use a buggy
 | 
						|
c-compiler. An update was required on one of my computers.
 | 
						|
 | 
						|
Compiling gcc also requires the mpfr package to be installed. This I did with
 | 
						|
[Homebrew](http://mxcl.github.com/homebrew/).
 | 
						|
 | 
						|
    :::bash
 | 
						|
    $ brew install mpfr
 | 
						|
 | 
						|
I downloaded all the sources I needed from [gnu.org](http://gnu.org).
 | 
						|
 | 
						|
    :::bash
 | 
						|
    $ curl -O http://ftp.gnu.org/gnu/binutils/binutils-2.22.tar.gz
 | 
						|
    $ curl -O http://ftp.gnu.org/gnu/gcc/gcc-4.6.3/gcc-core-4.6.3.tar.gz
 | 
						|
    $ curl -O http://ftp.gnu.org/gnu/gmp/gmp-5.0.2.tar.gz
 | 
						|
    $ curl -O http://ftp.gnu.org/gnu/mpfr/mpfr-3.1.0.tar.gz
 | 
						|
    $ curl -O http://www.multiprecision.org/mpc/download/mpc-0.9.tar.gz
 | 
						|
 | 
						|
Feel free to use later versions, but if you do, I cannot guarantee that the
 | 
						|
code posted in my logs will work for you (it's very likely to work, but not
 | 
						|
*guaranteed*).  Gmp, mpfr and mpc are floating point libraries that are used by
 | 
						|
gcc, so after extracting all archives, they are simply copied into the gcc
 | 
						|
source
 | 
						|
 | 
						|
    :::bash
 | 
						|
    $ mv gmp-5.0.2 gcc-4.6.3/gmp
 | 
						|
    $ mv mpfr-3.1.0 gcc-4.6.3/mpfr
 | 
						|
    $ mv mpc-0.9 gcc-4.6.3/mpc
 | 
						|
 | 
						|
In order not to mess up the source, binutils and gcc were built out of tree.
 | 
						|
 | 
						|
    :::bash
 | 
						|
    $ mkdir build-binutils
 | 
						|
    $ cd build-binutils
 | 
						|
    $ export PREFIX=/usr/local/cross
 | 
						|
    $ export TARGET=i386-elf
 | 
						|
    $ ../binutils-2.22/configure --target=$TARGET --prefix=$PREFIX --disable-nls
 | 
						|
    $ make all
 | 
						|
    $ make install
 | 
						|
 | 
						|
And the same for gcc, using the new binutils
 | 
						|
 | 
						|
    :::bash
 | 
						|
    $ cd ..
 | 
						|
    $ mkdir build-gcc
 | 
						|
    $ cd build-gcc
 | 
						|
    $ export PATH=$PATH:$PREFIX/bin
 | 
						|
    $ ../gcc-4.6.3/configure --target=$TARGET --prefix=$PREFIX --disable-nls --enable-languages=c --without-headers
 | 
						|
    $ make all-gcc
 | 
						|
    $ make install-gcc
 | 
						|
 | 
						|
It's really important to run _make all-gcc_ and _make install-gcc_ and __not__
 | 
						|
_make all_ and _make install_ here. It probably works anyway - if you ever
 | 
						|
manage to get it to actually compile...
 | 
						|
 | 
						|
And that's it!
 |