Open5
Yuniframe: macOS/iOS移植 (ビルドチェック編)

いろいろやってみたんだけど、CIをやろうとするとXcodeを直接使うのは複雑過ぎるということで、ビルドと"ビルドチェック"を分離して実装することにした。。
- ビルド : Xcodeでアプリケーションを作って実機なりエミュレータなりで動作させること
- ビルドチェック : SDKのツールチェインでC/C++部分をコンパイルすること
ビルドチェックはNinjaでできるし、 CMAKE_NINJA_OUTPUT_PATH_PREFIX
を使えば、 subninja
で複数のCMakeビルドツリーを纏めることも(多分)可能なのでイテレーションを短縮できるんではなかろうか。。
→ まとめるのはダメだった。 Order-only dependenciesにここで指定したprefixが付かないので、ターゲット名を被らせることができない。
ninja: error: Win64MSVC-SDL2-ANGLE-DirectX11-RelWithDebInfo/build.ninja:133: multiple rules generate cmake_object_order_depends_target_angle_static [-w dupbuild=err]

macOSにはGLESは無い
/Users/okuoku/devel/yuniframe/build/sdl2/sdl2/include/SDL_egl.h:33:10: fatal error: 'EGL/egl.h' file not found
#include <EGL/egl.h>
^~~~~~~~~~~
1 error generated.
すっかり忘れてた。。いやまぁOpenGLに移植しても良いのかもしれないけど今さら過ぎる。。
これは通常のMetalビルドでも対策必要なのでとりあえず -DSDL_USE_BUILTIN_OPENGL_DEFINITIONS
を入れてお茶を濁す。

MACOSX_RPATH
の警告
CMakeのconfigure時に警告が出る。
CMake Warning (dev):
Policy CMP0042 is not set: MACOSX_RPATH is enabled by default. Run "cmake
--help-policy CMP0042" for policy details. Use the cmake_policy command to
set the policy and suppress this warning.
MACOSX_RPATH is not specified for the following targets:
SPIRV-Tools-shared
This warning is for project developers. Use -Wno-dev to suppress it.
... そもそもSPIRV-Tools-sharedはビルドする必要がない。が、今のところ無効化する方法がない。
まぁOnでかまわないので明示的にOnにしておく。
(cmake_policy
で設定するとsubdirectoryのminimum versionで挙動が上書きされてしまう。)

何故かデフォルトのC++バージョンが低い
/Users/okuoku/devel/yuniframe/integ/ext/cwgl/glslang/glslang/MachineIndependent/localintermediate.h:249:49: warning: deleted function definitions are a C++11 extension [-Wc++11-extensions]
TNumericFeatures(const TNumericFeatures&) = delete;
^
... 何で。。?とりあえずプリプロセスして確認してみると:
okuoku@prism build % touch dummy.cpp
okuoku@prism build % /Users/okuoku/devel/xcodes/install/Xcode-14.3.1.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ -E -dM dummy.cpp
何も指定しない場合は:
#define __VERSION__ "Apple LLVM 14.0.3 (clang-1403.0.22.14.1)"
#define __cplusplus 199711L
C++11ですら無いってどういう事だよ。。とりあえず17に上げる。

Xcodeを使わずにビルドだけNinjaでやる
これが結構辛い。。細かいことは cmake-toolchains のman pageにある。
-
CMAKE_SYSTEM_NAME
はiOS
とかtvOS
のように設定する。 -
CMAKE_OSX_SYSROOT
は XCode以外では自動検出されないので手動で/Volumes/devel/xcodes/install/Xcode-14.3.1.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk
みたいに設定する。 -
CMAKE_OSX_ARCHITECTURES
はarm64
かx86_64
。
CMAKE_OSX_SYSROOT
に設定すべきパスのprefixは xcode-select -p
コマンドで取得できる。