クロスコンパイラ (https://startide.jp/freebsd/qtopia/compiler/) - 削除

[ サイトトップ | 上へ | 編集 | 一覧・作成 ]
円周率を小数点以下二桁まで入力してください:


このページを削除します。

クロスコンパイラの作成

シャープは 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]]からクロスコンパイラ、ライブラリ、ヘッダファイル、ユーティリティを取得します。

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 にしました。

# tar xjf <somewhere>/binutils-2.17.tar.bz2 # mkdir build; cd build # --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 を使います。

また、コンパイル前に以下のパッチをあてておきます。

# tar xzf <somewhere>/gcc-2.95.2.tar.gz # patch -p0 < <somewhere>/patch-gcc (or patch-darwin) # mkdir build; cd build # --target=arm-linux --prefix=/usr/local/zaurus/Embedix/tools # make -C libiberty && make -C texinfo && make -C gcc all install

Mac OS X の場合、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