環境構築の方法

書籍サポートページ で配布しているアセンブラ出力環境の,環境構築方法です. gccバージョン3版・バージョン4版共通です.

※ 環境構築の方法については書籍の第3部で詳しく説明していますので, よくわからなければそちらも参考にしてみてください.

使いかた

以下,環境構築の方法の説明です.cross2やcross-gcc4を利用する場合は, 「cross」→「cross2」,「cross」→「cross-gcc4」などのように適宜 読み変えてください.

準備手順

以下を実施して,ツール類の準備をする.

~>% tar xvzf cross-XXXXXXXX.tgz
~>% cd cross/toolchain
~/cross/toolchain>% ./fetch.sh    (ツール類をダウンロードしMD5チェック)
~/cross/toolchain>% ./setup.sh    (ツール類を展開しパッチ当てする)
~/cross/toolchain>% cd ..
~/cross>% 
以下はとくに行わなくてもよいが,マルチコアのPCならば,以下で-jオプションを 有効にしておくとビルドが高速になってとてもよい.全アーキビルドとかやる場合には やっておいたほうがいい.
※ config.shはbuildディレクトリ以下にも同名のものが存在するので混同しない ように注意.
~/cross>% vi config.sh
(#makeopt="-j 2" の行のコメントを外して有効化して,コア数に合わせて -j 4 とかにする)
さらに以下を行って,インストール先のディレクトリにユーザ権限で書き込みできる ようにしておく.システムディレクトリを開けるのが嫌だったら上記config.shを修正 してインストール先を/usr/local/cross とかでなくユーザのホームディレクトリ とかにしておくか,カスタムでビルド&suしながらインストールを繰り返しながら インストールする.
~/cross>% su
# mkdir /usr/local/cross
# chmod 777 /usr/local/cross
# exit
~/cross>% 

gmp,mpfr,mpcのインストール

※ 以下はgcc4の場合のみ行ってください.gcc3では必要ありません

gmp,mpfr,mpcのインストール状況をチェックする.

~/cross>% cd build
~/cross/build>% ./config.sh
※ これでシステムに(apt-getなどによって)すでにインストール済みの gmp,mpfr,mpcがあれば,以下のようにして検出される.
~/cross/build>% ./config.sh
-------- configuration parameters --------
tool        = gcc
...(中略)...
gmp         = gmp-5.1.1  (これは無視.単にconfig.shで指定されているバージョン)
mpfr        = mpfr-3.1.2 (これは無視.単にconfig.shで指定されているバージョン)
mpc         = mpc-1.0.1  (これは無視.単にconfig.shで指定されているバージョン)
...(中略)...
gmp_dir     = /usr/local (gmpは/usr/localにインストール済み)
mpfr_dir    = /usr/local (mpfrは/usr/localにインストール済み)
mpc_dir     = /usr/local (mpcは/usr/localにインストール済み)
...(後略)...
無ければ無いよと言われて,以下のインストール作業が必要になる.ただし検出された としても,バージョン不整合の相性問題が置きやすいので,やっぱり以下の インストール作業を行って,個別にビルド&インストールしておいたほうがよい.

インストールはスクリプト一発でできる.

~/cross/build>% ./setup-all.sh
終わったらもう一度 config.sh を実行して,gmp,mpfr,mpcがある場所が 「/usr/local/cross」になっていることを確認する.
~/cross/build>% ./config.sh
-------- configuration parameters --------
...(中略)...
gmp_dir     = /usr/local/cross
mpfr_dir    = /usr/local/cross
mpc_dir     = /usr/local/cross
...(後略)...

toolchainのビルドとインストール

上記の「準備手順」をひととおり行った後,インストール規模に応じて以下を行う.

すべてのアーキテクチャの環境を全インストールする場合

※ HDDの空き容量が数GB単位で必要なので注意(とくにcross2は巨大).時間もかかる.

上記の「準備手順」を行ったあと,以下を行う.すんごく時間がかかるので注意. ビルド中はbuildディレクトリ以下で ls * とかやることで,進捗を知ることができる. 基本,数時間(PC性能によっては数日)PCをつけっぱなしにする覚悟で実行する こと.

~/cross/build>% ./build-install-all.sh
ホームディレクトリの容量が心配な場合には,上記でなく以下を実行すると, ビルド用のワークディレクトリを削除しながらビルドを行う.
~/cross/build>% ./build-install-clean-all.sh

特定のアーキテクチャのみインストールする場合

上記の「準備手順」を行ったあと,以下を行う.

~/cross/build>% ./build-install-all.sh arm-elf mips-elf
アーキテクチャ名は build/gcc/targets.sh を参照.

build-install-all.sh の他に build-install-clean-all.sh でも, 同様にアーキテクチャ指定できる.

カスタムで個別にインストール作業する場合

以下に例をいくつか.以下はbinutilsの例だが,gccやgdbに関しても同様に可能.

~/cross/build>% cd binutils
~/cross/build/binutils>% ./build.sh    (binutilsを全アーキテクチャに対してビルド)
~/cross/build/binutils>% ./install.sh  (全アーキテクチャに対してインストール.事前にビルドが必要)
~/cross/build/binutils>% ./clean.sh    (全アーキテクチャのワークディレクトリを削除)
~/cross/build/binutils>% ./build.sh arm-elf mips-elf (ARMとMIPSをビルド)
~/cross/build/binutils>% ./install.sh arm-elf (ARMのみインストール)
~/cross/build/binutils>% ./clean.sh mips-elf (MIPSのみ削除)
~/cross/build/binutils>% ./all.sh -build -install arm-elf mips-elf (ARMとMIPSについて,ビルドとインストールを行う)
build.shやinstall.shは,実際には内部でall.shを呼び出しているだけなので, 基本的にはall.shですべての作業ができる.

※ 以前はbuild.sh,install.sh,clean.shが独立していたため,ワークディレクトリを 削除しながらビルドを進めることができませんでした(全ビルド,全インストール後に 全削除,ということしかできなかった). 今回は処理をall.shにまとめてさらにアーキ指定できるようにすることで, アーキテクチャ単位でビルド・インストール・クリーンの一連の処理を行えるように してあります.で,build.shとかはall.shを適切なパラメータで呼び出すだけに なっています.

注意点

~/cross/build>% ./build-install-clean-all.sh
~/cross/build>% cd ../binutils
~/cross/build/binutils>% ./build.sh ; install.sh ; clean.sh
~/cross/build/binutils>% cd ../gcc
~/cross/build/gcc>% ./build.sh ; install.sh ; clean.sh
~/cross/build/binutils>% cd ../gdb
~/cross/build/gdb>% ./build.sh ; install.sh ; clean.sh
では,最終的にインストールされる結果は同じです.しかし順番が異なります.

前者はツール(binutils,gcc,gdb)ごと,アーキテクチャごとに 「build, install, clean」を順番に行います.このためビルド用の ワークディレクトリを細かく削除しながらビルドを行います.ビルド用のHDDの 消費量は,一時的に数100MBくらいです.

後者はbinutilsを全アーキで全ビルド・全インストールを行った後に ワークディレクトリを全削除する,という順番になります.その後のgccも同様です. このためワーク用に,HDDを一時的に大量に(数GB単位で)消費することになります.

アセンブラの出力

toolchainのインストール後は,以下でアセンブラを出力させることができます.

~/cross/build>% cd ../sample
~/cross/sample>% make clean ; make
~/cross/sample>% ls *.d
~/cross/sample>% more mips-elf.d
以下のようにすると,アーキテクチャ単位で出力できます. いろいろ遊んでみてください.
~/cross/sample>% make mips-elf.d
以下でHello Worldが実行できます.
~/cross/sample>% cd ../exec
~/cross/exec>% make clean ; make ; make run
~/cross/exec>% cat *.not *.sot
以下でprintf()によるHello Worldが実行できます.
~/cross/exec>% cd ../printf
~/cross/printf>% make clean ; make ; make run
~/cross/printf>% cat *.not *.sot

メールは kozos(アットマーク)kozos.jp まで