Makefile 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  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)/lsup/codec
  8. BUILDDIR = ../../build
  9. CODEC_SRC = $(wildcard codec_*.c)
  10. PARSER_SRC = $(CODEC_SRC:codec_%=parser_%)
  11. CODEC_OBJ := $(CODEC_SRC:%.c=$(BUILDDIR)/%.o)
  12. PARSER_OBJ := $(subst codec,parser,$(CODEC_OBJ))
  13. GRAMMAR_OBJ := $(subst codec,grammar,$(CODEC_OBJ))
  14. OBJ = $(GRAMMAR_OBJ) $(PARSER_OBJ) $(CODEC_OBJ)
  15. DBG_OBJ = $(OBJ:%.o=%_dbg.o)
  16. #$(info CODEC_OBJ: $(CODEC_OBJ))
  17. #$(info GRAMMAR_OBJ: $(GRAMMAR_OBJ))
  18. #$(info PARSER_OBJ: $(PARSER_OBJ))
  19. #$(info DBG_OBJ: $(DBG_OBJ))
  20. INCLUDE := -I$(INCLUDE_DIR) -I../../ext/tpl/src -I../../ext/hashmap \
  21. -I../../ext/log/src
  22. _CFLAGS := -std=gnu11 -Wall -fPIC $(INCLUDE)
  23. CFLAGS := $(_CFLAGS) -O3
  24. DBG_CFLAGS := $(_CFLAGS) -I../../test -O0 -g3 -DDEBUG
  25. .DEFAULT_GOAL := codec
  26. .PHONY: codec
  27. codec: $(OBJ)
  28. .PHONY: debug
  29. debug: $(DBG_OBJ)
  30. .PHONY: parsers
  31. parsers: $(PARSER_SRC)
  32. $(BUILDDIR)/%.o: %.c
  33. $(CC) $(CFLAGS) -c $^ -o $@
  34. $(BUILDDIR)/%_dbg.o: %.c
  35. $(CC) $(DBG_CFLAGS) -c $^ -o $@
  36. # Parser C sources.
  37. parser_%.c: lexer_%.re grammar_%.c ../codec.c
  38. $(LEXER) $< -o $@ -T --case-ranges
  39. .PRECIOUS: grammar_%.c $(CODEC_INCLUDE_DIR)/tokens_%.h
  40. # Parser generators.
  41. grammar_%.c $(CODEC_INCLUDE_DIR)/tokens_%.h: grammar_%.y
  42. $(PARSER) $< -p -T$(LEMON_SRC_DIR)/lempar.c -d$(BUILDDIR)
  43. mv $(BUILDDIR)/grammar_$*.h $(CODEC_INCLUDE_DIR)/tokens_$*.h
  44. mv $(BUILDDIR)/grammar_$*.c ./