2005年1月25日 (火曜日)

23:39:40 # Debian 「ビルドされるときのアーキテクチャ名ってどうやったらわかるの?」「dpkg-architectureを使えばよいんじゃない?uname -m だとクロスコンパイルとかができないからね.」 とか言われてもよくわからない.dpkg-architectureとは何者なのだろう.

DebianのArchitectureの名前は,実は一般的に言われているuname -mの名前と違う. また,コンパイルする環境によってuname -mの値は変わる. たとえば,最近のCeleron CPUが動いているマシンの場合,DebianとしてのArchitecture はi386なのに,uname -mはi686になる. また,GCCから見たマシンは,powerpc-linuxになる.

[23:45:45]ibookg4:~> dpkg --print-architecture
powerpc
[23:45:49]ibookg4:~> uname -m 
ppc
[23:45:52]ibookg4:~> gcc -dumpmachine
powerpc-linux
	

dpkg-architectureは, その情報を扱うためのインタフェース. Debianで利用しているArchitecture 情報とGCCが利用しているArchitecture 情報を提供してくれる. debian/rulesの中で DEB_BUILD_ARCH = dpkg-architecture -qDEB_HOST_GNU_ARCH のようにして使い,コンパイルオプション等を決定する.

このプログラムはもともとhurd-i386という移植プロジェクトで安定してコンパイルができるようにと 考えられたもの.hurd-i386は,DebianのArchitecture名がCPU名でない例. 現状ほとんどのプログラムはuname -mdpkg --print-architectureの 代わりにdpkg-architectureを使うように変更されているはず. 今後は組み込み用途のCPUへのクロスコンパイルへの要望が増えるにしたがって よりクロスコンパイルできやすいようにDebianが変わっていくのではないだろうか?

クロスコンパイルの際の設定については,「えびめも」ページにメモがある. ただ,これだけではダメで,cross用のパッケージを生成する手順がどっかにあるはず. ひさしぶりにえびめもを読んだら面白くて読み込んでしまった...ひぃ. 安定したクロスコンパイルの方法を確立するのは今後の課題. クロスコンパイル用のツールチェインのバイナリパッケージを提供するとか, できるといいんだけどなぁ... あと,pbuilderでクロスコンパイルできるようにすると楽なんだけどなぁ.

Junichi Uekawa

$Id: dancer-diary.el,v 1.85 2005/01/23 15:38:54 dancer Exp $