アーキテクチャごとに設定を振り分ける

同じOSを使っている場合でも、アーキテクチャが異なっていると指定するオプションが違ってくるコマンドがある。コンパイラで指定するオプションなどがそれだ。そういった場合はOSごとに設定を振り分けるのではなくて、アーキテクチャごとに設定を振り分ける。

プロンプト1.1 gccでアーキテクチャオプションを表示 - FreeBSD-current on Core 2 Duo

% gcc -march=[ここでタブキーを押す]
athlon        athlon-xp  i486  k6-3     pentium-m    pentium4    winchip2
athlon-4      athlon64   i586  k8       pentium-mmx  pentium4m         
athlon-fx     c3         i686  nocona   pentium2     pentiumpro        
athlon-mp     c3-2       k6    opteron  pentium3     prescott          
athlon-tbird  i386       k6-2  pentium  pentium3m    winchip-c6        
プロンプト1.2 gccでCPUオプションを表示 - Mac OS X on PowerPC

% gcc -mcpu=[ここでタブキーを押す]
403  501  603  604  common  power  powerpc  rios1  rios2  rsc

この場合の設定振り分けには、MACHTYPE変数を使うと便利だ。

gccの設定を参考にしてみよう

zshのgccコマンド補間設定ファイルを見てみると、リスト2.1のような処理ではじまっているところがある。なお、ここで参考にしたのはzsh 4.3.4である。MACHTYPE変数を使って処理を割り振っている感じがするだろう。

リスト2.1 zsh/4.3.4/functions/Completion/Unix/_gcc - アーキテクチャごとに設定が分岐している

case $MACHTYPE in
m68*)
  args=(
    -m68000 -m68020 -m68020-40 -m68030 -m68040 -m68881
    -mbitfield -mc68000 -mc68020 -mfpa -mnobitfield
    -mrtd -mshort -msoft-float
  )
  ;;
vax)
  args=(
    -mg -mgnu -munix
  )
  ;;

さらに、ここを抜きだして整理するとリスト2.2のようになる。

リスト2.2 アーキテクチャごとに分離している部分を整理するとこうなる

case $MACHTYPE in
m68*)
  引数にオプションを追加
  ;;
vax)
  引数にオプションを追加
  ;;
c[1234]*)
  引数にオプションを追加
  ;;
amd290?0)
  引数にオプションを追加
  ;;
arm)
  引数にオプションを追加
  ;;
m88k)
  引数にオプションを追加
  ;;
rs6000|powerpc*)
  引数にオプションを追加
  ;;
romp)
  引数にオプションを追加
  ;;
mips*)
  引数にオプションを追加
  ;;
i[3456]86|x86_64)
  引数にオプションを追加
  ;;
hppa*)
  引数にオプションを追加
  ;;
i960)
  引数にオプションを追加
  ;;
sparc)
  引数にオプションを追加
  ;;
alpha*)
  引数にオプションを追加
  ;;
clipper)
  引数にオプションを追加
  ;;
h8/300)
  引数にオプションを追加
  ;;
esac

果たしてvaxアーキテクチャでzshを使う漢たちがどれだけいるのか…それは分からない(エミュレータの開発で使ったりするんだろうか)。しかし、これくらいは振り分けが効くということは分かる。32ビット/64ビットアーキテクチャという環境の違いへの対応といった用途では、なかなか便利に使える。同じMac OS Xを使うにしても、Core 2 Duoを搭載した最近のマシンとPowerPCを使った以前のマシンを混在して使っているならば、やっぱり同じような処理が必要になる。

ただし、Mac OS Xを使っている漢たちは、若干注意してほしい。デフォルトでインストールされているzshはバージョンが古いため、Core 2 Duo搭載マシンでも、アーキテクチャはPowerPCと表示される。そのため、最新のzshをダウンロードしてきて、自分でビルドし、インストールして使うことを勧める。