141 lines
4.0 KiB
Makefile
141 lines
4.0 KiB
Makefile
# Makefile for wolfCrypt SRAM PUF bare-metal example
|
|
#
|
|
# Target: Cortex-M (tested on NUCLEO-H563ZI)
|
|
# Usage: make - build puf_example.elf and puf_example.hex
|
|
# make clean - remove build artifacts
|
|
# make PUF_TEST=0 - build for real hardware SRAM (no test mode)
|
|
#
|
|
# Copyright (C) 2006-2026 wolfSSL Inc.
|
|
|
|
# Toolchain
|
|
TOOLCHAIN ?= arm-none-eabi-
|
|
CC = $(TOOLCHAIN)gcc
|
|
LD = $(TOOLCHAIN)gcc
|
|
AR = $(TOOLCHAIN)ar
|
|
OBJCOPY = $(TOOLCHAIN)objcopy
|
|
OBJDUMP = $(TOOLCHAIN)objdump
|
|
SIZE = $(TOOLCHAIN)size
|
|
NM = $(TOOLCHAIN)nm
|
|
|
|
# wolfSSL root (relative to this directory)
|
|
WOLFSSL_ROOT ?= ../../wolfssl
|
|
|
|
# Build output. Each configuration gets its own directory so switching
|
|
# INTERACTIVE / PUF_TEST between invocations can never relink stale objects
|
|
# from the previous configuration (the default build stays in ./Build).
|
|
BIN = puf_example
|
|
|
|
# PUF test mode (default on): synthetic SRAM data for testing without hardware.
|
|
# Set PUF_TEST=0 to build for real hardware SRAM.
|
|
PUF_TEST ?= 1
|
|
|
|
# Set INTERACTIVE=1 to build the UART menu demo (main_interactive.c) instead of
|
|
# the one-shot example. It captures the real power-on SRAM and then replays it
|
|
# through wc_PufSetTestData so a known number of bit flips can be injected, so
|
|
# it needs the test hooks compiled in: PUF_TEST is forced on (override beats a
|
|
# contradictory PUF_TEST=0 on the command line). Requires wolfSSL master (the
|
|
# demo uses PUF APIs added after v5.9.2; the build stops with a clear #error
|
|
# on older trees).
|
|
INTERACTIVE ?= 0
|
|
ifeq ($(INTERACTIVE),1)
|
|
override PUF_TEST := 1
|
|
endif
|
|
|
|
# The interactive demo never writes derived keys to the UART by default (the
|
|
# console is unauthenticated). SHOW_KEYS=1 opts in for lab use.
|
|
SHOW_KEYS ?= 0
|
|
|
|
# Architecture
|
|
ARCHFLAGS = -mcpu=cortex-m33 -mthumb -mabi=aapcs
|
|
|
|
# Compiler flags
|
|
CFLAGS = $(ARCHFLAGS) -std=gnu99 -Wall -Os
|
|
CFLAGS += -ffunction-sections -fdata-sections -fno-builtin
|
|
CFLAGS += -DWOLFSSL_USER_SETTINGS
|
|
CFLAGS += -I. -I$(WOLFSSL_ROOT)
|
|
|
|
ifeq ($(PUF_TEST),1)
|
|
CFLAGS += -DWOLFSSL_PUF_TEST
|
|
endif
|
|
|
|
BUILD_SUFFIX =
|
|
ifeq ($(INTERACTIVE),1)
|
|
BUILD_SUFFIX := $(BUILD_SUFFIX)-interactive
|
|
ifeq ($(SHOW_KEYS),1)
|
|
CFLAGS += -DPUF_DEMO_SHOW_KEYS
|
|
BUILD_SUFFIX := $(BUILD_SUFFIX)-showkeys
|
|
endif
|
|
endif
|
|
ifeq ($(PUF_TEST),0)
|
|
BUILD_SUFFIX := $(BUILD_SUFFIX)-hw
|
|
endif
|
|
BUILD_DIR ?= ./Build$(BUILD_SUFFIX)
|
|
|
|
# Linker flags
|
|
LDFLAGS = $(ARCHFLAGS)
|
|
LDFLAGS += --specs=nosys.specs --specs=nano.specs
|
|
LDFLAGS += -Wl,--gc-sections
|
|
LDFLAGS += -Wl,-Map=$(BUILD_DIR)/$(BIN).map
|
|
LDFLAGS += -T./linker.ld
|
|
|
|
# Math lib
|
|
LIBS = -lm
|
|
|
|
# Source files
|
|
ifeq ($(INTERACTIVE),1)
|
|
SRC_C = main_interactive.c
|
|
else
|
|
SRC_C = main.c
|
|
endif
|
|
SRC_C += startup.c
|
|
SRC_C += stm32.c
|
|
|
|
# wolfCrypt sources needed for PUF
|
|
SRC_C += $(WOLFSSL_ROOT)/wolfcrypt/src/puf.c
|
|
SRC_C += $(WOLFSSL_ROOT)/wolfcrypt/src/sha256.c
|
|
SRC_C += $(WOLFSSL_ROOT)/wolfcrypt/src/kdf.c
|
|
SRC_C += $(WOLFSSL_ROOT)/wolfcrypt/src/hmac.c
|
|
SRC_C += $(WOLFSSL_ROOT)/wolfcrypt/src/hash.c
|
|
SRC_C += $(WOLFSSL_ROOT)/wolfcrypt/src/memory.c
|
|
SRC_C += $(WOLFSSL_ROOT)/wolfcrypt/src/wc_port.c
|
|
SRC_C += $(WOLFSSL_ROOT)/wolfcrypt/src/error.c
|
|
SRC_C += $(WOLFSSL_ROOT)/wolfcrypt/src/misc.c
|
|
SRC_C += $(WOLFSSL_ROOT)/wolfcrypt/src/logging.c
|
|
SRC_C += $(WOLFSSL_ROOT)/wolfcrypt/src/random.c
|
|
SRC_C += $(WOLFSSL_ROOT)/wolfcrypt/src/sp_int.c
|
|
SRC_C += $(WOLFSSL_ROOT)/wolfcrypt/src/sha3.c
|
|
|
|
# Object files
|
|
FILENAMES_C = $(notdir $(SRC_C))
|
|
OBJS_C = $(addprefix $(BUILD_DIR)/, $(FILENAMES_C:.c=.o))
|
|
vpath %.c $(dir $(SRC_C))
|
|
|
|
# Targets
|
|
.PHONY: all clean
|
|
|
|
all: $(BUILD_DIR) $(BUILD_DIR)/$(BIN).hex
|
|
@echo ""
|
|
$(SIZE) $(BUILD_DIR)/$(BIN).elf
|
|
|
|
$(BUILD_DIR):
|
|
mkdir -p $(BUILD_DIR)
|
|
|
|
$(BUILD_DIR)/%.o: %.c
|
|
@echo "Compiling: $(notdir $<)"
|
|
$(CC) $(CFLAGS) -c -o $@ $<
|
|
|
|
$(BUILD_DIR)/$(BIN).elf: $(OBJS_C)
|
|
@echo "Linking: $(notdir $@)"
|
|
$(LD) $(LDFLAGS) -o $@ $^ $(LIBS)
|
|
@echo ""
|
|
$(NM) -n $@ > $(BUILD_DIR)/$(BIN).sym
|
|
$(OBJDUMP) -S $@ > $(BUILD_DIR)/$(BIN).disasm
|
|
|
|
$(BUILD_DIR)/$(BIN).hex: $(BUILD_DIR)/$(BIN).elf
|
|
@echo "Generating HEX: $(notdir $@)"
|
|
$(OBJCOPY) -O ihex $< $@
|
|
|
|
clean:
|
|
rm -rf ./Build ./Build-interactive ./Build-interactive-showkeys ./Build-hw
|
|
$(MAKE) -C host_test clean
|