Files
LYWSD03MMC-BTHome/makefile
T
2026-10-17 20:39:01 +06:00

90 lines
2.8 KiB
Makefile

# LYWSD03MMC B1.5 BTHome v2 beacon + LCD
#
# Builds against the Telink TLSR825x BLE SDK as shipped in
# pvvx/ATC_MiThermometer, reusing its startup code, linker script and
# post-build scripts:
# git clone https://github.com/pvvx/ATC_MiThermometer ../ATC_MiThermometer
# make ATC_PATH=../ATC_MiThermometer
# TC32 toolchain: $(TEL_PATH)/tools/linux/tc32/bin (or set TC32_PATH)
PROJECT_NAME ?= LYWSD03MMC-BTHome
ATC_PATH ?= ../ATC_MiThermometer
TEL_PATH ?= $(ATC_PATH)/SDK
TC32_PATH ?= $(TEL_PATH)/tools/linux/tc32/bin/
PYTHON ?= python3
SRC_PATH := ./src
OUT_PATH := ./out
ATC_SRC := $(ATC_PATH)/src
ifeq ($(wildcard $(TEL_PATH)/components/drivers/8258/gpio_8258.c),)
$(error SDK not found: set ATC_PATH or TEL_PATH)
endif
CC := $(TC32_PATH)tc32-elf-gcc
LD := $(TC32_PATH)tc32-elf-ld
OBJCOPY := $(TC32_PATH)tc32-elf-objcopy
NM := $(TC32_PATH)tc32-elf-nm
CFLAGS := -DCHIP_TYPE=CHIP_TYPE_8258 -DMCU_STARTUP_825X \
-ffunction-sections -fdata-sections -Wall -O2 -fpack-struct \
-fshort-enums -finline-small-functions -std=gnu99 -funsigned-char \
-fshort-wchar -fms-extensions \
-I$(TEL_PATH)/components -I$(SRC_PATH)
APP_SRCS := main.c ble.c i2c.c sensor.c battery.c lcd.c
DRV_SRCS := adc.c analog.c bsp.c clock.c flash.c gpio_8258.c i2c.c lpc.c rf_pa.c timer.c uart.c
COM_SRCS := string.c utility.c
OBJS := \
$(OUT_PATH)/boot/cstartup_825x.o \
$(OUT_PATH)/boot/div_mod.o \
$(addprefix $(OUT_PATH)/app/,$(APP_SRCS:.c=.o)) \
$(addprefix $(OUT_PATH)/drv/,$(DRV_SRCS:.c=.o)) \
$(addprefix $(OUT_PATH)/common/,$(COM_SRCS:.c=.o)) \
$(OUT_PATH)/vendor/blt_common.o
ELF := $(OUT_PATH)/$(PROJECT_NAME).elf
BIN := $(PROJECT_NAME).bin
all: $(BIN)
$(OUT_PATH)/app/%.o: $(SRC_PATH)/%.c $(wildcard $(SRC_PATH)/*.h)
@mkdir -p $(dir $@)
$(CC) $(CFLAGS) -c -o $@ $<
$(OUT_PATH)/drv/%.o: $(TEL_PATH)/components/drivers/8258/%.c
@mkdir -p $(dir $@)
$(CC) $(CFLAGS) -c -o $@ $<
$(OUT_PATH)/common/%.o: $(TEL_PATH)/components/common/%.c
@mkdir -p $(dir $@)
$(CC) $(CFLAGS) -c -o $@ $<
$(OUT_PATH)/vendor/%.o: $(TEL_PATH)/components/vendor/common/%.c
@mkdir -p $(dir $@)
$(CC) $(CFLAGS) -c -o $@ $<
$(OUT_PATH)/boot/%.o: $(ATC_SRC)/%.S
@mkdir -p $(dir $@)
$(CC) $(CFLAGS) -c -o $@ $<
# Two-pass link: the second pass places code after the retention RAM area
$(ELF): $(OBJS)
$(LD) --gc-sections -L $(TEL_PATH)/components/proj_lib -T $(ATC_SRC)/boot.link \
-o $@ $(OBJS) -llt_8258
$(LD) --gc-sections -Ttext `$(PYTHON) $(ATC_SRC)/TlsrRetMemAddr.py -e $@ -t $(NM)` \
-L $(TEL_PATH)/components/proj_lib -T $(ATC_SRC)/boot.link \
-o $@ $(OBJS) -llt_8258
@$(PYTHON) $(ATC_SRC)/TlsrMemInfo.py -s 32768 -t $(NM) $@
# Raw image + Telink CRC (required by the OTA bootloader)
$(BIN): $(ELF)
$(OBJCOPY) -O binary $< $@
$(PYTHON) $(ATC_PATH)/utils/tl_check_fw.py $@
clean:
rm -rf $(OUT_PATH) $(BIN)
.PHONY: all clean