a502322188
손상된 .git 히스토리(missing tree)로 재초기화 후 작업트리 전체 커밋. .claude/ 만 제외(로컬 에이전트 설정). 구 저장소 백업(.git_corrupt_backup/) 포함. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
131 lines
3.6 KiB
Makefile
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)
|