90 lines
2.8 KiB
Makefile
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
|