LoginSignup
0
1

More than 3 years have passed since last update.

TBB(Thread Building Blocks)を aarch64(Android) CMake ビルドするメモ

Posted at

背景

  • TBB を使っているライブラリを Android 向けにビルドしたいため, TBB をビルドせねばならない.
    • 昨今だったら, C++11 thread でも十分そうであるが, 既存ライブラリを書き換えるのがめんどい
  • TBB オフィシャルでは, 基本 Makefile しか提供されていない
    • 一応 Android aarch64 は対応しているが...

TBB のソースコードについて.

ソースコードがカオスです. あんまりいじりたくないですね.

AARCH64 固有のフラグ

aarch64 固有のビルド設定(aarch64 依存のコード)は, DO_ITT_NOTIFY を off にする以外は特にないようです.

CMake ビルド

add_submodule でビルド

一応すでに対応されているものがあります.

https://github.com/wjakob/tbb
(ちょっとふるい)

また, check_cxx_compiler_flag とか呼び出して CMAKE_CXX_FLAGS を直接書き換えているので, このまま使うにはおすすめしません.

外部コマンド呼び出しでビルド

オフィシャルにあります.

ただ, cross compile に対応しているかは不明です.

tbb git repo に対して add_submodule

wjakob/tbb を参考に, CMakeLists.txt だけ別ででっち上げてビルドするのを embree-aarch64 に作りました.

static build だけ対応しています.

ただ, このビルドだと, 実行時にコア数をうまく見つけてくれないようです.

ビルドのメモ

インクルードパス

同名のヘッダファイルが public 用(include), private 用(src)にあるので, public 用を先に include path に指定しないとコンパイルエラーになります(tbb ソースでは, public ヘッダファイルも <file.h> ではなくて "file.h" で読んでいる).
(また, public ヘッダパスを CMake target_include_dir で INTERFACE だとなぜか include path に追加されない)

ビルド時に生成されるファイル

version_string.ver

が必要です. 適当にでっちあげてもよさそうな感じがあります.

.def ファイル

TBB は, リンク用の .def ファイルを linux, macOS でも作ります.
add_subdirectory() + static link だと不要かと思います.

コンパイルフラッグとか

  • DO_ITT_NOTIFY : プロファイリング用. x86 だけ. x86 では disable するとなぜかコンパイルできないです.

  • -mrtm compiler flag : トランザクショナルメモリ用.

disable してもよさそう?

  • deprecated warning : tbb/src/ のファイルは結構 deprecated warning が出ます. TBB を使っているライブラリが使用していなければ, ビルドからはずすとよいでしょう.

TODO

  • 自前ビルドすると, 実行時コア数うまく見つけてくれないらしい問題を解明する
  • Makefile ビルドなどとの性能比較をする
0
1
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
0
1