Преглед на файлове

Set up Makefiles to use local and debug switches.

scossu преди 1 ден
родител
ревизия
ebb7c67c67
променени са 2 файла, в които са добавени 65 реда и са изтрити 60 реда
  1. 48 48
      Makefile
  2. 17 12
      src/codec/Makefile

+ 48 - 48
Makefile

@@ -7,26 +7,43 @@ SHELL := /bin/bash
 CC = gcc
 AR = ar
 
+# Global switches.
+# Compile with debug symbols. Libraries are suffixed with _dbg and can coexist
+# with non-debug libraries.
+DEBUG ?= 0
+
+# Install in a user-owned directory provided as LOCAL_PREFIX or a default
+# (~/.local), instead of a system directory.
+LOCAL ?= 0
 
 ## Paths.
 
+LOCAL_PREFIX ?= $(HOME)/.local
+ifneq ($(LOCAL), 0)
+PREFIX ?= $(LOCAL_PREFIX)
+else
 PREFIX ?= /usr/local
+endif
+
 bindir := $(PREFIX)/bin
 libdir := $(PREFIX)/lib
-INCLUDEDIR = $(PREFIX)/include
-BUILDDIR = ./build
-OUTDIR = ./bin
-VALGRIND_DUMP = /tmp/lsup_valgrind.log
-CALLGRIND_DUMP = /tmp/lsup_callgrind.out
-MASSIF_DUMP = /tmp/lsup_massif.out
+INCLUDEDIR := $(PREFIX)/include
+BUILDDIR := ./build
+OUTDIR := ./bin
+TMPDIR ?= /tmp
+VALGRIND_DUMP := $(TMPDIR)/lsup_valgrind.log
+CALLGRIND_DUMP := $(TMPDIR)/lsup_callgrind.out
+MASSIF_DUMP := $(TMPDIR)/lsup_massif.out
 
 INCLUDE_BASE := . -Iinclude -Iext/tpl/src -Iext/hashmap -Iext/log/src
 INCLUDE := -I$(INCLUDE_BASE)
-_CFLAGS := -std=gnu11 -Wall -fPIC $(INCLUDE)
-DBG_CFLAGS := $(_CFLAGS) -Itest -O0 -ggdb -DDEBUG
-CFLAGS := $(_CFLAGS) -O3
-#$(info CFLAGS: $(CFLAGS))
-#$(info DBG_CFLAGS: $(DBG_CFLAGS))
+_CFLAGS = -std=gnu11 -Wall -fPIC $(INCLUDE)
+ifneq ($(DEBUG), 0)
+CFLAGS = $(_CFLAGS) -Itest -O0 -ggdb -DDEBUG
+else
+CFLAGS = $(_CFLAGS) -O3
+endif
+$(info CFLAGS: $(CFLAGS))
 # NOTE: -luuid is a Linux system library. Other OS's might need a different
 # link or a non-system library built.
 LDFLAGS := -L$(OUTDIR) -L$(libdir) -L. -llmdb -lxxhash -luuid
@@ -57,25 +74,28 @@ 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)/%)
 
+ifneq ($(DEBUG), 0)
+CODEC_OBJ = $(patsubst $(CODEC_DIR)/%.c, $(BUILDDIR)/%_dbg.o, $(CODEC_SRC))
+else
 CODEC_OBJ = $(patsubst $(CODEC_DIR)/%.c, $(BUILDDIR)/%.o, $(CODEC_SRC))
-CODEC_DBG_OBJ = $(CODEC_OBJ:.o=_dbg.o)
+endif
+
+ifneq ($(DEBUG), 0)
+STATIC_LIB = $(OUTDIR)/liblsuprdf_dbg.a
+LOCAL_OBJ = $(LSUP_SRC:src/%.c=$(BUILDDIR)/%_dbg.o)
+else
+STATIC_LIB = $(OUTDIR)/liblsuprdf.a
 LOCAL_OBJ = $(LSUP_SRC:src/%.c=$(BUILDDIR)/%.o)
+endif
 OBJ = $(EXT_OBJ) $(LOCAL_OBJ)
-DBG_OBJ = $(EXT_OBJ) $(LOCAL_OBJ:.o=_dbg.o)
-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)
 
 $(info EXT_SRC: $(EXT_SRC))
 $(info EXT_OBJ: $(EXT_OBJ))
 $(info OBJ: $(OBJ))
-$(info DBG_OBJ: $(DBG_OBJ))
-#$(info LIBS: $(LIBS))
-#$(info DBG_LIBS: $(DBG_LIBS))
+$(info LIBS: $(LIBS))
 
 # LDD for Linux, otool -L for OSX.
 ifeq (, $(shell which ldd))
@@ -112,10 +132,6 @@ help:
 lib: codec $(LIBS) ## Compile main library (static and dynamic linking).
 
 
-.PHONY: debug
-debug: codec_dbg $(DBG_LIBS) ## Compile main library with debug symbols.
-
-
 # Static library.
 $(STATIC_LIB): $(OBJ)
 	$(AR) rs $@ $^ $(CODEC_OBJ)
@@ -126,16 +142,6 @@ $(DYN_LIB): $(OBJ)
 	$(CC) -shared $(LDFLAGS) -o $@ $^ $(CODEC_OBJ)
 
 
