【お知らせ】プログラミング記事の投稿はQiitaに移行しました。

クロス開発の環境変数

id:n7shi:20100113でも取り上げましたが、OpenBSD上で他のアーキテクチャカーネルをクロスビルドする手順はid:syuu1228:20090805にまとめられています。カーネルをビルドするときの環境変数が多いので、簡略化するための俺々スクリプトを作りました。

cross-env.mk

以下を/usr/src/cross-env.mkに保存します。

.if !defined(TARGET)
error:
	@echo "Please set TARGET."
	@exit 1
.else
all: cross-${TARGET}
install: cross-${TARGET}
	cp cross-${TARGET} /usr/local/bin
cross-${TARGET}:
	echo "#!/bin/sh" > $@
	echo "TARGET=${TARGET} MACHINE=${TARGET} MACHINE_ARCH=${TARGET_ARCH} MACHINE_ENDIAN=${TARGET_ENDIAN} ${CROSSENV} \$$@" >> $@
	chmod 755 $@
.include "Makefile"
.endif

使用方法

クロスgccまで従来通りに作ります。

cd /usr/src
TARGET=loongson make cross-gcc

今回のMakefileを使用して、環境変数をセットするスクリプトを生成します。

TARGET=loongson make -f cross-env.mk install

スクリプトが/usr/local/bin/cross-loongsonにインストールされます。名前はTARGETで指定したものが反映されます。カーネルのビルド時にこのスクリプトを前置して呼び出します。

cd /usr/src/sys/arch/loongson/conf
config GENERIC
cd ../compile/GENERIC
cross-loongson make depend all

これでカーネルが出来上がります。