1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- 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 ./
|