1- # Set to @ if you want to suppress command echo
2- CMD_ECHO =
3-
4- # Important directories
5- BUILD_DIR = ./Build
6- WOLFHSM_DIR = $(CURDIR ) /../
7- WOLFSSL_DIR ?= $(CURDIR ) /../../wolfssl
1+ # # Makefile for wolfHSM tests using POSIX port
82
9- # Project name
3+ # # Project name
4+ # Sets output filenames
105BIN = wh_benchmark
116
12- # C standard to use (default to c90 if not specified)
13- CSTD ?= c90
7+ # # Important directories
8+ # Base directory for additional project files
9+ PROJECT_DIR ?= .
10+ MODULES_DIR ?= $(PROJECT_DIR ) /bench_modules
11+ CONFIG_DIR ?= $(PROJECT_DIR ) /config
12+ # wolfSSL and wolfHSM directories
13+ WOLFSSL_DIR ?= ../../wolfssl
14+ WOLFHSM_DIR ?= ../../wolfHSM
15+ WOLFHSM_PORT_DIR ?= $(WOLFHSM_DIR ) /port/posix
16+
17+ # Output directory for build files
18+ BUILD_DIR ?= $(PROJECT_DIR ) /Build
1419
1520# Includes
16- USER_SETTINGS_DIR ?= ./
17- INC = -I$(WOLFHSM_DIR ) \
18- -I$(USER_SETTINGS_DIR ) \
19- -I$(WOLFSSL_DIR ) \
20- -I./config \
21- -I./bench_modules
22-
23- # Library configuration defines to use additional files.
24- DEF = -DWOLFSSL_USER_SETTINGS -DWOLFHSM_CFG
25-
26- # Test program configuration
27- # DEF += -DWOLFHSM_CFG_TEST_VERBOSE
21+ INC = -I$(PROJECT_DIR ) \
22+ -I$(CONFIG_DIR ) \
23+ -I$(MODULES_DIR ) \
24+ -I$(WOLFSSL_DIR ) \
25+ -I$(WOLFHSM_DIR ) \
26+ -I$(WOLFHSM_PORT_DIR )
27+
28+ # POSIX requires C source be defined before any header
29+ DEF += -D_POSIX_C_SOURCE=200809L
30+
31+ # Library configuration defines for user-supplied settings
32+ DEF += -DWOLFSSL_USER_SETTINGS -DWOLFHSM_CFG
33+
34+ # Ensure this build uses POSIX test features
2835DEF += -DWOLFHSM_CFG_TEST_POSIX
2936
30- # Architecture
37+ # Architecture flags for assembler, C compiler and linker
3138ARCHFLAGS ?=
3239
33- # Compiler and linker flags
34- ASFLAGS ?= $(ARCHFLAGS )
35- CFLAGS_EXTRA ?= -Wmissing-field-initializers -Wmissing-braces -Wextra
36- CFLAGS ?= $(ARCHFLAGS ) -std=$(CSTD ) -D_GNU_SOURCE -Wall -Werror -Wno-cpp $(CFLAGS_EXTRA )
37- LDFLAGS ?= $(ARCHFLAGS )
40+ # Enable extra C compiler warnings
41+ CFLAGS_EXTRA = -Werror -Wall -Wextra
42+ # Place functions / data into separate sections to allow unused code removal
43+ CFLAGS_EXTRA += -ffunction-sections -fdata-sections
3844
39- # Libc for printf
40- LIBS = -lc
45+ # C standard to use (default to c90 if not specified)
46+ CSTD ?= -std=c90
47+
48+ ASFLAGS ?= $(ARCHFLAGS )
49+ CFLAGS ?= $(ARCHFLAGS ) $(CSTD ) $(CFLAGS_EXTRA )
50+ LDFLAGS ?= $(ARCHFLAGS )
51+
52+ # Enable garbage collection. Inexact handling of dead_strip
53+ OS_NAME := $(shell uname -s | tr A-Z a-z)
54+ ifeq ($(OS_NAME ) ,darwin)
55+ LDFLAGS += -Wl,-dead_strip
56+ else
57+ LDFLAGS += -Wl,--gc-sections
58+ endif
4159
42- # Optimization level and place functions / data into separate sections to allow dead code removal
43- CFLAGS += -ffunction-sections -fdata-sections
60+ # LD: generate map
61+ # LDFLAGS += -Wl,-map,$(BUILD_DIR)/$(BIN).map
62+ # LDFLAGS += -Wl,-Map=$(BUILD_DIR)/$(BIN).map
63+
64+ # # Makefile options
65+
66+ # Set to @ if you want to suppress command echo
67+ CMD_ECHO ?=
4468
45- # Debugging
4669# Check if DEBUG is set to 1 and append debug flags
4770ifeq ($(DEBUG ) ,1)
4871DBGFLAGS = -ggdb -g3
4972CFLAGS += $(DBGFLAGS )
5073LDFLAGS += $(DBGFLAGS )
5174endif
5275
76+ # Add address sanitizer option
77+ ifeq ($(ASAN ) ,1)
78+ CFLAGS += -fsanitize=address
79+ LDFLAGS += -fsanitize=address
80+ endif
81+
82+ # # wolfSSL defines
5383ifeq ($(DEBUG_WOLFSSL ) ,1)
54- CFLAGS += -DDEBUG_WOLFSSL
55- SRC_C += $(WOLFSSL_DIR ) /wolfcrypt/src/logging.c
84+ DEF += -DDEBUG_WOLFSSL
5685endif
5786
5887ifeq ($(DEBUG_CRYPTOCB ) ,1)
59- CFLAGS += -DDEBUG_CRYPTOCB
88+ DEF += -DDEBUG_CRYPTOCB
6089endif
6190
6291ifeq ($(DEBUG_CRYPTOCB_VERBOSE ) ,1)
63- CFLAGS += -DDEBUG_CRYPTOCB -DDEBUG_CRYPTOCB_VERBOSE
92+ DEF += -DDEBUG_CRYPTOCB -DDEBUG_CRYPTOCB_VERBOSE
6493endif
6594
66- # Add address sanitizer option
67- ifeq ($(ASAN ) ,1)
68- CFLAGS += -fsanitize=address
69- LDFLAGS += -fsanitize=address
70- endif
7195
72- # Support a NO CRYPTO build
96+ # # wolfHSM defines
7397ifeq ($(NOCRYPTO ) ,1)
74- CFLAGS += -DWOLFHSM_CFG_NO_CRYPTO
98+ DEF += -DWOLFHSM_CFG_NO_CRYPTO
7599endif
76100
77101# Support a DMA-capable build
78- ifeq ($(DMA ) , 1)
79- CFLAGS += -DWOLFHSM_CFG_DMA
102+ ifeq ($(DMA ) ,1)
103+ DEF += -DWOLFHSM_CFG_DMA
80104endif
81105
106+ # Support a SHE-capable build
82107ifeq ($(SHE ) ,1)
83- CFLAGS += -DWOLFHSM_CFG_SHE_EXTENSION
108+ DEF += -DWOLFHSM_CFG_SHE_EXTENSION
84109endif
85-
110+ # # Source files
86111# Assembly source files
87112SRC_ASM +=
88113
89114ifneq ($(NOCRYPTO ) ,1)
90115# wolfCrypt source files
91- SRC_C += \
92- $(WOLFSSL_DIR ) /wolfcrypt/src/wc_port.c \
93- $(WOLFSSL_DIR ) /wolfcrypt/src/memory.c \
94- $(WOLFSSL_DIR ) /wolfcrypt/src/misc.c \
95- $(WOLFSSL_DIR ) /wolfcrypt/src/cryptocb.c \
96- $(WOLFSSL_DIR ) /wolfcrypt/src/random.c \
97- $(WOLFSSL_DIR ) /wolfcrypt/src/asn.c \
98- $(WOLFSSL_DIR ) /wolfcrypt/src/coding.c \
99- $(WOLFSSL_DIR ) /wolfcrypt/src/wolfmath.c \
100- $(WOLFSSL_DIR ) /wolfcrypt/src/tfm.c \
101- $(WOLFSSL_DIR ) /wolfcrypt/src/fe_operations.c \
102- $(WOLFSSL_DIR ) /wolfcrypt/src/rsa.c \
103- $(WOLFSSL_DIR ) /wolfcrypt/src/curve25519.c \
104- $(WOLFSSL_DIR ) /wolfcrypt/src/hash.c \
105- $(WOLFSSL_DIR ) /wolfcrypt/src/hmac.c \
106- $(WOLFSSL_DIR ) /wolfcrypt/src/sha256.c \
107- $(WOLFSSL_DIR ) /wolfcrypt/src/aes.c \
108- $(WOLFSSL_DIR ) /wolfcrypt/src/ecc.c \
109- $(WOLFSSL_DIR ) /wolfcrypt/src/cmac.c \
110- $(WOLFSSL_DIR ) /wolfcrypt/src/dilithium.c \
111- $(WOLFSSL_DIR ) /wolfcrypt/src/sha3.c
116+ SRC_C += $(wildcard $(WOLFSSL_DIR ) /wolfcrypt/src/* .c)
112117
113118# wolfSSL source files
114- SRC_C += \
115- $(WOLFSSL_DIR ) /src/ssl_certman.c \
116- $(WOLFSSL_DIR ) /src/ssl.c \
117- $(WOLFSSL_DIR ) /src/internal.c
119+ SRC_C += $(wildcard $(WOLFSSL_DIR ) /src/* .c)
120+
121+ # End of NOCRYPTO
118122endif
119123
120124
121125# wolfHSM source files
122- SRC_C += \
123- $(WOLFHSM_DIR ) /src/wh_utils.c \
124- $(WOLFHSM_DIR ) /src/wh_crypto.c \
125- $(WOLFHSM_DIR ) /src/wh_client.c \
126- $(WOLFHSM_DIR ) /src/wh_client_nvm.c \
127- $(WOLFHSM_DIR ) /src/wh_client_crypto.c \
128- $(WOLFHSM_DIR ) /src/wh_client_cryptocb.c \
129- $(WOLFHSM_DIR ) /src/wh_client_cert.c \
130- $(WOLFHSM_DIR ) /src/wh_server.c \
131- $(WOLFHSM_DIR ) /src/wh_server_customcb.c \
132- $(WOLFHSM_DIR ) /src/wh_server_dma.c \
133- $(WOLFHSM_DIR ) /src/wh_server_nvm.c \
134- $(WOLFHSM_DIR ) /src/wh_server_crypto.c \
135- $(WOLFHSM_DIR ) /src/wh_server_keystore.c \
136- $(WOLFHSM_DIR ) /src/wh_server_counter.c \
137- $(WOLFHSM_DIR ) /src/wh_server_cert.c \
138- $(WOLFHSM_DIR ) /src/wh_nvm.c \
139- $(WOLFHSM_DIR ) /src/wh_comm.c \
140- $(WOLFHSM_DIR ) /src/wh_message_comm.c \
141- $(WOLFHSM_DIR ) /src/wh_message_customcb.c \
142- $(WOLFHSM_DIR ) /src/wh_message_nvm.c \
143- $(WOLFHSM_DIR ) /src/wh_message_cert.c \
144- $(WOLFHSM_DIR ) /src/wh_message_crypto.c \
145- $(WOLFHSM_DIR ) /src/wh_message_keystore.c \
146- $(WOLFHSM_DIR ) /src/wh_message_counter.c \
147- $(WOLFHSM_DIR ) /src/wh_message_she.c \
148- $(WOLFHSM_DIR ) /src/wh_transport_mem.c \
149- $(WOLFHSM_DIR ) /src/wh_flash_ramsim.c
126+ SRC_C += $(wildcard $(WOLFHSM_DIR ) /src/* .c)
150127
151- ifeq ($(SHE ) ,1)
152- SRC_C += \
153- $(WOLFHSM_DIR ) /src/wh_client_she.c \
154- $(WOLFHSM_DIR ) /src/wh_server_she.c \
155- $(WOLFHSM_DIR ) /src/wh_she_common.c \
156- $(WOLFHSM_DIR ) /src/wh_she_crypto.c
128+ # wolfHSM port/HAL code
129+ SRC_C += $(wildcard $(WOLFHSM_PORT_DIR ) /* .c)
157130
158- endif
131+ # Project
132+ SRC_C += $(wildcard $(PROJECT_DIR ) /* .c)
133+ SRC_C += $(wildcard $(MODULES_DIR ) /* .c)
159134
160- # WolfHSM port/HAL code
161- SRC_C += \
162- $(WOLFHSM_DIR ) /src/wh_nvm_flash.c \
163- $(WOLFHSM_DIR ) /src/wh_flash_unit.c \
164- $(WOLFHSM_DIR ) /src/wh_flash_ramsim.c \
165- $(WOLFHSM_DIR ) /src/wh_transport_mem.c \
166- $(WOLFHSM_DIR ) /port/posix/posix_flash_file.c \
167- $(WOLFHSM_DIR ) /port/posix/posix_transport_tcp.c \
168- $(WOLFHSM_DIR ) /port/posix/posix_transport_shm.c
169-
170- # Benchmark drivers
171- SRC_C += \
172- ./src/wh_bench.c \
173- ./src/wh_bench_ops.c \
174- ./src/wh_bench_main.c \
175- ./src/wh_bench_data.c
176-
177- # Benchmark modules
178- SRC_C += \
179- ./bench_modules/wh_bench_mod_echo.c \
180- ./bench_modules/wh_bench_mod_rng.c \
181- ./bench_modules/wh_bench_mod_aes.c \
182- ./bench_modules/wh_bench_mod_cmac.c \
183- ./bench_modules/wh_bench_mod_hmac.c \
184- ./bench_modules/wh_bench_mod_sha2.c \
185- ./bench_modules/wh_bench_mod_sha3.c \
186- ./bench_modules/wh_bench_mod_ecc.c \
187- ./bench_modules/wh_bench_mod_rsa.c \
188- ./bench_modules/wh_bench_mod_curve25519.c \
189- ./bench_modules/wh_bench_mod_mldsa.c
135+ # # Automated processing below
190136
191137FILENAMES_C = $(notdir $(SRC_C ) )
192138OBJS_C = $(addprefix $(BUILD_DIR ) /, $(FILENAMES_C:.c=.o ) )
@@ -195,7 +141,10 @@ vpath %.c $(dir $(SRC_C))
195141OBJS_ASM = $(addprefix $(BUILD_DIR ) /, $(notdir $(SRC_ASM:.s=.o ) ) )
196142vpath % .s $(dir $(SRC_ASM ) )
197143
198- .PHONY : all clean run
144+
145+ # # Makefile Targets
146+
147+ .PHONY : build_app build_hex build_static clean run
199148
200149build_app : $(BUILD_DIR ) $(BUILD_DIR ) /$(BIN ) .elf
201150 @echo Build complete.
@@ -232,9 +181,20 @@ $(BUILD_DIR)/$(BIN).a: $(OBJS_ASM) $(OBJS_C)
232181 $(CMD_ECHO ) $(AR ) -r $@ $^
233182
234183clean :
235- rm -f $(BUILD_DIR ) /* .elf $(BUILD_DIR ) /* .hex $(BUILD_DIR ) /* .map
236- rm -f $(BUILD_DIR ) /* .o $(BUILD_DIR ) /* .a $(BUILD_DIR ) /* .sym $(BUILD_DIR ) /* .disasm
237-
238- run : build_app
239- ./$(BUILD_DIR ) /$(BIN ) .elf
240-
184+ @echo " Cleaning build files"
185+ @rm -f \
186+ $(BUILD_DIR ) /* .elf \
187+ $(BUILD_DIR ) /* .hex \
188+ $(BUILD_DIR ) /* .map \
189+ $(BUILD_DIR ) /* .o \
190+ $(BUILD_DIR ) /* .a \
191+ $(BUILD_DIR ) /* .sym \
192+ $(BUILD_DIR ) /* .disasm
193+
194+ # No prereq's here to stop from rebuilding with different options
195+ run :
196+ ifeq (,$(wildcard $(BUILD_DIR ) /$(BIN ) .elf) )
197+ $(error $(BUILD_DIR)/$(BIN).elf not found. Try: make)
198+ else
199+ $(BUILD_DIR)/$(BIN).elf
200+ endif
0 commit comments