set shell := ["bash", "-euo", "pipefail", "-c"] # Everything is compiled by zig, including the C and C++ dependencies, so a # build needs no system toolchain — but bindgen runs libclang directly and does # not inherit zig's own header search path. `v4l2r` wants `linux/videodev2.h`, # which lives in /usr/include on a machine with kernel headers installed and # nowhere at all on one without. Point it at zig's bundled copies instead. zig_include := `scripts/zig-include` headers := "-I" + zig_include + " -I" + parent_directory(zig_include) + "/x86-linux-gnu -I" + parent_directory(zig_include) + "/generic-glibc" export V4L2R_VIDEODEV2_H_PATH := zig_include export BINDGEN_EXTRA_CLANG_ARGS := headers default: @just --list # The shared objects, ready to be put on a loader search path. build *args: cargo build --release {{args}} # buck2, with scripts/ on PATH: the prelude's system toolchains resolve their # tools through PATH, and that directory is where the pinned ones live. Only # `dotslash` itself has to be on the host. buck *args: PATH="{{justfile_directory()}}/scripts:$PATH" scripts/buck2 {{args}} # The same two objects under buck2. Not yet the default — see the cpal note in # third-party/rust/Cargo.toml; `build` above is still the one that works. buck-build *args: @just buck build //:libs {{args}} test *args: cargo test --workspace {{args}} # Without PipeWire — for a machine that has neither pkg-config nor PipeWire's # headers. Device *names* get worse (ALSA PCMs only); everything else is equal. test-minimal: cargo test --workspace --no-default-features lint: cargo clippy --workspace --all-targets -- -D warnings cargo fmt --all --check # Where a consumer points LD_LIBRARY_PATH. libdir: @echo "{{justfile_directory()}}/target/release"