LoginSignup
2
3

More than 5 years have passed since last update.

Boost を Android 向けに bjam ビルドするテクニック(NDK r19c or later)

Last updated at Posted at 2019-04-02

背景

  • Boost をどうしても利用しないといけない状況にある(使いたいライブラリが Boost を使っていて, コードを書き換えるにはめんどいなど)
  • Boost の機能全部を利用するわけではない
  • Android だと NDK の関係でコンパイラ指定が変わるので(r19 から standalone_toolchain.py でコンパイラのセットアップは deprecated になり, コンパイラの直指定に変わった), 明示的にコンパイラ設定をしたい
  • 本当は cmake でのビルドにしたいが, bcm https://github.com/boost-cmake/bcm などがあるが, 理想は boost を submodule としてビルドしたいので, bcm は求めているのと違う感じもするのでとりあえず bjam/b2 でビルドする

対象

  • NDK r19c or later
  • Boost 1.69.0

ネットでは古い NDK を対象にする記事が多いので, ここでは NDK r19c or later(clang 限定 + standard_toolchain ではなく, aarch64-linux-android28-clang++ のようにコンパイラを直指定のバージョン)を扱います.

ちなみに gcc は NDK18 あたりで廃止され, clang のみ(+ libc++)になりました.

BCP

まず, boost 全部を使う必要はないので, bcp で必要なモジュールだけ抜き出します.
(bjam で --without-*** という手もがあるがめんどい)

bcp では, 使いたい機能(+ file?)を指定すると, 指定したターゲットのディレクトリに一式よろしくファイルをコピーします

$ bcp <<packages>> /path/to/target

ライブラリのコンパイルが不要(header file だけで完結)の場合はここで終了です.
お疲れさまでした. :relaxed:

ライブラリのコンパイルが必要なもの(e.g. system, thread)では,

build bootstrap.bat bootstrap.sh boostcpp.jam boost-build.jam

を bcp の <<packages>> に含めておきます.

ビルドカスタム設定

user-config.jam で, コンパイラ指定をします.
$NDK_ROOT/toolchains/llvm/prebuilt/linux-x86_64/bin にコンパイラがあります.

# Set path to toolchain
local AndroidToolchainRoot =
/home/syoyo/local/android-ndk-r19c/toolchains/llvm/prebuilt/linux-x86_64
;

using clang
: android
: $(AndroidToolchainRoot)/bin/aarch64-linux-android28-clang++
;

など.

b2--user-config オプションでファイルのありかを指定し, toolset=clang とすることで, user-config.jamusing clang の設定を見るようになります.

$ ./configure
$ ./b2 --reconfigure toolset=clang target-os=android link=static --user-config=user-config.jam

などとしてビルドします. デフォルトでは 1 コアしか使わないので, CPU のコア数に応じて -j8 などを追記ください.

実例

の README と boost/user-config.jam を参考ください.

TODO

  • link 周りを改善する(user-config.jam で ldflags 指定とか). 現状 .so ビルド(link=dynamic)だと -lrt が見つからないなどでエラーが出る.
  • cmake でビルドできるようにしたい(NDK r19c or later で)
  • b2 で lzma などの探索を強制的に disable する
  • ./configure 時にコンパイラ指定とかできるかしらん?
2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3