Procházet zdrojové kódy

Use dedicated build dir.

scossu před 2 týdny
rodič
revize
831206c0f6
2 změnil soubory, kde provedl 46 přidání a 27 odebrání
  1. 27 17
      Makefile
  2. 19 10
      src/codec/Makefile

+ 27 - 17
Makefile

@@ -14,21 +14,22 @@ PREFIX ?= /usr/local
 bindir := $(PREFIX)/bin
 libdir := $(PREFIX)/lib
 INCLUDEDIR = $(PREFIX)/include
-outdir = ./bin
+BUILDDIR = ./build
+OUTDIR = ./bin
 VALGRIND_DUMP = /tmp/lsup_valgrind.log
 CALLGRIND_DUMP = /tmp/lsup_callgrind.out
 MASSIF_DUMP = /tmp/lsup_massif.out
 
 INCLUDE_BASE := . -Iinclude -Iext/tpl/src -Iext/hashmap -Iext/log/src
 INCLUDE := -I$(INCLUDE_BASE)
-_CFLAGS := -std=gnu11 -Wall -fPIC -MMD $(INCLUDE)
+_CFLAGS := -std=gnu11 -Wall -fPIC $(INCLUDE)
 CFLAGS = $(_CFLAGS) -O3
-DBG_CFLAGS = $(_CFLAGS) -Itest -O0 -g3 -DDEBUG
+DBG_CFLAGS = $(_CFLAGS) -Itest -O0 -ggdb -DDEBUG
 #$(info CFLAGS: $(CFLAGS))
 #$(info DBG_CFLAGS: $(DBG_CFLAGS))
 # NOTE: -luuid is a Linux system library. Other OS's might need a different
 # link or a non-system library built.
-LDFLAGS := -L$(libdir) -L$(outdir) -L. -llmdb -lxxhash -luuid
+LDFLAGS := -L$(libdir) -L$(OUTDIR) -L. -llmdb -lxxhash -luuid
 
 PARSER = bin/lemon
 LEMON_SRC = ext/sqlite/tool/lemon.c
@@ -55,15 +56,17 @@ CODEC_REL_SRC := $(CODEC_SRC:$(CODEC_DIR)/%=%)
 ALL_CODEC_REL_SRC := $(CODEC_REL_SRC) $(CODEC_REL_SRC:codec_%=parser_%) \
 			$(CODEC_REL_SRC:codec_%=grammar_%)
 CODEC_SRC = $(ALL_CODEC_REL_SRC:%=$(CODEC_DIR)/%)
-CODEC_OBJ = $(CODEC_SRC:.c=.o)
-CODEC_DBG_OBJ = $(CODEC_SRC:.c=_dbg.o)
-OBJ = $(EXT_OBJ) $(LSUP_SRC:.c=.o)
-DBG_OBJ = $(EXT_OBJ) $(LSUP_SRC:.c=_dbg.o)
-
-STATIC_LIB = $(outdir)/liblsuprdf.a
-DYN_LIB = $(outdir)/liblsuprdf.so
-STATIC_DBG_LIB = $(outdir)/liblsuprdf_dbg.a
-DYN_DBG_LIB = $(outdir)/liblsuprdf_dbg.so
+
+CODEC_OBJ = $(patsubst $(CODEC_DIR)/%.c, $(BUILDDIR)/%.o, $(CODEC_SRC))
+CODEC_DBG_OBJ = $(CODEC_OBJ:.o=_dbg.o)
+LOCAL_OBJ = $(LSUP_SRC:src/%.c=$(BUILDDIR)/%.o)
+OBJ = $(EXT_OBJ) $(LOCAL_OBJ)
+DBG_OBJ = $(EXT_OBJ) $(LOCAL_OBJ)
+STATIC_LIB = $(OUTDIR)/liblsuprdf.a
+DYN_LIB = $(STATIC_LIB:.a=.so)
+STATIC_DBG_LIB = $(STATIC_LIB:.a=_dbg.a)
+DYN_DBG_LIB = $(DYN_LIB:.so=_dbg.so)
+
 LIBS = $(STATIC_LIB) $(DYN_LIB)
 DBG_LIBS = $(STATIC_DBG_LIB) $(DYN_DBG_LIB)
 
@@ -82,7 +85,7 @@ DOCS = docs
 ## Environment.
 
 # Tests need the freshly compiled libs.
-export LD_LIBRARY_PATH = $(outdir):$(libdir)
+export LD_LIBRARY_PATH = $(OUTDIR):$(libdir)
 
 
 ## Rules.
@@ -127,8 +130,13 @@ $(DYN_DBG_LIB): $(DBG_OBJ)
 	$(CC) -shared $(LDFLAGS) -o $@ $^ $(CODEC_DBG_OBJ)
 
 
+# Standard objects.
+$(BUILDDIR)/%.o: src/%.c
+	$(CC) $(DBG_CFLAGS) -c $^ -o $@
+
+
 # Debug objects.
