-
Notifications
You must be signed in to change notification settings - Fork 0
/
Makefile
124 lines (106 loc) · 3.48 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
# Request POSIX Make behavior and disable any default suffix-based rules
.POSIX:
.SUFFIXES:
# Build requirements references:
# https://www.glfw.org/docs/latest/build_guide.html
# CFLAGS breakout by category
CFLAGS_VERSION = -std=c99
CFLAGS_OPTIMIZATIONS = -g -Og
CFLAGS_WARNINGS = -Wall -Wextra -Wpedantic
CFLAGS_DEFINITIONS = -DGLFW_INCLUDE_NONE
CFLAGS_INCLUDE_DIRS = -Ires/ -Isrc/ -Ivendor/include/
CFLAGS_EXTRAS =
# Declare compiler tools and flags
AR = ar
CC = cc
CFLAGS = -fPIC
CFLAGS += $(CFLAGS_VERSION)
CFLAGS += $(CFLAGS_OPTIMIZATIONS)
CFLAGS += $(CFLAGS_WARNINGS)
CFLAGS += $(CFLAGS_DEFINITIONS)
CFLAGS += $(CFLAGS_INCLUDE_DIRS)
CFLAGS += $(CFLAGS_EXTRAS)
LDFLAGS =
LDLIBS = -ldl -lglfw -lm
# Declare which targets should be built by default
default: flappy
# Declare library sources
libflappy_sources = \
src/font.c \
src/model.c \
src/opengl.c \
src/physics.c \
src/shader.c \
src/texture.c
libflappy_objects = $(libflappy_sources:.c=.o)
# Express dependencies between object and source files
src/font.o: src/font.c src/font.h
src/model.o: src/model.c src/model.h src/opengl.h
src/opengl.o: src/opengl.c src/opengl.h
src/physics.o: src/physics.c src/physics.h
src/shader.o: src/shader.c src/shader.h src/opengl.h
src/texture.o: src/texture.c src/texture.h src/opengl.h
# Build the static library
libflappy.a: $(libflappy_objects)
@echo "STATIC $@"
@$(AR) rcs $@ $(libflappy_objects)
# Double suffix rule for compiling .c files to .o object files
.SUFFIXES: .c .o
.c.o:
@echo "CC $@"
@$(CC) $(CFLAGS) -c -o $@ $<
# Declare required resource headers
resource_headers = \
res/models/sprite.h \
res/shaders/font_frag.h \
res/shaders/font_vert.h \
res/shaders/sprite_frag.h \
res/shaders/sprite_vert.h \
res/textures/bg.h \
res/textures/bird.h \
res/textures/pipe_bot.h \
res/textures/pipe_top.h
# Express dependencies between header and resource files
res/models/sprite.h: res/models/sprite.obj
res/shaders/font_frag.h: res/shaders/font_frag.glsl
res/shaders/font_vert.h: res/shaders/font_vert.glsl
res/shaders/sprite_frag.h: res/shaders/sprite_frag.glsl
res/shaders/sprite_vert.h: res/shaders/sprite_vert.glsl
res/textures/bg.h: res/textures/bg.jpg
res/textures/bird.h: res/textures/bird.png
res/textures/pipe_bot.h: res/textures/pipe_bot.png
res/textures/pipe_top.h: res/textures/pipe_top.png
# Resource conversion requires some Python packages
$(resource_headers): venv
# Compile and link the main executable
flappy: src/main.c src/config.h libflappy.a $(resource_headers)
@echo "EXE $@"
@$(CC) $(CFLAGS) $(LDFLAGS) -o $@ src/main.c libflappy.a $(LDLIBS)
# Create the virtualenv for pre/post build scripts
venv:
@echo "VENV venv/"
@python3 -m venv venv/
@./venv/bin/pip install wheel
@echo "DEPS scripts/requirements.txt"
@./venv/bin/pip install -r scripts/requirements.txt
# Double suffix rules for convertion resource files to header files
.SUFFIXES: .obj .h
.obj.h:
@echo "MODEL $@"
@./venv/bin/python3 scripts/res2header.py $< $@
.SUFFIXES: .glsl .h
.glsl.h:
@echo "SHADER $@"
@./venv/bin/python3 scripts/res2header.py $< $@
.SUFFIXES: .jpg .h
.jpg.h:
@echo "TEXTURE $@"
@./venv/bin/python3 scripts/res2header.py $< $@
.SUFFIXES: .png .h
.png.h:
@echo "TEXTURE $@"
@./venv/bin/python3 scripts/res2header.py $< $@
# Helper target that cleans up build artifacts
.PHONY: clean
clean:
rm -fr flappy *.exe *.a *.so *.dll src/*.o res/models/*.h res/shaders/*.h res/textures/*.h