PROJECT_ROOT = $(dir $(abspath $(lastword $(MAKEFILE_LIST)))) OBJS = pinetab2_framework.o game.o SPRITES = $(patsubst $(PROJECT_ROOT)sprites/%.xcf,%,$(wildcard $(PROJECT_ROOT)sprites/*.xcf)) NAVMESHES = $(patsubst $(PROJECT_ROOT)navmesh/%.tmx,%,$(wildcard $(PROJECT_ROOT)navmesh/*.tmx)) BUILD_MODE := debug ifeq ($(BUILD_MODE),debug) CFLAGS += -g else ifeq ($(BUILD_MODE),run) CFLAGS += -O2 else ifeq ($(BUILD_MODE),linuxtools) CFLAGS += -g -pg -fprofile-arcs -ftest-coverage LDFLAGS += -pg -fprofile-arcs -ftest-coverage EXTRA_CLEAN += pinetab2_framework.gcda pinetab2_framework.gcno $(PROJECT_ROOT)gmon.out EXTRA_CMDS = rm -rf pinetab2_framework.gcda else $(error Build mode $(BUILD_MODE) not supported by this Makefile) endif CXX := aarch64-linux-gnu-g++ CC := aarch64-linux-gnu-gcc OBJCOPY := aarch64-linux-gnu-objcopy -O elf64-littleaarch64 CFLAGS += -I/usr/include OBJS += $(patsubst %,sprite_%.o,$(SPRITES)) OBJS += $(patsubst %,navmesh_%.o,$(NAVMESHES)) all: pinetab2_framework $(patsubst %,%.png,$(SPRITES)) pinetab2_framework: $(OBJS) $(CXX) $(LDFLAGS) -o $@ $^ $(EXTRA_CMDS) %.o: $(PROJECT_ROOT)%.cpp $(CXX) -c $(CFLAGS) $(CXXFLAGS) $(CPPFLAGS) -o $@ $< %.o: $(PROJECT_ROOT)%.c $(CC) -c $(CFLAGS) $(CPPFLAGS) -o $@ $< %.o: %.c $(CXX) -c $(CFLAGS) $(CXXFLAGS) $(CPPFLAGS) -o $@ $< -iquote "$(PROJECT_ROOT)" clean: rm -fr pinetab2_framework $(OBJS) $(EXTRA_CLEAN) sprite_%.o: $(PROJECT_ROOT)sprites/%.xcf gimp -in -b '(let ((image (car (gimp-xcf-load 0 "$<" "$(notdir $<)")))) ;\ ;(gimp-image-scale image 1280 800) ;\ (gimp-image-rotate image ROTATE-90) ;\ (let ((layer (car (gimp-image-merge-visible-layers image CLIP-TO-IMAGE)))) ;\ (plug-in-colors-channel-mixer RUN-NONINTERACTIVE image layer 0 0 0 1 0 1 0 1 0 0) ; swap red and blue channels \ (file-raw-save 1 image layer "$(patsubst %.o,%.raw,$@)" "$(patsubst %.o,%.raw,$@)") ;\ ) ;\ )' -b '(gimp-quit 0)' $(OBJCOPY) -I binary --rename-section .data=.rodata,alloc,load,readonly,data,contents $(patsubst %.o,%.raw,$@) $@ rm $(patsubst %.o,%.raw,$@) @# symbols are _binary_sprite_%_raw_start / _end / _size navmesh_%.c: $(PROJECT_ROOT)navmesh/%.tmx $(PROJECT_ROOT)compile_navmesh.py python3 "$(PROJECT_ROOT)compile_navmesh.py" "$<" "$@" "$(patsubst navmesh_%.c,%,$@)" @# symbols are navmesh_% and predef_% navmesh_%.o: $(PROJECT_ROOT)compiled_structures.h $(PROJECT_ROOT)objids.h %.png: $(PROJECT_ROOT)sprites/%.xcf gimp -in -b '(let ((image (car (gimp-xcf-load 0 "$<" "$(notdir $<)")))) ;\ ;(gimp-image-scale image 1280 800) ;\ (let ((layer (car (gimp-image-merge-visible-layers image CLIP-TO-IMAGE)))) ;\ (file-png-save 1 image layer "$@" "$@" 0 9 0 0 0 0 0) ;\ ) ;\ )' -b '(gimp-quit 0)'