gem-graph-client/Makefile
Adrien 'neox' Bourmault 502fc8939f Makefile: integrate libasan to our build system
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>
2024-11-22 16:38:30 +01:00

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/