default compiler environment vars in Makefile

This commit is contained in:
ohsqueezy 2022-08-10 15:28:29 -04:00
parent d8c5bdd56d
commit d47289007c
3 changed files with 49 additions and 28 deletions

2
.gitignore vendored
View File

@ -2,4 +2,4 @@ local/
*.o *.o
BPmono.ttf BPmono.ttf
compile_commands.json compile_commands.json
pudding gunkiss

View File

@ -1,15 +1,19 @@
# _______________ ,-------------------------------------------------------------------. # _______________ ,--------------------------------------------------------.
# //`````````````\\ \ \ # //`````````````\\ \ \
# //~~~~~~~~~~~~~~~\\ \ by @ohsqueezy & @sleepin \ # //~~~~~~~~~~~~~~~\\ \ by @ohsqueezy & @sleepin \
# //=================\\ \ [ohsqueezy.itch.io] [sleepin.itch.io] \ # //=================\\ \ [ohsqueezy.itch.io] [sleepin.itch.io] \
# // \\ \ \ # // \\ \ \
# // \\ \ code released under zlib license [git.nugget.fun/nugget/gunkiss] \ # // \\ \ zlib licensed code at [git.nugget.fun/nugget/gunkiss] \
# // ☆ GUNKISS ☆ \\ \ \ # // ☆ GUNKISS ☆ \\ \ \
# //_________________________\\ `-------------------------------------------------------------------' # //_________________________\\ `--------------------------------------------------------'
# #
# This Makefile should build a Linux binary from `make linux`. Other platform targets have not been tested yet. # This Makefile is used to build a Linux executable with `make linux`. Other platform targets have not been
# It requires the [SPACEBOX] framework to be located in the paths that can be configured in the code block # tested and were copied over from a previous project.
# below. #
# The [SPACEBOX] game framework source code from [git.nugget.fun/nugget/spacebox] is required. If this is the
# Git repository for Gunkiss, the source code should already have been cloned into `lib/sb` as a submodule using
# `git clone --recursive git.nugget.fun/nugget/gunkiss`. The paths below are the default for the repository, but
# they can be edited as necessary.
####################### #######################
# Location parameters # # Location parameters #
@ -29,7 +33,7 @@ GLEW_DIR := $(SB_LIB_DIR)glew/
# C and C++ compiler commands # C and C++ compiler commands
CC := clang CC := clang
CPPC := clang++ CXX := clang++
# Location of SDL config program # Location of SDL config program
SDLCONFIG := $(HOME)/local/sdl/bin/sdl2-config SDLCONFIG := $(HOME)/local/sdl/bin/sdl2-config
@ -54,7 +58,7 @@ SRC_O_FILES := $(filter-out $(addprefix $(SRC_DIR),Carousel.o),$(SRC_H_FILES:.hp
$(SDLGFX2_DIR)%.o: $(SDLGFX2_DIR)%.c $(SDLGFX2_DIR)%.h $(SDLGFX2_DIR)%.o: $(SDLGFX2_DIR)%.c $(SDLGFX2_DIR)%.h
$(GLEW_DIR)%.o: $(GLEW_DIR)%.c $(GLEW_DIR)%.h $(GLEW_DIR)%.o: $(GLEW_DIR)%.c $(GLEW_DIR)%.h
$(CC) $(CFLAGS) $< -c -o $@ $(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)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)Node.o : $(addprefix $(SB_SRC_DIR),Game.hpp Configuration.hpp Delegate.hpp Display.hpp Input.hpp Box.hpp Audio.hpp Log.hpp)
@ -79,14 +83,12 @@ $(SRC_DIR)Model.o : $(addprefix $(SB_SRC_DIR),extension.hpp Attributes.hpp Textu
$(SRC_DIR)Item.o : $(addprefix $(SB_SRC_DIR),Texture.hpp Log.hpp utility.hpp) $(addprefix $(SRC_DIR),Model.hpp Carousel.hpp) $(SRC_DIR)Item.o : $(addprefix $(SB_SRC_DIR),Texture.hpp Log.hpp utility.hpp) $(addprefix $(SRC_DIR),Model.hpp Carousel.hpp)
$(SRC_DIR)Pudding.o : $(SRC_H_FILES) $(SB_H_FILES) $(SRC_DIR)Pudding.o : $(SRC_H_FILES) $(SB_H_FILES)
%.o : %.cpp %.hpp %.o : %.cpp %.hpp
$(CPPC) $(CPP_FLAGS) $< -c -o $@ $(CXX) $(CPP_FLAGS) $< -c -o $@
############### ###############
# Linux build # # Linux build #
############### ###############
linux : CC = clang
linux : CPPC = clang++
linux : CFLAGS = -g -Wall -Wextra -O0 -c -I$(SB_LIB_DIR) -I$(SB_SRC_DIR) $(SDL_CFLAGS) -I$(HOME)/local/zbar/include \ linux : CFLAGS = -g -Wall -Wextra -O0 -c -I$(SB_LIB_DIR) -I$(SB_SRC_DIR) $(SDL_CFLAGS) -I$(HOME)/local/zbar/include \
-I$(HOME)/local/opencv/include/opencv4 -I$(HOME)/local/opencv/include/opencv4
linux : CPP_FLAGS = $(CFLAGS) --std=c++17 linux : CPP_FLAGS = $(CFLAGS) --std=c++17
@ -96,7 +98,7 @@ linux : LFLAGS = $(SDL_LFLAGS) -Wl,--enable-new-dtags -lpthread -lGL -lGLESv2 -l
linux : $(GLEW_DIR)glew.o $(addprefix $(SDLGFX2_DIR),SDL2_rotozoom.o SDL2_gfxPrimitives.o) \ linux : $(GLEW_DIR)glew.o $(addprefix $(SDLGFX2_DIR),SDL2_rotozoom.o SDL2_gfxPrimitives.o) \
$(SB_O_FILES) $(SRC_O_FILES) $(SB_O_FILES) $(SRC_O_FILES)
$(CREATE_FONT_SYMLINK) $(CREATE_FONT_SYMLINK)
$(CPPC) $^ $(LFLAGS) -D__LINUX__ -o pudding $(CXX) $^ $(LFLAGS) -D__LINUX__ -o gunkiss
############# #############
# Web build # # Web build #
@ -112,12 +114,12 @@ EMSCRIPTEN_CFLAGS = -O3 -Wall -s USE_SDL=2 -s USE_SDL_IMAGE=2 -s SDL2_IMAGE_FORM
EMSCRIPTEN_PRELOADS = --preload-file "BPmono.ttf"@/ --preload-file "config.json" --preload-file "resource" EMSCRIPTEN_PRELOADS = --preload-file "BPmono.ttf"@/ --preload-file "config.json" --preload-file "resource"
emscripten : CC = $(EMSCRIPTENHOME)/emcc emscripten : CC = $(EMSCRIPTENHOME)/emcc
emscripten : CPPC = $(EMSCRIPTENHOME)/em++ emscripten : CXX = $(EMSCRIPTENHOME)/em++
emscripten : CFLAGS = $(EMSCRIPTEN_CFLAGS) emscripten : CFLAGS = $(EMSCRIPTEN_CFLAGS)
emscripten : CPP_FLAGS = $(CFLAGS) --std=c++17 emscripten : CPP_FLAGS = $(CFLAGS) --std=c++17
emscripten : $(addprefix $(SDLGFX2_DIR),SDL2_rotozoom.o SDL2_gfxPrimitives.o) $(SB_O_FILES) $(SRC_O_FILES) emscripten : $(addprefix $(SDLGFX2_DIR),SDL2_rotozoom.o SDL2_gfxPrimitives.o) $(SB_O_FILES) $(SRC_O_FILES)
$(CREATE_FONT_SYMLINK) $(CREATE_FONT_SYMLINK)
$(CPPC) $(CPP_FLAGS) $(EMSCRIPTEN_PRELOADS) $^ -o "index.html" $(CXX) $(CPP_FLAGS) $(EMSCRIPTEN_PRELOADS) $^ -o "index.html"
######################### #########################
# Clean up object files # # Clean up object files #

View File

@ -19,35 +19,54 @@ Where to play
Gunkiss is in-development. Public builds for the web and Android are expected to be released soon. Gunkiss is in-development. Public builds for the web and Android are expected to be released soon.
Libraries Building from source
--------- --------------------
The following external libraries are required to compile the game. First, checkout the full repository.
### cURL git clone --recursive https://git.nugget.fun/nugget/gunkiss
### Required Libraries
The following external programs and libraries are required to compile the game.
#### SPACEBOX
The [SPACEBOX game framework][] is being developed simultaneously and should be checked out into `lib/sb` as a submodule of the project using the `--recursive` flag as shown above.
#### cURL
The game uses [cURL][] to communicate with the [Open Food Facts][] API. The cURL library and development headers must be installed to the system paths in order to compile the program. The game uses [cURL][] to communicate with the [Open Food Facts][] API. The cURL library and development headers must be installed to the system paths in order to compile the program.
#### Linux ##### Linux
On Linux, you can install libcurl and development headers through the package manager. For example, on Debian: On Linux, you can install libcurl and development headers through the package manager. For example, on Debian:
sudo apt install libcurl4 libcurl4-openssl-dev sudo apt install libcurl4 libcurl4-openssl-dev
#### Other systems ##### Other systems
See [the downloads page][] for ways to get the library and headers. It must be installed in such a way that linking can be done with `-lcurl` and headers are in the default search path. See [the downloads page][] for ways to get the library and headers. It must be installed in such a way that linking can be done with `-lcurl` and headers are in the default search path.
### OpenCV #### OpenCV
The game uses [OpenCV][] to enable barcode reading through the camera. The library and headers by default are expected to be installed to `[HOME]/local/opencv/lib` and `[HOME]/local/opencv/headers` respectively, but those locations can be edited in the [Makefile][] The game uses [OpenCV][] to enable barcode reading through the camera. The library and headers by default are expected to be installed to `[HOME]/local/opencv/lib` and `[HOME]/local/opencv/headers` respectively, but those locations can be edited in the [Makefile][]
### ZBar #### ZBar
The game uses [ZBar][] to scan images for barcodes and report what the barcode is. The library and headers by default are expected to be installed to `[HOME]/local/zbar/lib` and `[HOME]/local/zbar/headers` respectively, but those locations can be edited in the [Makefile][]. The game uses [ZBar][] to scan images for barcodes and report what the barcode is. The library and headers by default are expected to be installed to `[HOME]/local/zbar/lib` and `[HOME]/local/zbar/headers` respectively, but those locations can be edited in the [Makefile][].
### Compiling
Once the requirements are satisfied, run `make linux` to compile. The executable will be saved to the root folder as `gunkiss`.
#### Compiler
The project is developed using `clang`, but `gcc` can be substituted. Environment variables for `CC` and `CXX` can be used to change the default compiler.
[cURL]: https://curl.se/ [cURL]: https://curl.se/
[Open Food Facts]: https://world.openfoodfacts.org/ [Open Food Facts]: https://world.openfoodfacts.org/
[OpenCV]: https://opencv.org/ [OpenCV]: https://opencv.org/
[ZBar]: http://zbar.sourceforge.net/ [ZBar]: http://zbar.sourceforge.net/
[Makefile]: Makefile [Makefile]: Makefile
[SPACEBOX game framework]: https://git.nugget.fun/nugget/spacebox