application/octet-stream
•
3.72 KB
•
122 lines
MOON := ./moon
ASSET := tools/assets
CC := cc
CXX := c++
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')
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')
SOURCES := $(SRC_SOURCES) $(SDL_SOURCES) $(VEN_SOURCES)
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: 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-255 --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: format
format:
clang-format -i ./src/**.[ch]
.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