1
0
Fichiers

127 lignes
3.8 KiB
Makefile

# Makefile pour illustrer la notion de surcharge d'opérateur en c++
# incluant une nouvelle façon de créer un binaire exécutable
# + une nouvelle façon de sécuriser ce binaire.
# Auteur : Eric Bachard
# Ce document est sous Licence GPL v2 23 Septembre 2024
# voir : http://www.gnu.org/licenses/gpl-2.0.html
UNAME_S = `uname -s`
BUILD_DIR = build
INCLUDE_DIR = inc
APPLICATION_NAME = Modulations_Numeriques
BINARY_NAME = ${BUILD_DIR}/${APPLICATION_NAME}
# please adapt the value to the gcc version
# available on your machine
#G++_VERSION = ...
CXX = g++${G++_VERSION}
SOURCES_DIR = src
DEBUG_EXT = _debug
CXX_STD=-std=c++20
INC_BACKEND = ${INCLUDE_DIR}/backend
INC_FRONTEND = ${INCLUDE_DIR}/frontend
LOCALIZATION_INC = localization
CXX_FLAGS += -I ${INCLUDE_DIR} -I ${LOCALIZATION_INC} -I ${INC_BACKEND} -I ${INC_FRONTEND} -I ${SOURCES_DIR}/gl3w/
CXX_FLAGS += -Wall -ansi -pedantic ${CXX_STD}
CXX_FLAGS += `pkg-config --cflags --libs sdl3`
LDD_CXX_FLAGS += `pkg-config --libs sdl3`
CXX_FLAGS_DEBUG = -g -DDEBUG -Wall -Wformat
LIBS += -lm -lGL -dl ${LDD_CXX_FLAGS}
include secu.mk
# à modifier en fonction de vos besoins !!
SRC_BACKEND = ${SOURCES_DIR}/backend
SRC_FRONTEND = ${SOURCES_DIR}/frontend
SOURCES = \
${SOURCES_DIR}/gl_helpers.cxx \
${SOURCES_DIR}/modulations.cxx \
${SOURCES_DIR}/imgui_utils.cxx \
${SOURCES_DIR}/application.cxx \
${SOURCES_DIR}/cours_popup.cxx \
${SOURCES_DIR}/engine.cxx \
${SOURCES_DIR}/main.cxx
SOURCES += \
${SRC_FRONTEND}/imgui.cxx \
${SRC_FRONTEND}/imgui_themes.cxx \
${SRC_FRONTEND}/imgui_demo.cxx \
${SRC_FRONTEND}/imgui_draw.cxx \
${SRC_FRONTEND}/imgui_tables.cxx \
${SRC_FRONTEND}/imgui_widgets.cxx
SOURCES += \
${SRC_BACKEND}/imgui_impl_sdl3.cxx \
${SRC_BACKEND}/imgui_impl_opengl3.cxx
# todo : embed the DroidSans font
# ${SOURCES_DIR}/${SRC_FRONTEND}/droidsans.cxx
# works but looks buggy (only the first item of the list contains the right prefix)
# that's the reason why the rule is slightly modified in the final collect
OBJS = $(addsuffix .o, $(basename $(notdir $(SOURCES))))
D_OBJS = $(addsuffix .do, $(basename $(notdir $(SOURCES))))
##---------------------------------------------------------------------
## BUILD RULES
##---------------------------------------------------------------------
#%.o:${SOURCES_DIR}/%.cxx
# $(CXX) $(CXX_STD) ${EXTRA_CXX_FLAGS} ${CXX_FLAGS} -c -o ${BUILD_DIR}/$@ $<
#%.do:${SOURCES_DIR}/%.cxx
# $(CXX) $(CXX_STD) ${CXX_FLAGS} ${CXX_FLAGS_DEBUG} ${EXTRA_CXX_FLAGS} ${CXX_FLAGS} ${CXX_FLAGS_DEBUG} -c -o ${BUILD_DIR}/$@ $<
%.o:${SOURCES_DIR}/%.cxx
$(CXX) $(CXX_STD) ${CXX_FLAGS} ${EXTRA_CXX_FLAGS} $(CXXFLAGS) -c -o ${BUILD_DIR}/$@ $<
%.o:${SRC_BACKEND}/%.cxx
$(CXX) $(CXX_STD) ${CXX_FLAGS} ${EXTRA_CXX_FLAGS} $(CXXFLAGS) -c -o ${BUILD_DIR}/$@ $<
%.o:${SRC_FRONTEND}/%.cxx
$(CXX) $(CXX_STD) ${CXX_FLAGS} ${EXTRA_CXX_FLAGS} $(CXXFLAGS) -c -o ${BUILD_DIR}/$@ $<
%.do:${SOURCES_DIR}/%.cxx
$(CXX) $(CXX_STD) ${CXX_FLAGS} ${CXX_FLAGS_DEBUG} ${EXTRA_CXX_FLAGS} $(CXXFLAGS) -c -o ${BUILD_DIR}/$@ $<
%.do:${SRC_BACKEND}/%.cxx
$(CXX) $(CXX_STD) ${CXX_FLAGS} ${CXX_FLAGS_DEBUG} ${EXTRA_CXX_FLAGS} $(CXXFLAGS) -c -o ${BUILD_DIR}/$@ $<
%.do:${SRC_FRONTEND}/%.cxx
$(CXX) $(CXX_STD) ${CXX_FLAGS} ${CXX_FLAGS_DEBUG} ${EXTRA_CXX_FLAGS} $(CXXFLAGS) -c -o ${BUILD_DIR}/$@ $<
%.do:${SOURCES_DIR}/gl3w/GL/%.c
$(CC) $(CFLAGS) -c -o ${BUILD_DIR}/$@ $<
all: ${BINARY_NAME} ${BINARY_NAME}${DEBUG_EXT}
@echo Build complete for ${UNAME_S}
${BINARY_NAME}: ${OBJS}
$(CXX) $(CXX_STD) ${CXX_FLAGS} ${EXTRA_CXX_FLAGS} -DNDEBUG -o $@ ${BUILD_DIR}/*.o ${LIBS}
strip $@
rm -f ${BUILD_DIR}/*.o
${BINARY_NAME}_debug: ${D_OBJS}
$(CXX) $(CXX_STD) ${CXX_FLAGS} ${CXX_FLAGS_DEBUG} ${EXTRA_CXX_FLAGS} -o $@ ${BUILD_DIR}/*.do ${LIBS}
rm -f ${BUILD_DIR}/*.do
clean:
echo Effacement de : ${BINARY_NAME}*
rm -f ${BINARY_NAME}* ${BUILD_DIR}/*.o ${BUILD_DIR}/*.do