クロス開発ツールのビルド方法


はじめに

このページではesのクロス開発環境の構築手順を説明します。

esオペレーティングシステムはGNUコンパイラー コレクション(GCC)をはじめとした多くのオープンソース ソフトウェアを用いて開発を行っています。現状ではesのプログラムはFedora 7上でクロス開発環境を構築してビルドしています。

注) esは現在x86 CPUを搭載したPC向けのものを開発していますので、configureスクリプトに指定する設定名としてi386-pc-esを使用しています。

注) es-0.0.13以降ではgccのgthread およびnewlibのlockの実装にpthreadインターフェイスを利用します。es-0.0.12以前のクロス開発ツールではesのビルドができなくなっていますので、以下の通り再構築してください。

ソースコードの入手

以下のソースコードパッケージを入手してください。

ファイル 入手先 内容
binutils-2.17.tar.bz2 http://sources.redhat.com/binutils リンカーやアセンブラなどが含まれています。
gcc-4.2.1.tar.bz2 http://gcc.gnu.org/ Cコンパイラ、C++コンパイラなどが含まれています。
newlib-1.15.0.tar.gz http://sources.redhat.com/newlib/ C言語の標準ライブラリです。ライセンスがGPLによらないので、組込みシステムなどでよく使われているものです。

入手できたら、パッケージを展開してください。

$ tar -jxvf binutils-2.17.tar.bz2
$ tar -jxvf gcc-4.2.1.tar.bz2
$ tar -zxvf newlib-1.15.0.tar.gz

パッチ当て

esオペレーティングシステムのソースコード パッケージのpatchesディレクトリ内には、上記で入手したパーケージに適用する以下のパッチファイルが含まれてます。

ファイル 内容
binutils-2.17.patch binutils 2.17用のパッチファイル
gcc-4.2.1.patch gcc 4.2.1用のパッチファイル
newlib-1.15.0.patch newlib 1.15.0用のパッチファイル。必要最小限のPOSIX関数を利用できるようにするための機能は、このパッチで提供しています。

tarコマンドを実行したのと同じディレクトリに上記のファイルをコピーして、以下のようにパッチを当ててください。

$ patch -p0 -d . < binutils-2.17.patch
$ patch -p0 -d . < gcc-4.2.1.patch
$ patch -p0 -d . < newlib-1.15.0.patch

注) .patch ファイルは下記の手順で作成しています。

$ diff -bcrN binutils-2.17.org binutils-2.17 > binutils-2.17.patch
$ diff -bcrN gcc-4.2.1.org gcc-4.2.1 > gcc-4.2.1.patch
$ diff -bcrN newlib-1.15.0.org newlib-1.15.0 > newlib-1.15.0.patch

注) 直接エディタで編集・追加したファイルは以下のファイルです。

binutils-2.17/bfd/config.bfd
binutils-2.17/config.sub
binutils-2.17/configure.in
binutils-2.17/gas/configure.tgt
binutils-2.17/ld/configure.tgt

gcc-4.2.1/config.sub
gcc-4.2.1/configure.in
gcc-4.2.1/gcc/config/es.h
gcc-4.2.1/gcc/config/gthr-es.c
gcc-4.2.1/gcc/config/i386/es-elf.h
gcc-4.2.1/gcc/config/i386/t-es-i386
gcc-4.2.1/gcc/config/t-es
gcc-4.2.1/gcc/config.gcc
gcc-4.2.1/gcc/configure.ac
gcc-4.2.1/gcc/gthr-es.h

