176 lines
8.0 KiB
Makefile
176 lines
8.0 KiB
Makefile
|
# /\ +--------------------------------------------------------------+
|
||
|
# ____/ \____ /| - zlib/MIT/Unlicenced game framework licensed to freely use, |
|
||
|
# \ / / | copy, modify and sell without restriction |
|
||
|
# +--\ ^__^ /--+ | |
|
||
|
# | ~/ \~ | | - originally created at [http://nugget.fun] |
|
||
|
# | ~~~~~~~~~~~~ | +--------------------------------------------------------------+
|
||
|
# | SPACE ~~~~~ | /
|
||
|
# | ~~~~~~~ BOX |/
|
||
|
# +--------------+
|
||
|
#
|
||
|
# [ Makefile for cube demo ]
|
||
|
#
|
||
|
# This should build the cube demo for Linux. Other platforms haven't been tested in
|
||
|
# a while and won't work without significant editing.
|
||
|
#
|
||
|
# Edit the parameters as necessary and run `make linux` in the current directory.
|
||
|
#
|
||
|
|
||
|
#######################
|
||
|
# Location parameters #
|
||
|
#######################
|
||
|
|
||
|
# Location of source files for the demo
|
||
|
SRC_DIR := ./
|
||
|
|
||
|
# 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 := ../../
|
||
|
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_LINUX := clang
|
||
|
CPPC_LINUX := clang++
|
||
|
|
||
|
# Location of SDL config program
|
||
|
SDLCONFIG := ~/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 #
|
||
|
#############################
|
||
|
|
||
|
CFLAGS := -Wall -O0 -c -I$(SB_LIB_DIR) -I$(SB_SRC_DIR) -g $(shell $(SDLCONFIG) --cflags)
|
||
|
CPP_FLAGS := $(CFLAGS) --std=c++17
|
||
|
LFLAGS := $(shell $(SDLCONFIG) --libs) -lpthread
|
||
|
SFW_H_FILES := $(wildcard $(addprefix $(SB_SRC_DIR),*.hpp))
|
||
|
SFW_O_FILES := $(filter-out $(addprefix $(SB_SRC_DIR),filesystem.o),$(SFW_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 demo source #
|
||
|
##################################################################
|
||
|
|
||
|
$(SDLGFX2_DIR)%.o: $(SDLGFX2_DIR)%.c $(SDLGFX2_DIR)%.h
|
||
|
$(GLEW_DIR)%.o: $(GLEW_DIR)%.c $(GLEW_DIR)%.h
|
||
|
$(CC_LINUX) $(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)Cube.o : $(SFW_H_FILES)
|
||
|
%.o : %.cpp %.hpp
|
||
|
$(CPPC_LINUX) $(CPP_FLAGS) $< -c -o $@
|
||
|
|
||
|
##########################
|
||
|
# Target for Linux build #
|
||
|
##########################
|
||
|
|
||
|
linux : $(GLEW_DIR)glew.o $(addprefix $(SDLGFX2_DIR),SDL2_rotozoom.o SDL2_gfxPrimitives.o) \
|
||
|
$(SRC_O_FILES) $(SFW_O_FILES)
|
||
|
$(CREATE_FONT_SYMLINK)
|
||
|
$(CPPC_LINUX) $(LFLAGS) -D__LINUX__ $^ -lGL -lSDL2_image -lSDL2_ttf -lSDL2_mixer -lstdc++fs -o cube
|
||
|
|
||
|
#######################################
|
||
|
# Target for cleaning up object files #
|
||
|
#######################################
|
||
|
|
||
|
clean :
|
||
|
- rm *.o
|
||
|
- rm $(SB_SRC_DIR)*.o
|
||
|
- rm $(GLEW_DIR)*.o
|
||
|
- rm $(SDLGFX2_DIR)*.o
|
||
|
|
||
|
#
|
||
|
# These assignments 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.
|
||
|
#
|
||
|
|
||
|
export ANDROID_HOME = /home/frank/ext/software/android-sdk
|
||
|
export ANDROID_NDK_HOME = /home/frank/ext/software/android-ndk-r8d
|
||
|
BUILDDIR := build
|
||
|
ANDROIDPROJECT := com.nuggetsselect.demo
|
||
|
SOFTWARE_ROOT := /home/frank/ext/software
|
||
|
SDLHOME := $(SOFTWARE_ROOT)/SDL2-2.0.14
|
||
|
SDL_IMG_HOME := $(SOFTWARE_ROOT)/SDL2_image-2.0.5
|
||
|
SDL_TTF_HOME := $(SOFTWARE_ROOT)/SDL2_ttf-2.0.15
|
||
|
GLEW_WIN32_HOME := $(SOFTWARE_ROOT)/glew-2.1.0-win32
|
||
|
PROJECTHOME := $(shell pwd)
|
||
|
EMSCRIPTENHOME := /home/frank/ext/software/emsdk/emscripten/tag-1.38.12
|
||
|
SDLEMLIBSHOME := $(SDLHOME)/build/em/build/.libs
|
||
|
EMBUILDDIR := em
|
||
|
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
|
||
|
|
||
|
emscripten :
|
||
|
if [ ! -d $(BUILDDIR)/$(EMBUILDDIR) ]; then mkdir -p $(BUILDDIR)/$(EMBUILDDIR); fi;
|
||
|
cd $(BUILDDIR)/$(EMBUILDDIR) && \
|
||
|
$(EMSCRIPTENHOME)/em++ -O2 $(PROJECTHOME)/main.cpp -I$(SDLHOME)/include \
|
||
|
-Wall -s USE_SDL=2 -o main.html
|
||
|
|
||
|
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
|