Cross Compiling: Difference between revisions

From PS3 Developer wiki
Jump to navigation Jump to search
(added a patch to compile correctly without further modifications)
m (concurrency)
Line 11: Line 11:


== Ubuntu/Debian ==
== Ubuntu/Debian ==
===Know your host System===
To be improve the building time it is a good Idea to know how many cores your processor has and have that number of concurrent jobs
to know how many cores you have available use
<prep>
grep -c '^processor' /proc/cpuinfo
</pre>
This will be used while building the toolchain ct-ng build.#number of cores and while compiling export CONCURRENCY_LEVEL=#number of cores
Example for a quadcore system
<pre>
ct-ng build.4
CONCURRENCY_LEVEL=4
</pre>


===Installing Cross Tool===
===Installing Cross Tool===

Revision as of 07:32, 18 April 2011

Cross Compiling

This page shows how to cross compile for CellBE/ppc64


Gentoo

Server: Emerge distcc crossdev & env-update & source /etc/profile & crossdev -t powerpc64-unknown-linux-gnu

Client: http://www.gentoo.org/doc/en/cross-compiling-distcc.xml (Because it's much better written than anything I could do)

Ubuntu/Debian

Know your host System

To be improve the building time it is a good Idea to know how many cores your processor has and have that number of concurrent jobs

to know how many cores you have available use

<prep> grep -c '^processor' /proc/cpuinfo

This will be used while building the toolchain ct-ng build.#number of cores and while compiling export CONCURRENCY_LEVEL=#number of cores

Example for a quadcore system

ct-ng build.4
CONCURRENCY_LEVEL=4


Installing Cross Tool

Install required packages

sudo apt-get install build-essential gawk bison flex automake libtool cvs lzma ncurses-dev texinfo patch g++ gcj

Create directories and compile crosstool

mkdir /home/user/crosstool
mkdir /home/user/kernel
mkdir -p /home/user/toolchain/powerpc
tar xvjf crosstool-ng-1.10.0.tar.bz2
cd crosstool-ng-1.10.0/
./configure --prefix=/home/user/crosstool/
make && make install
  • /home/user/crosstool-ng-1.10.0/ -> crostool-ng sources
  • /home/user/crosstool/ -> Crosstool install directory with binaries
  • /home/user/toolchain/ -> Directory where the binary will be installed
  • /home/user/toolchain/powerpc/ -> Crosstool files generated in this tutorial for powerpc
  • /home/user/toolchain/x-tools/ -> generated toolchain
  • /home/user/kernel -> Place were graf_chokolo's linux kernel tarball will be saved

Add the enviromental variable to bash

sudo gedit /etc/bash.bashrc

Add the following lines at the end of the file

"export PATH="${PATH}:/home/user/crosstool/bin/" "export PATH="${PATH}:/home/user/x-tools/powerpc64-unknown-linux-gnu/bin/"

Patching crosstool

For some reason, the compiler removes the symbolic links for lib64

The following patch corrects this behaviour allowing the toolchain to work properly without further modifications

Required Patch

save the following file as """important.patch""" in home/usr/crosstool/lib/ct-ng-1.10.0/scripts/build

diff --git a/scripts/build/internals.sh b/scripts/build/internals.sh
--- a/scripts/build/internals.sh
+++ b/scripts/build/internals.sh
@@ -157,8 +157,6 @@
     # the standard lib/ dirs, so we can get rid of the symlinks
     for d in                            \
         "${CT_PREFIX_DIR}"              \
-        "${CT_SYSROOT_DIR}"             \
-        "${CT_SYSROOT_DIR}/usr"         \
         "${CT_PREFIX_DIR}/${CT_TARGET}" \
     ; do
         CT_DoExecLog ALL rm -f "${d}/lib32"

Go to that directory and apply the patch

cd /home/usr/crosstool/lib/ct-ng-1.10.0/scripts/build
patch < important.patch

Creating a cross compiler toolchain for ppc64

Download graf_chokolo's kernel

cd /home/user/kernel
wget -O linux-2.6.tar.gz http://git.dukio.com/gitweb.cgi?p=linux-2.6\;a=snapshot\;h=HEAD\;sf=tgz

Copy the sample configuration file and modify it

cp /home/usr/crosstool/lib/ct-ng-1.10.0/samples/powerpc64-unknown-linux-gnu/* /home/usr/toolchain/powerpc/
cd /home/usr/toolchain/powerpc/
mv crosstool.config .config
cd /home/usr/toolchain/powerpc/
ct-ng menuconfig

I've added graf_chokolos kernel

  • Operating System -> Linux Kernel version -> custom tarball
  • Operating System -> Path to custom tarball -> /home/user/kernel/linux-2.6.tar.gz

or


Start from scratch and configure the toolchain the way you want

cd /home/user/toolchain/powerppc/
ct-ng menuconfig

Compile ppc64 toolchain

unset LD_LIBRARY_PATH LIBRARY_PATH CPATH
export LD_LIBRARY_PATH LIBRARY_PATH CPATH
ct-ng build

Wait for some time until it finishes compiling


Testing if your toolchain works properly

export PATH="${PATH}:/home/user/x-tools/powerpc64-unknown-linux-gnu/bin/"
powerpc64-unknown-linux-gnuspe-gcc test.c -o test

More info: http://www.ibm.com/developerworks/linux/tutorials/l-embedded-distro/section3.html

Cross compiling openssl

Download openssl sources

wget http://www.openssl.org/source/openssl-0.9.8g.tar.gz

unpack the sources

tar xvjf openssl-0.9.8g.tar.gz

Go to openssl source path

cd openssl-0.9.8g/

Change the following lines in the Makefile

INSTALLTOP=/x-tools/powerpc64-unknown-linux-gnu/powerpc64-unknown-linux-gnu/sysroot/usr
OPENSSLDIR=/x-tools/powerpc64-unknown-linux-gnu/powerpc64-unknown-linux-gnu/sysroot/usru
CC= powerpc64-unknown-linux-gnu-gcc
AR=xpowerpc64-unknown-linux-gnu-ar $(ARFLAGS) r
RANLIB= powerpc64-unknown-linux-gnu-ranlib

Finally

make

Cross compiling graf_chokolo's tools

Make sure you have a working toolchain and openssl installed

Comment the current compiler and add your cross compiler in our case "powerpc64-unknown-linux-gnu-gcc"

#CC=gcc
CC=powerpc64-unknown-linux-gnu-gcc

finally

make

you can find graf_chokolo tools and scripts here

http://git.dukio.com/gitweb.cgi

Compiling graf_chokolo's kernel

Set the following environmental variables

If you haven't already

export 

the cross compile environmental variables

CROSS_COMPILE=powerpc64-unknown-linux-gnu-
ARCH=powerpc

Finally

make