-%_dbg.o: %.c
+$(BUILDDIR)/%_dbg.o: src/%.c
 	$(CC) $(DBG_CFLAGS) -c $^ -o $@
 
 
@@ -136,10 +144,12 @@ $(DYN_DBG_LIB): $(DBG_OBJ)
 
 .PHONY: codec
 codec: $(PARSER)
+	mkdir -p $(BUILDDIR) && \
 	$(MAKE) -C $(CODEC_DIR) codec
 
 .PHONY: codec_dbg
 codec_dbg: $(PARSER)
+	mkdir -p $(BUILDDIR) && \
 	$(MAKE) -C $(CODEC_DIR) debug
 
 # Build the parser executable.
@@ -163,8 +173,8 @@ debug_install: install debug ## Install standard and debug libraries.
 
 .PHONY: clean
 clean: ## Clean up artifacts, including language parsers.
-	rm -f ./*.[aod] bin/* src/*.[aod] src/codec/*.[aod] src/codec/*.out
-	rm -rf build/ dist/ lsup_rdf.egg-info/
+	rm -f ./*.[aod] bin/* src/codec/*.out
+	rm -rf $(BUILDDIR)
 	rm -f $(LIBS) $(DBG_LIBS)
 	rm -f include/codec/grammar_*.h
 	rm -f src/codec/grammar_*.c src/codec/parser_*.c

+ 19 - 10
src/codec/Makefile

@@ -6,19 +6,24 @@ LEMON_SRC_DIR = $(BASEDIR)/ext/sqlite/tool
 
 INCLUDE_DIR = $(BASEDIR)/include
 CODEC_INCLUDE_DIR = $(INCLUDE_DIR)/lsup/codec
+BUILDDIR = ../../build
 
-CODEC_SRC := $(wildcard codec_*.c)
-PARSER_SRC := $(CODEC_SRC:codec_%=parser_%)
-CODEC_OBJ := $(CODEC_SRC:.c=.o)
-PARSER_OBJ := $(CODEC_OBJ:codec_%=parser_%)
-GRAMMAR_OBJ := $(CODEC_OBJ:codec_%=grammar_%)
+CODEC_SRC = $(wildcard codec_*.c)
+PARSER_SRC = $(CODEC_SRC:codec_%=parser_%)
+CODEC_OBJ := $(CODEC_SRC:%.c=$(BUILDDIR)/%.o)
+PARSER_OBJ := $(subst codec,parser,$(CODEC_OBJ))
+GRAMMAR_OBJ := $(subst codec,grammar,$(CODEC_OBJ))
 OBJ = $(GRAMMAR_OBJ) $(PARSER_OBJ) $(CODEC_OBJ)
 DBG_OBJ = $(OBJ:%.o=%_dbg.o)
-$(info DBG_OBJ: $(DBG_OBJ))
+
+#$(info CODEC_OBJ: $(CODEC_OBJ))
+#$(info GRAMMAR_OBJ: $(GRAMMAR_OBJ))
+#$(info PARSER_OBJ: $(PARSER_OBJ))
+#$(info DBG_OBJ: $(DBG_OBJ))
 
 INCLUDE := -I$(INCLUDE_DIR) -I../../ext/tpl/src -I../../ext/hashmap \
 	-I../../ext/log/src
-CFLAGS = -std=gnu11 -Wall -fPIC -MMD $(INCLUDE)
+CFLAGS = -std=gnu11 -Wall -fPIC $(INCLUDE)
 DBG_CFLAGS = -I../../test -O0 -g3 -DDEBUG
 
 .DEFAULT_GOAL := codec
@@ -32,7 +37,10 @@ debug: $(DBG_OBJ)
 .PHONY: parsers
 parsers: $(PARSER_SRC)
 
-%_dbg.o: %.c
+$(BUILDDIR)/%.o: %.c
+	$(CC) $(CFLAGS) $(DBG_CFLAGS) -c $^ -o $@
+
+$(BUILDDIR)/%_dbg.o: %.c
 	$(CC) $(CFLAGS) $(DBG_CFLAGS) -c $^ -o $@
 
 # Parser C sources.
@@ -43,5 +51,6 @@ parser_%.c: lexer_%.re grammar_%.c ../codec.c
 .PRECIOUS: grammar_%.c $(CODEC_INCLUDE_DIR)/tokens_%.h
 # Parser generators.
 grammar_%.c $(CODEC_INCLUDE_DIR)/tokens_%.h: grammar_%.y
-	$(PARSER) $< -p -T$(LEMON_SRC_DIR)/lempar.c -d.
-	mv grammar_$*.h $(CODEC_INCLUDE_DIR)/tokens_$*.h
+	$(PARSER) $< -p -T$(LEMON_SRC_DIR)/lempar.c -d$(BUILDDIR)
+	mv $(BUILDDIR)/grammar_$*.h $(CODEC_INCLUDE_DIR)/tokens_$*.h
+	mv $(BUILDDIR)/grammar_$*.c ./