Open4
Yuniframe: ビルドシステムの改善を模索する会

とりあえずCI構成を組んでみたけど、
さすがに50GiB近く消費するものはサーバでビルドできない ...というかこれまだゲームエンジンとかアセットを載せる前のフレームワークだけだからね。。
でかい要因
ディスク消費が多い理由は簡単で、プラットフォーム間でライブラリを共有していないため。
Androidだけで x86(公式エミュレータでの動作に必要)、x86_64(microGテスト用)、ARM32/64の4種類あり、これがWebGL1バックエンド(自前 / ANGLE / Android OpenGL ES)の3種類あるので 都合12ビルド 作成される。Macではコレに加えて iPhoneOS / tvOS / macOS の3バリアントがIntel/ARMの2種類で都合6ビルド。。
削減アイデア
マトリックスを整理する。現在のYuniframeを構成するライブラリは、
- Yuniframe本体
- CWGL(C-WebGL実装): 自前Vulkan / ANGLE(静的GLES2) / PlatformGLES(Khronos標準ABI)
- glslang および SPIR-V各種ライブラリ: (ANGLEと自前WebGLで必要)
- SDL2 -- 厳密には静的GLES2版とKhronos標準ABI版があるが、YuniframeはSDL2のGLES機能を使っていないので関係ない
- ANGLE -- DirectX11版(Windowsのみ) / Vulkan版 / Metal版
たとえば、WebGL実装3種類のうち、自前の実装とANGLEはGLSL言語の処理系としてどちらも同じ glslang を使用しているので共有できる。
After
... あんま減ってないな。。
After(Mac)
MacMini 2018
cmake -DPHASE=cycle -P scripts/_localbuild.cmake 9668.45s user 851.23s system 135% cpu 2:09:09.49 total
5時間以上かかるのか。。

なんかCMakeがクラッシュする
minimizeすると file(GENERATE)
が悪いっぽい。
cmake_minimum_required(VERSION 3.12)
project(check)
add_library(dummy dummy.c)
file(GENERATE OUTPUT
${CMAKE_CURRENT_BINARY_DIR}/temp.txt
TARGET dummy
CONTENT "dummy")
CMake Error in CMakeLists.txt:
Evaluation file "/home/oku/repos/check/▒c0" cannot be read.
-- Generating done
CMake Generate step failed. Build files cannot be regenerated correctly.
Segmentation fault (core dumped)
これは何か仕様を誤解してるな。。

CONTENT
→ TARGET
の順にしたら治った
cmake_minimum_required(VERSION 3.12)
project(check C)
add_library(dummy dummy.c)
file(GENERATE OUTPUT temp$<CONFIG>.txt
CONTENT "$<TARGET_FILE:dummy>"
TARGET dummy)
これはCMakeのバグなんでは。。

SDL_config.h
を特別扱いする
SDL2の
そういや SDL2 はビルド時に生成したヘッダファイルがクライアントのビルド時にも必要なんだったな。。
いわゆる .a
をビルド間で使いまわすことしか考えてなかった。