Makefile 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  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. $(info DBG_OBJ: $(DBG_OBJ))
  16. INCLUDE = -I$(INCLUDE_DIR) -I../../ext/tpl/src -I../../ext/hashmap \
  17. -I../../ext/log/src
  18. CFLAGS = -std=gnu11 -Wall -fPIC -MMD $(INCLUDE)
  19. DBG_CFLAGS = -I../../test -O0 -g3 -DDEBUG
  20. .DEFAULT_GOAL := codec
  21. .PHONY: codec
  22. codec: $(OBJ)
  23. .PHONY: debug
  24. debug: $(DBG_OBJ)
  25. .PHONY: parsers
  26. parsers: $(PARSER_SRC)
  27. %_dbg.o: %.c
  28. $(CC) $(CFLAGS) $(DBG_CFLAGS) -c $^ -o $@
  29. # Parser C sources.
  30. parser_%.c: lexer_%.re grammar_%.c ../codec.c
  31. $(LEXER) $< -o $@ -T --case-ranges
  32. .PRECIOUS: grammar_%.c $(CODEC_INCLUDE_DIR)/tokens_%.h
  33. # Parser generators.
  34. grammar_%.c $(CODEC_INCLUDE_DIR)/tokens_%.h: grammar_%.y
  35. $(PARSER) $< -p -T$(LEMON_SRC_DIR)/lempar.c -d.
  36. mv grammar_$*.h $(CODEC_INCLUDE_DIR)/tokens_$*.h