33# Copyright 2025 wolfSSL Inc.
44
55CC = 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
3641STSELIB_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:
5257PLATFORM_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
6861WOLFSSL_TARGET = wolfssl_stsafe_test
6962WOLFSSL_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-
14588test-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
15295clean :
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
15699info :
@@ -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"
0 commit comments