oftlisp 0.1.3

A compiler and interpreter for OftLisp, in Rust.
Documentation
run_args = "-vv repl"
watch_args = "-c"

OFTLISP_HOME = "~/oftlisp"

all: check doc test build
all-release: check doc test build build-release
install:
	cargo install --path oftb
install-force:
	cargo install --force --path oftb
publish:
	cargo publish
	cd oftlisp-anf && cargo publish
	cd oftb && cargo publish
watch:
	cargo watch {{watch_args}} -w {{OFTLISP_HOME}}/src -s "just run_args=\"{{run_args}}\" all"
watch-check:
	cargo watch {{watch_args}} -w {{OFTLISP_HOME}}/src -x "check --all"
watch-cross:
	cargo watch {{watch_args}} -w {{OFTLISP_HOME}}/src -s "just run_args=\"{{run_args}}\" cross-all all"
watch-cross-release:
	cargo watch {{watch_args}} -w {{OFTLISP_HOME}}/src -s "just run_args=\"{{run_args}}\" cross-all-release all-release"
watch-install:
	cargo watch {{watch_args}} -w {{OFTLISP_HOME}}/src -s "just install-force"
watch-release:
	cargo watch {{watch_args}} -w {{OFTLISP_HOME}}/src -s "just run_args=\"{{run_args}}\" all-release"
watch-run:
	cargo watch {{watch_args}} -w {{OFTLISP_HOME}}/src -s "just run_args=\"{{run_args}}\" run"
watch-test:
	cargo watch {{watch_args}} -w {{OFTLISP_HOME}}/src -x "test --all"

build:
	cargo build --all
build-release:
	cargo build --all --release
check:
	cargo check --all
clean:
	cargo clean
cross TARGET:
	cd oftb && cargo build --all --no-default-features --target {{TARGET}}
cross-release TARGET:
	cd oftb && cargo build --all --no-default-features --release --target {{TARGET}}
cross-all:
	just cross aarch64-linux-android
	just cross arm-linux-androideabi
	just cross asmjs-unknown-emscripten
	# just cross wasm32-unknown-emscripten
	just cross x86_64-pc-windows-gnu
	just cross x86_64-unknown-linux-gnu
	just cross x86_64-unknown-linux-musl
cross-all-release:
	just cross-release aarch64-linux-android
	just cross-release arm-linux-androideabi
	just cross-release asmjs-unknown-emscripten
	# just cross-release wasm32-unknown-emscripten
	just cross-release x86_64-pc-windows-gnu
	just cross-release x86_64-unknown-linux-gnu
	just cross-release x86_64-unknown-linux-musl
doc:
	cargo doc --all
doc-open: doc
	cargo doc --open
test:
	cargo test --all
run:
	cargo run --manifest-path oftb/Cargo.toml -- {{run_args}}
run-release:
	cargo run --manifest-path oftb/Cargo.toml --release -- {{run_args}}

gdb: build
	rust-gdb --args target/debug/oftb {{run_args}}
lldb: build
	rust-lldb -f target/debug/oftb -- {{run_args}}
nemiver: build
	nemiver --gdb-binary=rust-gdb target/debug/oftb {{run_args}}
r2: build
	r2 -e dbg.bep=main target/debug/oftb # {{run_args}}

compare-sizes: cross-all cross-all-release
	find target/*/{debug,release}/oftb* -not -name '*.d' | xargs exa -lrs size