-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMakefile
More file actions
127 lines (100 loc) · 4.93 KB
/
Copy pathMakefile
File metadata and controls
127 lines (100 loc) · 4.93 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
# ==============================================================================
# Makefile — FlappyFlop Release Multi-OS Build
# Compile pour Linux, Windows et macOS (selon les compilateurs disponibles)
#
# make release → Compile pour tous les OS disponibles
# make clean → Supprime les builds
# ==============================================================================
TARGET = FlappyFlop
CXXFLAGS = -W -Wall -pedantic -std=c++17 -O2
SRC_DIR = src
SRC = $(shell find $(SRC_DIR) -name '*.cpp')
BUILD_DIR = build
RELEASE_DIR = release
# Compilateurs
CXX_LINUX = g++
CXX_WINDOWS = x86_64-w64-mingw32-g++
CXX_MACOS = o64-clang++
# Chemins de build
LINUX_BUILD = $(BUILD_DIR)/linux
WINDOWS_BUILD = $(BUILD_DIR)/windows
MACOS_BUILD = $(BUILD_DIR)/macos
# Objets
LINUX_OBJ = $(SRC:$(SRC_DIR)/%.cpp=$(LINUX_BUILD)/%.o)
WINDOWS_OBJ = $(SRC:$(SRC_DIR)/%.cpp=$(WINDOWS_BUILD)/%.o)
MACOS_OBJ = $(SRC:$(SRC_DIR)/%.cpp=$(MACOS_BUILD)/%.o)
# Exécutables finaux
LINUX_TARGET = $(RELEASE_DIR)/$(TARGET)-linux
WINDOWS_TARGET = $(RELEASE_DIR)/$(TARGET)-windows.exe
MACOS_TARGET = $(RELEASE_DIR)/$(TARGET)-macos
# SFML
SFML_INC_LINUX = -I/usr/include
SFML_LIB_LINUX = -L/usr/lib -lsfml-graphics -lsfml-window -lsfml-system -lsfml-audio
SFML_INC_WINDOWS = -I/usr/x86_64-w64-mingw32/include
SFML_LIB_WINDOWS = -L/usr/x86_64-w64-mingw32/lib -lsfml-graphics -lsfml-window -lsfml-system -lsfml-audio
SFML_INC_MACOS = -I/opt/osxcross/SDK/MacOSX.sdk/usr/include
SFML_LIB_MACOS = -L/opt/osxcross/lib -lsfml-graphics -lsfml-window -lsfml-system -lsfml-audio
# Flags spécifiques
LINUX_FLAGS = -lGL
WINDOWS_FLAGS = -lopengl32 -lws2_32 -lwinmm -static-libgcc -static-libstdc++
MACOS_FLAGS = -framework OpenGL
# Vérifier si compilateurs disponibles
HAS_LINUX = $(shell command -v $(CXX_LINUX) >/dev/null 2>&1 && echo yes)
HAS_WINDOWS = $(shell command -v $(CXX_WINDOWS) >/dev/null 2>&1 && echo yes)
HAS_MACOS = $(shell command -v $(CXX_MACOS) >/dev/null 2>&1 && echo yes)
.PHONY: release clean help
help:
@echo "════════════════════════════════════════════════════════════"
@echo " FlappyFlop — Multi-OS Release Builder"
@echo "════════════════════════════════════════════════════════════"
@echo " make release → Compiler pour tous les OS disponibles"
@echo " make clean → Supprimer les builds"
@echo "════════════════════════════════════════════════════════════"
# Build de release
release: check-compilers build-all
@echo ""
@echo "════════════════════════════════════════════════════════════"
@echo " ✓ Build Release Terminé!"
@echo "════════════════════════════════════════════════════════════"
@ls -lh $(RELEASE_DIR)/
# Vérifier quels compilateurs sont disponibles
check-compilers:
@echo "Vérification des compilateurs disponibles..."
@if [ "$(HAS_LINUX)" = "yes" ]; then echo " ✓ Linux (g++)"; else echo " ✗ Linux (g++ manquant)"; fi
@if [ "$(HAS_WINDOWS)" = "yes" ]; then echo " ✓ Windows (MinGW)"; else echo " ✗ Windows (MinGW manquant)"; fi
@if [ "$(HAS_MACOS)" = "yes" ]; then echo " ✓ macOS (osxcross)"; else echo " ✗ macOS (osxcross manquant)"; fi
@echo ""
# Compiler pour tous les OS disponibles
build-all: $(if $(HAS_LINUX),build-linux) $(if $(HAS_WINDOWS),build-windows) $(if $(HAS_MACOS),build-macos)
# ============== LINUX BUILD ==============
build-linux: $(LINUX_TARGET)
@echo "✓ Build Linux: $<"
$(LINUX_TARGET): $(LINUX_OBJ)
@mkdir -p $(RELEASE_DIR)
$(CXX_LINUX) $(CXXFLAGS) $(LINUX_FLAGS) $^ -o $@ $(SFML_LIB_LINUX)
$(LINUX_BUILD)/%.o: $(SRC_DIR)/%.cpp
@mkdir -p $(dir $@)
$(CXX_LINUX) $(CXXFLAGS) $(SFML_INC_LINUX) -c $< -o $@
# ============== WINDOWS BUILD ==============
build-windows: $(WINDOWS_TARGET)
@echo "✓ Build Windows: $<"
$(WINDOWS_TARGET): $(WINDOWS_OBJ)
@mkdir -p $(RELEASE_DIR)
$(CXX_WINDOWS) $(CXXFLAGS) $(WINDOWS_FLAGS) $^ -o $@ $(SFML_LIB_WINDOWS)
$(WINDOWS_BUILD)/%.o: $(SRC_DIR)/%.cpp
@mkdir -p $(dir $@)
$(CXX_WINDOWS) $(CXXFLAGS) $(SFML_INC_WINDOWS) -c $< -o $@
# ============== MACOS BUILD ==============
build-macos: $(MACOS_TARGET)
@echo "✓ Build macOS: $<"
$(MACOS_TARGET): $(MACOS_OBJ)
@mkdir -p $(RELEASE_DIR)
$(CXX_MACOS) $(CXXFLAGS) $(MACOS_FLAGS) $^ -o $@ $(SFML_LIB_MACOS)
$(MACOS_BUILD)/%.o: $(SRC_DIR)/%.cpp
@mkdir -p $(dir $@)
$(CXX_MACOS) $(CXXFLAGS) $(SFML_INC_MACOS) -c $< -o $@
# Nettoyage
clean:
@echo "Nettoyage..."
@rm -rf $(BUILD_DIR) $(RELEASE_DIR)
@echo "✓ Nettoyage effectué."