File: Makefile

package info (click to toggle)
hyperrogue 12.1q-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 73,972 kB
  • sloc: cpp: 166,609; makefile: 145; sh: 10
file content (197 lines) | stat: -rw-r--r-- 6,221 bytes parent folder | download
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
188
189
190
191
192
193
194
195
196
197
# 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.

PKG_CONFIG ?= pkg-config

ifeq (${OS},linux)
  CXXFLAGS_EARLY += -DLINUX
  CXXFLAGS_EARLY += -DFHS
  CXXFLAGS_EARLY += -DCAP_SDL2=1
  EXE_EXTENSION :=
  LDFLAGS_GL := $(shell $(PKG_CONFIG) gl --libs)
  LDFLAGS_GLEW := $(shell $(PKG_CONFIG) glew --libs)
  LDFLAGS_PNG := $(shell $(PKG_CONFIG) libpng --libs)
  LDFLAGS_SDL := $(shell $(PKG_CONFIG) sdl2 SDL2_gfx SDL2_mixer SDL2_ttf zlib --libs) -lpthread
  OBJ_EXTENSION := .o
  hyper_RES :=
  HYPERROGUE_USE_GLEW := 1
  FONTCONFIG := 1
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 $(shell $(PKG_CONFIG) --cflags fontconfig)
  LDFLAGS_EARLY += $(shell $(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.


filtered_SRCS = content.cpp fake-mobile.cpp hyperweb.cpp langen.cpp language-%.cpp makeh.cpp mymake.cpp savepng.cpp
hyper_SRCS = $(filter-out $(filtered_SRCS), $(sort $(wildcard *.cpp)))
hyper_OBJS = $(hyper_SRCS:.cpp=.o)
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_OBJS): autohdr.h $(hyper_SRCS)

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
	rm -f $(hyper_OBJS)