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 -m やdpkg --print-architectureの 代わりにdpkg-architectureを使うように変更されているはず. 今後は組み込み用途のCPUへのクロスコンパイルへの要望が増えるにしたがって よりクロスコンパイルできやすいようにDebianが変わっていくのではないだろうか?
クロスコンパイルの際の設定については,「えびめも」ページにメモがある. ただ,これだけではダメで,cross用のパッケージを生成する手順がどっかにあるはず. ひさしぶりにえびめもを読んだら面白くて読み込んでしまった...ひぃ. 安定したクロスコンパイルの方法を確立するのは今後の課題. クロスコンパイル用のツールチェインのバイナリパッケージを提供するとか, できるといいんだけどなぁ... あと,pbuilderでクロスコンパイルできるようにすると楽なんだけどなぁ.
$Id: dancer-diary.el,v 1.85 2005/01/23 15:38:54 dancer Exp $