# Author: mosra pkgname=emscripten-magnum pkgver=dev.wasm.webgl2 pkgrel=1 pkgdesc="C++11/C++14 graphics middleware for games and data visualization (Emscripten WebGL 2.0, wasm)" arch=('any') url="https://magnum.graphics" license=('MIT') depends=('emscripten-corrade') makedepends=('cmake' 'emscripten' 'corrade' 'ninja' 'rsync') options=('!strip' '!buildflags') _rootdir=$startdir/../../ prepare() { # rsync can't create the directory on its own if it doesn't exist at all, # heh mkdir -p $(em-config CACHE)/sysroot/include/ # This is needed in order to fill ~/.emscripten_cache/sysroot/ with # up-to-date dependency headers and libs. There's # embuilder build sysroot --force # as suggested in https://github.com/emscripten-core/emscripten/pull/13090 # that does the same in a builtin way, but it DELIBERATELY does not # preserve timestamps in any way, forcing a full rebuild every time. Why?! # https://github.com/emscripten-core/emscripten/blob/0566a76b500bd2bbd535e108f657fce1db7f6f75/tools/shared.py#L687 # Could use cp -rp instead of rsync if the system include dir didn't have # that stupid designed-to-fail version.h :( rsync -rlt /usr/lib/emscripten/system/include/ --exclude=emscripten/version.h $(em-config CACHE)/sysroot/include/ } build() { if [ ! -d "$_rootdir/build-emscripten-wasm-webgl2" ] ; then mkdir "$_rootdir/build-emscripten-wasm-webgl2" cd "$_rootdir/build-emscripten-wasm-webgl2" cmake .. \ -DCMAKE_TOOLCHAIN_FILE="$_rootdir/toolchains/generic/Emscripten-wasm.cmake" \ -G Ninja fi cd "$_rootdir/build-emscripten-wasm-webgl2" # Put tests into a separate target as they take ages to build. They're # built only inside check() so `makepkg --nocheck` will skip building them. # # Colored output is enabled implicitly. If Ninja detects it's outputting to # a pipe, it strips it away from the output; Clang unfortunately doesn't # have any env var to temporarily disable colors. The inverse, i.e. # preserving colors when Ninja outputs to a pipe can be done with # CLICOLOR_FORCE=1: https://github.com/ninja-build/ninja/issues/2196 cmake .. \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_INSTALL_PREFIX=/usr/lib/emscripten/system \ `# Make libc++ remove transitive includes, both for faster build` \ `# times and to detect if we're missing a transitive include. Works` \ `# with libc++ 16+.` \ -DCMAKE_CXX_FLAGS="-D_LIBCPP_REMOVE_TRANSITIVE_INCLUDES" \ -DCMAKE_COLOR_DIAGNOSTICS=ON \ -DMAGNUM_DEPLOY_PREFIX=/srv/http/emscripten-webgl2 \ -DMAGNUM_TARGET_GLES2=OFF \ -DMAGNUM_WITH_AUDIO=ON \ -DMAGNUM_WITH_EMSCRIPTENAPPLICATION=ON \ -DMAGNUM_WITH_SDL2APPLICATION=ON \ -DMAGNUM_WITH_WINDOWLESSEGLAPPLICATION=ON \ -DMAGNUM_WITH_ANYAUDIOIMPORTER=ON \ -DMAGNUM_WITH_ANYIMAGECONVERTER=ON \ -DMAGNUM_WITH_ANYIMAGEIMPORTER=ON \ -DMAGNUM_WITH_ANYSCENECONVERTER=ON \ -DMAGNUM_WITH_ANYSCENEIMPORTER=ON \ -DMAGNUM_WITH_ANYSHADERCONVERTER=ON \ -DMAGNUM_WITH_MAGNUMFONT=ON \ -DMAGNUM_WITH_OBJIMPORTER=ON \ -DMAGNUM_WITH_TGAIMAGECONVERTER=ON \ -DMAGNUM_WITH_TGAIMPORTER=ON \ -DMAGNUM_WITH_WAVAUDIOIMPORTER=ON \ -DMAGNUM_WITH_DISTANCEFIELDCONVERTER=OFF \ -DMAGNUM_WITH_FONTCONVERTER=OFF \ -DMAGNUM_WITH_IMAGECONVERTER=ON \ -DMAGNUM_WITH_SCENECONVERTER=ON \ -DMAGNUM_WITH_SHADERCONVERTER=ON \ -DMAGNUM_WITH_GL_INFO=ON \ -DMAGNUM_WITH_AL_INFO=ON \ -DMAGNUM_BUILD_TESTS=ON \ -DMAGNUM_BUILD_GL_TESTS=ON \ -DCORRADE_TESTSUITE_TEST_TARGET=build-tests ninja } check() { cd "$_rootdir/build-emscripten-wasm-webgl2" ninja build-tests CORRADE_TEST_COLOR=ON ctest -j9 --output-on-failure -E "(GLTest|GLBenchmark|ALTest)" } package() { cd "$_rootdir/build-emscripten-wasm-webgl2" DESTDIR="$pkgdir/" ninja install }