-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMakefile
88 lines (68 loc) · 2.1 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
BIN = bin
SRC_DIR = src
SRC_LIB_DIR = libs
OBJ_DIR = $(BIN)/obj
OBJ_LIB_DIR = $(BIN)/libs
ASSETS_DIR = assets
CC = clang --target=x86_64-pc-windows-msvc -g -O0
CFLAGS = -Wall -Wextra -Wpedantic -Wstrict-aliasing
CFLAGS += -Wno-newline-eof -Wno-gnu-zero-variadic-macro-arguments \
-Wno-unused-parameter
CFLAGS += -I$(SRC_LIB_DIR)/glad/include \
-I$(SRC_LIB_DIR)/glfw/include \
-I$(SRC_LIB_DIR)/cimgui/imgui/backends \
-I$(SRC_LIB_DIR)/cimgui/imgui \
-I$(SRC_LIB_DIR)/cimgui \
-I$(SRC_LIB_DIR)/cimgui/generator/output
LDFLAGS = $(OBJ_LIB_DIR)/glad.o \
$(OBJ_LIB_DIR)/glfw/src/glfw3.lib \
$(OBJ_LIB_DIR)/cimgui/cimgui.lib
ifeq ($(OS),Windows_NT)
LDFLAGS += -lmsvcrt.lib -lshell32.lib -lUser32.lib -lKernel32.lib \
-lGdi32.lib -lAdvapi32.lib -lComctl32.lib -lOle32.lib -lShLwApi.lib \
-lUserEnv.lib -lWindowsApp.lib
endif
CMFLAGS = -G "Unix Makefiles" -DCMAKE_C_COMPILER=clang
SRC = $(shell find $(SRC_DIR) -type f -name "*.c")
OBJ = $(patsubst $(SRC_DIR)/%.c, $(OBJ_DIR)/%.o, $(SRC))
# Not that cache efficient are we?
.PHONY: all dirs libs game assets clean cleanobjs cleanlibs
run: all
$(BIN)/game
all: dirs libs game assets
dirs:
mkdir -p ./$(BIN)
mkdir -p ./$(OBJ_DIR)
mkdir -p ./$(OBJ_LIB_DIR)
libs:
# do glad - HMMM, ALWAYS BUILDING THIS???
$(CC) -o $(OBJ_LIB_DIR)/glad.o -Ilibs/glad/include -c \
$(SRC_LIB_DIR)/glad/src/glad.c
# go glfw
cmake $(CMFLAGS) -S $(SRC_LIB_DIR)/glfw -B $(OBJ_LIB_DIR)/glfw \
-DGLFW_BUILD_DOCS=OFF -DGLFW_BUILD_TESTS=OFF -DGLFW_BUILD_EXAMPLES=OFF \
-DGLFW_INSTALL=OFF
make -C $(OBJ_LIB_DIR)/glfw
# do cimgui
make -C $(SRC_LIB_DIR)/cimgui all -e SRC_LIB_DIR=../../$(SRC_LIB_DIR) -e OBJ_LIB_DIR=../../$(OBJ_LIB_DIR)
game: $(OBJ)
$(CC) -o $(BIN)/game $^ $(LDFLAGS)
$(OBJ_DIR)/%.o: $(SRC_DIR)/%.c
@mkdir -p $(dir $@)
$(CC) $(CFLAGS) -c $< -o $@
assets:
mkdir -p $(BIN)/assets;
rm -rf $(BIN)/assets;
cp -r $(ASSETS_DIR)/. $(BIN)/assets;
clean: cleanlibs cleanobjs
rm -rf $(BIN)/*
cleanobjs:
rm -rf $(OBJ_DIR)
cleanlibs:
rm -rf $(BIN)/libs
cleanexe:
rm -rf $(BIN)/game
rm -rf $(BIN)/game.exp
rm -rf $(BIN)/game.ilk
rm -rf $(BIN)/game.lib
rm -rf $(BIN)/game.pdb