diff --git a/Justfile b/Justfile new file mode 100644 index 0000000..1975e3f --- /dev/null +++ b/Justfile @@ -0,0 +1,69 @@ +# Set default values for variables. Justfile doesn't support dynamic defaulting in +# the same way Make does, so we have to handle it within the command executions. + +# Default build prefix and type +BUILD_PREFIX := "./build" +BUILD_TYPE := "release" +set positional-arguments + +# Set up the actual BUILD_PREFIX based on the presence of the directory +#BUILD_PREFIX := `mkdir -p {{BUILD_PREFIX}} && cd {{BUILD_PREFIX}} && pwd` + +default: build + +dev: + docker build -t dev-container -f Dockerfile . + docker run -it --rm -v $(pwd):$(pwd) dev-container -c "cd $(pwd) && /bin/zsh" + +# Recipe to configure the build environment +configure: + @echo "\nBUILD_PREFIX: {{BUILD_PREFIX}}\n\n" + meson setup --buildtype={{BUILD_TYPE}} {{BUILD_PREFIX}} + +# Default build target +build target="": configure + ninja -C {{BUILD_PREFIX}} {{target}} + +# Test recipe +test: build + ninja -C {{BUILD_PREFIX}} test + +# Coverage recipe +coverage: test + ninja -C {{BUILD_PREFIX}} coverage + +# Debug build +debug: + meson configure {{BUILD_PREFIX}} --buildtype=debug + ninja -C {{BUILD_PREFIX}} + +# Release build +release: + meson configure {{BUILD_PREFIX}} --buildtype=release + ninja -C {{BUILD_PREFIX}} + +# Sanitize build +sanitize: + meson configure {{BUILD_PREFIX}} -Db_sanitize=address + ninja -C {{BUILD_PREFIX}} + +# Static analysis +check: + ninja -C {{BUILD_PREFIX}} clang-tidy + +# Run the autoformatter +format: + ninja -C {{BUILD_PREFIX}} clang-format + +# Build the documentation +docs: + ninja -C {{BUILD_PREFIX}} docs/html + +# Clean the build directory +clean: + ninja -C {{BUILD_PREFIX}} clean + +# Obliterate the build directory +spotless: + rm -r {{BUILD_PREFIX}} + meson subprojects purge --confirm diff --git a/Makefile b/Makefile deleted file mode 100644 index 0f7ec9a..0000000 --- a/Makefile +++ /dev/null @@ -1,74 +0,0 @@ -############################################################################### -# Simple Makefile to prevent the need to interact with Meson directly. -# -# While Meson and Ninja are many things, intuitive is not one of them when it -# comes to the command line. This is easily rectified with a simple make file -# to hide the details and present a simple and familiar interface. This will -# allow Meson and Ninja to do their thing with a few options: -# -# - BUILD_PREFIX = The build directory, defaults to ./build -# - BUILD_TYPE = release or debug -# -# All other build targets get passed straight to Ninja -############################################################################### - -# Default to a less-verbose build. If you want all the gory compiler output, -# run "make VERBOSE=1" -$(VERBOSE).SILENT: - -# Figure out where to build the software. -# Use BUILD_PREFIX if it was passed in. -# If not, search up to four parent directories for a 'build' directory. -# Otherwise, use ./build. -ifeq "$(BUILD_PREFIX)" "" -BUILD_PREFIX:=$(shell for pfx in ./ .. ../.. ../../.. ../../../..; do d=`pwd`/$$pfx/build;\ - if [ -d $$d ]; then echo $$d; exit 0; fi; done; echo `pwd`/build) -endif - -# create the build directory if needed, and normalize its path name -BUILD_PREFIX:=$(shell mkdir -p $(BUILD_PREFIX) && cd $(BUILD_PREFIX) && echo `pwd`) - -# Default to a release build. If you want to enable debugging flags, run -# "make BUILD_TYPE=debug" -ifeq "$(BUILD_TYPE)" "" -BUILD_TYPE="release" -endif - -all: $(BUILD_PREFIX)/build.ninja - ninja -C $(BUILD_PREFIX) - -$(BUILD_PREFIX)/build.ninja: - $(MAKE) configure - -.PHONY: configure -configure: - @echo "\nBUILD_PREFIX: $(BUILD_PREFIX)\n\n" - - @meson setup --buildtype=$(BUILD_TYPE) $(BUILD_PREFIX) - -# This needs to be separate for some reason -test: $(BUILD_PREFIX)/build.ninja - ninja -C $(BUILD_PREFIX) test - -coverage: test - ninja -C $(BUILD_PREFIX) coverage - -debug: $(BUILD_PREFIX)/build.ninja - meson configure $(BUILD_PREFIX) --buildtype=debug - ninja -C $(BUILD_PREFIX) - -release: $(BUILD_PREFIX)/build.ninja - meson configure $(BUILD_PREFIX) --buildtype=release - ninja -C $(BUILD_PREFIX) - -sanitize: $(BUILD_PREFIX)/build.ninja - meson configure $(BUILD_PREFIX) -Db_sanitize=address - ninja -C $(BUILD_PREFIX) - -spotless: - rm -r $(BUILD_PREFIX) - meson subprojects purge --confirm - -# other (custom) targets are passed through to the Meson genarated Ninja file -% :: - ninja -C $(BUILD_PREFIX) $@ \ No newline at end of file