-# Static debug library.
-$(STATIC_DBG_LIB): $(DBG_OBJ)
-	$(AR) rs $@ $^ $(CODEC_DBG_OBJ)
-
-
-# Dynamic debug library.
-$(DYN_DBG_LIB): $(DBG_OBJ)
-	$(CC) -shared $(LDFLAGS) -o $@ $^ $(CODEC_DBG_OBJ)
-
-
 # External libraries.
 $(BUILDDIR)/ext/%.o: ext/%.c
 	mkdir -p $(dir $@)
@@ -149,7 +155,7 @@ $(BUILDDIR)/%.o: src/%.c
 
 # Debug objects.
 $(BUILDDIR)/%_dbg.o: src/%.c
-	$(CC) $(DBG_CFLAGS) -c $^ -o $@
+	$(CC) $(CFLAGS) -c $^ -o $@
 
 
 # Codecs in a subfolder.
@@ -157,12 +163,8 @@ $(BUILDDIR)/%_dbg.o: src/%.c
 .PHONY: codec
 codec: $(PARSER)
 	mkdir -p $(BUILDDIR) && \
-	$(MAKE) -C $(CODEC_DIR) codec
+	$(MAKE) -C $(CODEC_DIR) codec DEBUG=$(DEBUG)
 
-.PHONY: codec_dbg
-codec_dbg: $(PARSER)
-	mkdir -p $(BUILDDIR) && \
-	$(MAKE) -C $(CODEC_DIR) debug
 
 # Build the parser executable.
 $(PARSER): $(LEMON_SRC)
@@ -178,16 +180,11 @@ install: lib ## Install library and dependencies to $PREFIX. May require sudo.
 		cp include/*.h $(INCLUDEDIR)
 
 
-debug_install: debug ## Install debug libraries.
-	@echo "Installing debug library files in $(PREFIX)."
-	cp $(DBG_LIBS) $(libdir)
-
-
 .PHONY: clean
+clean: DEBUG = 0
 clean: ## Clean up artifacts, including language parsers.
 	rm -rf $(BUILDDIR)
 	rm -f bin/*
-	rm -f $(LIBS) $(DBG_LIBS)
 	rm -f include/codec/grammar_*.h
 	rm -f src/codec/grammar_*.c src/codec/parser_*.c
 
@@ -200,7 +197,8 @@ uninstall:
 
 
 # For testing, use debug symbols.
-bin/test: debug $(TEST_SRC)
+bin/test: DEBUG = 1
+bin/test: lib $(TEST_SRC)
 	$(CC) $(DBG_CFLAGS) $(LDFLAGS) -llsuprdf_dbg \
 		test.c -o bin/test
 
@@ -239,12 +237,14 @@ memtest: bin/test memcheck ## Run a test suite using Valgrind. Output to separat
 
 
 # Profiling application.
-bin/profile: debug profile.c
+bin/profile: DEBUG = 1
+bin/profile: lib profile.c
 	$(CC) $(CFLAGS) -g -DTESTING $(LDFLAGS) -llsuprdf_dbg \
 		profile.c -o bin/profile
 
 
 # Performance test application. Essentially the profiling code without debug.
+bin/perftest: DEBUG = 0
 bin/perftest: lib profile.c
 	$(CC) $(CFLAGS) -g $(LDFLAGS) -llsuprdf profile.c -o bin/perftest
 

+ 17 - 12
src/codec/Makefile

@@ -10,31 +10,36 @@ BUILDDIR = ../../build
 
 CODEC_SRC = $(wildcard codec_*.c)
 PARSER_SRC = $(CODEC_SRC:codec_%=parser_%)
+ifneq ($(DEBUG), 0)
+CODEC_OBJ := $(CODEC_SRC:%.c=$(BUILDDIR)/%_dbg.o)
+else
 CODEC_OBJ := $(CODEC_SRC:%.c=$(BUILDDIR)/%.o)
+endif
 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 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 $(INCLUDE)
-CFLAGS := $(_CFLAGS) -O3
-DBG_CFLAGS := $(_CFLAGS) -I../../test -O0 -g3 -DDEBUG
+
+ifneq ($(DEBUG), 0)
+CFLAGS = $(_CFLAGS) -I../../test -O0 -g3 -DDEBUG
+else
+CFLAGS = $(_CFLAGS) -O3
+endif
+
+$(info CODEC_OBJ: $(CODEC_OBJ))
+$(info GRAMMAR_OBJ: $(GRAMMAR_OBJ))
+$(info PARSER_OBJ: $(PARSER_OBJ))
+$(info OBJ: $(OBJ))
+$(info CFLAGS: $(CFLAGS))
 
 .DEFAULT_GOAL := codec
 
 .PHONY: codec
 codec: $(OBJ)
 
-.PHONY: debug
-debug: $(DBG_OBJ)
-
 .PHONY: parsers
 parsers: $(PARSER_SRC)
 
@@ -42,7 +47,7 @@ $(BUILDDIR)/%.o: %.c
 	$(CC) $(CFLAGS) -c $^ -o $@
 
 $(BUILDDIR)/%_dbg.o: %.c
-	$(CC) $(DBG_CFLAGS) -c $^ -o $@
+	$(CC) $(CFLAGS) -c $^ -o $@
 
 # Parser C sources.
 parser_%.c: lexer_%.re grammar_%.c ../codec.c