@@ -7,6 +7,14 @@ ROOT := ../../..
77# Default is TZEN=0 (TrustZone disabled)
88TZEN ?= 0
99
10+ # wolfHAL driver backend: set ENABLE_WOLFHAL=1 to build the port on top of
11+ # the wolfHAL HAL (Ethernet MAC/PHY, RNG, UART, GPIO, clocks) instead of the
12+ # in-tree bare-metal drivers. Selects the self-contained board directory
13+ # boards/$(BOARD). First cut supports TZEN=0 and FREERTOS=0 only.
14+ ENABLE_WOLFHAL ?= 0
15+ BOARD ?= stm32h563zi_nucleo
16+ WOLFHAL_ROOT ?= $(ROOT ) /../wolfHAL
17+
1018# TLS support: set ENABLE_TLS=1 to include wolfSSL TLS server
1119# Requires wolfSSL cloned alongside wolfip (or set WOLFSSL_ROOT)
1220ENABLE_TLS ?= 0
@@ -122,6 +130,44 @@ CFLAGS_WOLFSSL := $(filter-out -Werror,$(CFLAGS_WOLFSSL))
122130CFLAGS_WOLFSSL += -Wno-unused-variable -Wno-unused-function
123131CFLAGS_WOLFSSL += $(EXTRA_CFLAGS_WOLFSSL )
124132
133+ ifeq ($(ENABLE_WOLFHAL ) ,1)
134+ # -----------------------------------------------------------------------------
135+ # wolfHAL driver backend
136+ # -----------------------------------------------------------------------------
137+ # board_init() programs the PLL directly and the wolfHAL SysTick driver owns
138+ # the SysTick handler, so the wolfBoot-launched (TZEN=1) clock flow and the
139+ # FreeRTOS SysTick are not supported in this first cut.
140+ ifeq ($(TZEN ) ,1)
141+ $(error ENABLE_WOLFHAL=1 does not support TZEN=1 yet (board_init owns the PLL, which conflicts with the wolfBoot-launched NS clock flow))
142+ endif
143+ ifeq ($(FREERTOS ) ,1)
144+ $(error ENABLE_WOLFHAL=1 does not support FREERTOS=1 yet (wolfHAL SysTick conflicts with the FreeRTOS SysTick handler))
145+ endif
146+
147+ ifeq ($(wildcard $(WOLFHAL_ROOT ) /wolfHAL/wolfHAL.h) ,)
148+ $(error wolfHAL not found at $(WOLFHAL_ROOT ) . Clone it alongside wolfip : git clone https://github.com/wolfSSL/wolfHAL.git (or set WOLFHAL_ROOT))
149+ endif
150+
151+ BOARD_DIR := boards/$(BOARD )
152+
153+ CFLAGS += -DENABLE_WOLFHAL -DTZEN_ENABLED=0
154+ CFLAGS += -I$(WOLFHAL_ROOT ) -I$(BOARD_DIR ) -I$(ROOT ) /src/port/wolfHAL
155+
156+ LDSCRIPT := $(BOARD_DIR ) /linker.ld
157+
158+ # The board dir carries its own wolfHAL-specific startup/ivt/syscalls; the
159+ # bare-metal stm32_eth.c driver is replaced by board.c (BSP bringup) plus the
160+ # generic wolfhal_eth.c bridge.
161+ SRCS := $(BOARD_DIR ) /startup.c $(BOARD_DIR ) /ivt.c $(BOARD_DIR ) /syscalls.c
162+ SRCS += main.c $(BOARD_DIR ) /board.c $(ROOT ) /src/port/wolfHAL/wolfhal_eth.c
163+ SRCS += $(ROOT ) /src/wolfip.c
164+
165+ # wolfHAL driver selection (WHAL_CFG_* defines) + wolfHAL driver TUs.
166+ include $(BOARD_DIR ) /board.mk
167+ else
168+ # -----------------------------------------------------------------------------
169+ # In-tree bare-metal drivers (default)
170+ # -----------------------------------------------------------------------------
125171# Select linker script based on TZEN setting
126172ifeq ($(TZEN ) ,1)
127173 LDSCRIPT := target_tzen.ld
@@ -131,11 +177,12 @@ else
131177 CFLAGS += -DTZEN_ENABLED=0
132178endif
133179
134- LDFLAGS := -nostdlib -T $(LDSCRIPT ) -Wl,-gc-sections
135-
136180# Base source files
137181SRCS := startup.c ivt.c syscalls.c
138182SRCS += main.c $(ROOT ) /src/port/stm32/stm32_eth.c $(ROOT ) /src/wolfip.c
183+ endif
184+
185+ LDFLAGS := -nostdlib -T $(LDSCRIPT ) -Wl,-gc-sections
139186
140187ifeq ($(FREERTOS ) ,1)
141188ifeq ($(wildcard $(FREERTOS_PATH ) /include/FreeRTOS.h) ,)
@@ -515,7 +562,7 @@ endif
515562OBJS := $(patsubst % .c,% .o,$(SRCS ) )
516563
517564all : app.bin
518- @echo " Built with TZEN=$( TZEN) ENABLE_TLS=$( ENABLE_TLS) ENABLE_TLS_CLIENT=$( ENABLE_TLS_CLIENT) ENABLE_HTTPS=$( ENABLE_HTTPS) ENABLE_SSH=$( ENABLE_SSH) ENABLE_MQTT=$( ENABLE_MQTT) ENABLE_MQTT_BROKER=$( ENABLE_MQTT_BROKER) FREERTOS=$( FREERTOS) "
565+ @echo " Built with TZEN=$( TZEN) ENABLE_WOLFHAL= $( ENABLE_WOLFHAL ) ENABLE_TLS=$( ENABLE_TLS) ENABLE_TLS_CLIENT=$( ENABLE_TLS_CLIENT) ENABLE_HTTPS=$( ENABLE_HTTPS) ENABLE_SSH=$( ENABLE_SSH) ENABLE_MQTT=$( ENABLE_MQTT) ENABLE_MQTT_BROKER=$( ENABLE_MQTT_BROKER) FREERTOS=$( FREERTOS) "
519566ifeq ($(ENABLE_TLS ) ,1)
520567 @echo " wolfSSL: $(WOLFSSL_ROOT)"
521568endif
@@ -576,6 +623,11 @@ factory: factory.bin
576623$(WOLFSSL_ROOT ) /% .o : $(WOLFSSL_ROOT ) /% .c
577624 $(CC ) $(CFLAGS_WOLFSSL ) -DWOLFSSL_USER_SETTINGS $(if $(filter 1,$(ENABLE_SSH ) ) ,-DENABLE_SSH -DWOLFSSL_WOLFSSH) $(if $(filter 1,$(ENABLE_MQTT_BROKER ) ) ,-DENABLE_MQTT_BROKER) $(if $(filter 1,$(ENABLE_DOT1X ) ) ,-DHAVE_PBKDF2 -DHAVE_AES_KEYWRAP) -I$(WOLFSSL_ROOT ) -c $< -o $@
578625
626+ # wolfHAL driver objects: first-party HAL, but built with -Werror relaxed
627+ # since the port's -Wextra is stricter than wolfHAL's own build.
628+ $(WOLFHAL_ROOT ) /% .o : $(WOLFHAL_ROOT ) /% .c
629+ $(CC ) $(filter-out -Werror,$(CFLAGS ) ) -c $< -o $@
630+
579631clean :
580632 rm -f * .o app.elf app.bin
581633 rm -f app_v1_signed.bin factory.bin wolfboot_padded.bin
@@ -584,6 +636,10 @@ clean:
584636 rm -f $(ROOT ) /src/port/stm32/* .o
585637 rm -f $(ROOT ) /src/port/freeRTOS/* .o
586638 rm -f $(ROOT ) /src/supplicant/* .o
639+ ifeq ($(ENABLE_WOLFHAL ) ,1)
640+ rm -f boards/$(BOARD)/*.o
641+ rm -f $(WOLFHAL_ROOT)/src/*.o $(WOLFHAL_ROOT)/src/*/*.o
642+ endif
587643ifeq ($(FREERTOS ) ,1)
588644 rm -f $(FREERTOS_PATH)/*.o
589645 rm -f $(FREERTOS_PATH)/portable/MemMang/*.o
@@ -614,7 +670,7 @@ verify: app.bin
614670 @strings app.bin | grep -q " MQTT Broker: Initializing" && echo " ✓ MQTT broker enabled" || echo " ✗ MQTT broker disabled"
615671 @echo " "
616672 @echo " Binary size: $$ (ls -lh app.bin | awk '{print $$ 5}')"
617- @echo " Build flags: TZEN=$( TZEN) ENABLE_TLS=$( ENABLE_TLS) ENABLE_HTTPS=$( ENABLE_HTTPS) ENABLE_SSH=$( ENABLE_SSH) ENABLE_MQTT=$( ENABLE_MQTT) ENABLE_MQTT_BROKER=$( ENABLE_MQTT_BROKER) FREERTOS=$( FREERTOS) "
673+ @echo " Build flags: TZEN=$( TZEN) ENABLE_WOLFHAL= $( ENABLE_WOLFHAL ) ENABLE_TLS=$( ENABLE_TLS) ENABLE_HTTPS=$( ENABLE_HTTPS) ENABLE_SSH=$( ENABLE_SSH) ENABLE_MQTT=$( ENABLE_MQTT) ENABLE_MQTT_BROKER=$( ENABLE_MQTT_BROKER) FREERTOS=$( FREERTOS) "
618674
619675# Show memory usage
620676size : app.elf
@@ -643,6 +699,8 @@ help:
643699 @echo " "
644700 @echo " Options:"
645701 @echo " TZEN=1 Enable TrustZone support"
702+ @echo " ENABLE_WOLFHAL=1 Use the wolfHAL driver backend (requires wolfHAL; TZEN=0, FREERTOS=0)"
703+ @echo " BOARD=<name> Board under boards/ (default: stm32h563zi_nucleo)"
646704 @echo " ENABLE_TLS=1 Enable TLS server (requires wolfSSL)"
647705 @echo " ENABLE_TLS_CLIENT=1 Enable TLS client test (Google)"
648706 @echo " ENABLE_HTTPS=1 Enable HTTPS web server (requires TLS)"
@@ -655,11 +713,13 @@ help:
655713 @echo " WOLFSSL_ROOT= Path to wolfSSL (default: ../wolfssl)"
656714 @echo " WOLFSSH_ROOT= Path to wolfSSH (default: ../wolfssh)"
657715 @echo " WOLFMQTT_ROOT= Path to wolfMQTT (default: ../wolfmqtt)"
716+ @echo " WOLFHAL_ROOT= Path to wolfHAL (default: ../wolfHAL)"
658717 @echo " CC= C compiler (default: arm-none-eabi-gcc)"
659718 @echo " OBJCOPY= Objcopy tool (default: arm-none-eabi-objcopy)"
660719 @echo " "
661720 @echo " Examples:"
662721 @echo " make # Basic TCP echo (port 7)"
722+ @echo " make ENABLE_WOLFHAL=1 # Basic TCP echo via the wolfHAL driver backend"
663723 @echo " make ENABLE_TLS=1 # TLS echo server (port 8443)"
664724 @echo " make ENABLE_TLS=1 ENABLE_HTTPS=1 # TLS + HTTPS web (port 443)"
665725 @echo " make ENABLE_TLS=1 ENABLE_SSH=1 # TLS + SSH shell (port 22)"
0 commit comments