# _______________ # //`````````````\\ # //~~~~~~~~~~~~~~~\\ + a game by @ohsqueezy (ohsqueezy.itch.io) & @sleepin (instagram.com/sleepin) # //=================\\ + code is licensed for copy, modification and redistribution (git.nugget.fun/pudding) # // \\ # //-G--U--N--K--I--S--S-\\ 😀 Thank you for choosing Puddendo for your business 😀 # //_______________________\\ # ``````````````````````````` # # This Makefile should build a Linux binary from `make linux`. Other platform targets have not been tested yet. ####################### # 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/ # C and C++ compiler commands CC := clang CPPC := clang++ # 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) $(SB_SRC_DIR)Node.o : $(addprefix $(SB_SRC_DIR),Game.hpp Configuration.hpp Delegate.hpp Display.hpp Input.hpp Box.hpp Audio.hpp) $(SB_SRC_DIR)Sprite.o : $(addprefix $(SB_SRC_DIR),Node.hpp Game.hpp Box.hpp Animation.hpp Color.hpp extension.hpp Pixels.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) $(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) $(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) $(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) $(SB_SRC_DIR)Audio.o : $(addprefix $(SB_SRC_DIR),Node.hpp Display.hpp Configuration.hpp Box.hpp filesystem.hpp extension.hpp) $(SRC_DIR)Pudding.o : $(SRC_H_FILES) $(SB_H_FILES) %.o : %.cpp %.hpp $(CPPC) $(CPP_FLAGS) $< -c -o $@ ############### # Linux build # ############### linux : CC = clang linux : CPPC = clang++ linux : CFLAGS = -g -Wall -Wextra -Og -c -I$(SB_LIB_DIR) -I$(SB_SRC_DIR) $(SDL_CFLAGS) -I$(HOME)/local/zbar/include \ -I$(HOME)/local/opencv/include/opencv4 linux : CPP_FLAGS = $(CFLAGS) --std=c++17 linux : LFLAGS = $(SDL_LFLAGS) -lpthread -lGL -lGLESv2 -lSDL2_image -lSDL2_ttf -lSDL2_mixer -lcurl -lstdc++fs \ -L/home/frank/local/opencv/lib -Wl,-rpath,/home/frank/local/opencv/lib -Wl,--enable-new-dtags -lopencv_videoio -lopencv_core \ -lopencv_highgui -lopencv_imgproc -L/home/frank/local/zbar/lib -Wl,-rpath,/home/frank/local/zbar/lib -Wl,--enable-new-dtags -lzbar linux : $(GLEW_DIR)glew.o $(addprefix $(SDLGFX2_DIR),SDL2_rotozoom.o SDL2_gfxPrimitives.o) \ $(SB_O_FILES) $(SRC_O_FILES) $(CREATE_FONT_SYMLINK) $(CPPC) $(LFLAGS) -D__LINUX__ $^ -o pudding ######################### # Clean up object files # ######################### .PHONY : clean clean : -rm $(SRC_DIR)*.o .PHONY : clean-all clean-all : -find . -iname "*.o" -exec rm {} \; # # Below assignments and targets are necessary for cross-compiling to Android, web (via emscripten), Windows (via mingw), # and OS/X. Cross-compilation targets have not been tested in a while and won't compile without significant changes. # BUILDDIR := build EXT_SRC_ROOT := /home/frank/ext/software 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) EMSCRIPTENHOME = $(EXT_SRC_ROOT)/emsdk/upstream/emscripten 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 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 MAX_WEBGL_VERSION=1 -s EXTRA_EXPORTED_RUNTIME_METHODS="['ccall']" \ -s EXPORTED_FUNCTIONS="['_main', '_reset_game']" -s ALLOW_MEMORY_GROWTH=1 -s GL_PREINITIALIZED_CONTEXT=1 \ -s ENVIRONMENT=web --shell-file shell_minimal.html --no-heap-copy -I$(SFW_LIB_DIR) -I$(SFW_SRC_DIR) EMSCRIPTEN_PRELOADS = --preload-file "BPmono.ttf"@/ --preload-file "config.json" --preload-file "resource" emscripten : CC = $(EMSCRIPTENHOME)/emcc emscripten : CPPC = $(EMSCRIPTENHOME)/em++ emscripten : CFLAGS = $(EMSCRIPTEN_CFLAGS) emscripten : CPP_FLAGS = $(CFLAGS) --std=c++17 emscripten : $(addprefix $(SDLGFX2_DIR),SDL2_rotozoom.o SDL2_gfxPrimitives.o) $(SFW_O_FILES) $(GAME_O_FILES) $(CREATE_FONT_SYMLINK) $(CPPC) $(CPP_FLAGS) $(EMSCRIPTEN_PRELOADS) $^ -o "index.html" 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