Makefile 1.5 KB

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