クロスコンパイラ
- 編集
[
サイトトップ
|
上へ
|
編集
|
一覧・作成
]
クロスコンパイラ * クロスコンパイラの作成 シャープは SL-Linux をターゲットとした Linux/i386 ホスト用の コンパイル環境を供給しています。 Linux/i386 以外の OS をホストとするクロスコンパイル環境を構築するには、 シャープの供給するツールチェインを雛型に、コンパイラ等の実行ファイルを 目的とするホスト OS のものに置き換えます。 ここでは FreeBSD (6.1-RELEASE/i386) または Mac OS X (10.4.7/i386) を 例とし、これをホストと想定したクロスコンパイル環境を作成します。 ** 1. ツールチェインの入手 [#wd963f11] [[シャープの開発者向けページ:http://developer.ezaurus.com/sl_j/tool/tools.htm]] からクロスコンパイラ、ライブラリ、ヘッダファイル、ユーティリティを取得します。 - [[binutils-cross-arm-2.11.2-0.i386.rpm:http://developer.ezaurus.com/sl_j/tool/tools/binutils-cross-arm-2.11.2-0.i386.rpm]] - [[gcc-cross-sa1100-2.95.2-0.i386.rpm:http://developer.ezaurus.com/sl_j/tool/tools/gcc-cross-sa1100-2.95.2-0.i386.rpm]] - [[glibc-arm-2.2.2-0.i386.rpm::http://developer.ezaurus.com/sl_j/tool/tools/glibc-arm-2.2.2-0.i386.rpm]] - [[linux-headers-arm-sa1100-2.4.6-3.i386.rpm:http://developer.ezaurus.com/sl_j/tool/tools/linux-headers-arm-sa1100-2.4.6-3.i386.rpm]] ** 2. ツールチェインの展開 [#fd07f5c1] パッケージは RPM で供給されているので、 rpm2cpio を使って展開します。rpm2cpio コマンドは rpm パッケージに含まれている ものや、Perl スクリプトのものなどがありますので好みで入手してください。 オリジナルの Linux 版ツールチェインのインストール先は /opt 以下ですが、 今回は /usr/local/zaurus 以下にインストールすることにします。 # foreach i ( *.rpm ) foreach? rpm2cpio $i | cpio -id foreach? end # find opt -type d | xargs chmod go+rx # mkdir -p /usr/local/zaurus # mv opt/Embedix /usr/local/zaurus ** 3. GNU binutils のビルド [#l3a757aa] www.ring.gr.jp などから GNU binutils を入手し、 /usr/local/zaurus/Embedix/tools/bin の Linux 用バイナリに上書きします。 binutils のバージョンは最新の 2.17 にしました。 - [[binutils-2.17.tar.bz2:http://www.t.ring.gr.jp/archives/GNU/binutils/binutils-2.17.tar.bz2]] # tar xjf <somewhere>/binutils-2.17.tar.bz2 # mkdir build; cd build # ../binutils-2.17/configure \ --prefix=/usr/local/zaurus/Embedix/tools --target=arm-linux # make && make install ** 4. GNU C, C++ コンパイラ (2.95.2) のビルド [#z5400514] C, C++ のコンパイルコマンドを作成し、 /usr/local/zaurus/Embedix/tools/bin の Linux 用バイナリに上書きします。 後述する Qtopia の開発環境を構築する場合に C++ の互換性の問題を避けるため、GCC のバージョンは 2.95.2 を使います。 - [[gcc-2.95.2.tar.gz:http://www.t.ring.gr.jp/archives/GNU/gcc/gcc-2.95.2.tar.gz]] また、コンパイル前に以下のパッチをあてておきます。 - [[patch-gcc:http://www.startide.jp/qtopia/qtopia/patch-gcc]] (FreeBSD 6.1-RELEASE 用) - [[patch-darwin:http://www.startide.jp/qtopia/qtopia/patch-darwin]] (Mac OS X 10.4 用) # tar xzf <somewhere>/gcc-2.95.2.tar.gz # patch -p0 < <somewhere>/patch-gcc (or patch-darwin) # mkdir build; cd build # ../gcc-2.95.2/configure \ --target=arm-linux --prefix=/usr/local/zaurus/Embedix/tools # make -C libiberty && make -C texinfo && make -C gcc all install Mac OS X の場合、configure スクリプトがホストタイプを自動検出 できないので、以下のように騙します。 # ../gcc-2.95.2/configure --host=i386-apple-freebsd \ --target=arm-linux --prefix=/usr/local/zaurus/Embedix/tools ** 5. 差し替えた実行形式の抽出 [#sdb8c13d] ここまでの作業の結果 FreeBSD/Mac OS X用の実行形式が /usr/local/zaurus/Embedix 以下にインストールされましたが、 同時に余分なファイルも上書きされてしまっているので、 一旦差し替え対象となる実行形式を取り出します。 差しかえの対象となるファイルのリストは次の通りです。 bin/arm-linux-addr2line bin/arm-linux-ar bin/arm-linux-as bin/arm-linux-ld bin/arm-linux-nm bin/arm-linux-objcopy bin/arm-linux-objdump bin/arm-linux-ranlib bin/arm-linux-readelf bin/arm-linux-size bin/arm-linux-strings bin/arm-linux-strip bin/arm-linux-c++filt bin/arm-linux-g++ bin/arm-linux-c++ bin/arm-linux-gcc bin/arm-linux-gcj lib/gcc-lib/arm-linux/2.95.2/cc1 lib/gcc-lib/arm-linux/2.95.2/cc1plus lib/gcc-lib/arm-linux/2.95.2/collect2 lib/gcc-lib/arm-linux/2.95.2/cpp なお、ここにはシャープの配布パッケージに含まれていた arm-linux-gasp (as用プリプロセッサ) が含まれていませんが、これは最近の binutils で 必要とされなくなったためだと思います。 [[上記のリスト:http://www.startide.jp/qtopia/qtopia/ebinaries]] を /tmp/ebinaries などというファイルに保存し、 これを使って、インストール済のバイナリをパッケージし、 # (cd /usr/local/zaurus/Embedix/tools && strip `cat /tmp/ebinaries` && tar czf - `cat /tmp/ebinaries` ) > ebinaries.tgz 一旦 Embedix 以下を削除し、 もういちどツールチェインをインストールしなおし、 保存した ebinaries.tgz を上書きします。 # rm -rf /usr/local/zaurus/Embedix # foreach i ( *.rpm ) foreach? rpm2cpio $i | cpio -id foreach? end # find opt -type d | xargs chmod go+rx # cat ebinaries.tgz | (cd /usr/local/zaurus/Embedix/tools; tar xzf -) ** 6. 動作確認 [#s2943d67] これでコマンドラインものの開発準備は完了。 試しに、hello.c をコンパイルしてみます。 > % cat > hello.c > #include <stdio.h> > > int > main() > { > printf("hello\n"); > } > ^D > % env CC=/usr/local/zaurus/Embedix/tools/bin/arm-linux-gcc make hello > /usr/local/zaurus/Embedix/tools/bin/arm-linux-gcc -O -pipe hello.c -o hello > % * Linux 互換機能によるコンパイル環境 [#a91c7743] FreeBSD の Linux 互換機能を使ってコンパイラを実行することもできます。 よく紹介されているのはこちらの方法です。 ** 1. Linux 互換環境のセットアップ [#k6e2a60c] ports で Linux 互換環境をインストールします。 ついでにシンボリックリンクもはっておきます。 # cd /usr/ports/emulators/linux_base-fc4 # make install # ln -s /compat/linux/opt /opt ** 2. ツールチェインのインストール [#w0c08a77] rpm でインストールします。 # rpm -i --ignoreos --root /compat/linux \ gcc-cross-sa1100-2.95.2-0.i386.rpm \ glibc-arm-2.2.2-0.i386.rpm \ linux-headers-arm-sa1100-2.4.6-3.i386.rpm \ binutils-cross-arm-2.11.2-0.i386.rpm
円周率を小数点以下二桁まで入力してください:
Copyright (C) 2008-2022
Startide Project,
all rights reserved.