This commit is contained in:
2026-10-23 10:48:05 +02:00
commit 9615b5d42f
10 changed files with 529 additions and 0 deletions
+57
View File
@@ -0,0 +1,57 @@
# SPDX-License-Identifier: MIT
#
# Fully open-source CH32V003 template using ch32fun (MIT).
#
# Toolchain: Arch packages riscv64-elf-gcc + riscv64-elf-newlib
# Flashing: minichlink (MIT, part of ch32fun) or wchisp
#
# ch32fun is used as an external SDK. Point CH32FUN_ROOT at your checkout:
# git clone https://github.com/cnlohr/ch32fun ~/code/ch32fun
#
# This build does NOT use the WCH EVT SDK, WCH's GCC, libprintf, or IQmath.
TARGET ?= firmware
TARGET_MCU ?= CH32V003
# Root of the ch32fun checkout (the directory containing ch32fun/ and minichlink/).
CH32FUN_ROOT ?= $(HOME)/code/ch32fun
CH32FUN ?= $(CH32FUN_ROOT)/ch32fun
MINICHLINK ?= $(CH32FUN_ROOT)/minichlink
# Arch's riscv64-elf-newlib installs its headers here. ch32fun only needs the
# headers; it never links newlib (see -nostdlib below).
NEWLIB ?= /usr/riscv64-elf/include
# Arch's bare-metal RISC-V GCC. ch32fun auto-detects this too, but pinning it
# makes the build reproducible. Override for another toolchain, e.g.
# make PREFIX=riscv32-unknown-elf
PREFIX ?= riscv64-elf
ifeq ($(wildcard $(CH32FUN)/ch32fun.mk),)
$(error ch32fun not found at $(CH32FUN). Set CH32FUN_ROOT=/path/to/ch32fun)
endif
ifeq ($(wildcard $(NEWLIB)/stdio.h),)
$(error newlib headers not found at $(NEWLIB). Install riscv64-elf-newlib or set NEWLIB=/path/to/include)
endif
ifeq ($(shell command -v $(PREFIX)-gcc 2>/dev/null),)
$(error $(PREFIX)-gcc not found. Install riscv64-elf-gcc or set PREFIX=/path/to/toolchain-prefix)
endif
# ch32fun's build rules:
# - compiles ch32fun.c and $(TARGET).c
# - uses ch32fun.ld, -nostdlib and ch32fun/misc/libgcc.a
# - emits $(TARGET).elf/.bin/.hex/.lst/.map
include $(CH32FUN)/ch32fun.mk
# Build firmware only; never flash implicitly.
all: $(TARGET).bin
flash: cv_flash
clean: cv_clean
size: $(TARGET).elf
$(PREFIX)-size $<
.PHONY: all flash clean size