Skip to content

Commit 8852c01

Browse files
authored
Merge pull request #5 from wolfSSL/multi-arch
Support for multiple architectures, new build system
2 parents e7863ca + aaa0d06 commit 8852c01

27 files changed

Lines changed: 1301 additions & 130 deletions

Makefile

Lines changed: 92 additions & 92 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,18 @@
1-
CROSS_COMPILE:=arm-none-eabi-
2-
CC:=$(CROSS_COMPILE)gcc
3-
LD:=$(CROSS_COMPILE)gcc
4-
AS:=$(CROSS_COMPILE)gcc
5-
OBJCOPY:=$(CROSS_COMPILE)objcopy
6-
SIZE:=$(CROSS_COMPILE)size
7-
BOOT0_OFFSET?=`cat include/target.h |grep WOLFBOOT_PARTITION_BOOT_ADDRESS | head -1 | sed -e "s/.*[ ]//g"`
8-
BOOT_IMG?=test-app/image.bin
1+
## wolfBoot Makefile
2+
#
3+
# Configure by passing alternate values
4+
# via environment variables.
5+
#
6+
# Default values:
7+
ARCH?=ARM
8+
TARGET?=stm32f4
99
SIGN?=ED25519
1010
TARGET?=stm32f4
1111
KINETIS?=$(HOME)/src/FRDM-K64F
12+
KINETIS_CPU=MK64FN1M0VLL12
1213
KINETIS_DRIVERS?=$(KINETIS)/devices/MK64F12
1314
KINETIS_CMSIS?=$(KINETIS)/CMSIS
15+
FREEDOM_E_SDK?=$(HOME)/src/freedom-e-sdk
1416
DEBUG?=0
1517
VTOR?=1
1618
CORTEX_M0?=0
@@ -19,68 +21,65 @@ EXT_FLASH?=0
1921
SPI_FLASH?=0
2022
ALLOW_DOWNGRADE?=0
2123
NVM_FLASH_WRITEONCE?=0
22-
LSCRIPT:=hal/$(TARGET).ld
24+
V?=0
25+
SPMATH?=1
26+
27+
2328

29+
## Initializers
30+
CFLAGS:=-D__WOLFBOOT
31+
LSCRIPT:=hal/$(TARGET).ld
32+
LDFLAGS:=-T $(LSCRIPT) -Wl,-gc-sections -Wl,-Map=wolfboot.map -ffreestanding -nostartfiles
2433
OBJS:= \
2534
./hal/$(TARGET).o \
2635
./src/loader.o \
2736
./src/string.o \
2837
./src/crypto.o \
29-
./src/wolfboot.o \
3038
./src/image.o \
3139
./src/libwolfboot.o \
3240
./lib/wolfssl/wolfcrypt/src/sha256.o \
3341
./lib/wolfssl/wolfcrypt/src/hash.o \
3442
./lib/wolfssl/wolfcrypt/src/wolfmath.o \
3543
./lib/wolfssl/wolfcrypt/src/fe_low_mem.o
3644

37-
## Target specific configuration
38-
ifeq ($(TARGET),samr21)
39-
CORTEX_M0=1
40-
endif
45+
## Architecture/CPU configuration
46+
include arch.mk
47+
48+
49+
## DSA Settings
4150

42-
## Signature
4351
ifeq ($(SIGN),ECC256)
4452
KEYGEN_TOOL=tools/ecc256/ecc256_keygen
4553
SIGN_TOOL=tools/ecc256/ecc256_sign
4654
PRIVATE_KEY=ecc256.der
55+
OBJS+= \
56+
$(ECC_EXTRA_OBJS) \
57+
$(MATH_OBJS) \
58+
./lib/wolfssl/wolfcrypt/src/ecc.o \
59+
./lib/wolfssl/wolfcrypt/src/ge_low_mem.o \
60+
./lib/wolfssl/wolfcrypt/src/memory.o \
61+
./lib/wolfssl/wolfcrypt/src/wc_port.o \
62+
./src/ecc256_pub_key.o \
63+
./src/xmalloc.o
64+
CFLAGS+=-DWOLFBOOT_SIGN_ECC256 -DXMALLOC_USER $(ECC_EXTRA_CFLAGS)
4765
else
4866
KEYGEN_TOOL=tools/ed25519/ed25519_keygen
4967
SIGN_TOOL=tools/ed25519/ed25519_sign
5068
PRIVATE_KEY=ed25519.der
69+
OBJS+= ./lib/wolfssl/wolfcrypt/src/sha512.o \
70+
./lib/wolfssl/wolfcrypt/src/ed25519.o \
71+
./lib/wolfssl/wolfcrypt/src/ge_low_mem.o \
72+
./src/ed25519_pub_key.o
73+
CFLAGS+=-DWOLFBOOT_SIGN_ED25519 -nostdlib -DWOLFSSL_STATIC_MEMORY
74+
LDFLAGS+=-nostdlib
5175
endif
5276

