# SPDX-License-Identifier: LGPL-3.0-only # SPDX-FileCopyrightText: Copyright (C) 2026 Catcrafts® # # crafter-build as a Flatpak. The runtime is the Freedesktop *Sdk*, not the # Platform: a build tool needs glibc's headers and crt objects, gcc's # libgcc_s, cmake, ninja, make, git and python at run time. Everything # compiler-shaped is ours and lives under /app: clang, lld, libclang, libc++, # compiler-rt (native and wasm32) and the WASI sysroot, all built from one # LLVM source tree so the modules crafter-build builds and the compiler that # consumes them can never drift apart. app-id: net.catcrafts.CrafterBuild runtime: org.freedesktop.Sdk runtime-version: '26.08' sdk: org.freedesktop.Sdk command: crafter-build finish-args: # git dependencies, and the local web server `-r` starts for browser builds - --share=network - --socket=ssh-auth # projects live anywhere; user sysroots too - --filesystem=host # so `-r` can launch what it built, games included - --share=ipc - --socket=wayland - --socket=fallback-x11 - --socket=pulseaudio - --device=all # gdb and friends from the Sdk - --allow=devel - --env=PATH=/app/bin:/usr/bin build-options: env: CRAFTER_BUILD_LLVM_DIR: /app # The shipped binary runs on any x86_64 from the last decade; user # projects still build with -march=native by default. CRAFTER_BUILD_MARCH: x86-64-v2 CRAFTER_BUILD_MTUNE: generic # CI replaces this with the tag; a local build is a development build. CRAFTER_BUILD_VERSION: 0.0.0-dev cleanup: - /share/man - /share/doc modules: - name: llvm buildsystem: cmake-ninja builddir: true subdir: llvm build-options: # Debug info for all of LLVM would be a multi-gigabyte .Debug extension. no-debuginfo: true config-opts: - -DCMAKE_BUILD_TYPE=Release - -DLLVM_ENABLE_ASSERTIONS=OFF - -DLLVM_ENABLE_PROJECTS=clang;lld - -DLLVM_ENABLE_RUNTIMES=compiler-rt;libcxx;libcxxabi;libunwind - -DLLVM_TARGETS_TO_BUILD=X86;AArch64;WebAssembly # One shared LLVM and one shared clang library instead of a statically # linked copy per tool: a fraction of the install size. - -DLLVM_BUILD_LLVM_DYLIB=ON - -DLLVM_LINK_LLVM_DYLIB=ON - -DCLANG_LINK_CLANG_DYLIB=ON - -DCLANG_DEFAULT_CXX_STDLIB=libc++ - -DCLANG_DEFAULT_LINKER=lld - -DLIBCXX_INSTALL_MODULES=ON - -DLLVM_INCLUDE_TESTS=OFF - -DLLVM_INCLUDE_EXAMPLES=OFF - -DLLVM_INCLUDE_DOCS=OFF - -DLLVM_INCLUDE_BENCHMARKS=OFF - -DLLVM_INSTALL_UTILS=OFF - -DCLANG_INCLUDE_TESTS=OFF - -DCOMPILER_RT_INCLUDE_TESTS=OFF # The Sdk links with binutils' ld; two libLLVM-sized links at a time # fit the CX53's memory with room to spare. - -DLLVM_PARALLEL_LINK_JOBS=2 cleanup: - /include/llvm - /include/llvm-c - /include/clang - /include/clang-tidy - /include/lld - /lib/cmake - /lib/*.a - /share/opt-viewer - /share/scan-build - /share/scan-view - /bin/clang-check - /bin/clang-extdef-mapping - /bin/clang-import-test - /bin/clang-linker-wrapper - /bin/clang-nvlink-wrapper - /bin/clang-offload-bundler - /bin/clang-offload-packager - /bin/clang-refactor - /bin/clang-rename - /bin/clang-repl - /bin/clang-sycl-linker - /bin/diagtool - /bin/git-clang-format - /bin/hmaptool - /bin/llvm-exegesis - /bin/scan-build* - /bin/scan-view sources: - type: archive url: https://github.com/llvm/llvm-project/releases/download/llvmorg-22.1.8/llvm-project-22.1.8.src.tar.xz sha256: 922f1817a0df7b1489272d18134ee0087a8b068828f87ac63b9861b1a9965888 - name: wasi-sysroot # wasi-sdk's sysroot-only mode, driven by the clang built above: # wasi-libc, compiler-rt builtins (installed into our clang's resource # dir, where the wasm32 driver looks for them) and libc++ for wasip1 and # wasip1-threads. The llvm-project tree is the same tarball as above so # the wasm libc++ matches the native one. buildsystem: cmake-ninja builddir: true build-options: no-debuginfo: true config-opts: - -DCMAKE_TOOLCHAIN_FILE=/run/build/wasi-sysroot/wasi-host-toolchain.cmake - -DWASI_SDK_BUILD_TOOLCHAIN=OFF - -DWASI_SDK_INSTALL_TO_CLANG_RESOURCE_DIR=ON - -DWASI_SDK_TARGETS=wasm32-wasip1;wasm32-wasip1-threads - -DWASI_SDK_INCLUDE_TESTS=OFF - -DCMAKE_INSTALL_PREFIX=/app post-install: # wasi-sdk installs into /share/wasi-sysroot; crafter-build # looks there (Crafter.Build:Toolchain), so nothing to move. - test -f /app/share/wasi-sysroot/share/libc++/v1/std.cppm sources: - type: git url: https://github.com/WebAssembly/wasi-sdk.git tag: wasi-sdk-34 disable-submodules: true - type: git url: https://github.com/WebAssembly/wasi-libc.git commit: 2e6fb9d8ee0cdf9e431fbcabe8af3115de000a13 dest: src/wasi-libc - type: archive url: https://github.com/llvm/llvm-project/releases/download/llvmorg-22.1.8/llvm-project-22.1.8.src.tar.xz sha256: 922f1817a0df7b1489272d18134ee0087a8b068828f87ac63b9861b1a9965888 dest: src/llvm-project - type: file path: wasi-host-toolchain.cmake - name: wasmtime # The runner for wasm32-wasi tests and `-r` on a non-browser wasm build. buildsystem: simple build-commands: - install -Dm755 wasmtime /app/bin/wasmtime sources: - type: archive url: https://github.com/bytecodealliance/wasmtime/releases/download/v49.0.2/wasmtime-v49.0.2-x86_64-linux.tar.xz sha256: a4d6e9e3a5a60f527cf7793d674c48930c80c2e8977995b8a275cad3254b9322 - name: crafter-build buildsystem: simple build-options: # The self-host build fetches Crafter.Math, Crafter.Asset, # Crafter.LintRules and glslang from git; they are unpinned on purpose # (sibling repos tracking their default branch, see AGENTS.md). build-args: - --share=network build-commands: # Bootstrap by hand, then let the result build itself: only the # self-hosted binary has asset support and ThinLTO. - ./build.sh - ./bin/crafter-build - CRAFTER_BUILD_HOME=$PWD/share/crafter-build ./bin/crafter-build test - install -Dm755 bin/crafter.build-exe-*/crafter-build /app/bin/crafter-build - install -Dm644 bin/crafter.build-lib-*/libcrafter-build.a /app/lib/libcrafter-build.a - mkdir -p /app/share && cp -r share/crafter-build /app/share/ - install -Dm644 LICENSE LICENSE.GPL -t /app/share/licenses/net.catcrafts.CrafterBuild/ - install -Dm644 packaging/flatpak/net.catcrafts.CrafterBuild.metainfo.xml -t /app/share/metainfo/ sources: - type: dir path: ../.. skip: - .git - bin - build - lib/libcrafter-build.a - share/crafter-build