Difference between revisions of "Compile for the PhatBox"

From PhatHack Wiki
Jump to navigation Jump to search
(Updated crosstool config to produce a compiler that produces programs that don't segfault when linked with full glibc)
Line 1: Line 1:
 
[[Category:HOWTO]]
 
[[Category:HOWTO]]
 
Here are some notes on how to compile C programs to run on the PhatBox. It's from memory, so some of the details may be slightly wrong -- please edit this page if you have any corrections. --bushing
 
Here are some notes on how to compile C programs to run on the PhatBox. It's from memory, so some of the details may be slightly wrong -- please edit this page if you have any corrections. --bushing
  +
  +
Edit: I recompiled with a combo of gcc and glibc that was listed as supported for ARM on crosstool, the configs I used are listed below. This did NOT segfault on compiled using full glibc rather than diet.
   
 
= Cross-Compiler =
 
= Cross-Compiler =
Build a cross-compiler for ARM (the processor used in the PhatBox). The PhatBox guys used gcc-2.95.3, so that's what I used.
+
Build a cross-compiler for ARM (the processor used in the PhatBox).
   
 
The [http://kegel.com/crosstool/ crosstool] utility makes this very easy under Unix-like systems (e.g. Linux).
 
The [http://kegel.com/crosstool/ crosstool] utility makes this very easy under Unix-like systems (e.g. Linux).
Line 10: Line 12:
   
 
''arm.dat''
 
''arm.dat''
KERNELCONFIG=`pwd`/arm.config
+
KERNELCONFIG=`pwd`/arm.config
GCC_EXTRA_CONFIG="--with-cpu=arm7tdmi --enable-cxx-flags=-mcpu=arm7tdmi"
+
GCC_EXTRA_CONFIG="--with-cpu=arm7tdmi --enable-cxx-flags=-mcpu=arm7tdmi"
TARGET=arm-linux
+
TARGET=arm-7tdmi-linux-gnu
TARGET_CFLAGS="-Os"
+
TARGET_CFLAGS="-Os"
GLIBC_EXTRA_CONFIG=--enable-omitfp
+
GLIBC_EXTRA_CONFIG=--enable-omitfp
   
 
''demo-arm.sh''
 
''demo-arm.sh''
#!/bin/sh
+
#!/bin/sh
set -ex
+
set -ex
TARBALLS_DIR=$HOME/downloads
+
TARBALLS_DIR=/mnt/lv0/shared/phat/downloads
RESULT_TOP=/opt/crosstool
+
RESULT_TOP=/opt/crosstool
export TARBALLS_DIR RESULT_TOP
+
export TARBALLS_DIR RESULT_TOP
GCC_LANGUAGES="c,c++"
+
GCC_LANGUAGES="c,c++"
  +
CC="gcc"
export GCC_LANGUAGES
 
  +
PARALLELMFLAGS="-j 2"
eval `cat arm.dat gcc-2.95.3-glibc-2.1.3.dat` sh all.sh --notest
 
 
export GCC_LANGUAGES DISTCC CC PARALLELMFLAGS
 
eval `cat arm.dat gcc-3.4.3-glibc-2.3.4.dat` sh all.sh --notest
   
 
''(As root) create the directory /opt/crosstool and make it writable by you, and finally (as you) run the demo script, e.g.''
 
''(As root) create the directory /opt/crosstool and make it writable by you, and finally (as you) run the demo script, e.g.''

Revision as of 23:09, 21 June 2005

Here are some notes on how to compile C programs to run on the PhatBox. It's from memory, so some of the details may be slightly wrong -- please edit this page if you have any corrections. --bushing

Edit: I recompiled with a combo of gcc and glibc that was listed as supported for ARM on crosstool, the configs I used are listed below. This did NOT segfault on compiled using full glibc rather than diet.

Cross-Compiler

Build a cross-compiler for ARM (the processor used in the PhatBox).

The crosstool utility makes this very easy under Unix-like systems (e.g. Linux).

The configuration files I used were:

arm.dat KERNELCONFIG=`pwd`/arm.config GCC_EXTRA_CONFIG="--with-cpu=arm7tdmi --enable-cxx-flags=-mcpu=arm7tdmi" TARGET=arm-7tdmi-linux-gnu TARGET_CFLAGS="-Os" GLIBC_EXTRA_CONFIG=--enable-omitfp

demo-arm.sh

  1. !/bin/sh

set -ex TARBALLS_DIR=/mnt/lv0/shared/phat/downloads RESULT_TOP=/opt/crosstool export TARBALLS_DIR RESULT_TOP GCC_LANGUAGES="c,c++" CC="gcc" PARALLELMFLAGS="-j 2" export GCC_LANGUAGES DISTCC CC PARALLELMFLAGS eval `cat arm.dat gcc-3.4.3-glibc-2.3.4.dat` sh all.sh --notest

(As root) create the directory /opt/crosstool and make it writable by you, and finally (as you) run the demo script, e.g.

$ sudo mkdir /opt/crosstool
$ sudo chown $USER /opt/crosstool
$ sh demo-arm.sh

...and wait for it to compile.

libc

In order to actually compile programs, you also need a libc (c library). Crosstool will build you a glibc, but none of the programs I compiled with it actually worked.

So, I turned to diet libc - a libc optimized for small size. I found that I had to first make a version for i386 (to get the build-i386/diet program), and then I could build a version for arm. IE:

$ make
$ make arm

You will then have a program called diet in the bin-i386 directory. Copy this into your path, and then you can build programs for the PhatBox by running

$ diet arm-linux-gcc -o hello hello.c

(this is a GCC wrapper)