Repository navigation
Expand file tree
/
Copy pathMakefile
More file actions
114 lines (85 loc) · 3.65 KB
/
Copy pathMakefile
File metadata and controls
114 lines (85 loc) · 3.65 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
PROJECT := HARTLink
TOOLCHAIN ?= C:/MounRiver/MounRiver_Studio2/resources/app/resources/win32/components/WCH/Toolchain/RISC-V Embedded GCC/bin
PREFIX ?= riscv-none-embed-
CC := "$(TOOLCHAIN)/$(PREFIX)gcc"
OBJCOPY := "$(TOOLCHAIN)/$(PREFIX)objcopy"
SIZE := "$(TOOLCHAIN)/$(PREFIX)size"
BUILD := obj
APP_BUILD := $(BUILD)/app
BOOT_BUILD := $(BUILD)/boot
APP_OFFSET := 0x5000
INCLUDES := \
-IUser \
-IUser/App \
-IUser/Bsp \
-IUser/Drv \
-IUser/Sys \
-IDebug \
-IPeripheral/inc \
-ICore
DEFS := -DCH32L103 -DDEBUG=0 -DAOMASTER_LOG_ENABLE=0
ARCH := -march=rv32imacxw -mabi=ilp32 -msmall-data-limit=8 -msave-restore
COMMON := $(ARCH) -Os -ffunction-sections -fdata-sections -fno-common -fsigned-char -fmessage-length=0
CFLAGS := $(COMMON) $(DEFS) $(INCLUDES) -std=gnu99 -Wall -Wextra
BOOT_CFLAGS := $(CFLAGS) -DHARTLINK_BOOTLOADER=1
ASFLAGS := $(COMMON) $(DEFS) $(INCLUDES) -x assembler-with-cpp
APP_LDFLAGS := $(ARCH) -T Ld/Link.ld -nostartfiles -Wl,--gc-sections -Wl,-Map,$(BUILD)/$(PROJECT).map --specs=nano.specs --specs=nosys.specs
BOOT_LDFLAGS := $(ARCH) -T Ld/bootloader.ld -nostartfiles -Wl,--gc-sections -Wl,-Map,$(BUILD)/$(PROJECT)_boot.map --specs=nano.specs --specs=nosys.specs
APP_C_SOURCES := \
$(wildcard Core/*.c) \
$(wildcard Debug/*.c) \
$(wildcard Peripheral/src/*.c) \
$(wildcard User/*.c) \
$(wildcard User/App/*.c) \
$(wildcard User/Bsp/*.c) \
$(wildcard User/Drv/ssd1306.c) \
$(wildcard User/Sys/*.c)
APP_ASM_SOURCES := Startup/startup_ch32l103.S
BOOT_C_SOURCES := \
Bootloader/bootloader.c \
Debug/debug.c \
User/system_ch32l103.c \
$(wildcard Peripheral/src/*.c)
BOOT_ASM_SOURCES := Startup/startup_ch32l103.S
APP_OBJECTS := $(patsubst %.c,$(APP_BUILD)/%.o,$(APP_C_SOURCES)) \
$(patsubst %.S,$(APP_BUILD)/%.o,$(APP_ASM_SOURCES))
BOOT_OBJECTS := $(patsubst %.c,$(BOOT_BUILD)/%.o,$(BOOT_C_SOURCES)) \
$(patsubst %.S,$(BOOT_BUILD)/%.o,$(BOOT_ASM_SOURCES))
.PHONY: all app boot clean $(BUILD)/$(PROJECT).hex
all: app boot $(BUILD)/$(PROJECT).hex
app: $(BUILD)/$(PROJECT).elf $(BUILD)/$(PROJECT)_app.hex
$(SIZE) $(BUILD)/$(PROJECT).elf
boot: $(BUILD)/$(PROJECT)_boot.elf $(BUILD)/$(PROJECT)_boot.hex
$(SIZE) $(BUILD)/$(PROJECT)_boot.elf
$(BUILD)/$(PROJECT)_app.hex: $(BUILD)/$(PROJECT).elf
$(OBJCOPY) -O ihex $< $@
$(BUILD)/$(PROJECT).bin: $(BUILD)/$(PROJECT).elf
$(OBJCOPY) -O binary $< $@
$(BUILD)/$(PROJECT).elf: $(APP_OBJECTS)
$(CC) $(APP_OBJECTS) $(APP_LDFLAGS) -o $@
$(BUILD)/$(PROJECT)_boot.hex: $(BUILD)/$(PROJECT)_boot.elf
$(OBJCOPY) -O ihex $< $@
$(BUILD)/$(PROJECT)_boot.bin: $(BUILD)/$(PROJECT)_boot.elf
$(OBJCOPY) -O binary $< $@
$(BUILD)/$(PROJECT)_boot.elf: $(BOOT_OBJECTS)
$(CC) $(BOOT_OBJECTS) $(BOOT_LDFLAGS) -o $@
$(BUILD)/$(PROJECT)_combined.bin: $(BUILD)/$(PROJECT)_boot.bin $(BUILD)/$(PROJECT).bin tools/merge_bins.ps1
powershell -NoProfile -ExecutionPolicy Bypass -File tools/merge_bins.ps1 $(BUILD)/$(PROJECT)_boot.bin $(BUILD)/$(PROJECT).bin $@ $(APP_OFFSET)
$(BUILD)/$(PROJECT)_combined.hex: $(BUILD)/$(PROJECT)_combined.bin
$(OBJCOPY) -I binary -O ihex --change-addresses 0x00000000 $< $@
$(BUILD)/$(PROJECT).hex: $(BUILD)/$(PROJECT)_combined.hex
powershell -NoProfile -ExecutionPolicy Bypass -Command "Copy-Item -LiteralPath '$(BUILD)/$(PROJECT)_combined.hex' -Destination '$@' -Force"
$(APP_BUILD)/%.o: %.c
@if not exist "$(dir $@)" mkdir "$(dir $@)"
$(CC) $(CFLAGS) -c $< -o $@
$(APP_BUILD)/%.o: %.S
@if not exist "$(dir $@)" mkdir "$(dir $@)"
$(CC) $(ASFLAGS) -c $< -o $@
$(BOOT_BUILD)/%.o: %.c
@if not exist "$(dir $@)" mkdir "$(dir $@)"
$(CC) $(BOOT_CFLAGS) -c $< -o $@
$(BOOT_BUILD)/%.o: %.S
@if not exist "$(dir $@)" mkdir "$(dir $@)"
$(CC) $(ASFLAGS) -c $< -o $@
clean:
@if exist "$(BUILD)" rmdir /s /q "$(BUILD)"