SOURCES := $(shell find src -name '*.rs') PARSER_GRAMMARS := $(wildcard src/parser/gmrs/*.gr) LEXER_GRAMMARS := $(wildcard src/parser/gmrs/*.lx) PARSER_GRAMMAR_TARGETS := $(patsubst %.gr,%.cgr,$(PARSER_GRAMMARS)) LEXER_GRAMMAR_TARGETS := $(patsubst %.lx,%.clx,$(LEXER_GRAMMARS)) DESTDIR ?= PREFIX ?= /usr/local BINDIR = $(DESTDIR)$(PREFIX)/bin BUILD_FLAGS := ifdef RELEASE TARGET := out/beans ACTUAL_LOCATION := target/release/beans BUILD_FLAGS += --release else TARGET := out/beans-debug ACTUAL_LOCATION := target/debug/beans endif all: build build: $(TARGET) check: @cargo clippy clean: cargo clean $(RM) out grammars: $(PARSER_GRAMMAR_TARGETS) $(LEXER_GRAMMAR_TARGETS) install: out/beans install -D -m755 $< $(BINDIR)/beans run: build @./$(TARGET) test: @cargo test out: @mkdir out out/%: target/release/% | out @cp $< $@ out/%-debug: target/debug/% | out @cp $< $@ target/release/beans: $(SOURCES) cargo build --release target/debug/beans: $(SOURCES) cargo build %.clx: %.lx $(TARGET) $(TARGET) compile lexer -o $@ $< %.cgr: %.gr %.clx $(TARGET) $(TARGET) compile parser --lexer $(word 2,$^) -o $@ $< .PHONY: all build check clean grammars run test .SUFFIXES: