|
1 | | -ROOTDIR = $(N64_INST) |
2 | | -GCCN64PREFIX = $(ROOTDIR)/bin/mips64-elf- |
3 | | -CHKSUM64PATH = $(ROOTDIR)/bin/chksum64 |
4 | | -MKDFSPATH = $(ROOTDIR)/bin/mkdfs |
5 | | -MKSPRITE = $(ROOTDIR)/bin/mksprite |
6 | | -N64TOOL = $(ROOTDIR)/bin/n64tool |
7 | | -LINK_FLAGS = -L$(ROOTDIR)/lib -L$(ROOTDIR)/mips64-elf/lib -ldragon -lc -lm -ldragonsys -Tn64.ld |
8 | | -PROG_NAME = 2048-64 |
9 | | -CFLAGS = -std=gnu99 -march=vr4300 -mtune=vr4300 -O2 -Wall -Werror -I$(ROOTDIR)/mips64-elf/include -Iinclude -I/usr/local/include/ |
10 | | -ASFLAGS = -mtune=vr4300 -march=vr4300 |
11 | | -CC = $(GCCN64PREFIX)gcc |
12 | | -AS = $(GCCN64PREFIX)as |
13 | | -LD = $(GCCN64PREFIX)ld |
14 | | -OBJCOPY = $(GCCN64PREFIX)objcopy |
| 1 | +ARES_BIN := /Applications/ares.app/Contents/MacOS/ares |
| 2 | + |
| 3 | +BUILD_DIR := build |
| 4 | +SOURCE_DIR := src |
| 5 | +ROM_NAME := 2048-64 |
| 6 | +N64_ROM_TITLE := "2048-64" |
| 7 | + |
| 8 | +N64_MK_PATH := $(N64_INST)/include/n64.mk |
| 9 | +ifneq (,$(wildcard $(N64_MK_PATH))) |
| 10 | +include $(N64_MK_PATH) |
| 11 | +endif |
| 12 | + |
| 13 | +N64_CFLAGS += -Iinclude |
| 14 | +N64_ASFLAGS += -Iinclude |
15 | 15 |
|
16 | 16 | all: build |
17 | 17 |
|
18 | 18 | build: ## Create rom. |
19 | | - @docker --version &> /dev/null |
20 | | - @if [ $$? -ne 0 ]; then echo "Building rom..." && make $(PROG_NAME).z64; fi |
21 | | - @if [ $$? -eq 0 ]; then echo "Building rom inside docker environment..." && make docker; fi |
| 19 | + @if command -v docker >/dev/null 2>&1; then \ |
| 20 | + echo "Building rom inside docker environment..."; \ |
| 21 | + $(MAKE) docker; \ |
| 22 | + else \ |
| 23 | + echo "Building rom..."; \ |
| 24 | + $(MAKE) $(ROM_NAME).z64; \ |
| 25 | + fi |
22 | 26 |
|
23 | 27 | docker: setup |
24 | | - @docker run --user $(shell id -u):$(shell id -g) -v ${CURDIR}:/game build make $(PROG_NAME).z64 |
| 28 | + @docker run --user $(shell id -u):$(shell id -g) -v ${CURDIR}:/game build make $(ROM_NAME).z64 |
25 | 29 |
|
26 | 30 | rebuild: clean build ## Erase temp files and create the rom. |
27 | 31 |
|
28 | 32 | # gfx # |
29 | | -PNGS := $(wildcard resources/gfx/*/*.png) $(wildcard resources/gfx/*/*/*.png) |
| 33 | +PNGS := $(wildcard resources/gfx/sprites/*.png) $(wildcard resources/gfx/sprites/*/*.png) |
30 | 34 | SPRITES := $(subst .png,.sprite,$(subst resources/,filesystem/,$(PNGS))) |
31 | 35 | filesystem/gfx/sprites/%.sprite: resources/gfx/sprites/%.png |
32 | 36 | @mkdir -p `echo $@ | xargs dirname` |
33 | | - $(MKSPRITE) 16 1 1 $< $@ |
34 | | - |
35 | | -filesystem/gfx/maps/%.sprite: resources/gfx/maps/%.png |
36 | | - @mkdir -p `echo $@ | xargs dirname` |
37 | | - $(MKSPRITE) 16 1 1 $< $@ |
| 37 | + @echo " [SPRITE] $@" |
| 38 | + $(N64_MKSPRITE) -o $(dir $@) $< |
38 | 39 |
|
39 | 40 | # sfx # |
40 | 41 | MP3S := $(wildcard resources/sfx/bgms/*.mp3) |
41 | | -BGMS := $(subst .mp3,.raw,$(subst resources/,filesystem/,$(MP3S))) |
42 | | -filesystem/sfx/bgms/%.raw: resources/sfx/bgms/%.mp3 |
| 42 | +BGMS := $(subst .mp3,.wav64,$(subst resources/,filesystem/,$(MP3S))) |
| 43 | +filesystem/sfx/bgms/%.wav64: resources/sfx/bgms/%.mp3 |
43 | 44 | @mkdir -p `echo $@ | xargs dirname` |
44 | | - sox $< -b 16 -e signed-integer -B -r 11025 $@ remix - |
| 45 | + @echo " [AUDIOCONV] $@" |
| 46 | + $(N64_AUDIOCONV) -d --wav-compress 3 --wav-loop false -o $(dir $@) $< |
| 47 | + |
| 48 | +# font # |
| 49 | +TTFS := misc/font/clearsans-1.00/TTF/ClearSans-Bold.ttf misc/font/clearsans-1.00/TTF/ClearSans-Bold-flipped.ttf |
| 50 | +FONTS := $(subst .ttf,.font64,$(subst misc/font/clearsans-1.00/TTF/,filesystem/fonts/,$(TTFS))) |
| 51 | +filesystem/fonts/%.font64: misc/font/clearsans-1.00/TTF/%.ttf |
| 52 | + @mkdir -p `echo $@ | xargs dirname` |
| 53 | + @echo " [MKFONT] $@" |
| 54 | + $(N64_MKFONT) -s 18 --ellipsis 30,0 --range 30-39 -o $(dir $@) $< |
45 | 55 |
|
46 | 56 | # code # |
47 | | -SRCS := $(wildcard src/*.c) |
48 | | -OBJS := $(SRCS:.c=.o) |
49 | | -$(PROG_NAME).elf : $(OBJS) |
50 | | - $(LD) -o $@ $^ $(LINK_FLAGS) |
| 57 | +SRCS := $(wildcard $(SOURCE_DIR)/*.c) |
| 58 | +OBJS := $(SRCS:$(SOURCE_DIR)/%.c=$(BUILD_DIR)/%.o) |
51 | 59 |
|
52 | | -$(PROG_NAME).bin : $(PROG_NAME).elf |
53 | | - $(OBJCOPY) -O binary $< $@ |
| 60 | +$(BUILD_DIR)/$(ROM_NAME).elf: $(OBJS) $(N64_LIBDIR)/libdragon.a $(N64_LIBDIR)/libdragonsys.a $(N64_LIBDIR)/n64.ld |
| 61 | + @mkdir -p $(dir $@) |
| 62 | + @echo " [LD] $@" |
| 63 | + $(N64_CXX) -o $@ $(filter %.o, $^) $(filter-out $(N64_LIBDIR)/libdragon.a $(N64_LIBDIR)/libdragonsys.a, $(filter %.a, $^)) \ |
| 64 | + -lc -mabi=o64 $(patsubst %,-Wl$(COMMA)%,$(LDFLAGS)) -Wl,-Map=$(BUILD_DIR)/$(ROM_NAME).map |
| 65 | + $(N64_SIZE) -G $@ |
| 66 | + |
| 67 | +$(ROM_NAME).z64: $(BUILD_DIR)/$(ROM_NAME).elf |
| 68 | +$(ROM_NAME).z64: $(ROM_NAME).dfs |
54 | 69 |
|
55 | 70 | # dfs # |
56 | | -$(PROG_NAME).dfs: $(SPRITES) $(BGMS) |
| 71 | +$(ROM_NAME).dfs: $(SPRITES) $(BGMS) $(FONTS) |
57 | 72 | @mkdir -p ./filesystem/ |
58 | 73 | @echo `git rev-parse HEAD` > ./filesystem/hash |
59 | | - $(MKDFSPATH) $@ ./filesystem/ |
60 | | - |
61 | | -# rom |
62 | | -$(PROG_NAME).z64: $(PROG_NAME).bin $(PROG_NAME).dfs |
63 | | - @rm -f $@ |
64 | | - $(N64TOOL) -l 16M -t "$(PROG_NAME)" -h $(ROOTDIR)/mips64-elf/lib/header -o $(PROG_NAME).z64 $(PROG_NAME).bin -s 1M $(PROG_NAME).dfs |
65 | | - $(CHKSUM64PATH) $@ |
| 74 | + $(N64_MKDFS) $@ ./filesystem/ >/dev/null |
66 | 75 |
|
67 | 76 | setup: ## Create dev environment (docker image). |
68 | | - @docker build -q -t build - < Dockerfile > /dev/null |
| 77 | + @docker build --platform linux/amd64 -t build - < Dockerfile |
69 | 78 |
|
70 | 79 | resetup: ## Force recreate the dev environment (docker image). |
71 | 80 | @echo "Rebuilding dev environment in docker..." |
72 | | - @docker build -q -t build --no-cache - < Dockerfile > /dev/null |
| 81 | + @docker build --platform linux/amd64 -t build --no-cache - < Dockerfile |
73 | 82 |
|
74 | | -cen64: ## Start rom in CEN64 emulator. |
75 | | - @echo "Starting cen64..." |
76 | | - $(CEN64_DIR)/cen64 -multithread -controller num=1,pak=rumble $(CEN64_DIR)/pifdata.bin $(PROG_NAME).z64 |
| 83 | +ares: ## Start rom in Ares emulator. |
| 84 | + @echo "Starting ares..." |
| 85 | + $(ARES_BIN) $(ROM_NAME).z64 |
77 | 86 |
|
78 | 87 | flashair: ## Flash rom to EverDrive using a flashair SD card. |
79 | | - curl -X POST -F 'file=@$(PROG_NAME).z64' http://flashair/upload.cgi |
| 88 | + curl -X POST -F 'file=@$(ROM_NAME).z64' http://flashair/upload.cgi |
80 | 89 |
|
81 | 90 | clean: ## Cleanup temp files. |
82 | 91 | @echo "Cleaning up temp files..." |
83 | | - rm -rf *.z64 *.elf src/*.o *.bin *.dfs filesystem/ |
| 92 | + rm -rf $(BUILD_DIR) *.z64 *.elf src/*.o *.bin *.dfs filesystem/ |
84 | 93 |
|
85 | 94 | help: ## Show this help. |
86 | 95 | @fgrep -h "##" $(MAKEFILE_LIST) | fgrep -v fgrep | sed -e 's/:.*##/:/' |
0 commit comments