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
1415DEBUG? =0
@@ -19,68 +20,70 @@ EXT_FLASH?=0
1920SPI_FLASH? =0
2021ALLOW_DOWNGRADE? =0
2122NVM_FLASH_WRITEONCE? =0
22- LSCRIPT: =hal/$(TARGET ) .ld
23+ V? =0
24+
2325
26+
27+ # # Initializers
28+ CFLAGS: =-D__WOLFBOOT
29+ LSCRIPT: =hal/$(TARGET ) .ld
30+ LDFLAGS: =-T $(LSCRIPT ) -Wl,-gc-sections -Wl,-Map=wolfboot.map -ffreestanding -nostartfiles
2431OBJS: = \
2532./hal/$(TARGET ) .o \
2633./src/loader.o \
2734./src/string.o \
2835./src/crypto.o \
29- ./src/wolfboot.o \
3036./src/image.o \
3137./src/libwolfboot.o \
3238./lib/wolfssl/wolfcrypt/src/sha256.o \
3339./lib/wolfssl/wolfcrypt/src/hash.o \
3440./lib/wolfssl/wolfcrypt/src/wolfmath.o \
3541./lib/wolfssl/wolfcrypt/src/fe_low_mem.o
3642
37- # # Target specific configuration
38- ifeq ($(TARGET ) ,samr21)
39- CORTEX_M0 =1
43+ # # Architecture/CPU configuration
44+ include arch.mk
45+
46+
47+ # # DSA Settings
48+
49+ ifeq ($(FASTMATH ) ,1)
50+ MATH_OBJS: =./lib/wolfssl/wolfcrypt/src/integer.o
51+ CFLAGS+ =-DUSE_FAST_MATH
52+ else
53+ MATH_OBJS: =./lib/wolfssl/wolfcrypt/src/sp_int.o
4054endif
4155
42- # # Signature
4356ifeq ($(SIGN ) ,ECC256)
4457 KEYGEN_TOOL =tools/ecc256/ecc256_keygen
4558 SIGN_TOOL =tools/ecc256/ecc256_sign
4659 PRIVATE_KEY =ecc256.der
60+ OBJS+ = \
61+ $(MATH_OBJS ) \
62+ ./lib/wolfssl/wolfcrypt/src/ecc.o \
63+ ./lib/wolfssl/wolfcrypt/src/ge_low_mem.o \
64+ ./lib/wolfssl/wolfcrypt/src/memory.o \
65+ ./lib/wolfssl/wolfcrypt/src/wc_port.o \
66+ ./src/ecc256_pub_key.o \
67+ ./src/xmalloc.o
68+ CFLAGS+ =-DWOLFBOOT_SIGN_ECC256 -DXMALLOC_USER
4769else
4870 KEYGEN_TOOL =tools/ed25519/ed25519_keygen
4971 SIGN_TOOL =tools/ed25519/ed25519_sign
5072 PRIVATE_KEY =ed25519.der
73+ OBJS+ = ./lib/wolfssl/wolfcrypt/src/sha512.o \
74+ ./lib/wolfssl/wolfcrypt/src/ed25519.o \
75+ ./lib/wolfssl/wolfcrypt/src/ge_low_mem.o \
76+ ./src/ed25519_pub_key.o
77+ CFLAGS+ =-DWOLFBOOT_SIGN_ED25519 -nostdlib -DWOLFSSL_STATIC_MEMORY
78+ LDFLAGS+ =-nostdlib
5179endif
5280
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
6781
68- ifeq ($(FASTMATH ) ,1)
69- MATH_OBJS: =./lib/wolfssl/wolfcrypt/src/integer.o
70- CFLAGS+ =-DUSE_FAST_MATH
71- endif
72-
73- CFLAGS+ =-mthumb -Wall -Wextra -Wno-main -Wstack-usage=1024 -ffreestanding -Wno-unused \
74- -I. -Ilib/bootutil/include -Iinclude/ -Ilib/wolfssl -nostartfiles \
82+ CFLAGS+ =-Wall -Wextra -Wno-main -Wstack-usage=1024 -ffreestanding -Wno-unused \
83+ -I. -Iinclude/ -Ilib/wolfssl -nostartfiles \
7584 -DWOLFSSL_USER_SETTINGS \
76- -mthumb -mlittle-endian -mthumb-interwork \
7785 -DPLATFORM_$(TARGET )
7886
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-
8487ifeq ($(SPI_FLASH ) ,1)
8588 EXT_FLASH =1
8689 CFLAGS+ = -DSPI_FLASH=1
@@ -91,7 +94,6 @@ ifeq ($(EXT_FLASH),1)
9194 CFLAGS+ = -DEXT_FLASH=1 -DPART_UPDATE_EXT=1 -DPART_SWAP_EXT=1
9295endif
9396
94-
9597ifeq ($(ALLOW_DOWNGRADE ) ,1)
9698 CFLAGS+ = -DALLOW_DOWNGRADE
9799endif
@@ -100,87 +102,76 @@ ifeq ($(NVM_FLASH_WRITEONCE),1)
100102 CFLAGS+ = -DNVM_FLASH_WRITEONCE
101103endif
102104
103- LDFLAGS: =-T $(LSCRIPT ) -Wl,-gc-sections -Wl,-Map=wolfboot.map -ffreestanding -nostartfiles -mcpu=cortex-m3 -mthumb
104- ASFLAGS: =$(CFLAGS )
105105
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
126106
127107ifeq ($(DEBUG ) ,1)
128108 CFLAGS+ =-O0 -g -ggdb3 -DDEBUG=1
129109else
130110 CFLAGS+ =-Os
131111endif
132112
113+ ifeq ($(V ) ,0)
114+ Q =@
115+ endif
116+
133117ifeq ($(VTOR ) ,0)
134118 CFLAGS+ =-DNO_VTOR
135119endif
136120
121+ ASFLAGS: =$(CFLAGS )
137122
138123all : factory.bin
139124
140-
141125wolfboot.bin : wolfboot.elf
142- $( OBJCOPY ) -O binary $^ $@
143- $(SIZE ) wolfboot.elf
126+ @echo " \t[BIN] $@ "
127+ $(Q )$( OBJCOPY ) -O binary $^ $@
144128
145129wolfboot.hex : wolfboot.elf
146- $(OBJCOPY ) -O ihex $^ $@
130+ @echo " \t[HEX] $@ "
131+ $(Q )$(OBJCOPY ) -O ihex $^ $@
147132
148133align : wolfboot-align.bin
149134
150- wolfboot-align.bin : wolfboot.elf
151- $(OBJCOPY ) -O binary $^ $@ --pad-to=$(BOOT0_OFFSET ) --gap-fill=255
152- $(SIZE ) wolfboot.elf
153-
135+ wolfboot-align.bin : wolfboot.bin
136+ @cat include/target.h | grep WOLFBOOT_PARTITION_BOOT_ADDRESS | head -1 | sed -e " s/.*[ ]//g" > .wolfboot-offset
137+ @printf " %d" ` cat .wolfboot-offset` > .wolfboot-offset
138+ @printf " %d" $(ARCH_FLASH_OFFSET ) > .wolfboot-arch-offset
139+ @expr ` cat .wolfboot-offset` - ` cat .wolfboot-arch-offset` > .wolfboot-partition-size
140+ @dd if=/dev/zero bs=` cat .wolfboot-partition-size` count=1 2> /dev/null | tr " \000" " \377" > $(@ )
141+ @rm -f .wolfboot-partition-size .wolfboot-offset .wolfboot-arch-offset
142+ @dd if=$^ of=$(@ ) conv=notrunc 2> /dev/null
143+ @echo
144+ @echo " \t[SIZE]"
145+ @$(SIZE ) wolfboot.elf
146+ @echo
154147
155148test-app/image.bin :
156- make -C test-app TARGET=$(TARGET ) EXT_FLASH=$(EXT_FLASH ) SPI_FLASH=$(SPI_FLASH )
149+ @make -C test-app TARGET=$(TARGET ) EXT_FLASH=$(EXT_FLASH ) SPI_FLASH=$(SPI_FLASH ) ARCH=$(ARCH ) V=$(V )
150+ @rm -f src/* .o hal/* .o
157151
158152include tools/test.mk
159153
160154tools/ed25519/ed25519_sign :
161- make -C tools/ed25519
155+ @ make -C tools/ed25519
162156
163157tools/ecc256/ecc256_sign :
164- make -C tools/ecc256
158+ @ make -C tools/ecc256
165159
166160ed25519.der : tools/ed25519/ed25519_sign
167- tools/ed25519/ed25519_keygen src/ed25519_pub_key.c
161+ @ tools/ed25519/ed25519_keygen src/ed25519_pub_key.c
168162
169163ecc256.der : tools/ecc256/ecc256_sign
170- tools/ecc256/ecc256_keygen src/ecc256_pub_key.c
164+ @ tools/ecc256/ecc256_keygen src/ecc256_pub_key.c
171165
172166factory.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 > $@
167+ @echo " \t[SIGN] $( BOOT_IMG) "
168+ $(Q )$(SIGN_TOOL ) $(BOOT_IMG ) $(PRIVATE_KEY ) 1 > /dev/null
169+ @echo " \t[MERGE] $@ "
170+ @cat wolfboot-align.bin $(BOOT_IMG ) .v1.signed > $@
180171
181172wolfboot.elf : $(OBJS ) $(LSCRIPT )
182- grep stat $( OBJS )
183- $(LD ) $(LDFLAGS ) -Wl,--start-group $(OBJS ) -Wl,--end-group -o $@
173+ @echo " \t[LD] $@ "
174+ $(Q )$( LD ) $(LDFLAGS ) -Wl,--start-group $(OBJS ) -Wl,--end-group -o $@
184175
185176src/ed25519_pub_key.c : ed25519.der
186177
@@ -189,13 +180,23 @@ src/ecc256_pub_key.c: ecc256.der
189180keys : $(PRIVATE_KEY )
190181
191182clean :
192- rm -f * .bin * .elf $(OBJS ) wolfboot.map * .bin * .hex hal/* .o
193- make -C test-app clean
183+ @find . -type f -name " *.o" | xargs -x rm -f
184+ @rm -f * .bin * .elf wolfboot.map * .bin * .hex
185+ @make -C test-app clean
194186
195187distclean : 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
188+ @make -C tools/ed25519 clean
189+ @make -C tools/ecc256 clean
190+ @rm -f * .pem * .der tags ./src/ed25519_pub_key.c ./src/ecc256_pub_key.c
191+
192+
193+ % .o :% .c
194+ @echo " \t[CC-$( ARCH) ] $@ "
195+ $(Q )$(CC ) $(CFLAGS ) -c -o $@ $^
196+
197+ % .o :% .S
198+ @echo " \t[AS-$( ARCH) ] $@ "
199+ $(Q )$(CC ) $(CFLAGS ) -c -o $@ $^
199200
200201FORCE :
201202
0 commit comments