diff --git a/c/makefile b/c/makefile index dc81a70..f71c2b6 100644 --- a/c/makefile +++ b/c/makefile @@ -1,15 +1,19 @@ CC ?= cc +USR_LDFLAGS ?= LDFLAGS ?= -lipc - -include makefile.valgrind +LDFLAGS += $(USR_LDFLAGS) +LDFLAGS += $(STATIC_BUILD) +CFLAGS ?= -Wall -Wextra all: build +include ../mk/makefile.utils + BINS = pong pongd build: $(BINS) $(BINS): - $(CC) -o $@ $@.c $(LDFLAGS) + $(CC) -o $@ $@.c $(CFLAGS) $(LDFLAGS) clean: rm $(BINS) 2>/dev/null diff --git a/mk/makefile.bin-inspection b/mk/makefile.bin-inspection new file mode 100644 index 0000000..9a32b7d --- /dev/null +++ b/mk/makefile.bin-inspection @@ -0,0 +1,17 @@ +ifeq ($(SRC),) +test-src: + @echo SRC must be set via command line. + @exit 1 +else +test-src: +endif + +list-obj-files: test-src + @# List all .o included in a .a archive. + ar t $(SRC) +list-symbols: test-src + @# List all symbols in a .so. + nm -D $(SRC) +list-symbols-alt: test-src + @# Alternative: grep .text section in an objdump output. + objdump -T $(SRC) | grep text diff --git a/mk/makefile.static-build b/mk/makefile.static-build new file mode 100644 index 0000000..85d696f --- /dev/null +++ b/mk/makefile.static-build @@ -0,0 +1,6 @@ +ifdef STATIC +STATIC_BUILD ?= -static +endif + +# For interactive completion in the shell. +STATIC ?= diff --git a/mk/makefile.utils b/mk/makefile.utils new file mode 100644 index 0000000..9d0d56d --- /dev/null +++ b/mk/makefile.utils @@ -0,0 +1,3 @@ +include ../mk/makefile.valgrind +include ../mk/makefile.bin-inspection +include ../mk/makefile.static-build diff --git a/mk/makefile.valgrind b/mk/makefile.valgrind new file mode 100644 index 0000000..9153be0 --- /dev/null +++ b/mk/makefile.valgrind @@ -0,0 +1,21 @@ +# Debug with valgrind. +ifdef VG_SUPPRESS_WARNINGS +VALGRIND_SUPPRESS_WARNINGS ?= --suppressions=./valgrind.suppr +endif + +ifdef VG_GENERATE_SUPPRESSION +VALGRIND_GEN_SUPPRESSION ?= --gen-suppressions=all +endif + +VALGRIND_OPTS ?= -v --leak-check=full --track-origins=yes + +ifdef USE_VALGRIND +VALGRIND ?= valgrind $(VALGRIND_SUPPRESS_WARNINGS) \ + $(VALGRIND_GEN_SUPPRESSION) \ + $(VALGRIND_OPTS) +endif + +# Optional parameters (copied here to help with autocompletion). +VG_SUPPRESS_WARNINGS ?= +VG_GENERATE_SUPPRESSION ?= +USE_VALGRIND ?=