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