diff --git a/Makefile b/Makefile index 36190591..df1cbd10 100644 --- a/Makefile +++ b/Makefile @@ -163,8 +163,9 @@ $(PRIVATE_KEY): $(Q)(test $(SIGN) = NONE) && (echo "// SIGN=NONE" > src/keystore.c) || true keytools: + @echo "Building key tools" @$(MAKE) -C tools/keytools -s clean - @$(MAKE) -C tools/keytools + @$(MAKE) -C tools/keytools -j test-app/image_v1_signed.bin: $(BOOT_IMG) @echo "\t[SIGN] $(BOOT_IMG)" diff --git a/tools/keytools/Makefile b/tools/keytools/Makefile index 16f1568e..c8244066 100644 --- a/tools/keytools/Makefile +++ b/tools/keytools/Makefile @@ -8,10 +8,13 @@ ifeq ($(V),0) endif CC = gcc +LD = gcc WOLFBOOTDIR = ../.. -WOLFDIR = $(WOLFBOOTDIR)/lib/wolfssl/ +WOLFDIR = $(WOLFBOOTDIR)/lib/wolfssl CFLAGS = -Wall -Wextra -Werror CFLAGS += -I. -DWOLFSSL_USER_SETTINGS -I$(WOLFDIR) -I$(WOLFBOOTDIR)/include -DWOLFBOOT_KEYTOOLS +LDFLAGS = +OBJDIR = ./ # option variables DEBUG_FLAGS = -g -DDEBUG -DDEBUG_SIGNTOOL -DDEBUG_WOLFSSL -DDEBUG_WOLFSSL_VERBOSE -fsanitize=address @@ -35,33 +38,40 @@ else ifeq ($(RENESAS_KEY),2) endif # Sources -SRC=$(WOLFDIR)wolfcrypt/src/asn.c \ - $(WOLFDIR)wolfcrypt/src/aes.c \ - $(WOLFDIR)wolfcrypt/src/ecc.c \ - $(WOLFDIR)wolfcrypt/src/coding.c \ - $(WOLFDIR)wolfcrypt/src/chacha.c \ - $(WOLFDIR)wolfcrypt/src/ed25519.c \ - $(WOLFDIR)wolfcrypt/src/ed448.c \ - $(WOLFDIR)wolfcrypt/src/fe_operations.c \ - $(WOLFDIR)wolfcrypt/src/ge_operations.c \ - $(WOLFDIR)wolfcrypt/src/fe_448.c \ - $(WOLFDIR)wolfcrypt/src/ge_448.c \ - $(WOLFDIR)wolfcrypt/src/hash.c \ - $(WOLFDIR)wolfcrypt/src/logging.c \ - $(WOLFDIR)wolfcrypt/src/memory.c \ - $(WOLFDIR)wolfcrypt/src/random.c \ - $(WOLFDIR)wolfcrypt/src/rsa.c \ - $(WOLFDIR)wolfcrypt/src/sp_int.c \ - $(WOLFDIR)wolfcrypt/src/sp_c32.c \ - $(WOLFDIR)wolfcrypt/src/sp_c64.c \ - $(WOLFDIR)wolfcrypt/src/sha3.c \ - $(WOLFDIR)wolfcrypt/src/sha256.c \ - $(WOLFDIR)wolfcrypt/src/sha512.c \ - $(WOLFDIR)wolfcrypt/src/tfm.c \ - $(WOLFDIR)wolfcrypt/src/wc_port.c \ - $(WOLFDIR)wolfcrypt/src/wolfmath.c +OBJS_REAL=\ + $(WOLFDIR)/wolfcrypt/src/asn.o \ + $(WOLFDIR)/wolfcrypt/src/aes.o \ + $(WOLFDIR)/wolfcrypt/src/ecc.o \ + $(WOLFDIR)/wolfcrypt/src/coding.o \ + $(WOLFDIR)/wolfcrypt/src/chacha.o \ + $(WOLFDIR)/wolfcrypt/src/ed25519.o \ + $(WOLFDIR)/wolfcrypt/src/ed448.o \ + $(WOLFDIR)/wolfcrypt/src/fe_operations.o \ + $(WOLFDIR)/wolfcrypt/src/ge_operations.o \ + $(WOLFDIR)/wolfcrypt/src/fe_448.o \ + $(WOLFDIR)/wolfcrypt/src/ge_448.o \ + $(WOLFDIR)/wolfcrypt/src/hash.o \ + $(WOLFDIR)/wolfcrypt/src/logging.o \ + $(WOLFDIR)/wolfcrypt/src/memory.o \ + $(WOLFDIR)/wolfcrypt/src/random.o \ + $(WOLFDIR)/wolfcrypt/src/rsa.o \ + $(WOLFDIR)/wolfcrypt/src/sp_int.o \ + $(WOLFDIR)/wolfcrypt/src/sp_c32.o \ + $(WOLFDIR)/wolfcrypt/src/sp_c64.o \ + $(WOLFDIR)/wolfcrypt/src/sha3.o \ + $(WOLFDIR)/wolfcrypt/src/sha256.o \ + $(WOLFDIR)/wolfcrypt/src/sha512.o \ + $(WOLFDIR)/wolfcrypt/src/tfm.o \ + $(WOLFDIR)/wolfcrypt/src/wc_port.o \ + $(WOLFDIR)/wolfcrypt/src/wolfmath.o -SRC+=$(WOLFBOOTDIR)/src/delta.c +OBJS_REAL+=\ + $(WOLFBOOTDIR)/src/delta.o + +OBJS_VIRT=$(addprefix $(OBJDIR), $(notdir $(OBJS_REAL))) +vpath %.c $(WOLFDIR)/wolfcrypt/src/ +vpath %.c $(WOLFBOOTDIR)/src/ +vpath %.c ./ .PHONY: clean all @@ -84,14 +94,22 @@ $(WOLFBOOTDIR)/include/target.h: $(WOLFBOOTDIR)/include/target.h.in sed -e "s/@WOLFBOOT_LOAD_DTS_ADDRESS@/$(WOLFBOOT_LOAD_DTS_ADDRESS)/g" \ > $@ -# build template -sign: - @echo "Building signing tool" - $(Q)$(CC) -o $@ $@.c $(SRC) $< $(CFLAGS) +# build objects +$(OBJDIR)/%.o: %.c + $(Q)$(CC) $(CFLAGS) -c -o $@ $< +$(OBJDIR)/%.o: $(WOLFBOOTDIR)/src/%.c + $(Q)$(CC) $(CFLAGS) -c -o $@ $< +$(OBJDIR)/%.o: $(WOLFDIR)/wolfcrypt/src/%.c + $(Q)$(CC) $(CFLAGS) -c -o $@ $< -keygen: +# build templates +sign: $(OBJS_VIRT) sign.o + @echo "Building signing tool" + $(Q)$(LD) -o $@ $@.o $(OBJS_VIRT) $(LDFLAGS) + +keygen: $(OBJS_VIRT) keygen.o @echo "Building keygen tool" - $(Q)$(CC) -o $@ $@.c $(SRC) $< $(CFLAGS) + $(Q)$(LD) -o $@ $@.o $(OBJS_VIRT) $(LDFLAGS) clean: - rm -f sign keygen + rm -f sign keygen *.o