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)
|