Makefile 1.5 KB

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