こんにちは、LINE で LINE GAME Clinet SDK の開発をしている やまぐち です。 この記事は LINE Advent Calendar2016 の 10 日目の記事です。 弊社でも iOS / Android / Unity 向けに LINE GAME Clinet SDK を提供しています。コードは共通の C++ を使っているのですが、複数のプラットフォーム向けにビルドを行う必要があってソースファイルの管理やビルド方法がバラバラで大変ですよね。そこでクロスプラットフォーム向けのビルドシステムなどを調査してCMake を使ってクロスプラットフォームビルド環境を作ることにしました。 CMake を採用した理由 巷ではクロスプラットフォームでビルドをするための色々なソリューションがあります。ざっと上げてみると CMake Ninja GYP Bazel などなど、他にも沢山あるかと思います。まず、前提として以下の要求を満たせるか、色々なソリューションを調査しました。 ソースコードの一元管理が出来る。 シェルなどからビルドが出来る。 C++ ビルドはもちろん、Java、Objective-C などもビルドが出来る。 これを元に色々とベンチマークを取りました。その結果 CMake を採用することになりました。今回 CMake を採用した理由ですが C、C++、Java、Objective-C など複数の言語のビルドが可能。 CMake は toolchain や custom target を使って柔軟にビルドが出来ます。 サードパーティのライブラリが CMake のビルドをサポートしていることが多いので、ビルド連携がしやすい。 CMakeLists.txt を自分のプロジェクトで読み込めば取り込むことが出来る! Xcode や Visual Studio のプロジェクトファイルも吐き出せる。 IDE 環境が恋しくなってもこれで安心! 昔からあるから情報が多そう。 といった感じです。最後はかなり個人的な憶測が入っていますね。では実際に CMake を使ってクロスプラットフォームビルド環境を構築していきましょう。 CMake を使ったビルド Toolchain ファイルの準備 CMake は標準で gcc、MSVC などに対応しています。標準的なコンパイラーでビルドするのであれば何も考えずにCMakeLists.txt を作れば良いのですが Android などは専用のコンパイラーなどが用意されているので CMake から利用出来るようにするために Toolchain ファイルを作ります。これは CMake に対してコンパイラーはこれを使いますよー的なファイルでこれさえ作ればどんなコンパイラー環境にも対応出来るという訳ですね。 では早速、準備をしてみましょう。まずは github に Toolchain を公開してくれている人がいますのでそちらを使わせてもらいましょう。iOS の Toolchain はここに、 Android の Toolchain はここにあります。そのままでも十分に使えるので、最初はそのまま使って良いと思います。実際に構築した環境では上記の Toolchain をベースに clang でビルド出来るようにしたり c++_static を使えるようにしたりと若干のカスタマイズを行っています。 CMakeLists.txt (…)
↧