Login
1 branch 0 tags
Ben (Desktop/Arch) Added clang-format 2f88780 1 month ago 66 Commits
moon / GNUmakefile
MOON                 := ./moon
ASSET                := tools/assets
CC                   := cc
CXX                  := c++
CLANG_FORMAT         := clang-format
CFLAGS               := -g -D_GNU_SOURCE $(shell pkg-config --cflags sdl2 SDL2_mixer)
LDFLAGS              :=
LIBS                 := $(shell pkg-config --libs sdl2 SDL2_mixer) -lm -lstdc++
CSTD                 := -std=c11
CXXSTD               := -std=c++11
OPTIMIZATION         := -O2
WARNINGS             := -Wall -Werror -Wextra -Wshadow -Wcast-align -Wno-missing-braces
VENDOR_WARNINGS      := -Wall -Wno-unused-parameter -Wno-unused-function -Wno-unused-variable

# LVGL configuration
LVGL_DIR             := vendor/lvgl
LVGL_CFLAGS          := -I$(LVGL_DIR) -Isrc -DLV_CONF_INCLUDE_SIMPLE

# Required to render fonts, uses npx for simplicity
LV_FONT_CONV         := npx lv_font_conv

ARCH                 := $(shell uname -m)
GFX_ASSETS           := $(shell find gfx -type f -name '*' 2>/dev/null)
SRC_SOURCES          := $(shell find src -type f -name '*.c')
SRC_HEADERS          := $(shell find src -type f -name '*.h')
VEN_SOURCES          := $(shell find vendor -type f -name '*.c' \
                            ! -path '*/demos/*' \
                            ! -path '*/examples/*' \
                            ! -path '*/tests/*' \
                            ! -path '*/env_support/*' \
                            ! -path '*/debugging/*')
SDL_SOURCES          := $(shell find sdl_src -type f -name '*.c')
SDL_HEADERS          := $(shell find sdl_src -type f -name '*.h')
ESP_SOURCES          := $(shell find esp32/main -type f -name '*.c')
ESP_HEADERS          := $(shell find esp32/main -type f -name '*.c')
SOURCES              := $(SRC_SOURCES) $(SDL_SOURCES) $(VEN_SOURCES)
FORMAT_FILES         := $(SRC_SOURCES) $(SRC_HEADERS) $(SDL_SOURCES) $(SDL_HEADERS) $(ESP_SOURCES) $(ESP_HEADERS)
OBJS                 := ${SOURCES:.c=.o}
DEPS                 := ${SOURCES:.c=.d}

# Add LVGL flags to CFLAGS
CFLAGS               += $(LVGL_CFLAGS)

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: format
format:
	$(CLANG_FORMAT) -i -- $(FORMAT_FILES)

.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

.PHONY: fonts
fonts: src/fonts/roboto_condensed.c

$(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)" $@

vendor/%.o: vendor/%.c
	@$(CC) $(OPTIMIZATION) $(VENDOR_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/fonts/roboto_condensed.c: assets/fonts/RobotoCondensed-Regular.ttf
	$(LV_FONT_CONV) --bpp 4 --size 14 --no-compress --font $^ --range 32-127,160-383,1024-1279 --format lvgl --lv-include "lvgl.h" --lv-fallback "lv_font_source_han_sans_sc_14_cjk" -o $@

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: run
run: all
	@./moon

# ESP32-C6 targets
.PHONY: esp32 esp32-flash esp32-monitor esp32-clean

PORT ?= /dev/ttyUSB0

esp32:
	cd esp32 && idf.py build

esp32-flash:
	cd esp32 && idf.py -p /dev/ttyACM0 flash

esp32-monitor:
	cd esp32 && idf.py -p /dev/ttyACM0 monitor

esp32-clean:
	cd esp32 && idf.py fullclean