newlib-1.15.0/config.sub
newlib-1.15.0/configure.in
newlib-1.15.0/libgloss/configure.in
newlib-1.15.0/libgloss/i386-es/Makefile.in
newlib-1.15.0/libgloss/i386-es/access.c
newlib-1.15.0/libgloss/i386-es/aclocal.m4
newlib-1.15.0/libgloss/i386-es/close.c
newlib-1.15.0/libgloss/i386-es/configure
newlib-1.15.0/libgloss/i386-es/configure.in
newlib-1.15.0/libgloss/i386-es/crt0.S
newlib-1.15.0/libgloss/i386-es/es-syscall.h
newlib-1.15.0/libgloss/i386-es/es.c
newlib-1.15.0/libgloss/i386-es/es.ld
newlib-1.15.0/libgloss/i386-es/exit.c
newlib-1.15.0/libgloss/i386-es/fstat.c
newlib-1.15.0/libgloss/i386-es/getcwd.c
newlib-1.15.0/libgloss/i386-es/getdents.c
newlib-1.15.0/libgloss/i386-es/getpid.c
newlib-1.15.0/libgloss/i386-es/gettimeofday.c
newlib-1.15.0/libgloss/i386-es/kill.c
newlib-1.15.0/libgloss/i386-es/link.c
newlib-1.15.0/libgloss/i386-es/lseek.c
newlib-1.15.0/libgloss/i386-es/mkdir.c
newlib-1.15.0/libgloss/i386-es/mmap.c
newlib-1.15.0/libgloss/i386-es/nanosleep.c
newlib-1.15.0/libgloss/i386-es/open.c
newlib-1.15.0/libgloss/i386-es/pthread.c
newlib-1.15.0/libgloss/i386-es/read.c
newlib-1.15.0/libgloss/i386-es/rename.c
newlib-1.15.0/libgloss/i386-es/rmdir.c
newlib-1.15.0/libgloss/i386-es/sbrk.c
newlib-1.15.0/libgloss/i386-es/stat.c
newlib-1.15.0/libgloss/i386-es/times.c
newlib-1.15.0/libgloss/i386-es/unlink.c
newlib-1.15.0/libgloss/i386-es/write.c
newlib-1.15.0/newlib/configure.host
newlib-1.15.0/newlib/libc/include/machine/setjmp.h
newlib-1.15.0/newlib/libc/include/pthread.h
newlib-1.15.0/newlib/libc/include/sys/config.h
newlib-1.15.0/newlib/libc/include/sys/features.h
newlib-1.15.0/newlib/libc/include/sys/types.h
newlib-1.15.0/newlib/libc/stdlib/__atexit.c
newlib-1.15.0/newlib/libc/stdlib/malloc.c
newlib-1.15.0/newlib/libc/stdlib/mallocr.c
newlib-1.15.0/newlib/libc/sys/configure.in
newlib-1.15.0/newlib/libc/sys/es/Makefile.am
newlib-1.15.0/newlib/libc/sys/es/configure.in
newlib-1.15.0/newlib/libc/sys/es/getreent.c
newlib-1.15.0/newlib/libc/sys/es/linkr.c
newlib-1.15.0/newlib/libc/sys/es/sys/dirent.h
newlib-1.15.0/newlib/libc/sys/es/sys/lock.h
newlib-1.15.0/newlib/libc/sys/es/sys/mman.h
newlib-1.15.0/newlib/libc/sys/es/syslink.c
newlib-1.15.0/newlib/libc/syscalls/syslink.c
newlib-1.15.0/newlib/libc/syscalls/sysunlink.c

参考) デフォルトでリンクするライブラリの指定は gcc-4.2.1/gcc/config/es.h の中で指定できます。

binutilsのビルド

まずbinutilsをビルドします。64 ビット デュアルコア インテル Xeon プロセッサー 2.8GHzの計算機では4分程で完了します。

$ cd
$ mkdir es-binutils
$ cd es-binutils
$ ../src/binutils-2.17/configure --prefix=/usr/local/es --target=i386-pc-es -v
$ make all
$ sudo make install
$ export PATH=/usr/local/es/bin:$PATH
$ i386-pc-es-as -V
GNU assembler version 2.17 (i386-pc-es) using BFD version 2.17

GCCとnewlibのビルド

まず、gccのビルド中にnewlibに含まれている<pthread.h>などのヘッダーファイルに参照できるように、以下のようにシンボリックリンクを設定しておきます。

$ cd
$ cd src/gcc-4.2.1
$ ln -s ../newlib-1.15.0/newlib ../newlib-1.15.0/libgloss .

続いて、以下のようにしてnewlibとgccをまとめてビルドします。64 ビット デュアルコア インテル Xeon プロセッサー 2.8GHzの計算機では5分程で完了します。

$ cd
$ mkdir es-gcc
$ cd es-gcc
$ ../src/gcc-4.2.1/configure --prefix=/usr/local/es --target=i386-pc-es --enable-threads --enable-languages=c,c++ --with-gnu-as --with-gnu-ld --with-newlib -v
$ make
$ sudo make install
$ i386-pc-es-gcc -v
Using built-in specs.
Target: i386-pc-es
Configured with: ../src/gcc-4.2.1/configure --prefix=/usr/local/es --target=i386-pc-es --enable-threads --enable-languages=c,c++ --with-gnu-as --with-gnu-ld --with-newlib -v
Thread model: es
gcc version 4.2.1

automakeの設定

上記の手順で必要なクロス開発ツールは完了です。あとは、GNU Autoconf, Automakeを使ってconfigureスクリプトやMakefileを作成するときに、ここで作成したツールを使えるように ビルドシステムの/usr/share/automake-1.10/config.subの

# Decode manufacturer-specific aliases for certain operating systems.

という箇所に es を追加してください。

| -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* | -es* \

[esオペレーティングシステムのビルド方法に戻る]


Copyright © 2006, 2007
Nintendo Co,. Ltd.

Permission to use, copy, modify, distribute and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appears in all copies and that both that copyright notice and this permission notice appear in supporting documentation. Nintendo makes no representations about the suitability of this software for any purpose. It is provided "as is" without express or implied warranty.

SourceForge.jp