diff --git a/2020/Makefile b/2020/Makefile index 8211a5f..415cdac 100644 --- a/2020/Makefile +++ b/2020/Makefile @@ -1,25 +1,87 @@ +# AOC Makefile - GNU make only. +# +# Copyright (C) 2021-2022 Bruno Raoult ("br") +# Licensed under the GNU General Public License v3.0 or later. +# Some rights reserved. See COPYING. +# +# You should have received a copy of the GNU General Public License along with this +# program. If not, see . +# +# SPDX-License-Identifier: GPL-3.0-or-later +# + + SUBDIRS := $(shell echo day??) -EXCLUDE := --exclude 'cob-01/' +CC = gcc -.PHONY: clean $(SUBDIRS) +#LIBS = -lreadline -lncurses +CFLAGS += -std=gnu11 + +CFLAGS += -O2 +CFLAGS += -g +#CFLAGS += -pg +CFLAGS += -Wall +CFLAGS += -Wextra +CFLAGS += -march=native + +CFLAGS += -DDEBUG_DEBUG # activate general debug (debug.c) +CFLAGS += -DDEBUG_POOL # memory pools management + +INCDIR := ./include +LIBSRCDIR := ./libsrc +LIBDIR := ./lib +LIB := libaoc_$(shell uname -m) +SLIB := $(LIBDIR)/$(LIB).a +DLIB := $(LIBDIR)/$(LIB).so +LIBSRC := $(wildcard $(LIBSRCDIR)/*.c) +LIBOBJ := $(patsubst %.c,%.o,$(LIBSRC)) +LDFLAGS := -L$(LIBDIR) +LDLIB := -l$(LIB) + +.PHONY: clean cleanlib cleanall all redo output lib $(SUBDIRS) + +all: lib $(SUBDIRS) clean: - for dir in $(SUBDIRS) ; do \ - make -C $$dir clean ; \ + @for dir in $(SUBDIRS) ; do \ + $(MAKE) --no-print-directory -C $$dir clean ; \ done -all: $(SUBDIRS) +cleanlib: clean + @$(RM) -f $(SLIB) $(DLIB) $(LIBOBJ) + +cleanall: clean cleanlib + +redo: cleanall all $(SUBDIRS): @echo "=========================================" @echo "================= $@ =================" @echo "=========================================" @echo - @echo "+++++++++++++++++ ex1" - @$(MAKE) --no-print-directory -C $@ ex1 2>&1 - @echo "+++++++++++++++++ ex2" - @$(MAKE) --no-print-directory -C $@ ex2 2>&1 + @echo "+++++++++++++++++ part 1" + +@$(MAKE) --no-print-directory -C $@ ex1 2>&1 + @echo "+++++++++++++++++ part 2" + +@$(MAKE) --no-print-directory -C $@ ex2 2>&1 output: @$(MAKE) --no-print-directory all >OUTPUT 2>&1 + +lib: $(DLIB) $(SLIB) + +$(SLIB): $(LIBOBJ) + @echo building $@ static library. + @mkdir -p $(LIBDIR) + @$(AR) $(ARFLAGS) -o $@ $^ + +$(DLIB): CFLAGS += -fPIC +$(DLIB): LDFLAGS += -shared +$(DLIB): $(LIBOBJ) + @echo building $@ shared library. + @mkdir -p $(LIBDIR) + @$(CC) $(LDFLAGS) $^ -o $@ + +.c.o: + @echo compiling $<. + @$(CC) -c $(CFLAGS) $(LDFLAGS) -I $(INCDIR) -o $@ $< diff --git a/2020/day01/Makefile b/2020/day01/Makefile index 89b1a9f..9bf7369 100644 --- a/2020/day01/Makefile +++ b/2020/day01/Makefile @@ -28,7 +28,7 @@ ex2: ex2-c ex2-sort-cob ex2-pure-sort-cob @$(TIME) ex2-c < $(INPUT) clean: - @rm -f ex1-c ex2-c core ex2-galoisgirl-cob ex2-cob + @rm -f ex1-c ex2-c core ex*-cob output: $(MAKE) --no-print-directory all >OUTPUT 2>&1 diff --git a/2020/day24/Makefile b/2020/day24/Makefile index b66bb2c..9d4af32 100644 --- a/2020/day24/Makefile +++ b/2020/day24/Makefile @@ -1,6 +1,6 @@ # AOC daily Makefile - GNU make only. # -# Copyright (C) 2022 Bruno Raoult ("br") +# Copyright (C) 2021-2022 Bruno Raoult ("br") # Licensed under the GNU General Public License v3.0 or later. # Some rights reserved. See COPYING. # @@ -14,17 +14,15 @@ INPUT := INPUT.txt SHELL := /bin/bash CC := gcc -BEAR := bear -#LIB := aoc_$(shell uname -m) -#INCDIR := ../include -INCDIR := . -#LIBDIR := ../lib -#LDFLAGS := -L$(LIBDIR) +LIB := aoc_$(shell uname -m) +INCDIR := ../include +LIBDIR := ../lib +LDFLAGS := -L$(LIBDIR) #LDLIB := -l$(LIB) -lm -#LDLIB := -l$(LIB) +LDLIB := -l$(LIB) -#export LD_LIBRARY_PATH = $(LIBDIR) +export LD_LIBRARY_PATH = $(LIBDIR) CFLAGS += -std=gnu11 CFLAGS += -O2 @@ -39,42 +37,46 @@ CFLAGS += -march=native CFLAGS += -Wmissing-declarations CFLAGS += -Wno-unused-result -#CFLAGS += -DDEBUG_DEBUG # activate general debug (debug.c) -#CFLAGS += -DDEBUG_POOL # memory pools management +CFLAGS += -DDEBUG_DEBUG # activate general debug (debug.c) +CFLAGS += -DDEBUG_POOL # memory pools management + +VALGRIND := valgrind +VALGRINDFLAGS := --leak-check=full --show-leak-kinds=all --track-origins=yes \ + --sigill-diagnostics=yes --quiet --show-error-list=yes + TIME := \time -f "\ttime: %E real, %U user, %S sys\n\tcontext-switch:\t%c+%w, page-faults: %F+%R\n" export PATH := .:$(PATH) -.PHONY: clean all compile assembly memcheck memcheck1 memcheck2 ex1 ex2 bear +.PHONY: clean all compile assembly memcheck memcheck1 memcheck2 ex1 ex2 -all: ex1 ex2 +all: README.org ex1 ex2 memcheck: memcheck1 memcheck2 memcheck1: aoc-c - @valgrind -q -s --track-origins=yes aoc-c -p 1 < $(INPUT) + @$(VALGRIND) $(VALGRINDFLAGS) aoc-c -p 1 < $(INPUT) memcheck2: aoc-c - @valgrind -q -s --track-origins=yes aoc-c -p 2 < $(INPUT) + @$(VALGRIND) $(VALGRINDFLAGS) aoc-c -p 2 < $(INPUT) + @#@valgrind -s --track-origins=yes aoc-c -p 2 < $(INPUT) compile: aoc-c assembly: aoc-c.s ex1: aoc-c - @$(TIME) ex1.bash < $(INPUT) 2>&1 - @$(TIME) aoc-c -p 1 < $(INPUT) 2>&1 + @$(TIME) aoc-c -p 1 < $(INPUT) ex2: aoc-c - @$(TIME) ex2.bash < $(INPUT) 2>&1 - @$(TIME) aoc-c -p 2 < $(INPUT) 2>&1 + @$(TIME) aoc-c -p 2 < $(INPUT) clean: - @rm -f aoc-c core* vgcore* gmon.out aoc-c.s compile_commands.json + @rm -f aoc-c core* vgcore* gmon.out aoc-c.s aoc-c.i README.html compile_commands.json .c: @echo compiling $< - $(CC) $(CFLAGS) $(LDFLAGS) -I $(INCDIR) $< $(LDLIB) -o $@ + @$(CC) $(CFLAGS) $(LDFLAGS) -I $(INCDIR) $< $(LDLIB) -o $@ # generate pre-processed file (.i) and assembler (.s) %.i: %.c @@ -85,6 +87,7 @@ clean: @echo generating $@ @$(CC) -S -fverbose-asm $(CFLAGS) -I $(INCDIR) $< -o $@ -bear: clean - @$(BEAR) -- make compile - @touch .ccls-root +# generate README.org from README.html (must cleanup !) +%.org: %.html + @echo generating $@. Cleanup before commit ! + @pandoc $< -o $@