#=----------------------------------------------------------------------------=# # Makefile # # # # Copyright © 2021 Libre en Communs (contact@a-lec.org) # # Copyright © 2021 Adrien Bourmault (neox@a-lec.org) # # # # This file is part of gem-graph. # # # # This program is free software: you can redistribute it and/or modify # # it under the terms of the GNU Affero General Public License as # # published by the Free Software Foundation, either version 3 of the # # License, or (at your option) any later version. # # # # This program is distributed in the hope that it will be useful, # # but WITHOUT ANY WARRANTY; without even the implied warranty of # # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # # GNU Affero General Public License for more details. # # # # You should have received a copy of the GNU Affero General Public License # # along with this program. If not, see . # #=----------------------------------------------------------------------------=# .PHONY: all clean install run build_system .DELETE_ON_ERROR: $(BINDIR)/gem-graph-server .DEFAULT_GOAL := all # # Color codes # CL='\033[0;32m' CL2='\033[1;36m' CL3='\033[0m' NC='\033[1;37m' # # Variables & constants # NTHREADS= $(shell nproc) CC=gcc WARNINGS= -Wall DEBUG= -ggdb -fno-omit-frame-pointer -fdiagnostics-color=always -fsanitize=bounds -fstack-check #-fsanitize=address \ #-fsanitize=pointer-compare -fsanitize=pointer-subtract \ #-fsanitize=leak -fsanitize=undefined -fsanitize=null -fsanitize=bounds OPTIMIZE= -O3 INCLUDE= $(shell pkg-config --cflags glib-2.0 libxml-2.0 gtk4) LIBS= $(shell pkg-config --libs glib-2.0 libxml-2.0 gtk4) -lGL -lGLU -lm -lepoxy -lX11 -lGLEW BINDIR=bin BUILDDIR=build SRCDIR=src #vpath %.c $(SRCDIR) SOURCES= $(shell find $(SRCDIR) -maxdepth 1 -type f -name "*.c") BUILDBINS=$(patsubst %.c,$(BUILDDIR)/%.o,$(SOURCES)) BUILDDEPS=$(patsubst %.c,$(BUILDDIR)/%.d,$(SOURCES)) -include /etc/os-release # # Directories # $(BUILDDIR): @mkdir -p $@ @echo -e ${CL2}[$@] ${CL}folder generated.${CL3} $(BINDIR): @mkdir -p $@ @echo -e ${CL2}[$@] ${CL}folder generated.${CL3} # # Dependencies # -include $(BUILDDEPS) $(BUILDDIR)/%.d: %.c | $(BUILDDIR) @mkdir -p $(shell dirname $@) @$(CC) -MM -MT $(@:%.d=%.o) -MF $@ $< @echo -e ${CL2}[$@] ${CL}dependencies generated.${CL3} # # Compilation # $(BINDIR)/gem-graph-server: $(BUILDBINS) | $(BINDIR) @$(CC) -o $@ $(WARNINGS) $(DEBUG) $(OPTIMIZE) $^ $(INCLUDE) $(LIBS) @echo -e ${CL2}[$@] ${CL}built.${CL3} $(BUILDDIR)/%.o: %.c | $(BUILDDIR) @mkdir -p $(shell dirname $@) @$(CC) $(WARNINGS) $(DEBUG) $(OPTIMIZE) $(INCLUDE) -c $< -o $@ @echo -e ${CL2}[$@] ${CL}compiled.${CL3} # # Virtual recipes # clean: @rm -rf $(BINDIR) @rm -rf $(BUILDDIR) @echo -e ${CL2}[$@] ${CL}done.${CL3} install: echo "Installing is not supported" build_system: @echo -e ${CL2}[$@] ${CL}building...${CL3} @make $(BINDIR)/gem-graph-server -j $(NTHREADS) @echo -e ${CL2}[$@] ${CL}done.${CL3} run: build_system @echo -e ${CL2}[$@] ${CL}executing...${CL3} @gdb bin/gem-graph-server \ -ex "set args -C debian/etc -M debian/var/models -U debian/var/users" @echo -e ${CL2}[$@] ${CL}done.${CL3} debug: build_system @echo -e ${CL2}[$@] ${CL}executing...${CL3} @gdb $(BINDIR)/gem-graph-server @echo -e ${CL2}[$@] ${CL}done.${CL3} valgrind: build_system @echo -e ${CL2}[$@] ${CL}executing...${CL3} @valgrind --leak-check=full --show-leak-kinds=all -s \ bin/gem-graph-server -C debian/etc -M debian/var/models \ -U debian/var/users @echo -e ${CL2}[$@] ${CL}done.${CL3} run-both: build_system @echo -e ${CL2}[$@] ${CL}executing...${CL3} @bin/gem-graph-server -C debian/etc -M debian/var/models \ -U debian/var/users & sleep 1 && bin/gem-graph-ctl @echo -e ${CL2}[$@] ${CL}done.${CL3} run-server: build_system @echo -e ${CL2}[$@] ${CL}executing...${CL3} @bin/gem-graph-server -C debian/etc -M debian/var/models \ -U debian/var/users @echo -e ${CL2}[$@] ${CL}done.${CL3} all: build_system @echo -e ${CL2}[$@] ${CL}done.${CL3}