CMakeでmoshをクロスコンパイルする
moshはクロスコンパイルに関して結構熱心に対応しているので、autotoolsでもCMakeでも正常にクロスコンパイルできる。ただし、CMake版のmoshはpsyntax-moshが無く、ビッグエンディアンなアーキテクチャに対応していない。
クロスビルドにちゃんと対応しているのは、テストの効率を向上させるため。Win32ビルドであっても、gccでビルドする以上はFreeBSDなりLinuxなりでビルドしたほうがずっと早くビルドできるので。。もちろん先日のKindle版も、FreeBSD上のARM Linux向けのクロスコンパイラでCMakeを使ってビルドしている。
autotoolsビルド
autotoolsビルドは非常に簡単で、--hostに続けてアーキテクチャを指定するだけ。つまり、
- クロスコンパイラをインストールし、host tripleを調べる。host tripleは例えばx86_64-unknown-linux-gnu-gccというgccだったらx86_64-unknown-linux-gnuの部分。
- --hostに続けてhost tripleを入れてconfigureする。
./configure --host=arm-unknown-linux-gnueabi
もちろん、onigurumaやgmpを先に同様の手法でインストールする必要がある。
CMakeビルド
ただ、リトルエンディアンなアーキテクチャに対してクロスコンパイルするならCMakeビルドのほうがおすすめ。CMakeビルドの場合、onigurumaをインストールする必要は無い。
- toolchain fileを準備する
toolchain fileは、単なるCMakeファイルで、たとえばARM Linux向けならこういう内容(linux-arm.cmake)になる。ファイル名はlinux-XXX.cmakeという風にsystem_nameに合わせる。
SET(CMAKE_SYSTEM_NAME Linux) SET(CMAKE_C_COMPILER /opt/arm-cross/bin/arm-unknown-linux-gnueabi-gcc) SET(CMAKE_CXX_COMPILER /opt/arm-cross/bin/arm-unknown-linux-gnueabi-g++) SET(CMAKE_FIND_ROOT_PATH /opt/arm-cross/arm-unknown-linux-gnueabi) SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
- configする
mkdir build cd build cmake ~/repos/mosh -DCMAKE_TOOLCHAIN_FILE=/PATH/TO/linux-arm.cmake
configしたあとは、普通のCMakeプロジェクトと同様にビルドできる。