53-
MATH_OBJS:=./lib/wolfssl/wolfcrypt/src/sp_int.o
54-
55-
ifeq ($(CORTEX_M0),1)
56-
CFLAGS:=-mcpu=cortex-m0
57-
MATH_OBJS += ./lib/wolfssl/wolfcrypt/src/sp_c32.o
58-
else
59-
ifeq ($(NO_ASM),1)
60-
MATH_OBJS += ./lib/wolfssl/wolfcrypt/src/sp_c32.o
61-
CFLAGS:=-mcpu=cortex-m3
62-
else
63-
CFLAGS:=-mcpu=cortex-m3 -D__WOLFBOOT -DWOLFSSL_SP_ASM -DWOLFSSL_SP_ARM_CORTEX_M_ASM -fomit-frame-pointer
64-
MATH_OBJS += ./lib/wolfssl/wolfcrypt/src/sp_cortexm.o
65-
endif
66-
endif
67-
68-
ifeq ($(FASTMATH),1)
69-
MATH_OBJS:=./lib/wolfssl/wolfcrypt/src/integer.o
70-
CFLAGS+=-DUSE_FAST_MATH
71-
endif
7277

73-
CFLAGS+=-mthumb -Wall -Wextra -Wno-main -Wstack-usage=1024 -ffreestanding -Wno-unused \
74-
-I. -Ilib/bootutil/include -Iinclude/ -Ilib/wolfssl -nostartfiles \
78+
CFLAGS+=-Wall -Wextra -Wno-main -Wstack-usage=1024 -ffreestanding -Wno-unused \
79+
-I. -Iinclude/ -Ilib/wolfssl -nostartfiles \
7580
-DWOLFSSL_USER_SETTINGS \
76-
-mthumb -mlittle-endian -mthumb-interwork \
7781
-DPLATFORM_$(TARGET)
7882

79-
ifeq ($(TARGET),kinetis)
80-
CFLAGS+= -I$(KINETIS_DRIVERS)/drivers -I$(KINETIS_DRIVERS) -DCPU_MK64FN1M0VLL12 -I$(KINETIS_CMSIS)/Include -DDEBUG_CONSOLE_ASSERT_DISABLE=1
81-
OBJS+= $(KINETIS_DRIVERS)/drivers/fsl_clock.o $(KINETIS_DRIVERS)/drivers/fsl_ftfx_flash.o $(KINETIS_DRIVERS)/drivers/fsl_ftfx_cache.o $(KINETIS_DRIVERS)/drivers/fsl_ftfx_controller.o
82-
endif
83-
8483
ifeq ($(SPI_FLASH),1)
8584
EXT_FLASH=1
8685
CFLAGS+= -DSPI_FLASH=1
@@ -91,7 +90,6 @@ ifeq ($(EXT_FLASH),1)
9190
CFLAGS+= -DEXT_FLASH=1 -DPART_UPDATE_EXT=1 -DPART_SWAP_EXT=1
9291
endif
9392

94-
9593
ifeq ($(ALLOW_DOWNGRADE),1)
9694
CFLAGS+= -DALLOW_DOWNGRADE
9795
endif
@@ -100,87 +98,79 @@ ifeq ($(NVM_FLASH_WRITEONCE),1)
10098
CFLAGS+= -DNVM_FLASH_WRITEONCE
10199
endif
102100

103-
LDFLAGS:=-T $(LSCRIPT) -Wl,-gc-sections -Wl,-Map=wolfboot.map -ffreestanding -nostartfiles -mcpu=cortex-m3 -mthumb
104-
ASFLAGS:=$(CFLAGS)
105101

