Files
HECO2/program/Makefile
T
jeon a502322188 chore: HERV 통합 저장소 재초기화 커밋
손상된 .git 히스토리(missing tree)로 재초기화 후 작업트리 전체 커밋.
.claude/ 만 제외(로컬 에이전트 설정). 구 저장소 백업(.git_corrupt_backup/) 포함.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-16 09:32:17 +09:00

131 lines
3.6 KiB
Makefile

# =============================================================================
# HERV Firmware - Nuvoton NANO100SE3BN (Cortex-M0)
# Eclipse(Nueclipse) -> VS Code + ARM-GCC 마이그레이션
#
# 사용법:
# make : 빌드 (build/HERV.elf, .hex, .bin)
# make clean : 빌드 정리
# make flash : Nu-Link 으로 플래시 (OpenOCD-Nuvoton 필요)
# make erase : 칩 erase
# make size : 메모리 사용량 출력
# =============================================================================
PROJECT := HERV
BUILD := build
# --- Toolchain ---
PREFIX := arm-none-eabi-
CC := $(PREFIX)gcc
AS := $(PREFIX)gcc -x assembler-with-cpp
LD := $(PREFIX)gcc
OBJCOPY := $(PREFIX)objcopy
SIZE := $(PREFIX)size
# --- MCU ---
MCU := -mcpu=cortex-m0 -mthumb
# --- Include 경로 (Eclipse 와 동일) ---
INCLUDES := \
-ILibrary/CMSIS/Include \
-ILibrary/Device/Nuvoton/Nano100Series/Include \
-ILibrary/StdDriver/inc \
-IUser
# --- 공통 컴파일 플래그 (Eclipse subdir.mk 에서 추출) ---
COMMON_FLAGS := $(MCU) -Os -g \
-fmessage-length=0 -fsigned-char \
-ffunction-sections -fdata-sections
CFLAGS := $(COMMON_FLAGS) $(INCLUDES) -std=gnu11 -MMD -MP
ASFLAGS := $(COMMON_FLAGS) -MMD -MP
# --- 링커 ---
LDSCRIPT := Library/Device/Nuvoton/Nano100Series/Source/GCC/gcc_arm.ld
LDFLAGS := $(COMMON_FLAGS) -T$(LDSCRIPT) \
-Xlinker --gc-sections \
-Wl,-Map=$(BUILD)/$(PROJECT).map
# --- 소스 자동 수집 ---
# 주의: User/pwm_duty10000.c 가 StdDriver/pwm.c 를 대체하므로 pwm.c 는 빌드에서 제외
# (Eclipse Nueclipse 프로젝트도 동일하게 pwm.c 를 exclude 하고 빌드)
STDDRIVER_EXCLUDE := Library/StdDriver/src/pwm.c
C_SRCS := \
$(wildcard User/*.c) \
$(filter-out $(STDDRIVER_EXCLUDE), $(wildcard Library/StdDriver/src/*.c)) \
Library/Device/Nuvoton/Nano100Series/Source/system_Nano100Series.c \
Library/Device/Nuvoton/Nano100Series/Source/GCC/_syscalls.c
ASM_SRCS := \
Library/Device/Nuvoton/Nano100Series/Source/GCC/startup_Nano100Series.S
# --- Object 파일 (build/ 아래 같은 트리 구조 유지) ---
OBJS := $(addprefix $(BUILD)/, $(C_SRCS:.c=.o)) \
$(addprefix $(BUILD)/, $(ASM_SRCS:.S=.o))
DEPS := $(OBJS:.o=.d)
# --- 출력 ---
ELF := $(BUILD)/$(PROJECT).elf
HEX := $(BUILD)/$(PROJECT).hex
BIN := $(BUILD)/$(PROJECT).bin
# =============================================================================
# Targets
# =============================================================================
.PHONY: all clean flash erase debug-server size rebuild
all: $(ELF) $(HEX) $(BIN) size
# clean -> all 을 순차 실행 (병렬 make -jN 에서 clean/all 동시 실행 방지)
rebuild:
@$(MAKE) clean
@$(MAKE) all
$(ELF): $(OBJS)
@echo '[LD] $@'
@$(LD) $(LDFLAGS) -o $@ $^
$(HEX): $(ELF)
@echo '[HEX] $@'
@$(OBJCOPY) -O ihex $< $@
$(BIN): $(ELF)
@echo '[BIN] $@'
@$(OBJCOPY) -O binary $< $@
size: $(ELF)
@echo ''
@$(SIZE) --format=berkeley $<
@echo ''
# C 컴파일
$(BUILD)/%.o: %.c
@mkdir -p $(dir $@)
@echo '[CC] $<'
@$(CC) $(CFLAGS) -c $< -o $@
# Assembly 컴파일
$(BUILD)/%.o: %.S
@mkdir -p $(dir $@)
@echo '[AS] $<'
@$(AS) $(ASFLAGS) -c $< -o $@
# Nu-Link 으로 플래시 굽기
flash: $(ELF)
openocd -f openocd.cfg -c "program $(ELF) verify reset exit"
# OpenOCD GDB 서버만 실행 (VS Code 디버그용)
debug-server:
openocd -f openocd.cfg
# 칩 erase
erase:
openocd -f openocd.cfg -c "init; reset halt; nuc_chip_erase; exit"
clean:
@echo 'Cleaning...'
@rm -rf $(BUILD)
-include $(DEPS)