DEBUG ?= 1 ifeq ($(DEBUG), 1) $(info Debug build) else $(info Release build) endif VERBOSE ?= 0 ifeq ($(VERBOSE), 1) $(info Verbose build) endif ################################################################################ LVGL_TARGET=lvgl ################################################################################ # MCU type (From CubeIDE) MCU = cortex-m33 CHIP = STM32U599xx CHIP_DETAIL = STM32U5A5 TARGET_DIR = targetASC10 TARGET_FILE = ASC10 TOOLCHAIN = arm-none-eabi TOOLCHAIN_PREFIX = C:/ST/STM32CubeIDE_1.17.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.12.3.rel1.win32_1.1.0.202410251130/tools TOOLCHAIN_BIN_DIR = $(TOOLCHAIN_PREFIX)/bin TOOLCHAIN_INC_DIR = $(TOOLCHAIN_PREFIX)/$(TOOLCHAIN)/include TOOLCHAIN_LIB_DIR = $(TOOLCHAIN_PREFIX)/$(TOOLCHAIN)/lib TOOLCHAIN_TOOL_DIR = $(TOOLCHAIN_PREFIX)/$(TOOLCHAIN)/bin # Toolchain prefix AR = $(TOOLCHAIN_BIN_DIR)/$(TOOLCHAIN)-ar CC = $(TOOLCHAIN_BIN_DIR)/$(TOOLCHAIN)-gcc CXX = $(TOOLCHAIN_BIN_DIR)/$(TOOLCHAIN)-g++ LD = $(TOOLCHAIN_BIN_DIR)/$(TOOLCHAIN)-g++ #AS = $(CC) -x assembler-with-cpp AS = $(TOOLCHAIN_BIN_DIR)/$(TOOLCHAIN)-as SIZE = size -d OBJCOPY = $(TOOLCHAIN_TOOL_DIR)/objcopy OBJDUMP = $(TOOLCHAIN_TOOL_DIR)/objdump RM = rm -f MD = mkdir -p ################################################################################ ifeq ($(DEBUG), 1) CFLAGS +=-DDEBUG CFLAGS +=-g3 CFLAGS +=-Og ASFLAGS +=-DDEBUG ASFLAGS +=-g3 else CFLAGS +=-DNDEBUG CFLAGS +=-O3 ASFLAGS +=-DNDEBUG endif CFLAGS +=-mcpu=$(MCU) # Allow strptime: CFLAGS +=-D_GNU_SOURCE CFLAGS +=-DUSE_HAL_DRIVER CFLAGS +=-D$(CHIP) CFLAGS +=-c CFLAGS +=-ffunction-sections CFLAGS +=-fdata-sections CFLAGS +=-Wall CFLAGS +=-fstack-usage CFLAGS +=-fcyclomatic-complexity CFLAGS +=--specs=nano.specs CFLAGS +=-mfpu=fpv5-sp-d16 CFLAGS +=-mfloat-abi=hard CFLAGS +=-mthumb CPPFLAGS := $(CFLAGS) CFLAGS +=-std=gnu17 CPPFLAGS +=-std=gnu++17 ################################################################################ ASFLAGS +=-mfloat-abi=hard ASFLAGS +=-mthumb ASFLAGS +=-mcpu=cortex-m33 ASFLAGS +=-c ASFLAGS +=-x assembler-with-cpp ASFLAGS +=--specs=nano.specs ASFLAGS +=-mfpu=fpv5-sp-d16 ASFLAGS +=-mfloat-abi=hard ASFLAGS +=-mthumb ################################################################################ LD_SCRIPT = STM32CubeIDE/STM32U599NJHXQ_FLASH.ld LD_FLAGS += -T$(LD_SCRIPT) LD_FLAGS +=-mcpu=$(MCU) LD_FLAGS += -Wl,-Map="$(MAP)" LD_FLAGS += --specs=nosys.specs LD_FLAGS += -Wl,-gc-sections LD_FLAGS += -static LD_FLAGS += --specs=nano.specs LD_FLAGS += -mfpu=fpv5-sp-d16 LD_FLAGS += -mfloat-abi=hard LD_FLAGS += -mthumb LD_FLAGS += -Wl,--start-group LD_FLAGS += -lc LD_FLAGS += -lm LD_FLAGS += -lstdc++ LD_FLAGS += -lsupc++ LD_FLAGS += -Wl,--end-group LD_FLAGS += -lnemagfx-float-abi-hard LD_FLAGS += -L./Middlewares/Third_Party/LVGL/lvgl/libs/nema_gfx/lib/core/cortex_m33/gcc ################################################################################ ifeq ($(DEBUG), 1) BUILD_FOLDER=C:/Work/liamHowatt_lv_port_riverdi_stm32u5/build/debug else BUILD_FOLDER=build/release endif ################################################################################ SOURCES= #if LV_USE_STDLIB_STRING == LV_STDLIB_BUILTIN SOURCES+=$(wildcard ./Middlewares/Third_Party/LVGL/lvgl/src/stdlib/builtin/*.c) SOURCES+=$(wildcard ./Middlewares/Third_Party/LVGL/lvgl/src/*.c) SOURCES+=$(wildcard ./Middlewares/Third_Party/LVGL/lvgl/src/libs/bin_decoder/*.c) SOURCES+=$(wildcard ./Middlewares/Third_Party/LVGL/lvgl/src/core/*.c) SOURCES+=$(wildcard ./Middlewares/Third_Party/LVGL/lvgl/src/indev/*.c) SOURCES+=$(wildcard ./Middlewares/Third_Party/LVGL/lvgl/src/display/*.c) SOURCES+=$(wildcard ./Middlewares/Third_Party/LVGL/lvgl/src/stdlib/*.c) SOURCES+=$(wildcard ./Middlewares/Third_Party/LVGL/lvgl/src/tick/*.c) SOURCES+=$(wildcard ./Middlewares/Third_Party/LVGL/lvgl/src/draw/sw/blend/*.c) SOURCES+=$(wildcard ./Middlewares/Third_Party/LVGL/lvgl/src/osal/*.c) SOURCES+=$(wildcard ./Middlewares/Third_Party/LVGL/lvgl/src/extra/*.c) SOURCES+=$(wildcard ./Middlewares/Third_Party/LVGL/lvgl/src/misc/*.c) SOURCES+=$(wildcard ./Middlewares/Third_Party/LVGL/lvgl/src/misc/cache/*.c) SOURCES+=$(wildcard ./Middlewares/Third_Party/LVGL/lvgl/src/font/*.c) SOURCES+=$(wildcard ./Middlewares/Third_Party/LVGL/lvgl/src/draw/*.c) SOURCES+=$(wildcard ./Middlewares/Third_Party/LVGL/lvgl/src/draw/nema_gfx/*.c) SOURCES+=$(wildcard ./Middlewares/Third_Party/LVGL/lvgl/src/draw/stm32_dma2d/*.c) SOURCES+=$(wildcard ./Middlewares/Third_Party/LVGL/lvgl/src/draw/sw/*.c) SOURCES+=$(wildcard ./Middlewares/Third_Party/LVGL/lvgl/src/widgets/*.c) SOURCES+=$(wildcard ./Middlewares/Third_Party/LVGL/lvgl/src/widgets/label/*.c) SOURCES+=$(wildcard ./Middlewares/Third_Party/LVGL/lvgl/src/widgets/image/*.c) SOURCES+=$(wildcard ./Middlewares/Third_Party/LVGL/lvgl/src/widgets/arc/*.c) SOURCES+=$(wildcard ./Middlewares/Third_Party/LVGL/lvgl/src/widgets/span/*.c) SOURCES+=$(wildcard ./Middlewares/Third_Party/LVGL/lvgl/src/widgets/tabview/*.c) SOURCES+=$(wildcard ./Middlewares/Third_Party/LVGL/lvgl/src/widgets/button/*.c) SOURCES+=$(wildcard ./Middlewares/Third_Party/LVGL/lvgl/src/widgets/chart/*.c) SOURCES+=$(wildcard ./Middlewares/Third_Party/LVGL/lvgl/src/widgets/scale/*.c) SOURCES+=$(wildcard ./Middlewares/Third_Party/LVGL/lvgl/src/widgets/calendar/*.c) SOURCES+=$(wildcard ./Middlewares/Third_Party/LVGL/lvgl/src/widgets/textarea/*.c) SOURCES+=$(wildcard ./Middlewares/Third_Party/LVGL/lvgl/src/widgets/table/*.c) SOURCES+=$(wildcard ./Middlewares/Third_Party/LVGL/lvgl/src/widgets/spinbox/*.c) SOURCES+=$(wildcard ./Middlewares/Third_Party/LVGL/lvgl/src/widgets/msgbox/*.c) SOURCES+=$(wildcard ./Middlewares/Third_Party/LVGL/lvgl/src/widgets/table/*.c) SOURCES+=$(wildcard ./Middlewares/Third_Party/LVGL/lvgl/src/widgets/list/*.c) SOURCES+=$(wildcard ./Middlewares/Third_Party/LVGL/lvgl/src/widgets/slider/*.c) SOURCES+=$(wildcard ./Middlewares/Third_Party/LVGL/lvgl/src/widgets/switch/*.c) SOURCES+=$(wildcard ./Middlewares/Third_Party/LVGL/lvgl/src/widgets/tileview/*.c) SOURCES+=$(wildcard ./Middlewares/Third_Party/LVGL/lvgl/src/widgets/checkbox/*.c) SOURCES+=$(wildcard ./Middlewares/Third_Party/LVGL/lvgl/src/widgets/roller/*.c) SOURCES+=$(wildcard ./Middlewares/Third_Party/LVGL/lvgl/src/widgets/dropdown/*.c) SOURCES+=$(wildcard ./Middlewares/Third_Party/LVGL/lvgl/src/widgets/spinner/*.c) SOURCES+=$(wildcard ./Middlewares/Third_Party/LVGL/lvgl/src/widgets/bar/*.c) #LV_USE_CANVAS SOURCES+=$(wildcard ./Middlewares/Third_Party/LVGL/lvgl/src/widgets/canvas/*.c) SOURCES+=$(wildcard ./Middlewares/Third_Party/LVGL/lvgl/src/widgets/led/*.c) SOURCES+=$(wildcard ./Middlewares/Third_Party/LVGL/lvgl/src/widgets/win/*.c) SOURCES+=$(wildcard ./Middlewares/Third_Party/LVGL/lvgl/src/widgets/menu/*.c) SOURCES+=$(wildcard ./Middlewares/Third_Party/LVGL/lvgl/src/widgets/keyboard/*.c) SOURCES+=$(wildcard ./Middlewares/Third_Party/LVGL/lvgl/src/widgets/line/*.c) SOURCES+=$(wildcard ./Middlewares/Third_Party/LVGL/lvgl/src/widgets/buttonmatrix/*.c) SOURCES+=$(wildcard ./Middlewares/Third_Party/LVGL/lvgl/src/widgets/lottie/*.c) SOURCES+=$(wildcard ./Middlewares/Third_Party/LVGL/lvgl/src/themes/*.c) SOURCES+=$(wildcard ./Middlewares/Third_Party/LVGL/lvgl/src/themes/default/*.c) SOURCES+=$(wildcard ./Middlewares/Third_Party/LVGL/lvgl/src/layouts/*.c) SOURCES+=$(wildcard ./Middlewares/Third_Party/LVGL/lvgl/src/layouts/flex/*.c) SOURCES+=$(wildcard ./Middlewares/Third_Party/LVGL/lvgl/src/layouts/grid/*.c) SOURCES+=$(wildcard ./Middlewares/Third_Party/LVGL/lvgl/src/drivers/display/st_ltdc/*.c) SOURCES+=$(wildcard ./Middlewares/Third_Party/LVGL/lvgl/src/libs/qrcode/*.c) #LV_USE_VECTOR_GRAPHIC SOURCES+=$(wildcard ./Middlewares/Third_Party/LVGL/lvgl/demos/vector_graphic/*.c) SOURCES+=$(wildcard ./Middlewares/Third_Party/LVGL/lvgl/demos/vector_graphic/assets/*.c) SOURCES+=$(wildcard ./Middlewares/Third_Party/LVGL/lvgl/src/libs/svg/*.c) SOURCES+=$(wildcard ./Middlewares/Third_Party/LVGL/lvgl/demos/benchmark/*.c) SOURCES+=$(wildcard ./Middlewares/Third_Party/LVGL/lvgl/demos/benchmark/assets/*.c) #SOURCES+=$(wildcard ./Middlewares/Third_Party/LVGL/lvgl/demos/music/*.c) #SOURCES+=$(wildcard ./Middlewares/Third_Party/LVGL/lvgl/demos/music/assets/*.c) SOURCES+=$(wildcard ./Middlewares/Third_Party/LVGL/lvgl/demos/widgets/*.c) SOURCES+=$(wildcard ./Middlewares/Third_Party/LVGL/lvgl/demos/widgets/assets/*.c) SOURCES+=$(wildcard ./Middlewares/Third_Party/LVGL/lvgl/src/others/observer/*.c) SOURCES+=$(wildcard ./Middlewares/Third_Party/LVGL/lvgl/src/others/sysmon/*.c) #SOURCES+=$(wildcard ./Middlewares/Third_Party/LVGL/lvgl/src/libs/thorvg/*.c) #SOURCES+=$(wildcard ./Middlewares/Third_Party/LVGL/lvgl/src/libs/thorvg/*.cpp) #LV_USE_CANVAS SOURCES+=$(wildcard ./Middlewares/Third_Party/LVGL/lvgl/examples/widgets/canvas/*.c) SOURCES+=$(wildcard ./Middlewares/Third_Party/LVGL/lvgl/examples/anim/*.c) #LV_USE_SVG SOURCES+=$(wildcard ./Middlewares/Third_Party/LVGL/lvgl/examples/libs/svg/*.c) ifeq ($(VERBOSE), 1) $(info SOURCES $(SOURCES)) endif ################################################################################ INC_DIRS+=./Shared INC_DIRS+=./Core/Inc INC_DIRS+=./Middlewares/Third_Party/LVGL/lvgl/libs/nema_gfx/include INC_DIRS+=./Middlewares/Third_Party/LVGL/lvgl/src/indev INC_DIRS+=./Middlewares/Third_Party/LVGL/lvgl/src/layouts/flex INC_DIRS+=./Middlewares/Third_Party/LVGL/lvgl/src/widgets/label INC_DIRS+=./Middlewares/Third_Party/LVGL/lvgl/src/widgets/image INC_DIRS+=./Drivers/STM32U5xx_HAL_Driver/Inc INC_DIRS+=./Drivers/CMSIS/Device/ST/STM32U5xx/Include INC_DIRS+=./Drivers/CMSIS/Include INC_DIRS+=./Middlewares/Third_Party/FreeRTOS/Source/include INC_DIRS+=./Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM33_NTZ/non_secure INC_DIRS+=./Middlewares/Third_Party/CMSIS/RTOS2/Include INC_DIRS+=./Middlewares/Third_Party/LVGL INC_DIRS+=./Middlewares/Third_Party/RTT/Config INC_DIRS+=./Middlewares/Third_Party/RTT/RTT INC_DIRS+=$(dir $(SOURCES)) INC_DIRS:=$(patsubst %/,%,$(INC_DIRS)) uniq = $(if $1,$(firstword $1) $(call uniq,$(filter-out $(firstword $1),$1))) INC_DIRS:=$(call uniq,$(INC_DIRS)) INC_FLAGS := $(addprefix -I,$(INC_DIRS)) ifeq ($(VERBOSE), 1) $(info INC_DIRS $(INC_DIRS)) endif ################################################################################ LVGL_LIB=$(BUILD_FOLDER)/bin/lib$(LVGL_TARGET).a LVGL_ELF=$(BUILD_FOLDER)/bin/$(LVGL_TARGET).elf LVGL_HEX=$(BUILD_FOLDER)/bin/$(LVGL_TARGET).hex LVGL_MAP=$(BUILD_FOLDER)/bin/$(LVGL_TARGET).map ################################################################################ # object files to create OBJECTS=$(patsubst %,%.o,$(SOURCES)) OBJECTS:=$(addprefix $(BUILD_FOLDER)/,$(OBJECTS)) ifeq ($(VERBOSE), 1) $(info OBJECTS $(OBJECTS)) endif ################################################################################ # Mention each dependency file as a target (with an empty rule), # so that make won’t fail if the file doesn’t exist. # $(DEPFILES): # @echo out...... $@ DEPS:=$(patsubst %.o,%.d,$(OBJECTS)) include $(wildcard $(DEPS)) ifeq ($(VERBOSE), 1) $(info DEPS $(DEPS)) endif .PRECIOUS: %.d ################################################################################ # This rule checks for the folder using a 'folder' file %.f: @echo Make folder $(@D) $(MD) $(@D) @echo touch $@ echo "" > $@ .PRECIOUS: %.f $(BUILD_FOLDER)/%.c.o: %.c $(BUILD_FOLDER)/%.c.d | $(BUILD_FOLDER)/%.f @echo Building C $@ and $(@D)/$(*F).c.d in $(@D) using $< @$(CC) $(DEFINE_FLAGS) $(INC_FLAGS) $(CFLAGS) -MMD -MP -MF"$(@D)/$(*F).c.d" -o $@ $< $(BUILD_FOLDER)/%.cpp.o: %.cpp $(BUILD_FOLDER)/%.cpp.d | $(BUILD_FOLDER)/%.f @echo Building CPP $@ and $(@D)/$(*F).cpp.d in $(@D) using $< $(CXX) $(DEFINE_FLAGS) $(INC_FLAGS) $(CPPFLAGS) -MMD -MP -MF"$(@D)/$(*F).cpp.d" -o $@ $< $(BUILD_FOLDER)/%.s.o: %.s | $(BUILD_FOLDER)/%.f @echo Building ASM $@ and $(@D)/$(*F).c.d in $(@D) using $< @$(LD) $(ASFLAGS) -MMD -MP -MF"$(@D)/$(*F).s.d" -o "$@" "$<" # CFLAGS +=-MMD # CFLAGS +=-MP # arm-none-eabi-gcc # "../Application/User/Core/asc11_ui.c" # -mcpu=cortex-m33 # -std=gnu11 # -g3 # -DDEBUG -DUSE_HAL_DRIVER # -DSTM32U599xx # -c # -I../../Core/Inc # -I../../Drivers/STM32U5xx_HAL_Driver/Inc # -I../../Drivers/STM32U5xx_HAL_Driver/Inc/Legacy # -I../../Drivers/CMSIS/Device/ST/STM32U5xx/Include # -I../../Drivers/CMSIS/Include # -I../../Middlewares/Third_Party/FreeRTOS/Source/include/ # -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM33_NTZ/non_secure/ # -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2/ # -I../../Middlewares/Third_Party/CMSIS/RTOS2/Include/ # -I../../Middlewares/Third_Party/LVGL/ # -I../../Middlewares/Third_Party/RTT/RTT # -I../../Middlewares/Third_Party/RTT/Config # -I"C:/Work/asc11_riverdi/riverdi-50-stm32u5-lvgl/STM32CubeIDE/Debug/Middlewares" # -I"C:/Work/asc11_riverdi/riverdi-50-stm32u5-lvgl/Middlewares/Third_Party/LVGL/lvgl/src/extra/libs/qrcode" # -Og # -ffunction-sections # -fdata-sections # -Wall # -fstack-usage # -fcyclomatic-complexity # -MMD # -MP # -MF"Application/User/Core/asc11_ui.d" # -MT"Application/User/Core/asc11_ui.o" # --specs=nano.specs # -mfpu=fpv5-sp-d16 # -mfloat-abi=hard # -mthumb # -o "Application/User/Core/asc11_ui.o" all: $(LVGL_LIB) @echo --- Builded $(LVGL_TARGET) $(LVGL_LIB) ... $(CXX) --version $(BUILD_FOLDER)/%.elf: $(OBJECTS) $(LD_SCRIPT) | $(BUILD_FOLDER)/%.f @echo --- Link $@... @$(LD) -o $@ $(OBJECTS) $(LD_FLAGS) $(BUILD_FOLDER)/%.a: $(OBJECTS) | $(BUILD_FOLDER)/%.f @echo --- Link $@... @$(AR) rcu $@ $(OBJECTS) # $(ELF): # @echo --- Link $@... # @$(LD) -o $@ $(OBJECTS) $(LD_FLAGS) # arm-none-eabi-g++ # -o "riverdi-50-stm32u5-lvgl.elf" @"objects.list" # -mcpu=cortex-m33 # -T"C:/Work/asc11_riverdi/riverdi-50-stm32u5-lvgl/STM32CubeIDE/STM32U599NJHXQ_FLASH.ld" # --specs=nosys.specs # -Wl,-Map="riverdi-50-stm32u5-lvgl.map" # -Wl,-gc-sections # -static # --specs=nano.specs # -mfpu=fpv5-sp-d16 # -mfloat-abi=hard # -mthumb # -Wl,--start-group # -lc # -lm # -lstdc++ # -lsupc++ # -Wl,--end-group $(LVGL_HEX): $(LVGL_ELF) @echo --- Make hex $(LVGL_HEX)... @$(OBJCOPY) -O ihex $(LVGL_ELF) $(LVGL_HEX) .PHONY: all clean clean: @echo --- Clean $(BUILD_FOLDER)... @$(RM) $(BUILD_FOLDER) %.d: ; include $(wildcard $(DEPS))