#=----------------------------------------------------------------------------=# # Makefile # # # # Copyright © 2021 The Gem-graph Project # # # # 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 . # #=----------------------------------------------------------------------------=# CCOPTS=-pthread -Wall -g -Os -I/usr/include/libxml2 LDFLAGS= -lc -lpthread -lxml2 BINDIR=bin INCDIR=include SRCDIR=src DEBDIR=debian SERVEROBJ= $(BINDIR)/scheduler.o $(BINDIR)/server.o $(BINDIR)/worker.o \ $(BINDIR)/centers.o $(BINDIR)/cmds.o $(BINDIR)/model.o \ $(BINDIR)/main.o $(BINDIR)/arrows.o $(BINDIR)/parsing.o CLIOBJ= $(BINDIR)/cli.o SRCS=$(patsubst $(BINDIR)/%.o,$(SRCDIR)/%.c,$(SERVEROBJ)) \ $(patsubst $(BINDIR)/%.o,$(SRCDIR)/%.c,$(CLIOBJ)) DEPS=$(patsubst $(BINDIR)/%.o,$(BINDIR)/%.d,$(SERVEROBJ)) \ $(patsubst $(BINDIR)/%.o,$(BINDIR)/%.d,$(CLIOBJ)) .DEFAULT_GOAL:= all .PHONY: all clean deb tests install run run-cli run-tests dependencies # ---- Dependencies enumeration ---------------------------------------------- # dependencies: $(DEPS) $(BINDIR)/%.d: $(BINDIR)/%.o $(SRCDIR)/%.c @$(CC) $(CFLAGS) -MM -MT $< $(word 2,$^) -MF $@ # ---- Tests enumeration ----------------------------------------------------- # TEST_SCHEDULER=$(BINDIR)/tests/centers TESTS=$(TEST_SCHEDULER) $(BINDIR)/tests/centers: $(SRCDIR)/tests/centers.c @echo "Compiling $<" @$(CC) $(CCINCLUDES) $(CCOPTS) $(CCFLAGS) $(LDFLAGS) -o $@ $< # ---- General recipes ------------------------------------------------------- # $(BINDIR)/%.o: $(SRCDIR)/%.c @echo "Compiling $<" @$(CC) $(CCINCLUDES) $(CCOPTS) $(CCFLAGS) -c -o $@ $< # ---- Main recipe ----------------------------------------------------------- # $(BINDIR)/main.o: $(SRCDIR)/main.c @echo "Compiling $<" @$(CC) $(CCINCLUDES) $(CCOPTS) $(CCFLAGS) -c -o $@ $< $(BINDIR)/gem-graph-server: $(SERVEROBJ) @echo "Building program to $@" @$(CC) -o $@ $(SERVEROBJ) $(LDFLAGS) @echo "Success!" $(BINDIR)/gem-graph-ctl: $(CLIOBJ) @echo "Building program to $@" @$(CC) -o $@ $(CLIOBJ) $(LDFLAGS) @echo "Success!" # ---- Misc recipes ---------------------------------------------------------- # clean: -rm -f $(SRCDIR)/*.o $(BINDIR)/* $(BINDIR)/tests/* *.deb all: dependencies $(BINDIR)/gem-graph-server $(BINDIR)/gem-graph-ctl tests: $(TESTS) # ---- Build debian package -------------------------------------------------- # $(BINDIR)/gem-graph-server.deb: all $(DEBDIR)/control \ $(DEBDIR)/conffiles \ $(DEBDIR)/etc/server.conf \ $(DEBDIR)/copyright mkdir -p gem-graph-server/usr/bin mkdir -p gem-graph-server/var/lib/gem-graph-server/models mkdir -p gem-graph-server/var/lib/gem-graph-server/users mkdir -p gem-graph-server/etc/gem-graph-server mkdir -p gem-graph-server/usr/share/doc/gem-graph-server mkdir -p gem-graph-server/DEBIAN cp $(DEBDIR)/control gem-graph-server/DEBIAN/control cp $(DEBDIR)/conffiles gem-graph-server/DEBIAN/conffiles cp $(DEBDIR)/etc/* gem-graph-server/etc/gem-graph-server cp $(BINDIR)/gem-graph-server gem-graph-server/usr/bin cp $(BINDIR)/gem-graph-ctl gem-graph-server/usr/bin cp $(DEBDIR)/copyright \ gem-graph-server/usr/share/doc/gem-graph-server/copyright dpkg-deb --build gem-graph-server rm -rf gem-graph-server deb: $(BINDIR)/gem-graph-server.deb # ---- Builder will call this to install the application before running ------ # install: echo "Installing is not supported" # ---- Builder uses this target to run the application ----------------------- # run: all @bin/gem-graph-server -C debian/etc -M debian/var/models \ -U debian/var/users run-gdb: all @gdb bin/gem-graph-server \ -ex "set args -C debian/etc -M debian/var/models -U debian/var/users" run-valgrind: all @valgrind --leak-check=full -s bin/gem-graph-server \ -C debian/etc -M debian/var/models -U debian/var/users run-both: all @bin/gem-graph-server -C debian/etc -M debian/var/models \ -U debian/var/users & sleep 1 && bin/gem-graph-ctl run-server: all @bin/gem-graph-server -C debian/etc -M debian/var/models \ -U debian/var/users run-cli: all @bin/gem-graph-ctl run-tests: tests @bin/tests/scheduler include $(DEPS)