-
Notifications
You must be signed in to change notification settings - Fork 0
/
makefile
155 lines (132 loc) · 4 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
# ················
# · DEFINICIONES ·
# ················
# Compilador y opciones
CC=g++ -g
CFLAGS=--std=c++17
LDFLAGS=
EXECUTABLE_NAME=main
# Carpetas de salida
BIN=bin
OBJ=$(BIN)/obj
LIB_OUT=$(BIN)/lib
LDFLAGS:=$(LDFLAGS) -L$(LIB_OUT)
# Archivos cabecera (.h)
ROOT_DIR=../..
LIB=$(ROOT_DIR)/lib
INCLUDES= \
-I. \
-I$(ROOT_DIR) \
-I$(LIB)/ \
-I$(LIB)/imgui \
-I$(LIB)/imgui/backends \
-I$(LIB)/imguizmo/imGuIZMO.quat
HEADER_FILES=$(wildcard ./*.h) $(wildcard $(ROOT_DIR)/*.h)
# ifndef EMSCRIPTEN
INCLUDES:=$(INCLUDES) \
-I$(LIB)/glad \
-I$(LIB)/glm \
-I$(LIB)/glfw/include \
-I$(LIB)/glfw/include/GLFW
# else
# INCLUDES:=$(INCLUDES) \
# -I$(EMSCRIPTEN)/system/include \
# -I$(EMSCRIPTEN)/system/include/GLFW
# endif
# Archivos fuente (.cpp)
SRC=.
SOURCE_FILES=$(SRC)/main.cpp
# Archivos objecto (.o)
OBJECT_FILES=$(patsubst $(SRC)/%.cpp, $(OBJ)/%.o, $(SOURCE_FILES))
# Assets
ASSETS=shaders
# Ejecutable
EXECUTABLE_FILES=$(BIN)/$(EXECUTABLE_NAME)
# Librerías (.a)
# ifndef EMSCRIPTEN
GLAD_LIB=$(LIB_OUT)/libglad.a
LDFLAGS:=$(LDFLAGS) -lglad
GLFW_LIB=$(LIB_OUT)/glfw/build/src/libglfw3.a
GLFW_CMAKE_FLAGS=
LDFLAGS:=$(LDFLAGS) -L$(LIB_OUT)/glfw/build/src -lglfw3
ifeq ($(shell uname), Darwin)
LDFLAGS:=$(LDFLAGS) -framework Cocoa -framework IOKit -framework CoreVideo
else ifeq ($(shell uname), Linux)
# ...
else
LDFLAGS:=$(LDFLAGS) -lgdi32 -lopengl32 -static -lpthread
GLFW_CMAKE_FLAGS:=$(GLFW_CMAKE_FLAGS) -G Ninja
endif
# endif
IMGUI_LIB=$(LIB_OUT)/libimgui.a
IMGUI_SOURCES=$(wildcard $(LIB)/imgui/*.cpp)
IMGUI_OBJECTS=$(patsubst $(LIB)/imgui/%.cpp, $(OBJ)/%.o, $(IMGUI_SOURCES))
IMGUI_BACKENDS=$(OBJ)/imgui_impl_glfw.o $(OBJ)/imgui_impl_opengl3.o
IMGUI_ZMO=$(OBJ)/imGuIZMOquat.o
LDFLAGS:=$(LDFLAGS) -limgui
# ··········
# · REGLAS ·
# ··········
# TODO: Copiar recursos (shaders, texturas, etc...)
# Build
build: $(EXECUTABLE_FILES) assets
# Copiar assets
assets: $(ASSETS)
@echo "copiando shaders"
@rm -rf $(patsubst %, $(BIN)/%, $(ASSETS))
@cp -r $(ASSETS) $(BIN)
# Emscripten (web)
web: $(SRC)/main.cpp $(HEADER_FILES)
@echo "generando web"
@mkdir -p $(BIN)/web
em++ $(CFLAGS) $(INCLUDES) -c $< -o $(BIN)/web/index.html -s USE_GLFW=3 -s USE_WEBGL2=1 -s WASM=1
# Clean
clean:
@rm -rf $(OBJ)
clean-all: clean
@rm -rf $(BIN)
# Construir ejecutable a partir de archivos de objecto (.o)
$(EXECUTABLE_FILES): $(OBJECT_FILES) $(GLAD_LIB) $(GLFW_LIB) $(IMGUI_LIB)
@echo "generando ejecutable"
@mkdir -p $(BIN)
$(CC) $(INCLUDES) $^ -o $@ $(LDFLAGS)
@echo "ejecutable generado en $@"
# Librería Glad
$(GLAD_LIB) : $(OBJ)/glad.o
@echo "generando librería glad"
@mkdir -p $(LIB_OUT)
@ar rcs $@ $^
$(OBJ)/glad.o : $(LIB)/glad/glad.c
@echo "compilando $<"
@mkdir -p $(OBJ)
@$(CC) $(CFLAGS) $(INCLUDES) -c $< -o $@
# Librería Glfw (usa CMake)
$(GLFW_LIB):
@echo "generando librería glfw"
@mkdir -p $(LIB_OUT)/glfw/build
@cmake -DGLFW_BUILD_EXAMPLES=OFF -DGLFW_BUILD_TESTS=OFF -DGLFW_BUILD_DOCS=OFF -DGLFW_INSTALL=OFF -S $(LIB)/glfw -B $(LIB_OUT)/glfw/build $(GLFW_CMAKE_FLAGS)
@cmake --build $(LIB_OUT)/glfw/build
# Librería ImGui
$(IMGUI_LIB) : $(IMGUI_OBJECTS) $(IMGUI_BACKENDS) $(IMGUI_ZMO)
@echo "generando librería imgui"
@mkdir -p $(LIB_OUT)
@ar rcs $@ $^
$(IMGUI_OBJECTS) : $(OBJ)/%.o : $(LIB)/imgui/%.cpp
@echo "compilando $<"
@mkdir -p $(OBJ)
@$(CC) $(CFLAGS) $(INCLUDES) -c $< -o $@
$(IMGUI_BACKENDS): $(OBJ)/%.o : $(LIB)/imgui/backends/%.cpp
@echo "compilando $<"
@mkdir -p $(OBJ)
@$(CC) $(CFLAGS) $(INCLUDES) -c $< -o $@
$(IMGUI_ZMO): $(OBJ)/%.o : $(LIB)/imguizmo/imGuIZMO.quat/%.cpp
@echo "compilando $<"
@mkdir -p $(OBJ)
@$(CC) $(CFLAGS) $(INCLUDES) -c $< -o $@ -DVGIZMO_USES_GLM -DIMGUIZMO_IMGUI_FOLDER=""
# Construir archivos de objecto (.o) usando archivos fuente (.cpp)
$(OBJECT_FILES): $(OBJ)/%.o : $(SRC)/%.cpp $(HEADER_FILES)
@echo "compilando $<"
@mkdir -p $(OBJ)
@$(CC) $(CFLAGS) $(INCLUDES) -c $< -o $@
# Para asegurarnos de que se pueden ejecutar aunque haya otro archivo con este nombre
.PHONY: build clean clean-all