You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
186 lines
8.5 KiB
186 lines
8.5 KiB
# Pepy by @ohsqueezy [ohsqueezy.itch.io] |
|
|
|
####################### |
|
# Location parameters # |
|
####################### |
|
|
|
# Location of project specific source files |
|
SRC_DIR := src/ |
|
|
|
# Locations of [SPACE BOX] source and dependencies required to be compiled from source. These |
|
# locations are configured to match the structure of the [SPACE BOX] repository but can be |
|
# modified as necessary. |
|
SB_DIR := lib/sb/ |
|
SB_SRC_DIR := $(SB_DIR)src/ |
|
SB_LIB_DIR := $(SB_DIR)lib/ |
|
SDLGFX2_DIR := $(SB_LIB_DIR)sdl2-gfx/ |
|
GLEW_DIR := $(SB_LIB_DIR)glew/ |
|
|
|
# Location of SDL config program |
|
SDLCONFIG := $(HOME)/local/sdl/bin/sdl2-config |
|
|
|
# Edit to point to the location of BPmono.ttf |
|
CREATE_FONT_SYMLINK := ln -nsf $(SB_DIR)"BPmono.ttf" . |
|
|
|
############################# |
|
# Based on above parameters # |
|
############################# |
|
|
|
SDL_CFLAGS = $(shell $(SDLCONFIG) --cflags) |
|
SDL_LFLAGS := $(shell $(SDLCONFIG) --libs) |
|
SB_H_FILES := $(wildcard $(addprefix $(SB_SRC_DIR),*.hpp)) |
|
SB_O_FILES := $(filter-out $(addprefix $(SB_SRC_DIR),filesystem.o),$(SB_H_FILES:.hpp=.o)) |
|
SRC_H_FILES := $(wildcard $(addprefix $(SRC_DIR),*.hpp)) |
|
SRC_O_FILES := $(SRC_H_FILES:.hpp=.o) |
|
|
|
##################################################################### |
|
# Targets for building [SPACE BOX], dependencies and project source # |
|
##################################################################### |
|
|
|
$(SDLGFX2_DIR)%.o: $(SDLGFX2_DIR)%.c $(SDLGFX2_DIR)%.h |
|
$(GLEW_DIR)%.o: $(GLEW_DIR)%.c $(GLEW_DIR)%.h |
|
$(CC) $< $(CFLAGS) -c -o $@ |
|
|
|
$(SB_SRC_DIR)extension.o : $(addprefix $(SB_SRC_DIR),Box.hpp Segment.hpp Color.hpp filesystem.hpp Pixels.hpp Log.hpp) |
|
$(SB_SRC_DIR)Node.o : $(addprefix $(SB_SRC_DIR),Game.hpp Configuration.hpp Delegate.hpp Display.hpp Input.hpp Box.hpp Audio.hpp Log.hpp) |
|
$(SB_SRC_DIR)Sprite.o : $(addprefix $(SB_SRC_DIR),Node.hpp Game.hpp Box.hpp Animation.hpp Color.hpp extension.hpp Pixels.hpp Log.hpp) |
|
$(SB_SRC_DIR)Game.o : $(addprefix $(SB_SRC_DIR),extension.hpp Node.hpp Sprite.hpp Recorder.hpp Input.hpp Configuration.hpp \ |
|
Delegate.hpp Audio.hpp Log.hpp) |
|
$(SB_SRC_DIR)Animation.o : $(addprefix $(SB_SRC_DIR),Node.hpp Timer.hpp) |
|
$(SB_SRC_DIR)Recorder.o : $(addprefix $(SB_SRC_DIR),Node.hpp Game.hpp Configuration.hpp Delegate.hpp Animation.hpp extension.hpp) |
|
$(SB_SRC_DIR)Input.o : $(addprefix $(SB_SRC_DIR),Node.hpp Animation.hpp Configuration.hpp Delegate.hpp) |
|
$(SB_SRC_DIR)Configuration.o : $(addprefix $(SB_SRC_DIR),Node.hpp Animation.hpp Log.hpp) |
|
$(SB_SRC_DIR)Delegate.o : $(addprefix $(SB_SRC_DIR),Node.hpp Game.hpp Input.hpp) |
|
$(SB_SRC_DIR)Display.o : $(addprefix $(SB_SRC_DIR),Node.hpp Game.hpp Box.hpp Configuration.hpp Delegate.hpp Log.hpp) |
|
$(SB_SRC_DIR)Box.o : $(addprefix $(SB_SRC_DIR),extension.hpp Segment.hpp) |
|
$(SB_SRC_DIR)Segment.o : $(addprefix $(SB_SRC_DIR),extension.hpp Box.hpp) |
|
$(SB_SRC_DIR)Pixels.o : $(addprefix $(SB_SRC_DIR),Box.hpp extension.hpp Log.hpp utility.hpp) |
|
$(SB_SRC_DIR)Audio.o : $(addprefix $(SB_SRC_DIR),Node.hpp Display.hpp Configuration.hpp Box.hpp filesystem.hpp extension.hpp) |
|
$(SB_SRC_DIR)GLObject.o : $(addprefix $(SB_SRC_DIR),Log.hpp) |
|
$(SB_SRC_DIR)Texture.o : $(addprefix $(SB_SRC_DIR),GLObject.hpp filesystem.hpp Log.hpp) |
|
$(SB_SRC_DIR)VBO.o : $(addprefix $(SB_SRC_DIR),Log.hpp GLObject.hpp Attributes.hpp extension.hpp) |
|
$(SB_SRC_DIR)Attributes.o : $(addprefix $(SB_SRC_DIR),Log.hpp extension.hpp) |
|
$(SRC_DIR)Pepy.o : $(SRC_H_FILES) $(SB_H_FILES) |
|
%.o : %.cpp %.hpp |
|
$(CXX) $< $(CPP_FLAGS) -c -o $@ |
|
|
|
############### |
|
# Linux build # |
|
############### |
|
|
|
linux : CFLAGS = -g -Wall -Wextra -O0 -fPIE -c -I$(SB_LIB_DIR) -I$(SB_SRC_DIR) $(SDL_CFLAGS) |
|
linux : CPP_FLAGS = $(CFLAGS) --std=c++17 |
|
linux : LFLAGS = $(SDL_LFLAGS) -fPIE -lpthread -lGL -lGLESv2 -lSDL2_image -lSDL2_ttf -lSDL2_mixer -lstdc++fs |
|
linux : $(GLEW_DIR)glew.o $(addprefix $(SDLGFX2_DIR),SDL2_rotozoom.o SDL2_gfxPrimitives.o) \ |
|
$(SB_O_FILES) $(SRC_O_FILES) |
|
$(CREATE_FONT_SYMLINK) |
|
$(CXX) $^ $(LFLAGS) -D__LINUX__ -o pepy |
|
|
|
############# |
|
# Web build # |
|
############# |
|
|
|
# Use Emscripten to output JavaScript and an HTML index page for running in the browser |
|
|
|
EMSCRIPTENHOME = $(HOME)/ext/software/emsdk/upstream/emscripten |
|
EMSCRIPTEN_CFLAGS = -O3 -Wall -s USE_SDL=2 -s USE_SDL_IMAGE=2 -s SDL2_IMAGE_FORMATS="['png']" -s USE_SDL_TTF=2 \ |
|
-s USE_SDL_MIXER=2 -s SDL2_MIXER_FORMATS="['ogg','mp3']" -s USE_OGG=1 -s USE_VORBIS=1 -s USE_MPG123=1 \ |
|
-s USE_MODPLUG=1 --no-heap-copy -I$(SB_LIB_DIR) -I$(SB_SRC_DIR) |
|
EMSCRIPTEN_LFLAGS = -s MIN_WEBGL_VERSION=2 -s EXPORTED_FUNCTIONS="['_main']" -s ALLOW_MEMORY_GROWTH=1 -s FULL_ES3=1 --shell-file shell.html |
|
EMSCRIPTEN_PRELOADS = --preload-file "BPmono.ttf"@/ --preload-file "config.json"@/ --preload-file "resource/"@/"resource/" \ |
|
--preload-file "src/shader.vert"@/"src/" --preload-file "src/shader.frag"@/"src/" |
|
|
|
emscripten : CC = $(EMSCRIPTENHOME)/emcc |
|
emscripten : CXX = $(EMSCRIPTENHOME)/em++ |
|
emscripten : CFLAGS = $(EMSCRIPTEN_CFLAGS) |
|
emscripten : CPP_FLAGS = $(CFLAGS) --std=c++17 |
|
emscripten : $(addprefix $(SDLGFX2_DIR),SDL2_rotozoom.o SDL2_gfxPrimitives.o) $(SB_O_FILES) $(SRC_O_FILES) |
|
$(CREATE_FONT_SYMLINK) |
|
$(CXX) $^ $(CPP_FLAGS) $(EMSCRIPTEN_LFLAGS) $(EMSCRIPTEN_PRELOADS) -o "index.html" |
|
|
|
######################### |
|
# Clean up object files # |
|
######################### |
|
|
|
clean : |
|
-rm $(SRC_DIR)*.o |
|
|
|
clean-all : |
|
-find . -iname "*.o" -exec rm {} \; |
|
|
|
############# |
|
# compiledb # |
|
############# |
|
|
|
# Generate a clang JSON compilation database file. This can be useful for example for code completion. It requires a |
|
# compiledb binary (https://pypi.org/project/compiledb/). It should be generated manually every time a file is added, |
|
# renamed, or the compilation flags change. The generated database is based on the Linux build. |
|
|
|
PATH_TO_COMPILEDB = $(HOME)/.local/bin/compiledb |
|
compiledb : |
|
-$(PATH_TO_COMPILEDB) -n make linux -k |
|
|
|
##################### |
|
# cross compilation # |
|
##################### |
|
|
|
# WARNING: untested |
|
|
|
# Below assignments and targets are necessary for cross-compiling to Android, web (via emscripten), Windows (via mingw), |
|
# and OS/X, but cross-compilation targets have not been tested in a while and won't compile without significant changes. |
|
|
|
BUILDDIR := build |
|
SDLHOME := $(EXT_SRC_ROOT)/SDL2-2.0.14 |
|
SDL_IMG_HOME := $(EXT_SRC_ROOT)/SDL2_image-2.0.4 |
|
SDL_TTF_HOME := $(EXT_SRC_ROOT)/SDL2_ttf-2.0.14 |
|
GLEW_WIN32_HOME = $(EXT_SRC_ROOT)/glew-2.1.0-win32 |
|
PROJECTHOME = $(shell pwd) |
|
WINBUILDDIR = win |
|
SDLMINGWHOME = $(SDLHOME)/i686-w64-mingw32 |
|
SDL_IMG_MINGW_HOME = $(SDL_IMG_HOME)/i686-w64-mingw32 |
|
SDL_TTF_MINGW_HOME = $(SDL_TTF_HOME)/i686-w64-mingw32 |
|
APPDIR = Main.app/Contents |
|
SYSFWPATH = /Library/Frameworks |
|
|
|
android : |
|
if [ ! -d $(BUILDDIR) ]; then mkdir $(BUILDDIR); fi; |
|
cd $(SDLHOME)/build-scripts/ && \ |
|
./androidbuild.sh $(ANDROIDPROJECT) $(PROJECTHOME)/main.cpp |
|
cp -r $(SDLHOME)/build/$(ANDROIDPROJECT) $(BUILDDIR) |
|
sed -i s/2\.3\.3/2\.2\.3/g $(BUILDDIR)/$(ANDROIDPROJECT)/build.gradle |
|
sed -i s/26\.0\.1/23\.0\.1/g $(BUILDDIR)/$(ANDROIDPROJECT)/app/build.gradle |
|
cd $(BUILDDIR)/$(ANDROIDPROJECT) && ./gradlew assembleDebug |
|
|
|
mingw : |
|
if [ ! -d $(BUILDDIR)/$(WINBUILDDIR) ]; then mkdir -p $(BUILDDIR)/$(WINBUILDDIR); fi; |
|
cd $(BUILDDIR)/$(WINBUILDDIR) && \ |
|
i686-w64-mingw32-g++ -std=c++17 $(PROJECTHOME)/main.cpp -I$(SDLMINGWHOME)/include/SDL2 \ |
|
-I$(SDL_IMG_MINGW_HOME)/include/SDL2 -I$(SDL_TTF_MINGW_HOME)/include/SDL2 $(INC) \ |
|
$(PROJECTHOME)/sdl2-gfx/SDL2_gfxPrimitives.c $(PROJECTHOME)/sdl2-gfx/SDL2_rotozoom.c $(PROJECTHOME)/glew/glew.c \ |
|
-L$(SDLMINGWHOME)/lib -L$(SDL_IMG_MINGW_HOME)/lib -L$(SDL_TTF_MINGW_HOME)/lib \ |
|
-lmingw32 -lSDL2_image \ |
|
-lSDL2_ttf -lstdc++fs \ |
|
-lSDL2main -lSDL2 -lopengl32 -Wall -O2 -o main.exe && \ |
|
cp $(SDLMINGWHOME)/bin/SDL2.dll $(SDL_IMG_MINGW_HOME)/bin/SDL2_image.dll \ |
|
$(SDL_TTF_MINGW_HOME)/bin/SDL2_ttf.dll . |
|
|
|
osx : |
|
g++ -I $(SYSFWPATH)/SDL2.framework/Headers $(INC) \ |
|
-I $(SYSFWPATH)/SDL2_image.framework/Headers -Wl,-rpath,$(SYSFWPATH) \ |
|
-framework SDL2 -framework SDL2_image -framework OpenGL main.cpp sdl2-gfx/SDL2_rotozoom.c \ |
|
-o main |
|
|
|
osx-bundle : |
|
if [ ! -d "$(APPDIR)" ]; then mkdir -p $(APPDIR); fi; |
|
if [ ! -d "$(APPDIR)" ]; then mkdir $(APPDIR); fi; |
|
if [ ! -d "$(APPDIR)/MacOS" ]; then mkdir $(APPDIR)/MacOS; fi; |
|
if [ ! -d "$(APPDIR)/Frameworks" ]; then mkdir $(APPDIR)/Frameworks; fi; |
|
if [ ! -d "$(APPDIR)/Resources" ]; then mkdir $(APPDIR)/Resources; fi; |
|
touch $(APPDIR)/Info.plist |
|
cp -r $(SYSFWPATH)/SDL2.framework $(APPDIR)/Frameworks |
|
cp -r $(SYSFWPATH)/SDL2_image.framework $(APPDIR)/Frameworks |
|
g++ -I $(SYSFWPATH)/SDL2.framework/Headers -I $(SYSFWPATH)/SDL2_image.framework/Headers \ |
|
-Wl,-rpath,@executable_path/../Frameworks -Wl,-rpath,$(SYSFWPATH) \ |
|
-framework SDL2 -framework SDL2_image -framework OpenGL main.cpp -o $(APPDIR)/MacOS/main |
|
|
|
cross : linux android emscripten mingw
|
|
|