106-
ifeq ($(SIGN),ED25519)
107-
OBJS+= ./lib/wolfssl/wolfcrypt/src/sha512.o \
108-
./lib/wolfssl/wolfcrypt/src/ed25519.o \
109-
./lib/wolfssl/wolfcrypt/src/ge_low_mem.o \
110-
./src/ed25519_pub_key.o
111-
CFLAGS+=-DWOLFBOOT_SIGN_ED25519 -nostdlib -DWOLFSSL_STATIC_MEMORY
112-
LDFLAGS+=-nostdlib
113-
endif
114-
115-
ifeq ($(SIGN),ECC256)
116-
OBJS+= \
117-
$(MATH_OBJS) \
118-
./lib/wolfssl/wolfcrypt/src/ecc.o \
119-
./lib/wolfssl/wolfcrypt/src/ge_low_mem.o \
120-
./lib/wolfssl/wolfcrypt/src/memory.o \
121-
./lib/wolfssl/wolfcrypt/src/wc_port.o \
122-
./src/ecc256_pub_key.o \
123-
./src/xmalloc.o
124-
CFLAGS+=-DWOLFBOOT_SIGN_ECC256 -DXMALLOC_USER
125-
endif
126102

127103
ifeq ($(DEBUG),1)
128104
CFLAGS+=-O0 -g -ggdb3 -DDEBUG=1
129105
else
130106
CFLAGS+=-Os
131107
endif
132108

109+
ifeq ($(V),0)
110+
Q=@
111+
endif
112+
133113
ifeq ($(VTOR),0)
134114
CFLAGS+=-DNO_VTOR
135115
endif
136116

117+
ASFLAGS:=$(CFLAGS)
137118

138119
all: factory.bin
139120

140-
141121
wolfboot.bin: wolfboot.elf
142-
$(OBJCOPY) -O binary $^ $@
143-
$(SIZE) wolfboot.elf
122+
@echo "\t[BIN] $@"
123+
$(Q)$(OBJCOPY) -O binary $^ $@
144124

145125
wolfboot.hex: wolfboot.elf
146-
$(OBJCOPY) -O ihex $^ $@
126+
@echo "\t[HEX] $@"
127+
$(Q)$(OBJCOPY) -O ihex $^ $@
147128

148129
align: wolfboot-align.bin
149130

150-
wolfboot-align.bin: wolfboot.elf
151-
$(OBJCOPY) -O binary $^ $@ --pad-to=$(BOOT0_OFFSET) --gap-fill=255
152-
$(SIZE) wolfboot.elf
153-
131+
wolfboot-align.bin: wolfboot.bin
132+
@cat include/target.h |grep WOLFBOOT_PARTITION_BOOT_ADDRESS | head -1 | sed -e "s/.*[ ]//g" > .wolfboot-offset
133+
@printf "%d" `cat .wolfboot-offset` > .wolfboot-offset
134+
@printf "%d" $(ARCH_FLASH_OFFSET) >.wolfboot-arch-offset
135+
@expr `cat .wolfboot-offset` - `cat .wolfboot-arch-offset` >.wolfboot-partition-size
136+
@dd if=/dev/zero bs=`cat .wolfboot-partition-size` count=1 2>/dev/null | tr "\000" "\377" > $(@)
137+
@rm -f .wolfboot-partition-size .wolfboot-offset .wolfboot-arch-offset
138+
@dd if=$^ of=$(@) conv=notrunc 2>/dev/null
139+
@echo
140+
@echo "\t[SIZE]"
141+
@$(SIZE) wolfboot.elf
142+
@echo
154143

