2022-10-17 21:57:56 -04:00
# /\ +------------------------------------------------------------+
# ____/ \____ /| zlib/MIT/Unlicenced game framework licensed to freely use, |
# \ / / | copy, modify and sell without restriction |
# +--\ ^__^ /--+ | |
# | ~/ \~ | | created for <https://foam.shampoo.ooo> |
# | ~~~~~~~~~~~~ | +------------------------------------------------------------+
# | SPACE ~~~~~ | /
# | ~~~~~~~ BOX |/
# +--------------+
#
2022-10-07 18:56:20 -04:00
# Fill screen SPACEBOX example
#######################
# Location parameters #
#######################
# Location of project specific source files
SRC_DIR := ./
# Locations of [SPACEBOX] source and dependencies required to be compiled from source. These locations are configured to match the
# structure of the [SPACEBOX] 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 := clang
CXX := 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 := fill_screen.o $( SRC_H_FILES:.hpp= .o)
#####################################################################
# Targets for building [SPACE BOX], dependencies and project source #
#####################################################################
$(SDLGFX2_DIR)%.o : $( SDLGFX 2_DIR ) %.c $( SDLGFX 2_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 )
2022-11-08 17:16:05 -05:00
$(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 )
2022-10-07 18:56:20 -04:00
$(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)Model.o : $( addprefix $ ( SB_SRC_DIR ) ,extension .hpp Attributes .hpp Texture .hpp utility .hpp )
$(SRC_DIR)*.o : $( SRC_H_FILES ) $( SB_H_FILES )
%.o : %.cpp %.hpp
$( CXX) $( CXXFLAGS) $< -c -o $@
###############
# Linux build #
###############
linux : CFLAGS = -Wall -Wextra -O 3 -c -I $( SB_LIB_DIR ) -I $( SB_SRC_DIR ) $( SDL_CFLAGS )
linux : CXXFLAGS = $( CFLAGS ) --std =c ++17
linux : LFLAGS = $( SDL_LFLAGS ) -Wl , --enable -new -dtags -lpthread -lGL -lGLESv 2 -lSDL 2_image -lSDL 2_ttf -lSDL 2_mixer -lstdc ++fs
linux : $( GLEW_DIR ) glew .o $( addprefix $ ( SDLGFX 2_DIR ) ,SDL 2_rotozoom .o SDL 2_gfxPrimitives .o ) \
$( SB_O_FILES) $( SRC_O_FILES)
$( CREATE_FONT_SYMLINK)
$( CXX) $^ $( LFLAGS) -D__LINUX__ -o fill-screen
2022-10-17 21:57:56 -04:00
#################
# Android build #
#################
# Detailed info on how this build target was created is in README.md at the root of the repository. It requires the Android SDK and the source packages
# for SDL, SDL_image, SDL_mixer, and SDL_ttf. The paths below should be customized. The icon creation requires Imagemagick's convert tool from
# <https://imagemagick.org/>
SDL_SRC := $( HOME) /ext/software/SDL2-2.24.0-android
SDL_IMAGE_SRC := $( HOME) /ext/software/SDL2_image-2.6.2-android
SDL_MIXER_SRC := $( HOME) /ext/software/SDL2_mixer-2.6.2-android
SDL_TTF_SRC := $( HOME) /ext/software/SDL2_ttf-2.20.1-android
SDL_ANDROID_PROJECT := $( SDL_SRC) /android-project
ANDROID_MK := app/jni/src/Android.mk
ANDROID_APP_MK := app/jni/Application.mk
ANDROID_MANIFEST := app/src/main/AndroidManifest.xml
ANDROID_SDK := $( HOME) /local/Android
ANDROID_PACKAGE := ooo.shampoo.fill_screen
ANDROID_BUILD_DIR := build/android/$( ANDROID_PACKAGE)
ANDROID_CLASS := FillScreen
ANDROID_CLASS_DIR := app/src/main/java/$( subst .,/,$( ANDROID_PACKAGE) )
# The skeleton for the Android build is based on the SDL android-project. The libraries are symlinked in. If the script that rewrites the skeleton
# has changed, start with a fresh skeleton.
$(ANDROID_BUILD_DIR) : $( SDL_SRC ) /android -project / $( SB_SRC_DIR ) /android /revise_skeleton .sh
-mkdir -p $( ANDROID_BUILD_DIR)
rsync -ar $( SDL_SRC) /android-project/ $( ANDROID_BUILD_DIR)
ln -nsf $( SDL_SRC) $( ANDROID_BUILD_DIR) /app/jni/SDL
ln -nsf $( SDL_IMAGE_SRC) $( ANDROID_BUILD_DIR) /app/jni/SDL2_image
ln -nsf $( SDL_MIXER_SRC) $( ANDROID_BUILD_DIR) /app/jni/SDL2_mixer
ln -nsf $( SDL_TTF_SRC) $( ANDROID_BUILD_DIR) /app/jni/SDL2_ttf
$( SB_SRC_DIR) /android/revise_skeleton.sh $( ANDROID_PACKAGE) $( ANDROID_BUILD_DIR) $( ANDROID_MANIFEST) $( ANDROID_APP_MK) $( ANDROID_MK) $( ANDROID_CLASS) \
2022-10-18 16:10:20 -04:00
$( ANDROID_APP_NAME) $( ANDROID_MIN_TARGET) $( ANDROID_NDK) "Fill Screen Test" "18" "22.1.7171670"
2022-10-17 21:57:56 -04:00
# Extend the SDLActivity class
$(ANDROID_BUILD_DIR)/$(ANDROID_CLASS_DIR)/$(ANDROID_CLASS).java : $( SB_SRC_DIR ) /android /main_class .sh
$( SB_SRC_DIR) /android/main_class.sh $( ANDROID_PACKAGE) $( ANDROID_CLASS) $( ANDROID_BUILD_DIR) /$( ANDROID_CLASS_DIR)
# Generate icon
2022-10-18 16:10:20 -04:00
$(ANDROID_BUILD_DIR)/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml : $( SB_SRC_DIR ) /android /generate_icon .sh $( SB_DIR ) /icon
$( SB_SRC_DIR) /android/generate_icon.sh $( ANDROID_BUILD_DIR) "../../icon/foreground.png" "../../icon/background.png"
2022-10-17 21:57:56 -04:00
# Run gradle and generate an APK
2022-11-08 17:16:05 -05:00
$(ANDROID_BUILD_DIR)/app-debug.apk : $( ANDROID_BUILD_DIR ) $( ANDROID_BUILD_DIR ) /$( ANDROID_CLASS_DIR ) /$( ANDROID_CLASS ) .java \
2022-10-17 21:57:56 -04:00
$( ANDROID_BUILD_DIR) /app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
ANDROID_SDK_ROOT = $( ANDROID_SDK) $( ANDROID_BUILD_DIR) /gradlew -p $( ANDROID_BUILD_DIR) build
ln -nsf app/build/outputs/apk/debug/app-debug.apk $( ANDROID_BUILD_DIR)
ln -nsf app/build/outputs/apk/debug/app-release-unsigned.apk $( ANDROID_BUILD_DIR)
2022-10-07 18:56:20 -04:00
#########################
# Clean up object files #
#########################
clean :
-find $( SRC_DIR) -iname "*.o" -delete
rm -f BPmono.ttf
clean-all : clean
-find $( SB_SRC_DIR) -iname "*.o" -delete
-find $( SB_LIB_DIR) -iname "*.o" -delete
#############
# 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