140 lines
4.3 KiB
Makefile
140 lines
4.3 KiB
Makefile
# Makefile
|
|
# Auteur : Farès BELHADJ
|
|
# Email : amsi@up8.edu
|
|
# Date : 28/04/2020
|
|
# Modified : Anri KENNEL (anri.kennel@etud.univ-paris8.fr) - 03/05/2023
|
|
|
|
# Définition des commandes utilisées
|
|
CC = gcc
|
|
ECHO = echo
|
|
RM = rm -f
|
|
TAR = tar
|
|
ZIP = zip
|
|
MKDIR = mkdir
|
|
CHMOD = chmod
|
|
CP = rsync -R
|
|
MINIFIER = minifier
|
|
CURL = curl -s
|
|
DU = du --block-size=1K --human-readable
|
|
TAIL = tail
|
|
GREP = grep
|
|
AWK = awk
|
|
|
|
# Déclaration des options du compilateur
|
|
CFLAGS = -Wall -O3
|
|
CPPFLAGS = -I.
|
|
LDFLAGS = -lm
|
|
|
|
# Définition des fichiers et dossiers
|
|
PACKNAME = api8_2023
|
|
PROGNAME = demo
|
|
VERSION = anri
|
|
distdir = $(PACKNAME)_$(PROGNAME)-$(VERSION)
|
|
HEADERS = $(wildcard includes/*.h)
|
|
SOURCES = main.c $(wildcard src/*.c)
|
|
MSVCSRC = $(patsubst %,<ClCompile Include=\"%\\\" \\/>,$(SOURCES))
|
|
OBJ = $(SOURCES:.c=.o)
|
|
DOXYFILE = documentation/Doxyfile
|
|
VSCFILES = $(PROGNAME).vcxproj $(PROGNAME).sln
|
|
EXTRAFILES = COPYING $(wildcard shaders/*.?s images/*.png) $(VSCFILES)
|
|
DISTFILES = $(SOURCES) Makefile $(HEADERS) $(DOXYFILE) $(EXTRAFILES)
|
|
|
|
MAXSIZE = 64
|
|
|
|
# Traitements automatiques pour ajout de chemins et options (ne pas modifier)
|
|
ifneq (,$(shell ls -d /usr/local/include 2>/dev/null | tail -n 1))
|
|
CPPFLAGS += -I/usr/local/include
|
|
endif
|
|
ifneq (,$(shell ls -d $(HOME)/local/include 2>/dev/null | tail -n 1))
|
|
CPPFLAGS += -I$(HOME)/local/include
|
|
endif
|
|
ifneq (,$(shell ls -d /usr/local/lib 2>/dev/null | tail -n 1))
|
|
LDFLAGS += -L/usr/local/lib
|
|
endif
|
|
ifneq (,$(shell ls -d $(HOME)/local/lib 2>/dev/null | tail -n 1))
|
|
LDFLAGS += -L$(HOME)/local/lib
|
|
endif
|
|
ifeq ($(shell uname),Darwin)
|
|
MACOSX_DEPLOYMENT_TARGET = 11.0
|
|
CFLAGS += -mmacosx-version-min=$(MACOSX_DEPLOYMENT_TARGET)
|
|
LDFLAGS += -framework OpenGL -mmacosx-version-min=$(MACOSX_DEPLOYMENT_TARGET)
|
|
else
|
|
LDFLAGS += -lGL
|
|
endif
|
|
|
|
CPPFLAGS += $(shell sdl2-config --cflags)
|
|
LDFLAGS += -lGL4Dummies $(shell sdl2-config --libs) -lSDL2_mixer -lSDL2_image
|
|
|
|
all: $(PROGNAME)
|
|
$(PROGNAME): $(OBJ)
|
|
$(CC) $(OBJ) $(LDFLAGS) -o $(PROGNAME)
|
|
|
|
debug: CFLAGS = -Wall -Wextra -Wconversion -Wno-sign-conversion -Wno-unused-parameter \
|
|
-Wno-unused-function -Wdouble-promotion -Wshadow -Wcast-align \
|
|
-Wstrict-prototypes -fanalyzer -fsanitize=undefined \
|
|
-fsanitize-undefined-trap-on-error -g3
|
|
debug: $(PROGNAME)
|
|
|
|
%.o: %.c
|
|
$(CC) $(CPPFLAGS) $(CFLAGS) -c $< -o $@
|
|
|
|
dist: distdir
|
|
$(CHMOD) -R a+r $(distdir)
|
|
$(TAR) zcvf $(distdir).tgz $(distdir)
|
|
$(RM) -r $(distdir)
|
|
|
|
zip: distdir
|
|
$(CHMOD) -R a+r $(distdir)
|
|
$(ZIP) -r $(distdir).zip $(distdir)
|
|
$(RM) -r $(distdir)
|
|
|
|
distdir: $(DISTFILES)
|
|
$(RM) -r $(distdir)
|
|
$(MKDIR) $(distdir)
|
|
$(CHMOD) 777 $(distdir)
|
|
$(CP) $(DISTFILES) $(distdir)
|
|
|
|
doc: $(DOXYFILE)
|
|
cat $< | sed -e "s/PROJECT_NAME *=.*/PROJECT_NAME = $(PROGNAME)/" |\
|
|
sed -e "s/PROJECT_NUMBER *=.*/PROJECT_NUMBER = $(VERSION)/" >> $<.new
|
|
mv -f $<.new $<
|
|
cd documentation && doxygen && cd ..
|
|
|
|
msvc: $(VSCFILES)
|
|
@echo "Now these files ($?) already exist. If you wish to regenerate them, you should first delete them manually."
|
|
|
|
$(VSCFILES):
|
|
@echo "Generating $@ ..."
|
|
@cat ../../Windows/templates/gl4dSample$(suffix $@) | \
|
|
sed -e "s/INSERT_PROJECT_NAME/$(PROGNAME)/g" | \
|
|
sed -e "s/INSERT_TARGET_NAME/$(PROGNAME)/" | \
|
|
sed -e "s/INSERT_SOURCE_FILES/$(MSVCSRC)/" > $@
|
|
|
|
clean:
|
|
@$(RM) -r $(PROGNAME) $(OBJ) *~ $(distdir).tgz $(distdir).zip $(distdir)/ \
|
|
gmon.out core.* documentation/*~ shaders/*~ documentation/html
|
|
|
|
distminified: distdirminified dist
|
|
|
|
# Remove all unnecessary extra files
|
|
distdirminified: EXTRAFILES := $(filter-out $(VSCFILES),$(EXTRAFILES))
|
|
distdirminified: DISTFILES := $(filter-out $(DOXYFILE),$(DISTFILES))
|
|
distdirminified: distdir
|
|
@$(CURL) https://raw.githubusercontent.com/BaseMax/C-Minifier/main/Minifier.c | $(CC) -o $(MINIFIER) $(CFLAGS) -x c -
|
|
$(foreach f,$(SOURCES),./$(MINIFIER) $(f) $(distdir)/$(f);)
|
|
@$(RM) $(MINIFIER)
|
|
|
|
size: $(PROGNAME)
|
|
size: SIZEFILES = $(PROGNAME) $(filter-out $(VSCFILES) COPYING,$(EXTRAFILES))
|
|
size: SIZEINFOS = ("; printf $$1; print ", soit `$(shell echo $(SIZEFILES) | sed 's/ /`, `/g')`)"
|
|
size:
|
|
@$(DU) --total $(SIZEFILES) | \
|
|
$(TAIL) -n 1 | \
|
|
$(GREP) -o '[0-9]*K'| \
|
|
$(AWK) '{ \
|
|
if($$1 <= $(MAXSIZE)) { \
|
|
printf "> Taille conforme $(SIZEINFOS) \
|
|
} else { \
|
|
printf "> Fichiers trop lourd $(SIZEINFOS) \
|
|
} \
|
|
}'
|