Open4

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

okuokuokuoku

とりあえず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時間以上かかるのか。。

okuokuokuoku

なんか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)

これは何か仕様を誤解してるな。。

okuokuokuoku

CONTENTTARGET の順にしたら治った

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のバグなんでは。。