-
Notifications
You must be signed in to change notification settings - Fork 0
/
Makefile
172 lines (135 loc) · 4.29 KB
/
Makefile
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
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
##
## EPITECH PROJECT, 2024
## B-OOP-400-LYN-4-1-raytracer-thomas.pommier
## File description:
## Makefile
##
CORESRC = $(wildcard ./src/*.cpp) \
$(wildcard ./src/math/*.cpp) \
$(wildcard ./src/optimisation/*.cpp) \
$(wildcard ./src/parsing/*.cpp) \
$(wildcard ./src/parsing/primitives/*.cpp) \
$(wildcard ./src/scene/*.cpp) \
$(wildcard ./src/scene/primitives/*.cpp) \
$(wildcard ./src/scene/materials/*.cpp) \
$(wildcard ./src/scene/materials/code/*.cpp) \
$(wildcard ./src/scene/materials/texture/*.cpp) \
$(wildcard ./src/scene/lights/*.cpp) \
$(wildcard ./src/scene/interactive/*.cpp) \
$(wildcard ./src/scene/interactive/actions/*.cpp)
LIBIMGUISRC = $(wildcard ./bonus/imgui/*.cpp)
IMGUISRC = $(wildcard ./src/scene/interactive/imgui/*.cpp) \
$(wildcard ./src/scene/interactive/imgui/camera/*.cpp) \
$(wildcard ./src/scene/interactive/imgui/inventory/*.cpp) \
$(wildcard ./src/scene/interactive/imgui/light/*.cpp) \
$(wildcard ./src/scene/interactive/imgui/material/*.cpp) \
$(wildcard ./src/scene/interactive/imgui/obj/*.cpp) \
$(wildcard ./src/scene/interactive/imgui/objectSelection/*.cpp) \
$(wildcard ./src/scene/interactive/imgui/primitives/*.cpp) \
$(wildcard ./src/scene/interactive/imgui/primitives/edit/*.cpp) \
CAMERASRC = $(wildcard ./bonus/camera/*.cpp)
SRC = ./src/main/main.cpp \
$(CORESRC)
TESTSRC = $(wildcard ./tests/*.cpp) \
$(CORESRC)
CC = g++
OBJ = $(SRC:.cpp=.o)
DEPS = $(SRC:.cpp=.d)
IMGUIOBJ= $(IMGUISRC:.cpp=.o)
IMGUIDEPS= $(IMGUISRC:.cpp=.d)
LIBIMGUIOBJ=$(LIBIMGUISRC:.cpp=.o)
CAMERAOBJ= $(CAMERASRC:.cpp=.o)
TESTOBJ = $(TESTSRC:.cpp=.o)
TESTCOV = $(TESTSRC:.cpp=.gcno)
TESTCOV += $(TESTSRC:.cpp=.gcda)
NAME = raytracer
TESTNAME = unit-tests
CFLAGS = -O2 -Iinclude -std=c++20 -Wall -Wextra
DBGFLAGS = -g3 -O0
TESTFLAGS = -g3 -O0 --coverage -fprofile-arcs -ftest-coverage
DEPSFLAGS = -MMD -MP
LDFLAGS = -lconfig++ -lsfml-graphics -lsfml-window -lsfml-system
LDBONUSFLAGS= -lGLEW -lglfw
LDCAMERAFLAGS = $(shell pkg-config --libs opencv4)
TESTSFLAGS = $(LDFLAGS) -lcriterion
MACBREWSFML = /opt/homebrew/Cellar/sfml/2.6.1
MACBREWCONFIG = /opt/homebrew/Cellar/libconfig/1.7.3
MACBREWGLFW = /opt/homebrew/Cellar/glfw/3.4
MACBREWGLEW = /opt/homebrew/Cellar/glew/2.2.0_1
MACBRWEOPENCV = /opt/homebrew/Cellar/opencv/4.9.0_9
MACSFMLINCLUDE = -I$(MACBREWSFML)/include -I$(MACBREWCONFIG)/include \
-I$(MACBREWGLFW)/include -I$(MACBREWGLEW)/include \
-I$(MACBRWEOPENCV)/include/opencv4
MACSFMLLIB = -L$(MACBREWSFML)/lib -L$(MACBREWCONFIG)/lib \
-L$(MACBREWGLFW)/lib -L$(MACBREWGLEW)/lib \
-L$(MACBRWEOPENCV)/lib
IMGUIFLAGS = -DBONUS -Ibonus/imgui
CAMERAFLAGS = -DBONUSCAMERA -Ibonus/camera
UNAME_S := $(shell uname -s)
ifeq ($(UNAME_S),Darwin)
LDBONUSFLAGS += -framework OpenGL
CFLAGS += $(MACSFMLINCLUDE) -DMACOSTONIO
LDFLAGS += $(MACSFMLLIB)
else
CAMERAFLAGS += $(shell pkg-config --cflags opencv4)
LDBONUSFLAGS += -lGL
endif
all: $(NAME)
bonusbonusdbg: CFLAGS += $(DBGFLAGS)
bonusbonusdbg: bonusbonus
bonusbonus: $(CAMERAOBJ)
bonusbonus: OBJ += $(CAMERAOBJ)
bonusbonus: LDFLAGS += $(LDCAMERAFLAGS)
bonusbonus: CFLAGS += $(CAMERAFLAGS)
bonusbonus: bonus
bonusdbg: CFLAGS += $(DBGFLAGS)
bonusdbg: bonus
bonus: $(LIBIMGUIOBJ)
bonus: OBJ += $(LIBIMGUIOBJ)
bonus: $(IMGUIOBJ)
bonus: OBJ += $(IMGUIOBJ)
bonus: LDFLAGS += $(LDBONUSFLAGS)
bonus: CFLAGS += $(IMGUIFLAGS)
bonus: $(NAME)
prof: CFLAGS += -pg
prof: all
dbg: CFLAGS += $(DBGFLAGS)
dbg: $(NAME)
dbgs: CFLAGS += $(DBGFLAGS) -fsanitize=address
dbgs: $(NAME)
tests_compile: CFLAGS += -g3 --coverage
tests_compile: $(TESTNAME)
-include $(IMGUIDEPS)
-include $(DEPS)
%.o: %.cpp
$(CC) $(CFLAGS) $(DEPSFLAGS) -c $< -o $@
$(NAME): $(OBJ)
$(CC) $(CFLAGS) $(OBJ) -o $(NAME) $(LDFLAGS)
$(TESTNAME): $(TESTOBJ)
$(CC) $(CFLAGS) $(TESTFLAGS) $(TESTOBJ) -o $(TESTNAME) $(TESTSFLAGS)
tests_run: tests_compile
./$(TESTNAME)
tests_cov: tests_compile
./$(TESTNAME)
gcov -n -b -f $(TESTSRC)
doc:
doxygen Doxyfile
rundoc: doc
python3 -m http.server --directory doc/html
clean:
rm -f $(OBJ)
rm -f $(DEPS)
rm -f $(TESTOBJ)
rm -f $(TESTCOV)
rm -f $(IMGUIOBJ)
rm -f $(IMGUIDEPS)
fclean: clean
rm -f $(NAME)
rm -f $(TESTNAME)
re:
@$(MAKE) fclean
@$(MAKE) all
redbg:
@$(MAKE) fclean
@$(MAKE) dbg
.PHONY: all dbg tests_run tests_cov tests_compile doc rundoc clean fclean re redbg