Skip to content

Commit 1754d8a

Browse files
authored
Merge pull request #107 from bigbrett/wolfhsm-benchmarks
Add benchmark framework
2 parents 3f38041 + 9d03283 commit 1754d8a

28 files changed

+6470
-29
lines changed
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
name: Benchmark
2+
3+
on:
4+
push:
5+
branches: [ 'master', 'main', 'release/**' ]
6+
pull_request:
7+
branches: [ '*' ]
8+
9+
jobs:
10+
build:
11+
12+
runs-on: ubuntu-latest
13+
14+
steps:
15+
- uses: actions/checkout@v4
16+
17+
# List host CPU info
18+
- name: Host CPU info
19+
run: cat /proc/cpuinfo
20+
21+
# List compiler version
22+
- name: List compiler version
23+
run: gcc --version
24+
25+
# pull and build wolfssl
26+
- name: Checkout wolfssl
27+
uses: actions/checkout@v4
28+
with:
29+
repository: wolfssl/wolfssl
30+
path: wolfssl
31+
32+
# Benchmark with everything enabled
33+
- name: Benchmark All
34+
run: cd benchmark && make clean && make WOLFSSL_DIR=../wolfssl DMA=1 run

.github/workflows/build-and-test.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ jobs:
3232
# Build and test standard build
3333
- name: Build and test
3434
run: cd test && make clean && make WOLFSSL_DIR=../wolfssl run
35-
35+
3636
# Build and test standard build, with DMA and ASAN enabled
3737
- name: Build and test DMA ASAN
3838
run: cd test && make clean && make DMA=1 ASAN=1 WOLFSSL_DIR=../wolfssl run

benchmark/Makefile

Lines changed: 240 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,240 @@
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
8+
9+
# Project name
10+
BIN = wh_benchmark
11+
12+
# C standard to use (default to c90 if not specified)
13+
CSTD ?= c90
14+
15+
# Includes
16+
USER_SETTINGS_DIR ?= ./
17+
INC = -I$(WOLFHSM_DIR) \
18+
-I$(USER_SETTINGS_DIR) \
19+
-I$(WOLFSSL_DIR) \
20+
-I./settings \
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
28+
DEF += -DWOLFHSM_CFG_TEST_POSIX
29+
30+
# Architecture
31+
ARCHFLAGS ?=
32+
33+
# Compiler and linker flags
34+
ASFLAGS ?= $(ARCHFLAGS)
35+
CFLAGS_EXTRA ?= -Wmissing-field-initializers -Wmissing-braces
36+
CFLAGS ?= $(ARCHFLAGS) -std=$(CSTD) -D_GNU_SOURCE -Wall -Werror -Wno-cpp $(CFLAGS_EXTRA)
37+
LDFLAGS ?= $(ARCHFLAGS)
38+
39+
# Libc for printf
40+
LIBS = -lc
41+
42+
# Optimization level and place functions / data into separate sections to allow dead code removal
43+
CFLAGS += -ffunction-sections -fdata-sections
44+
45+
# Debugging
46+
# Check if DEBUG is set to 1 and append debug flags
47+
ifeq ($(DEBUG),1)
48+
DBGFLAGS = -ggdb -g3
49+
CFLAGS += $(DBGFLAGS)
50+
LDFLAGS += $(DBGFLAGS)
51+
endif
52+
53+
ifeq ($(DEBUG_WOLFSSL),1)
54+
CFLAGS += -DDEBUG_WOLFSSL
55+
SRC_C += $(WOLFSSL_DIR)/wolfcrypt/src/logging.c
56+
endif
57+
58+
ifeq ($(DEBUG_CRYPTOCB),1)
59+
CFLAGS += -DDEBUG_CRYPTOCB
60+
endif
61+
62+
ifeq ($(DEBUG_CRYPTOCB_VERBOSE),1)
63+
CFLAGS += -DDEBUG_CRYPTOCB -DDEBUG_CRYPTOCB_VERBOSE
64+
endif
65+
66+
# Add address sanitizer option
67+
ifeq ($(ASAN),1)
68+
CFLAGS += -fsanitize=address
69+
LDFLAGS += -fsanitize=address
70+
endif
71+
72+
# Support a NO CRYPTO build
73+
ifeq ($(NOCRYPTO),1)
74+
CFLAGS += -DWOLFHSM_CFG_NO_CRYPTO
75+
endif
76+
77+
# Support a DMA-capable build
78+
ifeq ($(DMA), 1)
79+
CFLAGS += -DWOLFHSM_CFG_DMA
80+
endif
81+
82+
ifeq ($(SHE),1)
83+
CFLAGS += -DWOLFHSM_CFG_SHE_EXTENSION
84+
endif
85+
86+
# Assembly source files
87+
SRC_ASM +=
88+
89+
ifneq ($(NOCRYPTO),1)
90+
# 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
112+
113+
# 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
118+
endif
119+
120+
121+
# 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
150+
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
157+
158+
endif
159+
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
190+
191+
FILENAMES_C = $(notdir $(SRC_C))
192+
OBJS_C = $(addprefix $(BUILD_DIR)/, $(FILENAMES_C:.c=.o))
193+
vpath %.c $(dir $(SRC_C))
194+
195+
OBJS_ASM = $(addprefix $(BUILD_DIR)/, $(notdir $(SRC_ASM:.s=.o)))
196+
vpath %.s $(dir $(SRC_ASM))
197+
198+
.PHONY: all clean run
199+
200+
build_app: $(BUILD_DIR) $(BUILD_DIR)/$(BIN).elf
201+
@echo Build complete.
202+
203+
build_hex: $(BUILD_DIR) $(BUILD_DIR)/$(BIN).hex
204+
@echo ""
205+
$(CMD_ECHO) $(SIZE) $(BUILD_DIR)/$(BIN).elf
206+
207+
build_static: $(BUILD_DIR) $(BUILD_DIR)/$(BIN).a
208+
@echo ""
209+
$(CMD_ECHO) $(SIZE) $(BUILD_DIR)/$(BIN).a
210+
211+
$(BUILD_DIR):
212+
$(CMD_ECHO) mkdir -p $(BUILD_DIR)
213+
214+
$(BUILD_DIR)/$(BIN).hex: $(BUILD_DIR)/$(BIN).elf
215+
@echo "Generating HEX binary: $(notdir $@)"
216+
$(CMD_ECHO) $(OBJCOPY) -O ihex $< $@
217+
218+
$(BUILD_DIR)/%.o: %.s
219+
@echo "Compiling ASM file: $(notdir $<)"
220+
$(CMD_ECHO) $(AS) $(ASFLAGS) $(DEF) $(INC) -c -o $@ $<
221+
222+
$(BUILD_DIR)/%.o: %.c
223+
@echo "Compiling C file: $(notdir $<)"
224+
$(CMD_ECHO) $(CC) $(CFLAGS) $(DEF) $(INC) -c -o $@ $<
225+
226+
$(BUILD_DIR)/$(BIN).elf: $(OBJS_ASM) $(OBJS_C)
227+
@echo "Linking ELF binary: $(notdir $@)"
228+
$(CMD_ECHO) $(CC) $(LDFLAGS) $(SRC_LD) -o $@ $^ $(LIBS)
229+
230+
$(BUILD_DIR)/$(BIN).a: $(OBJS_ASM) $(OBJS_C)
231+
@echo "Building static library: $(notdir $@)"
232+
$(CMD_ECHO) $(AR) -r $@ $^
233+
234+
clean:
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+

0 commit comments

Comments
 (0)