pinnacle/justfile
2024-07-11 15:50:33 -05:00

142 lines
4.5 KiB
Makefile

set shell := ["bash", "-c"]
rootdir := justfile_directory()
xdg_data_dir := `echo "${XDG_DATA_HOME:-$HOME/.local/share}/pinnacle"`
root_xdg_data_dir := "/usr/share/pinnacle"
root_xdg_config_dir := "/etc/xdg/pinnacle"
lua_version := "5.4"
list:
@just --list --unsorted
# Install the configs, protobuf definitions, and the Lua library (requires Luarocks)
install: install-configs install-protos install-lua-lib install-snowcap
# Install the default Lua and Rust configs
install-configs:
#!/usr/bin/env bash
set -euxo pipefail
default_config_dir="{{xdg_data_dir}}/default_config"
default_lua_dir="${default_config_dir}/lua"
default_rust_dir="${default_config_dir}/rust"
rm -rf "${default_config_dir}"
mkdir -p "${default_config_dir}"
cp -r "{{rootdir}}/api/lua/examples/default" "${default_lua_dir}"
cp -LR "{{rootdir}}/api/rust/examples/default_config/for_copying" "${default_rust_dir}"
# Install the protobuf definitions (only needed for the Lua API)
install-protos:
#!/usr/bin/env bash
set -euxo pipefail
proto_dir="{{xdg_data_dir}}/protobuf"
rm -rf "${proto_dir}"
mkdir -p "{{xdg_data_dir}}"
cp -r "{{rootdir}}/api/protocol" "${proto_dir}"
# Install the Lua library (requires Luarocks)
install-lua-lib: gen-lua-pb-defs
#!/usr/bin/env bash
cd "{{rootdir}}/api/lua"
luarocks build --local https://raw.githubusercontent.com/pinnacle-comp/lua-grpc-client/main/lua-grpc-client-dev-1.rockspec
luarocks build --local --lua-version "{{lua_version}}"
# Remove installed configs and the Lua API (requires Luarocks)
clean: clean-snowcap
rm -rf "{{xdg_data_dir}}"
-luarocks remove --local pinnacle-api
-luarocks remove --local lua-grpc-client
# [root] Remove installed configs and the Lua API (requires Luarocks)
clean-root:
rm -rf "{{root_xdg_data_dir}}"
rm -rf "{{root_xdg_config_dir}}"
-luarocks remove pinnacle-api
# [root] Install the configs, protobuf definitions, and the Lua library (requires Luarocks)
install-root: install-configs-root install-protos-root install-lua-lib-root
# [root] Install the default Lua and Rust configs
install-configs-root:
#!/usr/bin/env bash
set -euxo pipefail
default_config_dir="{{root_xdg_config_dir}}/default_config"
default_lua_dir="${default_config_dir}/lua"
default_rust_dir="${default_config_dir}/rust"
rm -rf "${default_config_dir}"
mkdir -p "${default_config_dir}"
cp -r "{{rootdir}}/api/lua/examples/default" "${default_lua_dir}"
cp -LR "{{rootdir}}/api/rust/examples/default_config/for_copying" "${default_rust_dir}"
# [root] Install the protobuf definitions (only needed for the Lua API)
install-protos-root:
#!/usr/bin/env bash
set -euxo pipefail
proto_dir="{{root_xdg_data_dir}}/protobuf"
rm -rf "${proto_dir}"
mkdir -p "{{root_xdg_data_dir}}"
cp -r "{{rootdir}}/api/protocol" "${proto_dir}"
# [root] Install the Lua library (requires Luarocks)
install-lua-lib-root:
#!/usr/bin/env bash
set -euxo pipefail
cd "{{rootdir}}/api/lua"
luarocks make --lua-version "{{lua_version}}"
# Run `cargo build`
build *args: gen-lua-pb-defs
cargo build {{args}}
# Generate the protobuf definitions Lua file
gen-lua-pb-defs:
#!/usr/bin/env bash
set -euxo pipefail
cargo build --package lua-build
./target/debug/lua-build > "./api/lua/pinnacle/grpc/defs.lua"
# Run `cargo run`
run *args: gen-lua-pb-defs
cargo run {{args}}
# Run `cargo test`
test *args: gen-lua-pb-defs
cargo test {{args}}
compile-wlcs:
#!/usr/bin/env bash
set -euxo pipefail
WLCS_SHA=26c5a8cfef265b4ae021adebfec90d758c08792e
cd "{{rootdir}}"
if [ -f "./wlcs/wlcs" ] && [ "$(cd wlcs; git rev-parse HEAD)" = "${WLCS_SHA}" ] ; then
echo "WLCS commit 26c5a8c is already compiled"
else
echo "Compiling WLCS"
git clone https://github.com/canonical/wlcs
cd wlcs || exit
# checkout a specific revision
git reset --hard "${WLCS_SHA}"
cmake -DWLCS_BUILD_ASAN=False -DWLCS_BUILD_TSAN=False -DWLCS_BUILD_UBSAN=False -DCMAKE_EXPORT_COMPILE_COMMANDS=1 .
make
fi
wlcs *args: compile-wlcs
#!/usr/bin/env bash
set -euxo pipefail
cargo build -p wlcs_pinnacle
RUST_BACKTRACE=1 ./wlcs/wlcs target/debug/libwlcs_pinnacle.so {{args}}
install-snowcap:
#!/usr/bin/env bash
set -euxo pipefail
cd "{{rootdir}}/snowcap"
just install
clean-snowcap:
#!/usr/bin/env bash
set -euxo pipefail
cd "{{rootdir}}/snowcap"
just clean