@@ -11,8 +11,15 @@ TZEN ?= 0
1111# Requires wolfSSL cloned alongside wolfip (or set WOLFSSL_ROOT)
1212ENABLE_TLS ?= 0
1313
14+ # HTTPS web server: set ENABLE_HTTPS=1 to include HTTPS web server (requires TLS)
15+ ENABLE_HTTPS ?= 0
16+
17+ # SSH support: set ENABLE_SSH=1 to include wolfSSH server (requires TLS)
18+ ENABLE_SSH ?= 0
19+
1420# Library paths - default to sibling directories (clone alongside pattern)
1521WOLFSSL_ROOT ?= $(ROOT ) /../wolfssl
22+ WOLFSSH_ROOT ?= $(ROOT ) /../wolfssh
1623
1724# Base compiler flags
1825CFLAGS := -mcpu=cortex-m33 -mthumb -mcmse -Os -ffreestanding -fdata-sections -ffunction-sections
@@ -53,11 +60,17 @@ CFLAGS += -DWOLFSSL_USER_SETTINGS
5360CFLAGS += -DWOLFSSL_WOLFIP
5461CFLAGS += -I$(WOLFSSL_ROOT )
5562
56- # TLS server, client, and wolfIP-wolfSSL glue
63+ # TLS server, client and wolfIP-wolfSSL glue
5764SRCS += tls_server.c
5865SRCS += tls_client.c
5966SRCS += $(ROOT ) /src/port/wolfssl_io.c
6067
68+ # HTTPS web server (requires TLS)
69+ ifeq ($(ENABLE_HTTPS ) ,1)
70+ CFLAGS += -DENABLE_HTTPS
71+ SRCS += https_server.c
72+ endif
73+
6174# wolfSSL source files (minimal set for TLS 1.3 server with ECC)
6275WOLFSSL_SRCS := \
6376 $(WOLFSSL_ROOT ) /wolfcrypt/src/aes.c \
@@ -96,16 +109,59 @@ SRCS += $(WOLFSSL_SRCS)
96109
97110endif # ENABLE_TLS
98111
112+ # -----------------------------------------------------------------------------
113+ # SSH Support (wolfSSH) - requires TLS
114+ # -----------------------------------------------------------------------------
115+ ifeq ($(ENABLE_SSH ) ,1)
116+
117+ # SSH requires TLS
118+ ifeq ($(ENABLE_TLS ) ,0)
119+ $(error ENABLE_SSH=1 requires ENABLE_TLS=1)
120+ endif
121+
122+ # Validate wolfSSH exists
123+ ifeq ($(wildcard $(WOLFSSH_ROOT ) /wolfssh/ssh.h) ,)
124+ $(error wolfSSH not found at $(WOLFSSH_ROOT ) . Clone it : git clone https://github.com/wolfSSL/wolfssh.git)
125+ endif
126+
127+ CFLAGS += -DENABLE_SSH
128+ CFLAGS += -DWOLFSSH_USER_SETTINGS
129+ CFLAGS += -I$(WOLFSSH_ROOT )
130+
131+ # SSH server and wolfSSH-wolfIP glue
132+ SRCS += ssh_server.c
133+ SRCS += $(ROOT ) /src/port/wolfssh_io.c
134+
135+ # wolfSSH source files (minimal set for SSH server)
136+ WOLFSSH_SRCS := \
137+ $(WOLFSSH_ROOT ) /src/ssh.c \
138+ $(WOLFSSH_ROOT ) /src/internal.c \
139+ $(WOLFSSH_ROOT ) /src/io.c \
140+ $(WOLFSSH_ROOT ) /src/keygen.c \
141+ $(WOLFSSH_ROOT ) /src/log.c \
142+ $(WOLFSSH_ROOT ) /src/port.c
143+
144+ SRCS += $(WOLFSSH_SRCS )
145+
146+ # wolfSSH objects use relaxed warnings
147+ $(WOLFSSH_ROOT ) /% .o : $(WOLFSSH_ROOT ) /% .c
148+ $(CC ) $(CFLAGS_WOLFSSL ) -c $< -o $@
149+
150+ endif # ENABLE_SSH
151+
99152# -----------------------------------------------------------------------------
100153# Build rules
101154# -----------------------------------------------------------------------------
102155OBJS := $(patsubst % .c,% .o,$(SRCS ) )
103156
104157all : app.bin
105- @echo " Built with TZEN=$( TZEN) ENABLE_TLS=$( ENABLE_TLS) "
158+ @echo " Built with TZEN=$( TZEN) ENABLE_TLS=$( ENABLE_TLS) ENABLE_HTTPS= $( ENABLE_HTTPS ) ENABLE_SSH= $( ENABLE_SSH ) "
106159ifeq ($(ENABLE_TLS ) ,1)
107160 @echo " wolfSSL: $(WOLFSSL_ROOT)"
108161endif
162+ ifeq ($(ENABLE_SSH ) ,1)
163+ @echo " wolfSSH: $(WOLFSSH_ROOT)"
164+ endif
109165
110166app.elf : $(OBJS ) $(LDSCRIPT )
111167 $(CC ) $(CFLAGS ) $(OBJS ) $(LDFLAGS ) -Wl,--start-group -lc -lm -lgcc -lnosys -Wl,--end-group -o $@
@@ -128,6 +184,9 @@ ifeq ($(ENABLE_TLS),1)
128184 rm -f $(WOLFSSL_ROOT)/wolfcrypt/src/*.o
129185 rm -f $(WOLFSSL_ROOT)/src/*.o
130186endif
187+ ifeq ($(ENABLE_SSH ) ,1)
188+ rm -f $(WOLFSSH_ROOT)/src/*.o
189+ endif
131190
132191.PHONY : all clean
133192
@@ -145,17 +204,24 @@ help:
145204 @echo " help Show this help"
146205 @echo " "
147206 @echo " Options:"
148- @echo " TZEN=1 Enable TrustZone support"
149- @echo " ENABLE_TLS=1 Enable TLS server (requires wolfSSL)"
150- @echo " WOLFSSL_ROOT= Path to wolfSSL (default: ../wolfssl)"
207+ @echo " TZEN=1 Enable TrustZone support"
208+ @echo " ENABLE_TLS=1 Enable TLS server (requires wolfSSL)"
209+ @echo " ENABLE_HTTPS=1 Enable HTTPS web server (requires TLS)"
210+ @echo " ENABLE_SSH=1 Enable SSH server (requires TLS + wolfSSH)"
211+ @echo " WOLFSSL_ROOT= Path to wolfSSL (default: ../wolfssl)"
212+ @echo " WOLFSSH_ROOT= Path to wolfSSH (default: ../wolfssh)"
151213 @echo " "
152214 @echo " Examples:"
153- @echo " make # Basic build"
154- @echo " make TZEN=1 # TrustZone enabled"
155- @echo " make ENABLE_TLS=1 # With TLS server"
156- @echo " make TZEN=1 ENABLE_TLS=1 # Both"
215+ @echo " make # Basic TCP echo (port 7)"
216+ @echo " make ENABLE_TLS=1 # TLS echo server (port 8443)"
217+ @echo " make ENABLE_TLS=1 ENABLE_HTTPS=1 # TLS + HTTPS web (port 443)"
218+ @echo " make ENABLE_TLS=1 ENABLE_SSH=1 # TLS + SSH shell (port 22)"
219+ @echo " make ENABLE_TLS=1 ENABLE_HTTPS=1 ENABLE_SSH=1 # Full featured"
157220 @echo " "
158- @echo " Testing TLS server:"
159- @echo " echo 'Hello' | openssl s_client -connect <ip>:8443 -quiet"
221+ @echo " Testing:"
222+ @echo " nc <ip> 7 # TCP echo"
223+ @echo " echo 'Hello' | openssl s_client -connect <ip>:8443 -quiet # TLS echo"
224+ @echo " curl -k https://<ip>/ # HTTPS web server"
225+ @echo " ssh admin@<ip> # SSH (password: wolfip)"
160226
161227.PHONY : help
0 commit comments