Skip to content

Commit de26517

Browse files
committed
Improvements to Makefile and examples
1 parent 1f0076d commit de26517

4 files changed

Lines changed: 42 additions & 96 deletions

File tree

stsafe/Makefile

Lines changed: 35 additions & 93 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
# Copyright 2025 wolfSSL Inc.
44

55
CC = gcc
6-
CFLAGS = -Wall -Wextra -O2 -g
6+
CFLAGS = -Wall -Wextra -O0 -g -Wno-strict-prototypes -DWOLFSSL_USER_SETTINGS
77

88
# wolfSSL configuration
99
# Option 1: Use installed wolfSSL (after make install)
@@ -22,15 +22,20 @@ INCLUDES = -I. \
2222
-I$(PLATFORM_DIR) \
2323
-I$(WOLFSSL_DIR)
2424

25-
# wolfSSL library flags
26-
# For installed wolfSSL:
27-
#LDFLAGS = -L$(WOLFSSL_DIR)/lib -lwolfssl -lm
28-
# For local wolfSSL source (using .libs):
29-
LDFLAGS = -L$(WOLFSSL_DIR)/src/.libs -lwolfssl -lm -Wl,-rpath,$(WOLFSSL_DIR)/src/.libs
25+
# Build directory for artifacts
26+
BUILD_DIR = build
3027

