クロスコンパイル¶
Crystalは基本的なクロスコンパイルをサポートしています。
これを実現するために、コンパイラ実行ファイルは2つのフラグを提供します。
--cross-compile
: 指定するとクロスコンパイルモードが有効になります。--target
: 使用するLLVMターゲットトリプルを指定し、デフォルトのコンパイル時フラグを設定します。
--target
フラグを取得するには、ターゲットシステムにインストールされたLLVMを使用してllvm-config --host-target
を実行します。たとえば、Linuxでは「x86_64-unknown-linux-gnu」と表示される場合があります。
--target
で暗黙的に設定されていないコンパイル時フラグを設定する必要がある場合は、-D
コマンドラインフラグを使用できます。
これら2つを使用して、MacでLinux上で実行されるプログラムを次のようにコンパイルできます。
crystal build your_program.cr --cross-compile --target "x86_64-unknown-linux-gnu"
これにより、.o
(オブジェクトファイル)が生成され、クロスコンパイルしようとしているシステムで実行するコマンドを含む行が出力されます。たとえば、
cc your_program.o -o your_program -lpcre -lrt -lm -lgc -lunwind
この.o
ファイルをそのシステムにコピーし、これらのコマンドを実行する必要があります。これを実行すると、実行ファイルがターゲットシステムで使用できるようになります。
この手順は通常、コンパイラ自体を使用して、コンパイラがまだ利用できない新しいプラットフォームに移植する場合に行われます。Crystalコンパイラをコンパイルするには古いCrystalコンパイラが必要なため、まだコンパイラが存在しないシステム用にコンパイラを生成する方法は2つだけです。
- Rubyで記述されたコンパイラの最新バージョンをチェックアウトし、そのコンパイラから現在のバージョンになるまで次のバージョンをコンパイルします。
- ターゲットシステムで
.o
ファイルを作成し、そのファイルからコンパイラを作成します。
最初の方法は長く面倒ですが、2番目の方法ははるかに簡単です。
クロスコンパイルは他の実行ファイルに対して行うことができますが、主なターゲットはコンパイラです。Crystalがシステムで使用できない場合は、そこでクロスコンパイルを試すことができます。