Skip to content

Commit 45cd0a2

Browse files
committed
Added firmware compilation for Windows
1 parent 5a09cd6 commit 45cd0a2

File tree

12 files changed

+669
-277
lines changed

12 files changed

+669
-277
lines changed

firmware/Makefile

Lines changed: 15 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -2,52 +2,23 @@
22
# This program is free software; you can redistribute it and/or modify
33
# it under the terms of the GNU General Public License version 3.
44

5-
BOOT_NAME=bootloader_fw.hex
6-
APP1_NAME=app_fw_1.hex
7-
APP2_NAME=app_fw_2.hex
8-
GEN_NAME=nando_fw
9-
10-
BOOT_DIR=bootloader/
11-
APP_DIR=programmer/
12-
13-
BOOT_OBJ_DIR=$(BOOT_DIR)obj/
14-
APP_OBJ_DIR=$(APP_DIR)obj/
15-
16-
BOOT_PATH=$(BOOT_OBJ_DIR)$(BOOT_NAME)
17-
APP1_PATH=$(APP_OBJ_DIR)$(APP1_NAME)
18-
APP2_PATH=$(APP_OBJ_DIR)$(APP2_NAME)
19-
20-
OBJ_DIR=obj/
21-
22-
TOOLCHAIN=../../compiler/gcc-arm-none-eabi-4_9-2015q1/bin/arm-none-eabi-
23-
OBJCOPY=$(TOOLCHAIN)objcopy
24-
255
all:
26-
$(MAKE) -C $(BOOT_DIR)
27-
$(MAKE) -C $(APP_DIR)
28-
mkdir -p $(OBJ_DIR)
29-
cp $(BOOT_PATH) $(OBJ_DIR)
30-
cp $(APP1_PATH) $(OBJ_DIR)
31-
cp $(APP2_PATH) $(OBJ_DIR)
32-
sed -i '$$d' $(OBJ_DIR)$(BOOT_NAME)
33-
sed -i '$$d' $(OBJ_DIR)$(APP1_NAME)
34-
cat $(OBJ_DIR)$(BOOT_NAME) $(OBJ_DIR)$(APP1_NAME) \
35-
$(OBJ_DIR)$(APP2_NAME) > $(OBJ_DIR)$(GEN_NAME).hex
36-
$(OBJCOPY) --input-target=ihex --output-target=binary \
37-
$(OBJ_DIR)$(GEN_NAME).hex $(OBJ_DIR)$(GEN_NAME).bin
6+
ifeq ($(OS), Windows_NT)
7+
$(MAKE) -f Makefile.windows all
8+
else
9+
$(MAKE) -f Makefile.linux all
10+
endif
3811

3912
clean:
40-
$(MAKE) -C $(BOOT_DIR) clean
41-
$(MAKE) -C $(APP_DIR) clean
42-
rm -rf obj/
13+
ifeq ($(OS), Windows_NT)
14+
$(MAKE) -f Makefile.windows clean
15+
else
16+
$(MAKE) -f Makefile.linux clean
17+
endif
4318

4419
distclean:
45-
$(MAKE) -C $(BOOT_DIR) distclean
46-
$(MAKE) -C $(APP_DIR) distclean
47-
rm -rf obj/
48-
49-
erase:
50-
st-flash erase
51-
52-
program:
53-
st-flash write $(OBJ_DIR)$(GEN_NAME).bin 0x08000000
20+
ifeq ($(OS), Windows_NT)
21+
$(MAKE) -f Makefile.windows distclean
22+
else
23+
$(MAKE) -f Makefile.linux distclean
24+
endif

