Skip to content

Commit ac6bfad

Browse files
authored
Merge pull request #156 from billphipps/support_wildcard_wolfcrypt
Makefile and minor code changes to unify builds for porting and testing
2 parents 3360a79 + 956632b commit ac6bfad

22 files changed

+553
-461
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,4 +31,4 @@ jobs:
3131

3232
# Benchmark with everything enabled
3333
- name: Benchmark All
34-
run: cd benchmark && make clean && make WOLFSSL_DIR=../wolfssl DMA=1 run
34+
run: cd benchmark && make clean && make WOLFSSL_DIR=../wolfssl DMA=1 && make run

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ jobs:
4848
run: |
4949
cd test
5050
make clean
51-
make -j CLIENT_ONLY_TCP=1 SHE=1 ASAN=1 WOLFSSL_DIR=../wolfssl run
51+
make -j CLIENT_ONLY_TCP=1 SHE=1 ASAN=1 WOLFSSL_DIR=../wolfssl && make run
5252
5353
# Optional: Kill the server process if it doesn't exit on its own
5454
- name: Cleanup POSIX TCP server

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

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -31,28 +31,28 @@ jobs:
3131

3232
# Build and test standard build
3333
- name: Build and test
34-
run: cd test && make clean && make -j WOLFSSL_DIR=../wolfssl run
34+
run: cd test && make clean && make -j WOLFSSL_DIR=../wolfssl && make run
3535

3636
# Build and test standard build, with DMA and ASAN enabled
3737
- name: Build and test DMA ASAN
38-
run: cd test && make clean && make -j DMA=1 ASAN=1 WOLFSSL_DIR=../wolfssl run
38+
run: cd test && make clean && make -j DMA=1 ASAN=1 WOLFSSL_DIR=../wolfssl && make run
3939

4040
# Build and test ASAN build, with wolfCrypt tests enabled.
4141
- name: Build and test ASAN TESTWOLFCRYPT
42-
run: cd test && make clean && make -j ASAN=1 TESTWOLFCRYPT=1 WOLFSSL_DIR=../wolfssl run
42+
run: cd test && make clean && make -j ASAN=1 TESTWOLFCRYPT=1 WOLFSSL_DIR=../wolfssl && make run
4343

4444
# Build and test ASAN build, with wolfCrypt tests enabled and using the DMA devId.
4545
- name: Build and test ASAN TESTWOLFCRYPT TESTWOLFCRYPT_DMA
46-
run: cd test && make clean && make -j ASAN=1 TESTWOLFCRYPT=1 TESTWOLFCRYPT_DMA=1 DMA=1 WOLFSSL_DIR=../wolfssl run
46+
run: cd test && make clean && make -j ASAN=1 TESTWOLFCRYPT=1 TESTWOLFCRYPT_DMA=1 DMA=1 WOLFSSL_DIR=../wolfssl && make run
4747

4848
# Build and test debug build with ASAN and NOCRYPTO
4949
- name: Build and test ASAN DEBUG NOCRYPTO
50-
run: cd test && make clean && make -j DEBUG=1 ASAN=1 NOCRYPTO=1 WOLFSSL_DIR=../wolfssl run
50+
run: cd test && make clean && make -j DEBUG=1 ASAN=1 NOCRYPTO=1 WOLFSSL_DIR=../wolfssl && make run
5151

5252
# Build and test debug build with ASAN and DMA
5353
- name: Build and test ASAN DEBUG DMA
54-
run: cd test && make clean && make -j DEBUG=1 ASAN=1 DMA=1 WOLFSSL_DIR=../wolfssl run
54+
run: cd test && make clean && make -j DEBUG=1 ASAN=1 DMA=1 WOLFSSL_DIR=../wolfssl && make run
5555

5656
# Build and test with SHE and ASAN
5757
- name: Build and test ASAN SHE
58-
run: cd test && make clean && make -j SHE=1 ASAN=1 WOLFSSL_DIR=../wolfssl run
58+
run: cd test && make clean && make -j SHE=1 ASAN=1 WOLFSSL_DIR=../wolfssl && make run

benchmark/Makefile

Lines changed: 105 additions & 145 deletions
Original file line numberDiff line numberDiff line change
@@ -1,192 +1,138 @@
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
105
BIN = 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
2835
DEF += -DWOLFHSM_CFG_TEST_POSIX
2936

30-
# Architecture
37+
# Architecture flags for assembler, C compiler and linker
3138
ARCHFLAGS ?=
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
4770
ifeq ($(DEBUG),1)
4871
DBGFLAGS = -ggdb -g3
4972
CFLAGS += $(DBGFLAGS)
5073
LDFLAGS += $(DBGFLAGS)
5174
endif
5275

76+
# Add address sanitizer option
77+
ifeq ($(ASAN),1)
78+
CFLAGS += -fsanitize=address
79+
LDFLAGS += -fsanitize=address
80+
endif
81+
82+
## wolfSSL defines
5383
ifeq ($(DEBUG_WOLFSSL),1)
54-
CFLAGS += -DDEBUG_WOLFSSL
55-
SRC_C += $(WOLFSSL_DIR)/wolfcrypt/src/logging.c
84+
DEF += -DDEBUG_WOLFSSL
5685
endif
5786

5887
ifeq ($(DEBUG_CRYPTOCB),1)
59-
CFLAGS += -DDEBUG_CRYPTOCB
88+
DEF += -DDEBUG_CRYPTOCB
6089
endif
6190

6291
ifeq ($(DEBUG_CRYPTOCB_VERBOSE),1)
63-
CFLAGS += -DDEBUG_CRYPTOCB -DDEBUG_CRYPTOCB_VERBOSE
92+
DEF += -DDEBUG_CRYPTOCB -DDEBUG_CRYPTOCB_VERBOSE
6493
endif
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
7397
ifeq ($(NOCRYPTO),1)
74-
CFLAGS += -DWOLFHSM_CFG_NO_CRYPTO
98+
DEF += -DWOLFHSM_CFG_NO_CRYPTO
7599
endif
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
80104
endif
81105

106+
# Support a SHE-capable build
82107
ifeq ($(SHE),1)
83-
CFLAGS += -DWOLFHSM_CFG_SHE_EXTENSION
108+
DEF += -DWOLFHSM_CFG_SHE_EXTENSION
84109
endif
85-
110+
## Source files
86111
# Assembly source files
87112
SRC_ASM +=
88113

89114
ifneq ($(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
118122
endif
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

191137
FILENAMES_C = $(notdir $(SRC_C))
192138
OBJS_C = $(addprefix $(BUILD_DIR)/, $(FILENAMES_C:.c=.o))
@@ -195,7 +141,10 @@ vpath %.c $(dir $(SRC_C))
195141
OBJS_ASM = $(addprefix $(BUILD_DIR)/, $(notdir $(SRC_ASM:.s=.o)))
196142
vpath %.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

200149
build_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

234183
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-
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

benchmark/config/user_settings.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,9 @@ extern "C" {
177177
#define XSTRCASECMP(s1,s2) strcmp((s1),(s2))
178178
*/
179179

180+
/* POSIX version of strcasecmp */
181+
#include <strings.h>
182+
180183
/* ------------------------------------------------------------------------- */
181184
/* Memory */
182185
/* ------------------------------------------------------------------------- */

0 commit comments

Comments
 (0)