script-linux/Makefile

121 lines
2.3 KiB
Makefile
Raw Normal View History

PROJECTNAME=gol
2023-07-07 12:48:50 +02:00
BIN=build/$(PROJECTNAME)
CC=gcc
2023-07-06 18:45:15 +02:00
EXT=c
2023-07-16 18:02:24 +02:00
INCFOLDERS=include lib
2023-08-13 14:33:10 +02:00
RECURSIVE_INCLUDE=false
ifeq ($(RECURSIVE_INCLUDE), true)
INCDIRS=$(foreach I,$(INCFOLDERS),$(shell find $(I) -type d 2>/dev/null))
else
INCDIRS=$(INCFOLDERS)
endif
2023-07-06 18:45:15 +02:00
# make mode=release
2023-07-07 12:48:50 +02:00
ifeq ($(mode), release)
2023-07-06 18:45:15 +02:00
OPT=-O3
2023-07-07 12:48:50 +02:00
else
OPT=-Og -g
2023-07-06 18:45:15 +02:00
endif
DEPFLAGS=-MP -MD
2023-08-13 14:33:10 +02:00
MACROS=HW PI=3.14
FLAGS=-Wall -Wextra $(foreach F,$(INCDIRS),-I$(F)) $(OPT) $(DEPFLAGS) $(foreach M,$(MACROS),-D$(M))
2023-07-06 18:45:15 +02:00
SRC=$(shell find . -name "*.$(EXT)" -path "./src/*")
OBJ=$(subst ./src/,./build/,$(SRC:.$(EXT)=.o))
2023-08-13 14:33:10 +02:00
LIB=$(shell find . -name "*.$(EXT)" -path "./lib/*")
LIBO=$(subst ./lib/,./build/,$(LIB:.$(EXT)=.o))
2023-07-07 12:48:50 +02:00
TEST=$(shell find . -name "*.$(EXT)" -path "./test/*")
2023-08-13 14:33:10 +02:00
TESTO=$(subst ./test/,./build/,$(TEST:.$(EXT)=.t))
2023-07-06 18:45:15 +02:00
$(shell mkdir -p build)
2023-08-13 14:33:10 +02:00
2023-07-06 18:45:15 +02:00
all : $(BIN)
2023-08-13 14:33:10 +02:00
$(BIN) : $(OBJ) $(LIBO)
2023-11-28 19:32:28 +01:00
$(CC) $(FLAGS) -o $@ $^
2023-07-06 18:45:15 +02:00
2023-08-13 14:33:10 +02:00
-include $(OBJ:.o=.d) $(LIBO:.o=.d)
2023-07-06 18:45:15 +02:00
2023-07-07 12:48:50 +02:00
build/%.o : src/%.$(EXT)
2023-07-06 18:45:15 +02:00
@mkdir -p $(@D)
2023-11-28 19:32:28 +01:00
$(CC) $(FLAGS) -o $@ -c $<
2023-08-13 14:33:10 +02:00
build/%.o : lib/%.$(EXT)
@mkdir -p $(@D)
$(CC) $(FLAGS) -o $@ -c $<
2023-07-06 18:45:15 +02:00
# make test file=testGenID.cpp
2023-08-13 14:33:10 +02:00
test : build/$(file).t
./build/$(file).t
2023-07-06 18:45:15 +02:00
2023-07-16 18:02:24 +02:00
alltest : $(TESTO)
2023-08-13 14:33:10 +02:00
@for i in $(TESTO); do echo $$i; $$i; done
2023-07-16 18:02:24 +02:00
2023-08-13 14:33:10 +02:00
build/%.t : test/%.$(EXT)
2023-07-16 18:02:24 +02:00
@mkdir -p $(@D)
$(CC) $(FLAGS) -o $@ $<
2023-07-06 18:45:15 +02:00
2023-08-13 14:33:10 +02:00
asm : $(OBJ:.o=.s) $(BIN).s
build/%.s : src/%.$(EXT)
@mkdir -p $(@D)
$(CC) $(FLAGS) -S $< -o $@
$(BIN).s : $(BIN)
objdump -drwC -Mintel -S $< > $<.s
preprocess : $(OBJ:.o=.i)
build/%.i : src/%.$(EXT)
@mkdir -p $(@D)
$(CC) $(FLAGS) -E $< -o $@
gigall : $(BIN) $(TESTO) asm preprocess
# make run input="program input"
run : $(BIN)
./$< $(input)
clean :
rm -rf build/*
2023-07-06 18:45:15 +02:00
check :
cppcheck --enable=all --suppress=missingIncludeSystem $(foreach I,$(INCDIRS),-I$(I)) .
flawfinder .
2023-08-13 14:33:10 +02:00
debug : $(BIN)
gdb $< $(input)
2023-07-06 18:45:15 +02:00
2023-07-08 18:55:31 +02:00
# unzip : tar -xvf exemple.tgz
dist : clean
$(info /!\ project folder has to be named $(PROJECTNAME) /!\ )
cd .. && tar zcvf $(PROJECTNAME)/build/$(PROJECTNAME).tgz $(PROJECTNAME) >/dev/null
2023-08-13 14:33:10 +02:00
push :
git push bbsrv
git push gh
2023-07-16 18:02:24 +02:00
2023-08-13 14:33:10 +02:00
install : dist
cp Makefile ../script
mv build/$(PROJECTNAME).tgz ../opt/archive
2023-11-28 19:32:28 +01:00
cd .. && rm -rf $(PROJECTNAME)
2023-07-16 18:02:24 +02:00
2023-08-13 14:33:10 +02:00
info :
$(info put what ever)
@echo you want
2023-07-16 18:02:24 +02:00
2023-08-13 14:33:10 +02:00
# alias
2023-07-16 18:02:24 +02:00
2023-08-13 14:33:10 +02:00
r : run
2023-07-16 18:02:24 +02:00
2023-08-13 14:33:10 +02:00
t : test
2023-07-16 18:02:24 +02:00
2023-08-13 14:33:10 +02:00
c : check
2023-07-16 18:02:24 +02:00
2023-08-13 14:33:10 +02:00
p : push
2023-07-16 18:02:24 +02:00
2023-08-13 14:33:10 +02:00
d : debug
2023-07-16 18:02:24 +02:00
2023-08-13 14:33:10 +02:00
.PHONY : all test t alltest asm preprocess gigall run r clean check c debug d dist push p install info