wolfssl-examples/stsafe/Makefile

169 lines
5.9 KiB
Makefile

# STSAFE-A120 Test Makefile for Raspberry Pi
#
# Copyright 2025 wolfSSL Inc.
CC = gcc
CFLAGS = -Wall -Wextra -O2 -g
# wolfSSL configuration
# Option 1: Use installed wolfSSL (after make install)
#WOLFSSL_DIR = /usr/local
# Option 2: Use local wolfSSL source
WOLFSSL_DIR = $(HOME)/wolfssl
# STSELib paths
STSELIB_DIR = $(HOME)/STSELib
PLATFORM_DIR = ./platform
# Include paths
# Note: Current directory (.) must come first so our user_settings.h is found
INCLUDES = -I. \
-I$(STSELIB_DIR) \
-I$(PLATFORM_DIR) \
-I$(WOLFSSL_DIR)
# wolfSSL library flags
# For installed wolfSSL:
#LDFLAGS = -L$(WOLFSSL_DIR)/lib -lwolfssl -lm
# For local wolfSSL source (using .libs):
LDFLAGS = -L$(WOLFSSL_DIR)/src/.libs -lwolfssl -lm -Wl,-rpath,$(WOLFSSL_DIR)/src/.libs
# wolfSSL compile flags
# WOLFSSL_USER_SETTINGS tells wolfSSL to include user_settings.h
CFLAGS += -DWOLFSSL_USER_SETTINGS
# STSELib source files
STSELIB_CORE_SRC = $(STSELIB_DIR)/core/stse_device.c \
$(STSELIB_DIR)/core/stse_frame.c \
$(STSELIB_DIR)/core/stse_generic_typedef.c \
$(STSELIB_DIR)/core/stse_platform.c \
$(STSELIB_DIR)/core/stse_session.c
STSELIB_API_SRC = $(wildcard $(STSELIB_DIR)/api/*.c)
STSELIB_SERVICES_SRC = $(wildcard $(STSELIB_DIR)/services/stsafea/*.c) \
$(wildcard $(STSELIB_DIR)/services/stsafel/*.c)
STSELIB_CERT_SRC = $(wildcard $(STSELIB_DIR)/certificate/*.c)
# Platform source files
PLATFORM_SRC = $(PLATFORM_DIR)/stse_platform_linux.c
# Platform crypto source (wolfSSL implementation)
# Uncomment when building with wolfSSL crypto support:
PLATFORM_CRYPTO_SRC = $(PLATFORM_DIR)/stse_platform_crypto_wolfssl.c
# Test source files
TEST_SRC = stsafe_test.c
WOLFSSL_TEST_SRC = wolfssl_stsafe_test.c
WOLFSSL_FULL_TEST_SRC = wolfssl_stsafe_full_test.c
# All sources
ALL_SRC = $(STSELIB_CORE_SRC) $(STSELIB_API_SRC) $(STSELIB_SERVICES_SRC) \
$(STSELIB_CERT_SRC) $(PLATFORM_SRC) $(PLATFORM_CRYPTO_SRC) $(TEST_SRC)
# wolfSSL STSAFE port source
WOLFSSL_STSAFE_SRC = $(WOLFSSL_DIR)/wolfcrypt/src/port/st/stsafe.c
# Targets
TARGET = stsafe_test
WOLFSSL_TARGET = wolfssl_stsafe_test
WOLFSSL_FULL_TARGET = wolfssl_stsafe_full_test
.PHONY: all clean test test-all info basic wolfssl wolfssl-full
all: $(TARGET) wolfssl wolfssl-full
# Full build with wolfSSL crypto support
$(TARGET): $(TEST_SRC) $(PLATFORM_SRC) $(PLATFORM_CRYPTO_SRC)
$(CC) $(CFLAGS) $(INCLUDES) -o $@ \
$(TEST_SRC) \
$(PLATFORM_SRC) \
$(PLATFORM_CRYPTO_SRC) \
$(STSELIB_CORE_SRC) \
$(STSELIB_API_SRC) \
$(STSELIB_SERVICES_SRC) \
$(STSELIB_CERT_SRC) \
$(LDFLAGS)
# Basic build without wolfSSL (for initial testing without host sessions)
basic: $(TEST_SRC) $(PLATFORM_SRC)
$(CC) $(CFLAGS) $(INCLUDES) -o $(TARGET) \
$(TEST_SRC) \
$(PLATFORM_SRC) \
$(STSELIB_CORE_SRC) \
$(STSELIB_API_SRC) \
$(STSELIB_SERVICES_SRC) \
$(STSELIB_CERT_SRC)
# wolfSSL crypto callback test build
# Note: We compile stsafe.c directly since it's not built into libwolfssl by default
WOLFSSL_STSAFE_FLAGS = -DWOLFSSL_USER_SETTINGS -Wno-strict-prototypes
WOLFSSL_BASE_FLAGS = -Wall -Wextra -O2 -g
wolfssl: $(WOLFSSL_TEST_SRC) $(PLATFORM_SRC) $(PLATFORM_CRYPTO_SRC)
$(CC) $(WOLFSSL_BASE_FLAGS) $(WOLFSSL_STSAFE_FLAGS) -I. -I$(STSELIB_DIR) -I$(PLATFORM_DIR) -I$(WOLFSSL_DIR) \
-c $(WOLFSSL_STSAFE_SRC) -o stsafe.o
$(CC) $(WOLFSSL_BASE_FLAGS) $(WOLFSSL_STSAFE_FLAGS) -I. -I$(STSELIB_DIR) -I$(PLATFORM_DIR) -I$(WOLFSSL_DIR) \
-c $(PLATFORM_SRC) -o stse_platform_linux.o
$(CC) $(WOLFSSL_BASE_FLAGS) $(WOLFSSL_STSAFE_FLAGS) -I. -I$(STSELIB_DIR) -I$(PLATFORM_DIR) -I$(WOLFSSL_DIR) \
-c $(PLATFORM_CRYPTO_SRC) -o stse_platform_crypto.o
$(CC) $(WOLFSSL_BASE_FLAGS) $(WOLFSSL_STSAFE_FLAGS) -I. -I$(STSELIB_DIR) -I$(PLATFORM_DIR) -I$(WOLFSSL_DIR) \
-o $(WOLFSSL_TARGET) \
$(WOLFSSL_TEST_SRC) \
stse_platform_linux.o stse_platform_crypto.o stsafe.o \
$(STSELIB_CORE_SRC) \
$(STSELIB_API_SRC) \
$(STSELIB_SERVICES_SRC) \
$(STSELIB_CERT_SRC) \
$(LDFLAGS)
test: $(TARGET)
./$(TARGET)
test-wolfssl: wolfssl
./$(WOLFSSL_TARGET)
# Full wolfSSL integration test with ECDH and benchmarks
wolfssl-full: $(WOLFSSL_FULL_TEST_SRC) $(PLATFORM_SRC) $(PLATFORM_CRYPTO_SRC)
$(CC) $(WOLFSSL_BASE_FLAGS) $(WOLFSSL_STSAFE_FLAGS) -I. -I$(STSELIB_DIR) -I$(PLATFORM_DIR) -I$(WOLFSSL_DIR) \
-c $(WOLFSSL_STSAFE_SRC) -o stsafe.o
$(CC) $(WOLFSSL_BASE_FLAGS) $(WOLFSSL_STSAFE_FLAGS) -I. -I$(STSELIB_DIR) -I$(PLATFORM_DIR) -I$(WOLFSSL_DIR) \
-c $(PLATFORM_SRC) -o stse_platform_linux.o
$(CC) $(WOLFSSL_BASE_FLAGS) $(WOLFSSL_STSAFE_FLAGS) -I. -I$(STSELIB_DIR) -I$(PLATFORM_DIR) -I$(WOLFSSL_DIR) \
-c $(PLATFORM_CRYPTO_SRC) -o stse_platform_crypto.o
$(CC) $(WOLFSSL_BASE_FLAGS) $(WOLFSSL_STSAFE_FLAGS) -I. -I$(STSELIB_DIR) -I$(PLATFORM_DIR) -I$(WOLFSSL_DIR) \
-o $(WOLFSSL_FULL_TARGET) \
$(WOLFSSL_FULL_TEST_SRC) \
stse_platform_linux.o stse_platform_crypto.o stsafe.o \
$(STSELIB_CORE_SRC) \
$(STSELIB_API_SRC) \
$(STSELIB_SERVICES_SRC) \
$(STSELIB_CERT_SRC) \
$(LDFLAGS)
test-wolfssl-full: wolfssl-full
./$(WOLFSSL_FULL_TARGET)
test-all: all
@echo "=== Running stsafe_test ===" && ./$(TARGET)
@echo ""
@echo "=== Running wolfssl_stsafe_test ===" && ./$(WOLFSSL_TARGET)
@echo ""
@echo "=== Running wolfssl_stsafe_full_test ===" && ./$(WOLFSSL_FULL_TARGET)
clean:
rm -f $(TARGET) $(WOLFSSL_TARGET) $(WOLFSSL_FULL_TARGET) *.o stsafe.o stse_platform_linux.o stse_platform_crypto.o
# Show configuration
info:
@echo "STSELib directory: $(STSELIB_DIR)"
@echo "wolfSSL directory: $(WOLFSSL_DIR)"
@echo "Platform directory: $(PLATFORM_DIR)"
@echo "Include paths: $(INCLUDES)"
@echo "Linker flags: $(LDFLAGS)"
@echo ""
@echo "Build targets:"
@echo " make - Build all test executables"
@echo " make test-all - Build and run all tests"
@echo " make basic - Build without wolfSSL (basic tests only)"
@echo " make clean - Clean build artifacts"
@echo " make info - Show this configuration"