firmware/Makefile.linux

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
# Copyright (C) 2020 NANDO authors
2+
# This program is free software; you can redistribute it and/or modify
3+
# it under the terms of the GNU General Public License version 3.
4+
5+
BOOT_NAME=bootloader_fw.hex
6+
APP1_NAME=app_fw_1.hex
7+
APP2_NAME=app_fw_2.hex
8+
GEN_NAME=nando_fw
9+
10+
BOOT_DIR=bootloader/
11+
APP_DIR=programmer/
12+
13+
BOOT_OBJ_DIR=$(BOOT_DIR)obj/
14+
APP_OBJ_DIR=$(APP_DIR)obj/
15+
16+
BOOT_PATH=$(BOOT_OBJ_DIR)$(BOOT_NAME)
17+
APP1_PATH=$(APP_OBJ_DIR)$(APP1_NAME)
18+
APP2_PATH=$(APP_OBJ_DIR)$(APP2_NAME)
19+
20+
OBJ_DIR=obj/
21+
22+
TOOLCHAIN=../../compiler/gcc-arm-none-eabi-4_9-2015q1/bin/arm-none-eabi-
23+
OBJCOPY=$(TOOLCHAIN)objcopy
24+
25+
all:
26+
$(MAKE) -C $(BOOT_DIR)
27+
$(MAKE) -C $(APP_DIR)
28+
mkdir -p $(OBJ_DIR)
29+
cp $(BOOT_PATH) $(OBJ_DIR)
30+
cp $(APP1_PATH) $(OBJ_DIR)
31+
cp $(APP2_PATH) $(OBJ_DIR)
32+
sed -i '$$d' $(OBJ_DIR)$(BOOT_NAME)
33+
sed -i '$$d' $(OBJ_DIR)$(APP1_NAME)
34+
cat $(OBJ_DIR)$(BOOT_NAME) $(OBJ_DIR)$(APP1_NAME) \
35+
$(OBJ_DIR)$(APP2_NAME) > $(OBJ_DIR)$(GEN_NAME).hex
36+
$(OBJCOPY) --input-target=ihex --output-target=binary \
37+
$(OBJ_DIR)$(GEN_NAME).hex $(OBJ_DIR)$(GEN_NAME).bin
38+
39+
clean:
40+
$(MAKE) -C $(BOOT_DIR) clean
41+
$(MAKE) -C $(APP_DIR) clean
42+
rm -rf obj/
43+
44+
distclean:
45+
$(MAKE) -C $(BOOT_DIR) distclean
46+
$(MAKE) -C $(APP_DIR) distclean
47+
rm -rf obj/
48+
49+
erase:
50+
st-flash erase
51+
52+
program:
53+
st-flash write $(OBJ_DIR)$(GEN_NAME).bin 0x08000000

firmware/Makefile.windows

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
# Copyright (C) 2020 NANDO authors
2+
# This program is free software; you can redistribute it and/or modify
3+
# it under the terms of the GNU General Public License version 3.
4+
5+
BOOT_NAME=bootloader_fw.hex
6+
APP1_NAME=app_fw_1.hex
7+
APP2_NAME=app_fw_2.hex
8+
GEN_NAME=nando_fw
9+
10+
BOOT_DIR=bootloader
11+
APP_DIR=programmer
12+
OBJ_DIR=obj
13+
14+
BOOT_OBJ_DIR=$(BOOT_DIR)\\$(OBJ_DIR)
15+
APP_OBJ_DIR=$(APP_DIR)\\$(OBJ_DIR)
16+
17+
BOOT_PATH=$(BOOT_OBJ_DIR)\\$(BOOT_NAME)
18+
APP1_PATH=$(APP_OBJ_DIR)\\$(APP1_NAME)
19+
APP2_PATH=$(APP_OBJ_DIR)\\$(APP2_NAME)
20+
21+
TOOLCHAIN=arm-none-eabi-
22+
OBJCOPY=$(TOOLCHAIN)objcopy.exe
23+
24+
all:
25+
$(MAKE) -C $(BOOT_DIR)
26+
$(MAKE) -C $(APP_DIR)
27+
if not exist $(OBJ_DIR) mkdir $(OBJ_DIR)
28+
copy $(BOOT_PATH) $(OBJ_DIR)\\
29+
copy $(APP1_PATH) $(OBJ_DIR)\\
30+
copy $(APP2_PATH) $(OBJ_DIR)\\
31+
findstr /r /v "^:00000001FF$$" $(OBJ_DIR)\\$(BOOT_NAME) \
32+
>> $(OBJ_DIR)\\$(BOOT_NAME).tmp
33+
findstr /r /v "^:00000001FF$$" $(OBJ_DIR)\\$(APP1_NAME) \
34+
>> $(OBJ_DIR)\\$(APP1_NAME).tmp
35+
type $(OBJ_DIR)\\$(BOOT_NAME).tmp $(OBJ_DIR)\\$(APP1_NAME).tmp \
36+
$(OBJ_DIR)\\$(APP2_NAME) > $(OBJ_DIR)\\$(GEN_NAME).hex
37+
$(OBJCOPY) --input-target=ihex --output-target=binary \
38+
$(OBJ_DIR)\\$(GEN_NAME).hex $(OBJ_DIR)\\$(GEN_NAME).bin
39+
40+
clean:
41+
$(MAKE) -C $(BOOT_DIR) clean
42+
$(MAKE) -C $(APP_DIR) clean
43+
if exist $(OBJ_DIR) rd /s /q $(OBJ_DIR)
44+
45+
distclean:
46+
$(MAKE) -C $(BOOT_DIR) distclean
47+
$(MAKE) -C $(APP_DIR) distclean
48+
if exist $(OBJ_DIR) rd /s /q $(OBJ_DIR)

firmware/bootloader/Makefile

Lines changed: 18 additions & 77 deletions
Original file line numberDiff line numberDiff line change
@@ -2,83 +2,24 @@
22
# This program is free software; you can redistribute it and/or modify
33
# it under the terms of the GNU General Public License version 3.
44

