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
99SIGN? =ED25519
1010TARGET? =stm32f4
1111KINETIS? =$(HOME ) /src/FRDM-K64F
12+ KINETIS_CPU =MK64FN1M0VLL12
1213KINETIS_DRIVERS? =$(KINETIS ) /devices/MK64F12
1314KINETIS_CMSIS? =$(KINETIS ) /CMSIS
15+ FREEDOM_E_SDK? =$(HOME ) /src/freedom-e-sdk
1416DEBUG? =0
1517VTOR? =1
1618CORTEX_M0? =0
@@ -19,68 +21,65 @@ EXT_FLASH?=0
1921SPI_FLASH? =0
2022ALLOW_DOWNGRADE? =0
2123NVM_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
2433OBJS: = \
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
4351ifeq ($(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 )
4765else
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
5175endif
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-
8483ifeq ($(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
9291endif
9392
94-
9593ifeq ($(ALLOW_DOWNGRADE ) ,1)
9694 CFLAGS+ = -DALLOW_DOWNGRADE
9795endif
@@ -100,87 +98,79 @@ ifeq ($(NVM_FLASH_WRITEONCE),1)
10098 CFLAGS+ = -DNVM_FLASH_WRITEONCE
10199endif
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
127103ifeq ($(DEBUG ) ,1)
128104 CFLAGS+ =-O0 -g -ggdb3 -DDEBUG=1
129105else
130106 CFLAGS+ =-Os
131107endif
132108
109+ ifeq ($(V ) ,0)
110+ Q =@
111+ endif
112+
133113ifeq ($(VTOR ) ,0)
134114 CFLAGS+ =-DNO_VTOR
135115endif
136116
117+ ASFLAGS: =$(CFLAGS )
137118
138119all : factory.bin
139120
140-
141121wolfboot.bin : wolfboot.elf
142- $( OBJCOPY ) -O binary $^ $@
143- $(SIZE ) wolfboot.elf
122+ @echo " \t[BIN] $@ "
123+ $(Q )$( OBJCOPY ) -O binary $^ $@
144124
145125wolfboot.hex : wolfboot.elf
146- $(OBJCOPY ) -O ihex $^ $@
126+ @echo " \t[HEX] $@ "
127+ $(Q )$(OBJCOPY ) -O ihex $^ $@
147128
148129align : 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
155144test-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
158151include tools/test.mk
159152
160153tools/ed25519/ed25519_sign :
161- make -C tools/ed25519
154+ @ make -C tools/ed25519
162155
163156tools/ecc256/ecc256_sign :
164- make -C tools/ecc256
157+ @ make -C tools/ecc256
165158
166159ed25519.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
169162ecc256.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
172165factory.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
181171wolfboot.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
185175src/ed25519_pub_key.c : ed25519.der
186176
@@ -189,13 +179,23 @@ src/ecc256_pub_key.c: ecc256.der
189179keys : $(PRIVATE_KEY )
190180
191181clean :
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
195186distclean : 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
200200FORCE :
201201
0 commit comments