155144
test-app/image.bin:
156-
make -C test-app TARGET=$(TARGET) EXT_FLASH=$(EXT_FLASH) SPI_FLASH=$(SPI_FLASH)
145+
@make -C test-app TARGET=$(TARGET) EXT_FLASH=$(EXT_FLASH) SPI_FLASH=$(SPI_FLASH) ARCH=$(ARCH) V=$(V) \
146+
KINETIS=$(KINETIS) KINETIS_CPU=$(KINETIS_CPU) KINETIS_DRIVERS=$(KINETIS_DRIVERS) \
147+
KINETIS_CMSIS=$(KINETIS_CMSIS) NVM_FLASH_WRITEONCE=$(NVM_FLASH_WRITEONCE) \
148+
FREEDOM_E_SDK=$(FREEDOM_E_SDK)
149+
@rm -f src/*.o hal/*.o
157150

158151
include tools/test.mk
159152

160153
tools/ed25519/ed25519_sign:
161-
make -C tools/ed25519
154+
@make -C tools/ed25519
162155

163156
tools/ecc256/ecc256_sign:
164-
make -C tools/ecc256
157+
@make -C tools/ecc256
165158

166159
ed25519.der: tools/ed25519/ed25519_sign
167-
tools/ed25519/ed25519_keygen src/ed25519_pub_key.c
160+
@tools/ed25519/ed25519_keygen src/ed25519_pub_key.c
168161

169162
ecc256.der: tools/ecc256/ecc256_sign
170-
tools/ecc256/ecc256_keygen src/ecc256_pub_key.c
163+
@tools/ecc256/ecc256_keygen src/ecc256_pub_key.c
171164

172165
factory.bin: $(BOOT_IMG) wolfboot-align.bin $(SIGN_TOOL) $(PRIVATE_KEY)
173-
$(SIGN_TOOL) $(BOOT_IMG) $(PRIVATE_KEY) 1
174-
cat wolfboot-align.bin $(BOOT_IMG).v1.signed > $@
175-
176-
second.img: $(BOOT_IMG) wolfboot-align.bin $(SIGN_TOOL) $(PRIVATE_KEY)
177-
$(SIGN_TOOL) $(BOOT_IMG) $(PRIVATE_KEY) 1 65536
178-
$(SIGN_TOOL) $(BOOT_IMG) $(PRIVATE_KEY) 2
179-
cat wolfboot-align.bin $(BOOT_IMG).v1.signed $(BOOT_IMG).v2.signed > $@
166+
@echo "\t[SIGN] $(BOOT_IMG)"
167+
$(Q)$(SIGN_TOOL) $(BOOT_IMG) $(PRIVATE_KEY) 1 >/dev/null
168+
@echo "\t[MERGE] $@"
169+
@cat wolfboot-align.bin $(BOOT_IMG).v1.signed > $@
180170

181171
wolfboot.elf: $(OBJS) $(LSCRIPT)
182-
grep stat $(OBJS)
183-
$(LD) $(LDFLAGS) -Wl,--start-group $(OBJS) -Wl,--end-group -o $@
172+
@echo "\t[LD] $@"
173+
$(Q)$(LD) $(LDFLAGS) -Wl,--start-group $(OBJS) -Wl,--end-group -o $@
184174

185175
src/ed25519_pub_key.c: ed25519.der
186176

@@ -189,13 +179,23 @@ src/ecc256_pub_key.c: ecc256.der
189179
keys: $(PRIVATE_KEY)
190180

191181
clean:
192-
rm -f *.bin *.elf $(OBJS) wolfboot.map *.bin *.hex hal/*.o
193-
make -C test-app clean
182+
@find . -type f -name "*.o" | xargs -x rm -f
183+
@rm -f *.bin *.elf wolfboot.map *.bin *.hex
184+
@make -C test-app clean
194185

195186
distclean: clean
196-
make -C tools/ed25519 clean
197-
make -C tools/ecc256 clean
198-
rm -f *.pem *.der tags ./src/ed25519_pub_key.c ./src/ecc256_pub_key.c
187+
@make -C tools/ed25519 clean
188+
@make -C tools/ecc256 clean
189+
@rm -f *.pem *.der tags ./src/ed25519_pub_key.c ./src/ecc256_pub_key.c
190+
191+
192+
%.o:%.c
193+
@echo "\t[CC-$(ARCH)] $@"
194+
$(Q)$(CC) $(CFLAGS) -c -o $@ $^
195+
196+
%.o:%.S
197+
@echo "\t[AS-$(ARCH)] $@"
198+
$(Q)$(CC) $(CFLAGS) -c -o $@ $^
199199

200200
FORCE:
201201

arch.mk

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
## CPU Architecture selection via $ARCH
2+
3+
# check for FASTMATH or SP_MATH
4+
ifeq ($(SPMATH),1)
5+
MATH_OBJS:=./lib/wolfssl/wolfcrypt/src/sp_int.o
6+
else
7+
MATH_OBJS:=./lib/wolfssl/wolfcrypt/src/integer.o
8+
endif
9+
10+
## ARM
11+
ifeq ($(ARCH),ARM)
12+
CROSS_COMPILE:=arm-none-eabi-
13+
CFLAGS+=-mthumb -mlittle-endian -mthumb-interwork -DARCH_ARM
14+
LDFLAGS+=-mthumb -mlittle-endian -mthumb-interwork
15+
OBJS+=src/boot_arm.o
16+
ARCH_FLASH_OFFSET=0x0
17+
18+
## Cortex-M CPU
19+
ifeq ($(CORTEX_M0),1)
20+
CFLAGS+=-mcpu=cortex-m0
21+
LDFLAGS+=-mcpu=cortex-m0
22+
ifeq ($(SPMATH),1)
23+
MATH_OBJS += ./lib/wolfssl/wolfcrypt/src/sp_c32.o
24+
endif
25+
else
26+
ifeq ($(NO_ASM),1)
27+
ifeq ($(SPMATH),1)
28+
MATH_OBJS += ./lib/wolfssl/wolfcrypt/src/sp_c32.o
29+
endif
30+
CFLAGS+=-mcpu=cortex-m3
31+
LDFLAGS+=-mcpu=cortex-m3
32+
else
33+
CFLAGS+=-mcpu=cortex-m3 -fomit-frame-pointer
34+
LDFLAGS+=-mcpu=cortex-m3
35+
ifeq ($(SPMATH),1)
36+
CFLAGS+=-DWOLFSSL_SP_ASM -DWOLFSSL_SP_ARM_CORTEX_M_ASM
37+
MATH_OBJS += ./lib/wolfssl/wolfcrypt/src/sp_cortexm.o
38+
endif
39+
endif
40+
endif
41+
endif
42+
43+
## RISCV
44+
ifeq ($(ARCH),RISCV)
45+
CROSS_COMPILE:=riscv32-unknown-elf-
46+
CFLAGS+=-fno-builtin-printf -DUSE_PLIC -DUSE_M_TIME -g -march=rv32imac -mabi=ilp32 -mcmodel=medany -nostartfiles -DARCH_RISCV
47+
LDFLAGS+=-march=rv32imac -mabi=ilp32 -mcmodel=medany
48+
OBJS+=src/boot_riscv.o src/vector_riscv.o
49+
ARCH_FLASH_OFFSET=0x20400000
50+
endif
51+
52+
## Toolchain setup
53+
CC=$(CROSS_COMPILE)gcc
54+
LD=$(CROSS_COMPILE)gcc
55+
AS=$(CROSS_COMPILE)gcc
56+
OBJCOPY:=$(CROSS_COMPILE)objcopy
57+
SIZE:=$(CROSS_COMPILE)size
58+
BOOT_IMG?=test-app/image.bin
59+
60+
## Target specific configuration
61+
ifeq ($(TARGET),samr21)
62+
CORTEX_M0=1
63+
endif
64+
65+
ifeq ($(TARGET),kinetis)
66+
CFLAGS+= -I$(KINETIS_DRIVERS)/drivers -I$(KINETIS_DRIVERS) -DCPU_$(KINETIS_CPU) -I$(KINETIS_CMSIS)/Include -DDEBUG_CONSOLE_ASSERT_DISABLE=1
67+
OBJS+= $(KINETIS_DRIVERS)/drivers/fsl_clock.o $(KINETIS_DRIVERS)/drivers/fsl_ftfx_flash.o $(KINETIS_DRIVERS)/drivers/fsl_ftfx_cache.o $(KINETIS_DRIVERS)/drivers/fsl_ftfx_controller.o
68+
## The following lines can be used to enable HW acceleration
69+
##ifeq ($(KINETIS_CPU),MK82FN256VLL15)
70+
## ECC_EXTRA_CFLAGS+=-DFREESCALE_LTC_ECC -DFREESCALE_USE_LTC
71+
## ECC_EXTRA_OBJS+=./lib/wolfssl/wolfcrypt/src/port/nxp/ksdk_port.o $(KINETIS_DRIVERS)/drivers/fsl_ltc.o
72+
##endif
73+
endif

0 commit comments

Comments
 (0)