5-
PROG_NAME=bootloader_fw
6-
7-
SRC_DIR=./
8-
OBJ_DIR=obj/
9-
LIB_DIR=../libs/
10-
TOOLCHAIN=../../../compiler/gcc-arm-none-eabi-4_9-2015q1/bin/arm-none-eabi-
11-
PROG=$(OBJ_DIR)$(PROG_NAME)
12-
13-
SPL_PATH=$(LIB_DIR)spl/
14-
SPL_DEVICE_SUPPORT_PATH=$(SPL_PATH)CMSIS/CM3/DeviceSupport/ST/STM32F10x/
15-
SPL_CORE_SUPPORT=$(SPL_PATH)CMSIS/CM3/CoreSupport/
16-
SPL_PERIPH_PATH=$(SPL_PATH)STM32F10x_StdPeriph_Driver/
17-
SPL_LIB=stm32f10x
18-
SPL_CONFIG_FILE=$(SPL_PATH)stm32f10x_conf.h
19-
SPL_FLAGS=-DSTM32F10X_HD -DCONFIG_BOOTLOADER
20-
21-
CC=$(TOOLCHAIN)gcc
22-
OBJCOPY=$(TOOLCHAIN)objcopy
23-
OBJDUMP=$(TOOLCHAIN)objdump
24-
SIZE=$(TOOLCHAIN)size
25-
26-
INCLUDES=-include$(SPL_CONFIG_FILE)
27-
INCLUDES+=-I$(SPL_CORE_SUPPORT)
28-
INCLUDES+=-I$(SPL_DEVICE_SUPPORT_PATH)
29-
INCLUDES+=-I$(SPL_PATH)
30-
INCLUDES+=-I$(SPL_PERIPH_PATH)inc
31-
INCLUDES+=-I$(SRC_DIR)
32-
33-
CFLAGS=-g -Wall -Werror -O3
34-
CFLAGS+=$(INCLUDES) -MMD -MP
35-
CFLAGS+=-ffunction-sections -fdata-sections
36-
CFLAGS+=-mcpu=cortex-m3 -mthumb
37-
CFLAGS+=$(SPL_FLAGS)
38-
39-
LDFLAGS=-mcpu=cortex-m3 -mthumb -Wl,--gc-sections -Wl,-Map=$(PROG).map
40-
41-
vpath %.c $(SRC_DIR) $(SPL_DEVICE_SUPPORT_PATH) $(SRC_BSP_DIR)
42-
vpath %.s $(SRC_DIR)
43-
44-
STARTUP=startup_stm32f10x_hd.s
45-
46-
SRCS=main.c system_stm32f10x.c syscalls.c uart.c
47-
48-
OBJS=$(addprefix $(OBJ_DIR),$(SRCS:.c=.o)) \
49-
$(addprefix $(OBJ_DIR),$(STARTUP:.s=.o))
50-
DEPS=$(OBJS:%.o=%.d)
51-
52-
LINKER_SCRIPT=$(SRC_DIR)stm32_flash.ld
53-
54-
all: lib dirs $(PROG).elf
55-
56-
lib:
57-
$(MAKE) -C $(SPL_PATH)
58-
59-
dirs:
60-
mkdir -p $(OBJ_DIR)
61-
62-
$(PROG).elf: $(OBJS)
63-
$(CC) $(LDFLAGS) -o $@ $^ -L$(SPL_PATH) -l$(SPL_LIB) -T$(LINKER_SCRIPT)
64-
$(OBJCOPY) --pad-to 0x8003800 -O ihex $(PROG).elf $(PROG).hex
65-
$(OBJCOPY) -O binary $(PROG).elf $(PROG).bin
66-
$(OBJDUMP) -St $(PROG).elf > $(PROG).lst
67-
$(SIZE) $(PROG).elf
68-
69-
$(OBJ_DIR)%.o: %.c
70-
$(CC) -c $(CFLAGS) $< -o $@
71-
72-
$(OBJ_DIR)%.o: %.s
73-
$(CC) -c $(CFLAGS) $< -o $@
74-
75-
-include $(DEPS)
5+
all:
6+
ifeq ($(OS), Windows_NT)
7+
$(MAKE) -f Makefile.windows all
8+
else
9+
$(MAKE) -f Makefile.linux all
10+
endif
7611

7712
clean:
78-
rm -rf $(OBJ_DIR)
79-
80-
distclean: clean
81-
$(MAKE) -C $(SPL_PATH) clean
13+
ifeq ($(OS), Windows_NT)
14+
$(MAKE) -f Makefile.windows clean
15+
else
16+
$(MAKE) -f Makefile.linux clean
17+
endif
18+
19+
distclean:
20+
ifeq ($(OS), Windows_NT)
21+
$(MAKE) -f Makefile.windows distclean
22+
else
23+
$(MAKE) -f Makefile.linux distclean
24+
endif
8225

