.PHONY: all build release debug clean test coverage lint install uninstall NIM := nim NIM_FLAGS := --hints:off --warnings:off SRC_DIR := src BIN_DIR := bin TEST_DIR := tests BUILD_DIR := build SOURCES := $(shell find $(SRC_DIR) -name '*.nim') TESTS := $(shell find $(TEST_DIR) -name '*.nim') OBJECTS := $(patsubst $(SRC_DIR)/%.nim,$(BUILD_DIR)/%.o,$(SOURCES)) BINARY := $(BIN_DIR)/nimcheck all: build $(BIN_DIR): mkdir -p $(BIN_DIR) $(BUILD_DIR): mkdir -p $(BUILD_DIR) $(BUILD_DIR)/%.o: $(SRC_DIR)/%.nim | $(BUILD_DIR) $(NIM) compile --compileOnly -d:release -o:$@ $< $(BINARY): $(OBJECTS) | $(BIN_DIR) $(NIM) compile -d:release --out:$(BINARY) $(SRC_DIR)/nimcheck.nim build: $(BINARY) release: $(NIM) compile -d:release --opt:speed --passC:-flto --passL:-flto \ --out:$(BINARY) $(SRC_DIR)/nimcheck.nim debug: $(NIM) compile -d:debug --lineDir:on --stacktrace:on \ --out:$(BINARY) $(SRC_DIR)/nimcheck.nim test: build $(NIM) compile --run $(TEST_DIR)/test_all.nim coverage: $(NIM) compile --run -d:coverage $(TEST_DIR)/test_all.nim lint: $(NIM) check $(SRC_DIR)/nimcheck.nim clean: rm -rf $(BIN_DIR) $(BUILD_DIR) find . -name 'nimcache' -type d -exec rm -rf {} + 2>/dev/null || true install: release install -m 755 $(BINARY) /usr/local/bin/nimcheck uninstall: rm -f /usr/local/bin/nimcheck