From 96b6b7e70b19550637ff9e369961b780a4d842a8 Mon Sep 17 00:00:00 2001 From: veclavtalica Date: Sun, 2 Feb 2025 23:08:02 +0300 Subject: [PATCH] /bin/twnbuild: python based build solution --- .gitignore | 1 + apps/templates/lua/data/twn.toml | 1 + bin/build.sh | 19 ----------------- bin/twn | 2 +- bin/twnbuild | 36 ++++++++++++++++++++++++++++++++ 5 files changed, 39 insertions(+), 20 deletions(-) delete mode 100755 bin/build.sh create mode 100755 bin/twnbuild diff --git a/.gitignore b/.gitignore index f3c5d5f..c1adf2e 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,7 @@ * !*.* !*/ +!bin/* !Makefile **/*.exe diff --git a/apps/templates/lua/data/twn.toml b/apps/templates/lua/data/twn.toml index 2752b58..60d96ab 100644 --- a/apps/templates/lua/data/twn.toml +++ b/apps/templates/lua/data/twn.toml @@ -14,6 +14,7 @@ dev_id = "you" # Game runtime details [game] resolution = [ 640, 480 ] +interpreter = "$TWNROOT/apps/twnlua" #debug = true # Engine tweaks. You probably don't need to change these diff --git a/bin/build.sh b/bin/build.sh deleted file mode 100755 index f1d8631..0000000 --- a/bin/build.sh +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/env sh - -set +e - -# check whether ninja is around (you better start running) -if [ -x "$(command -v ninja)" ]; then - generator="-G Ninja" -fi - -# check whether clang is around (it's just better) -if [ -x "$(command -v clang)" ]; then - cc="-DCMAKE_C_COMPILER=clang" -fi - -if [ "$1" = "web" ]; then - emcmake cmake $generator $cc -B build-web "${@:2}" && cmake --build build-web --parallel -else - cmake $generator $cc -B build "$@" && cmake --build build --parallel -fi diff --git a/bin/twn b/bin/twn index c6e5c1d..ff84af8 100755 --- a/bin/twn +++ b/bin/twn @@ -8,7 +8,7 @@ toolpath="$(dirname -- "${BASH_SOURCE[0]}")" export TWNROOT=$(realpath "$toolpath"/../) case "$1" in - build ) "$toolpath"/build.sh "${@:2}" + build ) "$toolpath"/twnbuild "${@:2}" ;; run ) $0 build && ./$exe "${@:2}" diff --git a/bin/twnbuild b/bin/twnbuild new file mode 100755 index 0000000..5821e74 --- /dev/null +++ b/bin/twnbuild @@ -0,0 +1,36 @@ +#!/bin/env python3 + +from subprocess import getoutput, run +from os.path import expandvars +from pathlib import Path +from sys import argv +import tomllib + +has_ninja = getoutput("command -v ninja") != "" +has_clang = getoutput("command -v clang") != "" + +#TODO: support for default pack override + +cmake = ["cmake"] +# check whether clang is around (it's just better) +if has_clang: + cmake += ["-DCMAKE_C_COMPILER=clang"] +# check whether ninja is around (you better start running) +if has_ninja: + cmake += ["-G", "Ninja"] +cmake += ["-B", "build"] +# TODO: have it --fast instead, where separate --no-debug would mean stripping the debug info +if "--release" in argv: + cmake += ["-DCMAKE_BUILD_TYPE=Release"] +# pass arbitrary arguments over +if "--" in argv: + cmake += argv[argv.find("--"):] + +# if no root cmake file is present, infer it from `twn.toml:game.interpreter` +if not Path("CMakeLists.txt").is_file(): + with open("data/twn.toml", "rb") as f: + config = tomllib.load(f) + cmake += ["-S", expandvars(config["game"]["interpreter"])] + +run(cmake, check=True) +run(["cmake", "--build", "build", "--parallel"], check=True)