166 lines
		
	
	
		
			7.9 KiB
		
	
	
	
		
			Makefile
		
	
	
	
	
	
			
		
		
	
	
			166 lines
		
	
	
		
			7.9 KiB
		
	
	
	
		
			Makefile
		
	
	
	
	
	
| #         /\         +------------------------------------------------------------+ 
 | |
| #    ____/  \____   /| zlib/MIT/Unlicenced game framework licensed to freely use, |
 | |
| #    \          /  / | copy, modify and sell without restriction                  |
 | |
| #  +--\ ^__^   /--+  |                                                            |
 | |
| #  | ~/        \~ |  | created for <https://foam.shampoo.ooo>                     |
 | |
| #  | ~~~~~~~~~~~~ |  +------------------------------------------------------------+
 | |
| #  | SPACE ~~~~~  | /
 | |
| #  |  ~~~~~~~ BOX |/
 | |
| #  +--------------+
 | |
| #  
 | |
| # 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: $(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)Game.o : $(addprefix $(SB_SRC_DIR),extension.hpp Node.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)*.o : $(SRC_H_FILES) $(SB_H_FILES)
 | |
| %.o : %.cpp %.hpp
 | |
| 	$(CXX) $(CXXFLAGS) $< -c -o $@
 | |
| 
 | |
| ###############
 | |
| # Linux build #
 | |
| ###############
 | |
| 
 | |
| linux :	CFLAGS = -Wall -Wextra -O3 -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 -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 fill-screen
 | |
| 
 | |
| #################
 | |
| # 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) \
 | |
| 		 $(ANDROID_APP_NAME) $(ANDROID_MIN_TARGET) $(ANDROID_NDK) "Fill Screen Test" "18" "22.1.7171670" $(SB_SRC_DIR) $(SB_LIB_DIR) $(SRC_DIR)
 | |
| 
 | |
| # 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
 | |
| 
 | |
| $(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"
 | |
| 
 | |
| # Run gradle and generate an APK
 | |
| 
 | |
| $(ANDROID_BUILD_DIR)/app-debug.apk: $(ANDROID_BUILD_DIR) $(ANDROID_BUILD_DIR)/$(ANDROID_CLASS_DIR)/$(ANDROID_CLASS).java \
 | |
| 	$(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)
 | |
| 
 | |
| #########################
 | |
| # 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
 | |
| 
 |