Login
1 branch 0 tags
Ben (T14/NixOS) Font blitting 5b4056b 4 hours ago 9 Commits
moon / firmware / GNUmakefile
MOON                 := ./moon
ASSET                := tools/assets
CC                   := cc
CFLAGS               := -g -D_GNU_SOURCE $(shell pkg-config --cflags sdl2)
LDFLAGS              :=
LIBS                 := $(shell pkg-config --libs sdl2)
CSTD                 := -std=c11
OPTIMIZATION         := -O2
WARNINGS             := -Wall -Werror -Wextra -Wshadow -Wcast-align -Wno-missing-braces

ARCH                 := $(shell uname -m)
GFX_ASSETS           := $(shell find gfx -type f -name '*')
SRC_SOURCES          := $(shell find src -type f -name '*.c')
VEN_SOURCES          := $(shell find vendor -type f -name '*.c')
SDL_SOURCES          := $(shell find sdl_src -type f -name '*.c')
SOURCES              := $(SRC_SOURCES) $(SDL_SOURCES) $(VEN_SOURCES)
OBJS                 := ${SOURCES:.c=.o}
DEPS                 := ${SOURCES:.c=.d}

all: $(MOON)
.PHONY: all release

include mk/disable_implicit_rules.mk
include mk/ansi_colors.mk
include mk/platform.mk

ifneq ($(MAKECMDGOALS),clean)
-include $(DEPS)
endif

.PHONY: clean
clean:
	@rm -f gmon.out callgrind.out.* vgcore.*
	@rm -f $(shell find ./ -type f \( -name '*.o' -o -name '*.d' \))
	@rm -f moon moon.exe tools/assets tools/assets.exe
	@rm -rf src/tmp releases
	@echo "$(ANSI_BG_RED)" "[CLEAN]" "$(ANSI_RESET)" "moon"

.PHONY: sanitize
sanitize: CFLAGS += -fsanitize=address
sanitize: all

.PHONY: archive
archive:
	git archive --format=tar --prefix=moon-firmware-HEAD.tar.gz/ HEAD | gzip > moon-firmware-HEAD.tar.gz

$(MOON): $(OBJS)
	@$(CC) $^ -o $@ $(OPTIMIZATION) $(CFLAGS) $(CINCLUDES) $(LIBS) $(CSTD) $(LDFLAGS)
	@echo "$(ANSI_BG_GREEN)" "[LD] " "$(ANSI_RESET)" $@

%.o: %.c
	@$(CC) $(OPTIMIZATION) $(WARNINGS) $(CSTD) $(CFLAGS) $(CINCLUDES) -c $< -o $@ -MMD > ${<:.c=.d}
	@echo "$(ANSI_GREEN)" "[CC] " "$(ANSI_RESET)" $@

$(ASSET): tools/assets.c
	@$(CC) $(OPTIMIZATION) $(CSTD) $(CFLAGS) $^ -o $@
	@echo "$(ANSI_BG_GREY)" "[CC] " "$(ANSI_RESET)" $@

src/tmp/assets.c: $(ASSET) $(GFX_ASSETS) $(SHADER_ASSETS)
	@mkdir -p src/tmp/
	@$(ASSET) src/tmp/assets $(GFX_ASSETS)
	@echo "$(ANSI_GREY)" "[ST] " "$(ANSI_RESET)" $@
src/tmp/assets.h: src/tmp/assets.c
	@true

.PHONY: optimizegfx
optimizegfx:
	tools/optimizegfx $(GFX_ASSETS)

.PHONY: format
format:
	clang-format -i ./src/**.[ch]

.PHONY: run
run: all
	@./moon