Copy Makefile from 2019

This commit is contained in:
2022-10-11 20:22:33 +02:00
parent 0a03bc557b
commit 4a565af1c2
3 changed files with 99 additions and 34 deletions

View File

@@ -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 <https://www.gnu.org/licenses/gpl-3.0-standalone.html>.
#
# SPDX-License-Identifier: GPL-3.0-or-later <https://spdx.org/licenses/GPL-3.0-or-later.html>
#
SUBDIRS := $(shell echo day??) 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: clean:
for dir in $(SUBDIRS) ; do \ @for dir in $(SUBDIRS) ; do \
make -C $$dir clean ; \ $(MAKE) --no-print-directory -C $$dir clean ; \
done done
all: $(SUBDIRS) cleanlib: clean
@$(RM) -f $(SLIB) $(DLIB) $(LIBOBJ)
cleanall: clean cleanlib
redo: cleanall all
$(SUBDIRS): $(SUBDIRS):
@echo "=========================================" @echo "========================================="
@echo "================= $@ =================" @echo "================= $@ ================="
@echo "=========================================" @echo "========================================="
@echo @echo
@echo "+++++++++++++++++ ex1" @echo "+++++++++++++++++ part 1"
@$(MAKE) --no-print-directory -C $@ ex1 2>&1 +@$(MAKE) --no-print-directory -C $@ ex1 2>&1
@echo "+++++++++++++++++ ex2" @echo "+++++++++++++++++ part 2"
@$(MAKE) --no-print-directory -C $@ ex2 2>&1 +@$(MAKE) --no-print-directory -C $@ ex2 2>&1
output: output:
@$(MAKE) --no-print-directory all >OUTPUT 2>&1 @$(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 $@ $<

View File

@@ -28,7 +28,7 @@ ex2: ex2-c ex2-sort-cob ex2-pure-sort-cob
@$(TIME) ex2-c < $(INPUT) @$(TIME) ex2-c < $(INPUT)
clean: clean:
@rm -f ex1-c ex2-c core ex2-galoisgirl-cob ex2-cob @rm -f ex1-c ex2-c core ex*-cob
output: output:
$(MAKE) --no-print-directory all >OUTPUT 2>&1 $(MAKE) --no-print-directory all >OUTPUT 2>&1

View File

@@ -1,6 +1,6 @@
# AOC daily Makefile - GNU make only. # 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. # Licensed under the GNU General Public License v3.0 or later.
# Some rights reserved. See COPYING. # Some rights reserved. See COPYING.
# #
@@ -14,17 +14,15 @@ INPUT := INPUT.txt
SHELL := /bin/bash SHELL := /bin/bash
CC := gcc CC := gcc
BEAR := bear
#LIB := aoc_$(shell uname -m) LIB := aoc_$(shell uname -m)
#INCDIR := ../include INCDIR := ../include
INCDIR := . LIBDIR := ../lib
#LIBDIR := ../lib LDFLAGS := -L$(LIBDIR)
#LDFLAGS := -L$(LIBDIR)
#LDLIB := -l$(LIB) -lm #LDLIB := -l$(LIB) -lm
#LDLIB := -l$(LIB) LDLIB := -l$(LIB)
#export LD_LIBRARY_PATH = $(LIBDIR) export LD_LIBRARY_PATH = $(LIBDIR)
CFLAGS += -std=gnu11 CFLAGS += -std=gnu11
CFLAGS += -O2 CFLAGS += -O2
@@ -39,42 +37,46 @@ CFLAGS += -march=native
CFLAGS += -Wmissing-declarations CFLAGS += -Wmissing-declarations
CFLAGS += -Wno-unused-result CFLAGS += -Wno-unused-result
#CFLAGS += -DDEBUG_DEBUG # activate general debug (debug.c) CFLAGS += -DDEBUG_DEBUG # activate general debug (debug.c)
#CFLAGS += -DDEBUG_POOL # memory pools management 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" TIME := \time -f "\ttime: %E real, %U user, %S sys\n\tcontext-switch:\t%c+%w, page-faults: %F+%R\n"
export PATH := .:$(PATH) 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 memcheck: memcheck1 memcheck2
memcheck1: aoc-c memcheck1: aoc-c
@valgrind -q -s --track-origins=yes aoc-c -p 1 < $(INPUT) @$(VALGRIND) $(VALGRINDFLAGS) aoc-c -p 1 < $(INPUT)
memcheck2: aoc-c 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 compile: aoc-c
assembly: aoc-c.s assembly: aoc-c.s
ex1: aoc-c ex1: aoc-c
@$(TIME) ex1.bash < $(INPUT) 2>&1 @$(TIME) aoc-c -p 1 < $(INPUT)
@$(TIME) aoc-c -p 1 < $(INPUT) 2>&1
ex2: aoc-c ex2: aoc-c
@$(TIME) ex2.bash < $(INPUT) 2>&1 @$(TIME) aoc-c -p 2 < $(INPUT)
@$(TIME) aoc-c -p 2 < $(INPUT) 2>&1
clean: 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: .c:
@echo compiling $< @echo compiling $<
$(CC) $(CFLAGS) $(LDFLAGS) -I $(INCDIR) $< $(LDLIB) -o $@ @$(CC) $(CFLAGS) $(LDFLAGS) -I $(INCDIR) $< $(LDLIB) -o $@
# generate pre-processed file (.i) and assembler (.s) # generate pre-processed file (.i) and assembler (.s)
%.i: %.c %.i: %.c
@@ -85,6 +87,7 @@ clean:
@echo generating $@ @echo generating $@
@$(CC) -S -fverbose-asm $(CFLAGS) -I $(INCDIR) $< -o $@ @$(CC) -S -fverbose-asm $(CFLAGS) -I $(INCDIR) $< -o $@
bear: clean # generate README.org from README.html (must cleanup !)
@$(BEAR) -- make compile %.org: %.html
@touch .ccls-root @echo generating $@. Cleanup before commit !
@pandoc $< -o $@