Cross Compiling: Difference between revisions

From PS3 Developer wiki
Jump to navigation Jump to search
(added how to compile the kernel and openssl)
(added a patch to compile correctly without further modifications)
Line 12: Line 12:
== Ubuntu/Debian ==
== Ubuntu/Debian ==


===Creating a cross compiler toolchain===
===Installing Cross Tool===


Install required packages
Install required packages
Line 48: Line 48:
"export PATH="${PATH}:/home/user/x-tools/powerpc64-unknown-linux-gnu/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
<pre>
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"
</pre>
Go to that directory and apply the patch
<pre>
cd /home/usr/crosstool/lib/ct-ng-1.10.0/scripts/build
patch < important.patch
</pre>
===Creating a cross compiler toolchain for ppc64===


Download graf_chokolo's kernel
Download graf_chokolo's kernel

Revision as of 05:58, 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

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