BazelをRaspberry Pi3にインストールする方法です。bazelをRaspberry Piにインストールする方法は、下記参考リンクでも紹介されているのですが、私の環境ではなぜかビルドできなかったので回避方法などをメモっておきます。
【環境】
・Bazel 0.5.3
・Raspbian 8.0(kernel 4.4.34)
・protoc 3.1.0
・javac 1.8.0_65
・gcc 4.9
・g++ 4.9
【参考リンク】
https://github.com/samjabrahams/tensorflow-on-raspberry-pi/blob/master/GUIDE.md
https://blog.meinside.pe.kr/TensorFlow-and-Go-on-Raspberry-Pi/
なぜかビルドできない
上記リンクの”Build Bazel”記載通り、bazel-0.5.3-dist.zipをダウンロードして、-J-Xmx500Mオプションを追加して、./compile.shを叩いたら下記エラーが出ました。
中略 #error This code for 64 bit Unix. ^
いやまぁ、32bitなのでごもっともなエラーなのですが…。
発生しているのはsrc/tools/singlejar/mapped_file.hの下記部分です。
1 | #if !((defined(__linux__) || defined(__APPLE__) || defined(__FreeBSD__)) && \ |
2 | __SIZEOF_POINTER__ == 8) |
3 | #error This code for 64 bit Unix. |
4 | #endif |
gccの-Eオプションでプリプロセッサ動作後を確認してみると。
__SIZEOF_POINTER__ == 4となっているので、上記#errorに引っかかります。
さて、どうしたものか…。
このコード自体は、bazel 0.3.xの頃から入ってるので、ビルドできないのは私の環境が原因のような気はしますが。
*何故か上手くビルドできる場合もある?何回も試していたらなぜかビルドできた。でも、結局原因がわからずでした。
*一応issuesにも同様の問題の記載がありましたが…(書きべき場所が違う?)
https://github.com/bazelbuild/bazel/issues/606の最後です。
対策後のインストール方法
ということで、調べてみたのですがコレっ!と言った解放が見つからず、暫定的に下記方法でビルドすることができました。
取り敢えず、ビルド成功したので問題なさそうですが、確かなことはわかりません。
1.ソースコードのダウンロード
2 | unzip -d bazel bazel-0.5.3-dist.zip |
2.依存パッケージのインストール
1 | sudo apt-get install pkg-config zip g++ zlib1g-dev unzip |
3.bootstrap fileの編集
1 | cd bazel |
2 | vi scripts/bootstrap/compile.sh |
124行目に”-J-Xmx500M”を追加
1 | //中略:124行目// |
2 | -encoding UTF-8 "@${paramfile}" -J-Xmx500M |
4.src/BUILDの編集※コレを追加
※Bazel0.6.1では不要
1 | vi src/BUILD |
182行目を下記の通りに変更
・変更前
1 | "//src/tools/singlejar:singlejar" , |
・変更後
1 | "//src/java_tools/singlejar:SingleJar_deploy.jar" , |
c++実装のsinglejarではなくjava実装のsinglejarを使うように変更(たぶん)
5.ビルド
1 | ./compile.sh |
約1時間ぐらいかかります。
ビルドが成功するとoutput/bazelができています。
あとがき
かなりハマった。つかれた。