Files
quak/Makefile
T
sneak 62f1f5900d
check / check (push) Successful in 3m11s
make build-bin: binary uses the system loader on Linux (closes #240)
nix's bun loads through a glibc in the nix store, and bun build --compile
copied that loader into ~/bin/quak, so nix-collect-garbage could break the
cron backup. On Linux x86-64 the build now passes
--target=bun-linux-x64-baseline, which makes bun use its downloaded release
build with the system loader. Other Linux architectures are refused, since
the fix is untested there; macOS is unchanged.

Model: opus-5-5
2026-11-11 20:33:28 +00:00

62 lines
1.4 KiB
Makefile

.PHONY: bootstrap setup test lint fmt fmt-check check build build-bin install dev clean docker hooks
YARN := yarn run
bootstrap:
@script/bootstrap
setup:
@script/setup
test:
@script/test
lint:
@script/lint
fmt:
@script/fmt
fmt-check:
@script/fmt-check
check:
@script/check
build:
@script/build
# Bundles the built dist/, so the binary reports the version script/build
# stamped.
#
# On Linux, nix's bun loads through a C library in the nix store, and a binary
# bun compiles from itself keeps that loader. nix-collect-garbage can delete
# that C library, and the binary then no longer starts.
# A --target other than the host's makes bun use its downloaded release build,
# which loads through the system's C library. That is tested only on x86-64,
# with the baseline build, so other Linux machines are refused.
build-bin: build
case "$$(uname -s)-$$(uname -m)" in \
Linux-x86_64) target=--target=bun-linux-x64-baseline ;; \
Linux-*) echo "make build-bin: on Linux only x86-64 is supported" >&2; exit 1 ;; \
*) target= ;; \
esac; \
nix-shell -p bun --run "bun build dist/bin/quak.js --compile $$target --outfile bin/quak"
install: build-bin
mkdir -p ~/bin
cp bin/quak ~/bin/quak
chmod +x ~/bin/quak
dev:
@$(YARN) tsc --watch
clean:
@rm -rf dist coverage .vitest-cache *.tsbuildinfo
docker:
@script/docker
hooks:
@script/install-precommit