Adrien 'neox' Bourmault
502fc8939f
The libasan library allows to get reports for memory leaks and stack issues at runtime, with very few performance drawbacks. This commits add integration for this in the Makefile, for the default target. Signed-off-by: Adrien 'neox' Bourmault <neox@a-lec.org>
90 lines
1.9 KiB
Makefile
90 lines
1.9 KiB
Makefile
.PHONY: run clean install all docs
|
|
.DELETE_ON_ERROR: $(BINDIR)/Getting_Started_with_GTK
|
|
.DEFAULT_GOAL: all
|
|
|
|
CPUS ?= $(shell (nproc --all || sysctl -n hw.ncpu) 2>/dev/null || echo 1)
|
|
MAKEFLAGS += --jobs=$(CPUS)
|
|
|
|
CC=gcc
|
|
DOXYGEN=doxygen
|
|
CFLAGS=`pkg-config --cflags gtk4 epoxy glib-2.0 libxml-2.0`
|
|
LDFLAGS=`pkg-config --libs gtk4 epoxy glib-2.0 libxml-2.0` -lGL -lGLU -lm -lepoxy -lX11 -lGLEW
|
|
WARNINGS = -Wall
|
|
DEBUG = -ggdb -fno-omit-frame-pointer \
|
|
-fdiagnostics-color=always \
|
|
-fsanitize=address,undefined -fstack-protector-strong
|
|
OPTIMIZE = -O3
|
|
|
|
BINDIR=bin
|
|
BUILDDIR=build
|
|
SRCDIR=src
|
|
DOCSDIR=docs
|
|
|
|
SOURCES = $(shell find $(SRCDIR) -type f -name "*.c")
|
|
OBJECTS = $(patsubst %.c,$(BUILDDIR)/%.o,$(SOURCES))
|
|
DEPENDENCIES = $(patsubst %.c,$(BUILDDIR)/%.d,$(SOURCES))
|
|
|
|
all: $(BINDIR)/gem-graph-client
|
|
|
|
-include /etc/os-release
|
|
|
|
#
|
|
# Directories
|
|
#
|
|
$(BUILDDIR):
|
|
@mkdir -p $@
|
|
@echo " MKDIR $@"
|
|
|
|
$(BINDIR):
|
|
@mkdir -p $@
|
|
@echo " MKDIR $@"
|
|
|
|
#
|
|
# Dependencies
|
|
#
|
|
-include $(DEPENDENCIES)
|
|
|
|
$(BUILDDIR)/%.d: %.c Makefile | $(BUILDDIR)
|
|
@mkdir -p $(shell dirname $@)
|
|
@$(CC) $(CFLAGS) -MM -MT $(@:%.d=%.o) -MF $@ $<
|
|
@echo " DEP $@"
|
|
|
|
#
|
|
# Main program
|
|
#
|
|
$(BINDIR)/gem-graph-client: $(OBJECTS) | $(BINDIR)
|
|
@$(CC) $(LDFLAGS) $(WARNINGS) $(DEBUG) $(OPTIMIZE) $^ -o $@
|
|
@echo " LD $@"
|
|
|
|
#
|
|
# Objects
|
|
#
|
|
$(BUILDDIR)/%.o: %.c Makefile | $(BUILDDIR)
|
|
@mkdir -p $(shell dirname $@)
|
|
@$(CC) $(CFLAGS) $(WARNINGS) $(DEBUG) $(OPTIMIZE) -c $< -o $@
|
|
@echo " CC $@"
|
|
|
|
#
|
|
# Virtual recipes
|
|
#
|
|
install:
|
|
@echo "Installing is not supported"
|
|
|
|
run: $(BINDIR)/gem-graph-client
|
|
$(BINDIR)/gem-graph-client
|
|
|
|
docs: $(SOURCES) $(DEPENDENCIES)
|
|
@$(DOXYGEN) $(DOCSDIR)/doxyfile
|
|
@echo " DOXYGEN $(DOCSDIR)/doxyfile"
|
|
|
|
clean:
|
|
@rm -rf $(BINDIR)
|
|
@echo " RM $(BINDIR)"
|
|
@rm -rf $(BUILDDIR)
|
|
@echo " RM $(BUILDDIR)"
|
|
|
|
|
|
# More docs :
|
|
# https://www.gnu.org/software/make/manual/
|
|
# accessoirement : https://blog.stephane-robert.info/docs/makefile/ & /docs/task/
|
|
|