BASEDIR = ../.. CC = gcc LEXER = re2c PARSER = $(BASEDIR)/bin/lemon LEMON_SRC_DIR = $(BASEDIR)/ext/sqlite/tool INCLUDE_DIR = $(BASEDIR)/include CODEC_INCLUDE_DIR = $(INCLUDE_DIR)/lsup/codec BUILDDIR = ../../build CODEC_SRC = $(wildcard codec_*.c) PARSER_SRC = $(CODEC_SRC:codec_%=parser_%) CODEC_OBJ := $(CODEC_SRC:%.c=$(BUILDDIR)/%.o) PARSER_OBJ := $(subst codec,parser,$(CODEC_OBJ)) GRAMMAR_OBJ := $(subst codec,grammar,$(CODEC_OBJ)) OBJ = $(GRAMMAR_OBJ) $(PARSER_OBJ) $(CODEC_OBJ) DBG_OBJ = $(OBJ:%.o=%_dbg.o) #$(info CODEC_OBJ: $(CODEC_OBJ)) #$(info GRAMMAR_OBJ: $(GRAMMAR_OBJ)) #$(info PARSER_OBJ: $(PARSER_OBJ)) #$(info DBG_OBJ: $(DBG_OBJ)) INCLUDE := -I$(INCLUDE_DIR) -I../../ext/tpl/src -I../../ext/hashmap \ -I../../ext/log/src CFLAGS = -std=gnu11 -Wall -fPIC $(INCLUDE) DBG_CFLAGS = -I../../test -O0 -g3 -DDEBUG .DEFAULT_GOAL := codec .PHONY: codec codec: $(OBJ) .PHONY: debug debug: $(DBG_OBJ) .PHONY: parsers parsers: $(PARSER_SRC) $(BUILDDIR)/%.o: %.c $(CC) $(CFLAGS) $(DBG_CFLAGS) -c $^ -o $@ $(BUILDDIR)/%_dbg.o: %.c $(CC) $(CFLAGS) $(DBG_CFLAGS) -c $^ -o $@ # Parser C sources. parser_%.c: lexer_%.re grammar_%.c ../codec.c $(LEXER) $< -o $@ -T --case-ranges .PRECIOUS: grammar_%.c $(CODEC_INCLUDE_DIR)/tokens_%.h # Parser generators. grammar_%.c $(CODEC_INCLUDE_DIR)/tokens_%.h: grammar_%.y $(PARSER) $< -p -T$(LEMON_SRC_DIR)/lempar.c -d$(BUILDDIR) mv $(BUILDDIR)/grammar_$*.h $(CODEC_INCLUDE_DIR)/tokens_$*.h mv $(BUILDDIR)/grammar_$*.c ./