Didj Build Environment

From eLinux.org
Revision as of 05:48, 8 August 2010 by Jburks (Talk | contribs)

Jump to: navigation, search

Buildcross is able to build a working toolchain that supports C and C++.

Prebuilt

Since it can be a pain to build the cross compiler on Windows, I'm providing a prebuilt toolchain. 32 bit Ubuntu 9.10 does some incorrect things during GCC's build that causes the built to fail. So I've provide that one too.

Windows

Extract to C:\ (full path to bin is C:\winarm\didj\bin) It should work in the root of any partition.

Ubuntu 9.10 (Karmic, but also known to work fine on 10.4-Lucid)

Extract to /usr/local

Debian Lenny

Extract to /usr/local

Additional mirrors would be welcomed.

Building

Prerequisites

  • git (In deb based distros, it's in the git-core package)
  • gmp (In deb based distros it's often called libgmp-dev or libgmp3-dev)
  • mpfr (In deb based distros it's often called libmpfr-dev)
  • GCC & Binutils
  • Flex
  • Bison
  • Make
  • Makeinfo (In deb based distros it's in the texinfo package)
  • patch
  • diff
  • wget
  • And a Unix environment (Only really tested on Linux)

Steps

  • git clone git://github.com/losinggeneration/buildcross.git
  • cd buildcross
  • sudo mkdir /usr/local/didj
  • sudo chown [your username]:[any group] /usr/local/didj
  • MAKE="make -j3" ./buildcross.sh didj -bl
  • Replace -j3 with however many processors/cores you have +1

After that, the cross compiler should be built. You should now be able to build binaries for the Didj. I'd suggest adding /usr/local/didj/bin to your PATH. This is often in $HOME/.profile. Depending on your shell, Bash compatible shells can use:

export PATH=/usr/local/didj/bin:$PATH

Usage

The following all assumes the PATH has been correctly setup.

Simple usage

Typical usage for compiling and linking a single file:

arm-linux-uclibcgnueabi-gcc -o hello hello.c

Autotools

Typical usage for cross compiling a project that uses autotools

./configure --host=arm-linux-uclibcgnueabi
make

CMake

CMake cross compiler rules

Save this file as ~/didj/didj.cmake

# this one is important
SET(CMAKE_SYSTEM_NAME Linux)
#this one not so much
SET(CMAKE_SYSTEM_VERSION 1)

# specify the cross compiler
SET(CMAKE_C_COMPILER   /usr/local/didj/bin/arm-linux-uclibcgnueabi-gcc)
SET(CMAKE_CXX_COMPILER /usr/local/didj/bin/arm-linux-uclibcgnueabi-g++)

# where is the target environment 
SET(CMAKE_FIND_ROOT_PATH  /usr/local/didj /home/harley/didj/rootfs /home/harley/didj/custom/rootfs)

# search for programs in the build host directories
SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
# for libraries and headers in the target directories
SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)

Then use this command to build it. It's better to build in a clean subdirectory in CMake projects.

mkdir build && cd build
cmake -DCMAKE_TOOLCHAIN_FILE=~/didj/didj ..
make

Linux Kernel

make ARCH=arm CROSS_COMPILE=arm-linux-uclibcgnueabi-

Scons

To be written.

Others

Any others you run into please document here.