forked from zenorogue/hyperrogue
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMakefile
187 lines (151 loc) · 5.58 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
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
# This Makefile works for Mac OS X (El Capitan), MinGW, and Linux.
#
# For Mac OS X:
# Run "brew install sdl" to install SDL in /usr/local.
# Run "brew install sdl_gfx".
# Run "brew install sdl_mixer".
# Run "brew install sdl_ttf".
# Run "make" to build HyperRogue as ./hyperrogue.
#
# For MSYS2 and MinGW-w64:
# You might need to run commands such as "pacman -S mingw-w64-x86_64-SDL"
# to install SDL and other required libraries.
# Run "make" to build HyperRogue as ./hyperrogue.exe.
#
# For Ubuntu Linux:
# Run "sudo apt-get install libsdl-dev" to install SDL in /usr/local.
# Run "make" to build HyperRogue as ./hyperrogue.
ifeq ($(OS),Windows_NT)
OS := mingw
TOOLCHAIN := mingw
else
UNAME_S := $(shell uname -s)
ifeq ($(UNAME_S),Linux)
OS := linux
else
ifeq ($(UNAME_S),Darwin)
OS := osx
endif
endif
TOOLCHAIN_VERSION_S := $(shell $(CXX) --version)
ifneq (,$(findstring clang,$(TOOLCHAIN_VERSION_S)))
TOOLCHAIN := clang
else
TOOLCHAIN := gcc
endif
endif
## We have now finished inspecting the environment via $(shell).
## Begin customization points for each OS and TOOLCHAIN we support.
ifeq (${OS},linux)
CXXFLAGS_EARLY += -DLINUX
EXE_EXTENSION :=
LDFLAGS_GL := -lGL
LDFLAGS_GLEW := -lGLEW
LDFLAGS_PNG := -lpng
LDFLAGS_SDL := -lSDL -lSDL_gfx -lSDL_mixer -lSDL_ttf -lpthread -lz
OBJ_EXTENSION := .o
hyper_RES :=
endif
ifeq (${OS},mingw)
CXXFLAGS_EARLY += -DWINDOWS -mwindows -D_A_VOLID=8
EXE_EXTENSION := .exe
LDFLAGS_GL := -lopengl32
LDFLAGS_GLEW := -lglew32
LDFLAGS_PNG := -lpng
LDFLAGS_SDL := -lSDL -lSDL_gfx -lSDL_mixer -lSDL_ttf -lpthread -lz
OBJ_EXTENSION := .o
hyper_RES := hyper.res
ifeq (${HYPERROGUE_USE_GLEW},)
HYPERROGUE_USE_GLEW := 1
endif
endif
ifeq (${OS},osx)
CXXFLAGS_EARLY += -DMAC -I/usr/local/include
EXE_EXTENSION :=
LDFLAGS_EARLY += -L/usr/local/lib
LDFLAGS_GL := -framework AppKit -framework OpenGL
LDFLAGS_GLEW := -lGLEW
LDFLAGS_PNG := -lpng
LDFLAGS_SDL := -lSDL -lSDLMain -lSDL_gfx -lSDL_mixer -lSDL_ttf -lpthread -lz
OBJ_EXTENSION := .o
hyper_RES :=
endif
ifeq (${TOOLCHAIN},clang)
CXXFLAGS_STD = -std=c++11
CXXFLAGS_EARLY += -fPIC
CXXFLAGS_EARLY += -W -Wall -Wextra -Wsuggest-override -pedantic
CXXFLAGS_EARLY += -Wno-unused-parameter -Wno-implicit-fallthrough -Wno-maybe-uninitialized -Wno-char-subscripts -Wno-unknown-warning-option
CXXFLAGS_EARLY += -Wno-invalid-offsetof
endif
ifeq (${TOOLCHAIN},gcc)
CXXFLAGS_STD = -std=c++11
CXXFLAGS_EARLY += -fPIC
CXXFLAGS_EARLY += -W -Wall -Wextra -pedantic
CXXFLAGS_EARLY += -Wno-unused-parameter -Wno-implicit-fallthrough -Wno-maybe-uninitialized
CXXFLAGS_EARLY += -Wno-invalid-offsetof
endif
ifeq (${TOOLCHAIN},mingw)
CXXFLAGS_STD = -std=c++11
CXXFLAGS_EARLY += -W -Wall -Wextra
CXXFLAGS_EARLY += -Wno-unused-parameter -Wno-implicit-fallthrough -Wno-maybe-uninitialized
CXXFLAGS_EARLY += -Wno-invalid-offsetof
endif
ifeq (${FONTCONFIG},1)
CXXFLAGS_EARLY += -DFONTCONFIG `pkg-config --cflags fontconfig`
LDFLAGS_EARLY += `pkg-config --libs fontconfig`
endif
## We have now finished OS-specific and TOOLCHAIN-specific computations.
## Begin customization points for user-specifiable HYPERROGUE_USE_XXX macros.
hyper_OBJS = hyper$(OBJ_EXTENSION)
hyper_LDFLAGS = $(LDFLAGS_GL) $(LDFLAGS_SDL)
ifeq (${HYPERROGUE_USE_GLEW},1)
CXXFLAGS_EARLY += -DCAP_GLEW=1
hyper_LDFLAGS += $(LDFLAGS_GLEW)
else
CXXFLAGS_EARLY += -DCAP_GLEW=0
endif
ifeq (${HYPERROGUE_USE_PNG},1)
CXXFLAGS_EARLY += -DCAP_PNG=1
hyper_LDFLAGS += $(LDFLAGS_PNG)
hyper_OBJS += savepng$(OBJ_EXTENSION)
else
CXXFLAGS_EARLY += -DCAP_PNG=0
endif
ifeq (${HYPERROGUE_USE_ROGUEVIZ},1)
# Enable RogueViz. RogueViz requires C++17.
CXXFLAGS_STD = -std=c++17
CXXFLAGS_EARLY += -DCAP_ROGUEVIZ=1
endif
## We have now finished HYPERROGUE_USE_XXX-specific computations.
## Begin the Makefile proper.
override CXXFLAGS := $(CXXFLAGS_STD) $(CXXFLAGS_EARLY) $(CXXFLAGS) ${EXTRA_CXXFLAGS}
override LDFLAGS := $(LDFLAGS_EARLY) $(LDFLAGS) ${EXTRA_LDFLAGS}
hyperrogue$(EXE_EXTENSION): $(hyper_OBJS) $(hyper_RES)
$(CXX) $(CXXFLAGS) $(hyper_OBJS) $(hyper_RES) $(LDFLAGS) $(hyper_LDFLAGS) -o $@
hyper$(OBJ_EXTENSION): *.cpp language-data.cpp autohdr.h
$(CXX) -O2 $(CXXFLAGS) $(hyper_CXXFLAGS) -c hyper.cpp -o $@
hyper.res: hyper.rc hr-icon.ico
windres hyper.rc -O coff -o hyper.res
langen$(EXE_EXTENSION): langen.cpp language-??.cpp language-ptbr.cpp
$(CXX) -O0 $(CXXFLAGS) $(langen_CXXFLAGS) langen.cpp $(LDFLAGS) -o $@
makeh$(EXE_EXTENSION): makeh.cpp
$(CXX) -O2 makeh.cpp -o $@
autohdr.h: makeh$(EXE_EXTENSION) language-data.cpp *.cpp
./makeh classes.cpp locations.cpp colors.cpp hyperpoint.cpp geometry.cpp embeddings.cpp goldberg.cpp init.cpp floorshapes.cpp cell.cpp multi.cpp shmup.cpp pattern2.cpp mapeditor.cpp graph.cpp textures.cpp hprint.cpp language.cpp util.cpp complex.cpp multigame.cpp arbitrile.cpp rulegen.cpp *.cpp > autohdr.h
language-data.cpp: langen$(EXE_EXTENSION)
./langen > language-data.cpp
savepng$(OBJ_EXTENSION): savepng.cpp
$(CXX) -O2 $(CXXFLAGS) -c savepng.cpp -o $@
mymake$(EXE_EXTENSION): mymake.cpp
$(CXX) -O2 $(CXXFLAGS) mymake.cpp -pthread -o $@
emscripten: hyper.html
%.html %.js %.wasm: %.emscripten-sources
emcc -std=c++11 -O3 -s USE_ZLIB=1 -s LEGACY_GL_EMULATION=1 -s TOTAL_MEMORY=128MB hyperweb.cpp -o hyper.html
hyper.emscripten-sources: *.cpp autohdr.h
.PHONY: clean
clean:
rm -f langen$(EXE_EXTENSION) language-data.cpp
rm -f makeh$(EXE_EXTENSION) autohdr.h
rm -rf mymake$(EXE_EXTENSION) mymake_files/
rm -f hyperrogue$(EXE_EXTENSION) hyper$(OBJ_EXTENSION) $(hyper_RES) savepng$(OBJ_EXTENSION)
rm -f hyper.html hyper.js hyper.wasm