Move from makefile to justfile

This commit is contained in:
Shrukan
2024-02-17 15:15:19 -07:00
parent f867cecaeb
commit 8c951468d9
2 changed files with 69 additions and 74 deletions

69
Justfile Normal file
View File

@ -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

View File

@ -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) $@