2017-05-29 14 views
1

LinuxアプリケーションからBazelを使用しているRaspberry PiにJavaアプリケーションをクロスコンパイルできるようにしたいと考えています。ホストコンピュータとは異なるアーキテクチャのJREをBazelに含めるにはどうすればできますか?

私が実行している基本的な問題は、生成された起動スクリプトが、runfilesディレクトリにあるJavaランチャを参照し、ホストコンピュータに基づいてそのバイナリをパッケージ化しているようです。

--cpuをarmeabi-v7aに設定するだけで効果がないようですが、Linaroツールチェーンを使用してC++バイナリをビルドするCROSSTOOLSを入手することはできますが、同様にJavaツールを代替する方法を教えてください。

私はjava_runtime、java_runtime_suite、およびjava_toolchainのルールを使っていましたが、私はjava_toolchainを設定することができますが、ホストとターゲットのJavaアーキテクチャーを個別に柔軟にすることはできません。バージョン。

Javaランチャースクリプトを修正し、JAVABINを "/ usr/bin/java"にハードコードするとすべてが機能します(例:GPRC "greeter server"が正しく応答します)。利用可能なセットアップを有することのオフ。私は、すべてを/ usr/bin/javaに渡すランチャーを提供することができることを認識していますが、私はBazelビルドの自己完結型の性質が好きであり、その構造の中で作業する方が好きです。

私は何が欠けていますか? BazelでJavaをクロスコンパイルするための正しい/予想されるアプローチは何ですか?

答えて

2

-javabase引数を使用して、ターゲット構成(Raspberry Pi)に使用するJVMと--host_javabase引数を使用して、ビルド中に使用するJVMを指定できます。

- javabaseがJVMがRaspberry PI上で見つかった場所を示すjava_runtimeルールを指す場合、それは機能するはずです。

+0

ハ!私はビルドの結果で--javabaseを呼び出すことも考えましたが、私はbazel呼び出しでそれを呼び出すとは思わなかった。ありがとう! – SterlingDragon

関連する問題