Makefile 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. BASEDIR = ../..
  2. CC = gcc
  3. LEXER = re2c
  4. PARSER = $(BASEDIR)/bin/lemon
  5. LEMON_SRC_DIR = $(BASEDIR)/ext/sqlite/tool
  6. INCLUDE_DIR = $(BASEDIR)/include
  7. CODEC_INCLUDE_DIR = $(INCLUDE_DIR)/codec
  8. CODEC_SRC ::= $(wildcard codec_*.c)
  9. PARSER_SRC ::= $(CODEC_SRC:codec_%=parser_%)
  10. CODEC_OBJ ::= $(CODEC_SRC:.c=.o)
  11. PARSER_OBJ ::= $(CODEC_OBJ:codec_%=parser_%)
  12. GRAMMAR_OBJ ::= $(CODEC_OBJ:codec_%=grammar_%)
  13. OBJ = $(GRAMMAR_OBJ) $(PARSER_OBJ) $(CODEC_OBJ)
  14. DBG_OBJ = $(OBJ:%.o=%_dbg.o)
  15. INCLUDE ::= -I$(INCLUDE_DIR) -I../../ext/tpl/src -I../../ext/hashmap \
  16. -I../../ext/log/src
  17. CFLAGS = -std=gnu11 -Wall -fPIC -MMD $(INCLUDE)
  18. DBG_CFLAGS = -I../../test -O0 -g3 -DDEBUG
  19. .DEFAULT_GOAL := codec
  20. .PHONY: codec
  21. codec: $(OBJ)
  22. .PHONY: debug
  23. debug: $(DBG_OBJ)
  24. .PHONY: parsers
  25. parsers: $(PARSER_SRC)
  26. %_dbg.o: %.c
  27. $(CC) $(CFLAGS) $(DBG_CFLAGS) -c $^ -o $@
  28. # Parser C sources.
  29. parser_%.c: lexer_%.re grammar_%.c ../codec.c
  30. $(LEXER) $< -o $@ -T --case-ranges
  31. .PRECIOUS: grammar_%.c $(CODEC_INCLUDE_DIR)/tokens_%.h
  32. # Parser generators.
  33. grammar_%.c $(CODEC_INCLUDE_DIR)/tokens_%.h: grammar_%.y
  34. $(PARSER) $< -p -T$(LEMON_SRC_DIR)/lempar.c -d.
  35. mv grammar_$*.h $(CODEC_INCLUDE_DIR)/tokens_$*.h