31-
# wolfSSL compile flags
32-
# WOLFSSL_USER_SETTINGS tells wolfSSL to include user_settings.h
33-
CFLAGS += -DWOLFSSL_USER_SETTINGS
28+
# wolfSSL source files - build directly from source
29+
WOLFSSL_SRC = $(wildcard $(WOLFSSL_DIR)/src/*.c)
30+
WOLFSSL_CRYPT_SRC = $(wildcard $(WOLFSSL_DIR)/wolfcrypt/src/*.c)
31+
WOLFSSL_PORT_SRC = $(WOLFSSL_DIR)/wolfcrypt/src/port/st/stsafe.c
32+
WOLFSSL_ALL_SRC = $(WOLFSSL_SRC) $(WOLFSSL_CRYPT_SRC) $(WOLFSSL_PORT_SRC)
33+
34+
# wolfSSL static library
35+
WOLFSSL_LIB = $(BUILD_DIR)/libwolfssl.a
36+
37+
# Additional linker flags
38+
LDFLAGS = -L$(BUILD_DIR) -lwolfssl -lm
3439

3540
# STSELib source files
3641
STSELIB_CORE_SRC = $(STSELIB_DIR)/core/stse_device.c \
@@ -51,106 +56,44 @@ PLATFORM_SRC = $(PLATFORM_DIR)/stse_platform_linux.c
5156
# Uncomment when building with wolfSSL crypto support:
5257
PLATFORM_CRYPTO_SRC = $(PLATFORM_DIR)/stse_platform_crypto_wolfssl.c
5358

54-
# Test source files
55-
TEST_SRC = stsafe_test.c
56-
WOLFSSL_TEST_SRC = wolfssl_stsafe_test.c
57-
WOLFSSL_FULL_TEST_SRC = wolfssl_stsafe_full_test.c
58-
59-
# All sources
60-
ALL_SRC = $(STSELIB_CORE_SRC) $(STSELIB_API_SRC) $(STSELIB_SERVICES_SRC) \
61-
$(STSELIB_CERT_SRC) $(PLATFORM_SRC) $(PLATFORM_CRYPTO_SRC) $(TEST_SRC)
62-
63-
# wolfSSL STSAFE port source
64-
WOLFSSL_STSAFE_SRC = $(WOLFSSL_DIR)/wolfcrypt/src/port/st/stsafe.c
65-
6659
# Targets
67-
TARGET = stsafe_test
60+
STSAFE_TARGET = stsafe_test
6861
WOLFSSL_TARGET = wolfssl_stsafe_test
6962
WOLFSSL_FULL_TARGET = wolfssl_stsafe_full_test
63+
ALL_TARGETS = $(STSAFE_TARGET) $(WOLFSSL_TARGET) $(WOLFSSL_FULL_TARGET)
7064

71-
.PHONY: all clean test test-all info basic wolfssl wolfssl-full
65+
.PHONY: all clean test-all info
7266

73-
all: $(TARGET) wolfssl wolfssl-full
67+
all: $(WOLFSSL_LIB) $(ALL_TARGETS)
7468

75-
# Full build with wolfSSL crypto support
76-
$(TARGET): $(TEST_SRC) $(PLATFORM_SRC) $(PLATFORM_CRYPTO_SRC)
77-
$(CC) $(CFLAGS) $(INCLUDES) -o $@ \
78-
$(TEST_SRC) \
79-
$(PLATFORM_SRC) \
80-
$(PLATFORM_CRYPTO_SRC) \
81-
$(STSELIB_CORE_SRC) \
82-
$(STSELIB_API_SRC) \
83-
$(STSELIB_SERVICES_SRC) \
84-
$(STSELIB_CERT_SRC) \
85-
$(LDFLAGS)
69+
# Create build directory
70+
$(BUILD_DIR):
71+
mkdir -p $(BUILD_DIR)
8672

87-
# Basic build without wolfSSL (for initial testing without host sessions)
88-
basic: $(TEST_SRC) $(PLATFORM_SRC)
89-
$(CC) $(CFLAGS) $(INCLUDES) -o $(TARGET) \
90-
$(TEST_SRC) \
91-
$(PLATFORM_SRC) \
92-
$(STSELIB_CORE_SRC) \
93-
$(STSELIB_API_SRC) \
94-
$(STSELIB_SERVICES_SRC) \
95-
$(STSELIB_CERT_SRC)
96-
97-
# wolfSSL crypto callback test build
98-
# Note: We compile stsafe.c directly since it's not built into libwolfssl by default
99-
WOLFSSL_STSAFE_FLAGS = -DWOLFSSL_USER_SETTINGS -Wno-strict-prototypes
100-
WOLFSSL_BASE_FLAGS = -Wall -Wextra -O2 -g
101-
wolfssl: $(WOLFSSL_TEST_SRC) $(PLATFORM_SRC) $(PLATFORM_CRYPTO_SRC)
102-
$(CC) $(WOLFSSL_BASE_FLAGS) $(WOLFSSL_STSAFE_FLAGS) -I. -I$(STSELIB_DIR) -I$(PLATFORM_DIR) -I$(WOLFSSL_DIR) \
103-
-c $(WOLFSSL_STSAFE_SRC) -o stsafe.o
104-
$(CC) $(WOLFSSL_BASE_FLAGS) $(WOLFSSL_STSAFE_FLAGS) -I. -I$(STSELIB_DIR) -I$(PLATFORM_DIR) -I$(WOLFSSL_DIR) \
105-
-c $(PLATFORM_SRC) -o stse_platform_linux.o
106-
$(CC) $(WOLFSSL_BASE_FLAGS) $(WOLFSSL_STSAFE_FLAGS) -I. -I$(STSELIB_DIR) -I$(PLATFORM_DIR) -I$(WOLFSSL_DIR) \
107-
-c $(PLATFORM_CRYPTO_SRC) -o stse_platform_crypto.o
108-
$(CC) $(WOLFSSL_BASE_FLAGS) $(WOLFSSL_STSAFE_FLAGS) -I. -I$(STSELIB_DIR) -I$(PLATFORM_DIR) -I$(WOLFSSL_DIR) \
109-
-o $(WOLFSSL_TARGET) \
110-
$(WOLFSSL_TEST_SRC) \
111-
stse_platform_linux.o stse_platform_crypto.o stsafe.o \
112-
$(STSELIB_CORE_SRC) \
113-
$(STSELIB_API_SRC) \
114-
$(STSELIB_SERVICES_SRC) \
115-
$(STSELIB_CERT_SRC) \
116-
$(LDFLAGS)
73+
# Build wolfSSL static library
74+
$(WOLFSSL_LIB): $(WOLFSSL_ALL_SRC) | $(BUILD_DIR)
75+
@echo "Building wolfSSL library..."
76+
$(CC) $(CFLAGS) $(INCLUDES) -c $(WOLFSSL_ALL_SRC)
77+
mv *.o $(BUILD_DIR)/
78+
ar rcs $@ $(BUILD_DIR)/*.o
79+
@echo "wolfSSL library built successfully"
11780

118-
test: $(TARGET)
119-
./$(TARGET)
120-
121-
test-wolfssl: wolfssl
122-
./$(WOLFSSL_TARGET)
123-
124-
# Full wolfSSL integration test with ECDH and benchmarks
125-
wolfssl-full: $(WOLFSSL_FULL_TEST_SRC) $(PLATFORM_SRC) $(PLATFORM_CRYPTO_SRC)
126-
$(CC) $(WOLFSSL_BASE_FLAGS) $(WOLFSSL_STSAFE_FLAGS) -I. -I$(STSELIB_DIR) -I$(PLATFORM_DIR) -I$(WOLFSSL_DIR) \
127-
-c $(WOLFSSL_STSAFE_SRC) -o stsafe.o
128-
$(CC) $(WOLFSSL_BASE_FLAGS) $(WOLFSSL_STSAFE_FLAGS) -I. -I$(STSELIB_DIR) -I$(PLATFORM_DIR) -I$(WOLFSSL_DIR) \
129-
-c $(PLATFORM_SRC) -o stse_platform_linux.o
130-
$(CC) $(WOLFSSL_BASE_FLAGS) $(WOLFSSL_STSAFE_FLAGS) -I. -I$(STSELIB_DIR) -I$(PLATFORM_DIR) -I$(WOLFSSL_DIR) \
131-
-c $(PLATFORM_CRYPTO_SRC) -o stse_platform_crypto.o
132-
$(CC) $(WOLFSSL_BASE_FLAGS) $(WOLFSSL_STSAFE_FLAGS) -I. -I$(STSELIB_DIR) -I$(PLATFORM_DIR) -I$(WOLFSSL_DIR) \
133-
-o $(WOLFSSL_FULL_TARGET) \
134-
$(WOLFSSL_FULL_TEST_SRC) \
135-
stse_platform_linux.o stse_platform_crypto.o stsafe.o \
136-
$(STSELIB_CORE_SRC) \
137-
$(STSELIB_API_SRC) \
138-
$(STSELIB_SERVICES_SRC) \
139-
$(STSELIB_CERT_SRC) \
81+
# Generic rule for all test targets - each target depends on its corresponding .c file
82+
$(ALL_TARGETS): %: %.c $(WOLFSSL_LIB)
83+
$(CC) $(CFLAGS) $(INCLUDES) -o $@ $< \
84+
$(PLATFORM_SRC) $(PLATFORM_CRYPTO_SRC) \
85+
$(STSELIB_CORE_SRC) $(STSELIB_API_SRC) $(STSELIB_SERVICES_SRC) $(STSELIB_CERT_SRC) \
14086
$(LDFLAGS)
14187

142-
test-wolfssl-full: wolfssl-full
143-
./$(WOLFSSL_FULL_TARGET)
144-
14588
test-all: all
146-
@echo "=== Running stsafe_test ===" && ./$(TARGET)
89+
@echo "=== Running stsafe_test ===" && ./$(STSAFE_TARGET)
14790
@echo ""
14891
@echo "=== Running wolfssl_stsafe_test ===" && ./$(WOLFSSL_TARGET)
14992
@echo ""
15093
@echo "=== Running wolfssl_stsafe_full_test ===" && ./$(WOLFSSL_FULL_TARGET)
15194

15295
clean:
153-
rm -f $(TARGET) $(WOLFSSL_TARGET) $(WOLFSSL_FULL_TARGET) *.o stsafe.o stse_platform_linux.o stse_platform_crypto.o
96+
rm -rf $(BUILD_DIR) $(ALL_TARGETS)
15497

15598
# Show configuration
15699
info:
@@ -163,6 +106,5 @@ info:
163106
@echo "Build targets:"
164107
@echo " make - Build all test executables"
165108
@echo " make test-all - Build and run all tests"
166-
@echo " make basic - Build without wolfSSL (basic tests only)"
167109
@echo " make clean - Clean build artifacts"
168110
@echo " make info - Show this configuration"

stsafe/user_settings.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@ extern "C" {
4242

4343
#define NO_OLD_TLS
4444

45+
#define WOLFSSL_IGNORE_FILE_WARN /* Ignore file warnings */
46+
4547
/* ------------------------------------------------------------------------- */
4648
/* Crypto Algorithms Required for STSAFE Platform */
4749
/* ------------------------------------------------------------------------- */
@@ -123,6 +125,7 @@ extern "C" {
123125
#define USE_STSAFE_RNG_SEED
124126

125127
/* Include STSELib header path set in Makefile */
128+
#define STSAFE_INTERFACE_PRINTF printf
126129

127130
#ifdef __cplusplus
128131
}

stsafe/wolfssl_stsafe_full_test.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
#include <sys/time.h>
3131

3232
/* wolfSSL headers */
33-
#include <wolfssl/options.h>
33+
#include "user_settings.h"
3434
#include <wolfssl/wolfcrypt/settings.h>
3535
#include <wolfssl/wolfcrypt/random.h>
3636
#include <wolfssl/wolfcrypt/ecc.h>

stsafe/wolfssl_stsafe_test.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,7 @@
2828
#include <stdint.h>
2929

3030
/* wolfSSL headers */
31-
/* Must include options.h to match libwolfssl build settings */
32-
#include <wolfssl/options.h>
31+
#include "user_settings.h"
3332
#include <wolfssl/wolfcrypt/settings.h>
3433
#include <wolfssl/wolfcrypt/random.h>
3534
#include <wolfssl/wolfcrypt/ecc.h>
@@ -824,6 +823,7 @@ static int test_ecdhe_keygen_p256(void)
824823
}
825824

826825
/* Generate ECDHE ephemeral key pair - should use STSAFE ECDHE via crypto callback */
826+
key.devCtx = (void*)STSAFE_KEY_SLOT_EPHEMERAL;
827827
ret = wc_ecc_make_key_ex(&rng, 32, &key, ECC_SECP256R1);
828828
if (ret != 0) {
829829
printf(" Error: wc_ecc_make_key_ex failed: %d\n", ret);
@@ -919,6 +919,7 @@ static int test_ecdhe_shared_secret_p256(void)
919919

920920
/* Generate hardware key pair (in STSAFE ephemeral slot via crypto callback) */
921921
printf(" Generating hardware key pair (STSAFE ephemeral slot via crypto callback)...\n");
922+
keyHW.devCtx = (void*)STSAFE_KEY_SLOT_EPHEMERAL;
922923
ret = wc_ecc_make_key_ex(&rng, 32, &keyHW, ECC_SECP256R1);
923924
if (ret != 0) {
924925
printf(" Error: wc_ecc_make_key_ex (HW) failed: %d\n", ret);

0 commit comments

Comments
 (0)