83-
program:
84-
st-flash write $(PROG).bin 0x8000000

firmware/bootloader/Makefile.linux

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
# Copyright (C) 2020 NANDO authors
2+
# This program is free software; you can redistribute it and/or modify
3+
# it under the terms of the GNU General Public License version 3.
4+
5+
PROG_NAME=bootloader_fw
6+
7+
SRC_DIR=./
8+
OBJ_DIR=obj/
9+
LIB_DIR=../libs/
10+
TOOLCHAIN=../../../compiler/gcc-arm-none-eabi-4_9-2015q1/bin/arm-none-eabi-
11+
PROG=$(OBJ_DIR)$(PROG_NAME)
12+
13+
SPL_PATH=$(LIB_DIR)spl/
14+
SPL_DEVICE_SUPPORT_PATH=$(SPL_PATH)CMSIS/CM3/DeviceSupport/ST/STM32F10x/
15+
SPL_CORE_SUPPORT=$(SPL_PATH)CMSIS/CM3/CoreSupport/
16+
SPL_PERIPH_PATH=$(SPL_PATH)STM32F10x_StdPeriph_Driver/
17+
SPL_LIB=stm32f10x
18+
SPL_CONFIG_FILE=$(SPL_PATH)stm32f10x_conf.h
19+
SPL_FLAGS=-DSTM32F10X_HD -DCONFIG_BOOTLOADER
20+
21+
CC=$(TOOLCHAIN)gcc
22+
OBJCOPY=$(TOOLCHAIN)objcopy
23+
OBJDUMP=$(TOOLCHAIN)objdump
24+
SIZE=$(TOOLCHAIN)size
25+
26+
INCLUDES=-include$(SPL_CONFIG_FILE)
27+
INCLUDES+=-I$(SPL_CORE_SUPPORT)
28+
INCLUDES+=-I$(SPL_DEVICE_SUPPORT_PATH)
29+
INCLUDES+=-I$(SPL_PATH)
30+
INCLUDES+=-I$(SPL_PERIPH_PATH)inc
31+
INCLUDES+=-I$(SRC_DIR)
32+
33+
CFLAGS=-g -Wall -Werror -O3
34+
CFLAGS+=$(INCLUDES) -MMD -MP
35+
CFLAGS+=-ffunction-sections -fdata-sections
36+
CFLAGS+=-mcpu=cortex-m3 -mthumb
37+
CFLAGS+=$(SPL_FLAGS)
38+
39+
LDFLAGS=-mcpu=cortex-m3 -mthumb -Wl,--gc-sections -Wl,-Map=$(PROG).map
40+
41+
vpath %.c $(SRC_DIR) $(SPL_DEVICE_SUPPORT_PATH) $(SRC_BSP_DIR)
42+
vpath %.s $(SRC_DIR)
43+
44+
STARTUP=startup_stm32f10x_hd.s
45+
46+
SRCS=main.c system_stm32f10x.c syscalls.c uart.c
47+
48+
OBJS=$(addprefix $(OBJ_DIR),$(SRCS:.c=.o)) \
49+
$(addprefix $(OBJ_DIR),$(STARTUP:.s=.o))
50+
DEPS=$(OBJS:%.o=%.d)
51+
52+
LINKER_SCRIPT=$(SRC_DIR)stm32_flash.ld
53+
54+
all: lib dirs $(PROG).elf
55+
56+
lib:
57+
$(MAKE) -C $(SPL_PATH)
58+
59+
dirs:
60+
mkdir -p $(OBJ_DIR)
61+
62+
$(PROG).elf: $(OBJS)
63+
$(CC) $(LDFLAGS) -o $@ $^ -L$(SPL_PATH) -l$(SPL_LIB) -T$(LINKER_SCRIPT)
64+
$(OBJCOPY) --pad-to 0x8003800 -O ihex $(PROG).elf $(PROG).hex
65+
$(OBJCOPY) -O binary $(PROG).elf $(PROG).bin
66+
$(OBJDUMP) -St $(PROG).elf > $(PROG).lst
67+
$(SIZE) $(PROG).elf
68+
69+
$(OBJ_DIR)%.o: %.c
70+
$(CC) -c $(CFLAGS) $< -o $@
71+
72+
$(OBJ_DIR)%.o: %.s
73+
$(CC) -c $(CFLAGS) $< -o $@
74+
75+
-include $(DEPS)
76+
77+
clean:
78+
rm -rf $(OBJ_DIR)
79+
80+
distclean: clean
81+
$(MAKE) -C $(SPL_PATH) clean
82+
83+
program:
84+
st-flash write $(PROG).bin 0x8000000

0 commit comments

Comments
 (0)