Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 39 additions & 0 deletions .wolfssl_known_macro_extras
Original file line number Diff line number Diff line change
Expand Up @@ -89,12 +89,17 @@ CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_160
CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_240
CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_80
CONFIG_ESP_ENABLE_WOLFSSH
CONFIG_ESP_LATEST_MITIGATIONS
CONFIG_ESP_MAIN_TASK_STACK_SIZE
CONFIG_ESP_TLS_USING_WOLFSSL
CONFIG_ESP_WIFI_PASSWORD
CONFIG_ESP_WIFI_SSID
CONFIG_ESP_WOLFSSL_BIG_SESSION_CACHE
CONFIG_ESP_WOLFSSL_ENABLE_KYBER
CONFIG_ESP_WOLFSSL_ENABLE_WOLFSSH
CONFIG_ESP_WOLFSSL_MEDIUM_SESSION_CACHE
CONFIG_ESP_WOLFSSL_MICRO_SESSION_CACHE
CONFIG_ESP_WOLFSSL_MULTI_THREAD
CONFIG_ESP_WOLFSSL_NO_ESP32_CRYPT
CONFIG_ESP_WOLFSSL_NO_HW_AES
CONFIG_ESP_WOLFSSL_NO_HW_HASH
Expand All @@ -103,6 +108,18 @@ CONFIG_ESP_WOLFSSL_NO_HW_RSA_PRI_EXPTMOD
CONFIG_ESP_WOLFSSL_NO_HW_RSA_PRI_MP_MUL
CONFIG_ESP_WOLFSSL_NO_HW_RSA_PRI_MULMOD
CONFIG_ESP_WOLFSSL_NO_STACK_SIZE_BUILD_WARNING
CONFIG_ESP_WOLFSSL_RSA_LOW_MEM
CONFIG_ESP_WOLFSSL_SHA224
CONFIG_ESP_WOLFSSL_SHA384
CONFIG_ESP_WOLFSSL_SMALL_SESSION_CACHE
CONFIG_ESP_WOLFSSL_SP_MATH
CONFIG_ESP_WOLFSSL_STATIC_MEMORY
CONFIG_ESP_WOLFSSL_TCP_REUSE
CONFIG_ESP_WOLFSSL_TITAN_SESSION_CACHE
CONFIG_ESP_WOLFSSL_USE_ECC
CONFIG_ESP_WOLFSSL_USE_FAST_MATH
CONFIG_ESP_WOLFSSL_USE_INTEGER_HEAP_MATH
CONFIG_ESP_WOLFSSL_USE_RSA
CONFIG_FREERTOS_HZ
CONFIG_FREERTOS_UNICORE
CONFIG_IDF_TARGET
Expand All @@ -111,8 +128,12 @@ CONFIG_IDF_TARGET_ARCH_XTENSA
CONFIG_IDF_TARGET_ESP32
CONFIG_IDF_TARGET_ESP32C2
CONFIG_IDF_TARGET_ESP32C3
CONFIG_IDF_TARGET_ESP32C5
CONFIG_IDF_TARGET_ESP32C6
CONFIG_IDF_TARGET_ESP32C61
CONFIG_IDF_TARGET_ESP32H2
CONFIG_IDF_TARGET_ESP32H21
CONFIG_IDF_TARGET_ESP32H4
CONFIG_IDF_TARGET_ESP32P4
CONFIG_IDF_TARGET_ESP32S2
CONFIG_IDF_TARGET_ESP32S3
Expand Down Expand Up @@ -145,6 +166,7 @@ CONFIG_WOLFCRYPT_ARMASM
CONFIG_WOLFCRYPT_FIPS
CONFIG_WOLFCRYPT_INTELASM
CONFIG_WOLFSSL
CONFIG_WOLFSSL_ALLOW_TLS12
CONFIG_WOLFSSL_ALLOW_TLS13
CONFIG_WOLFSSL_ALPN
CONFIG_WOLFSSL_ALT_CERT_CHAINS
Expand All @@ -164,7 +186,9 @@ CONFIG_WOLFSSL_EXAMPLE_NAME_WOLFMQTT_AWS_IOT_MQTT
CONFIG_WOLFSSL_EXAMPLE_NAME_WOLFMQTT_TEMPLATE
CONFIG_WOLFSSL_EXAMPLE_NAME_WOLFSSH_ECHOSERVER
CONFIG_WOLFSSL_EXAMPLE_NAME_WOLFSSH_TEMPLATE
CONFIG_WOLFSSL_EXAMPLE_VERBOSITY
CONFIG_WOLFSSL_HKDF
CONFIG_WOLFSSL_LOW_MEMORY_DISABLE_TLS13
CONFIG_WOLFSSL_MAX_FRAGMENT_LEN
CONFIG_WOLFSSL_NO_ASN_STRICT
CONFIG_WOLFSSL_PSK
Expand All @@ -174,6 +198,11 @@ CONFIG_WOLFSSL_TARGET_PORT
CONFIG_WOLFSSL_TLS13_ENABLED
CONFIG_WOLFSSL_TLS_VERSION_1_2
CONFIG_WOLFSSL_TLS_VERSION_1_3
CONFIG_WOLFSSL_USE_CERT_BUFFERS_1024
CONFIG_WOLFSSL_USE_CERT_BUFFERS_2048
CONFIG_WOLFSSL_USE_CERT_BUFFERS_256
CONFIG_WOLFSSL_USE_CERT_BUFFERS_NONE
CONFIG_WOLFSSL_USE_CERT_BUFFERS_SM
CONFIG_WOLFTPM
CONFIG_WOLFTPM_EXAMPLE_NAME_ESPRESSIF
CONFIG_X86
Expand Down Expand Up @@ -212,11 +241,17 @@ ENABLE_SECURE_SOCKETS_LOGS
ESP32
ESP8266
ESP_ENABLE_WOLFSSH
ESP_ERR_NVS_NEW_VERSION_FOUND
ESP_ERR_NVS_NO_FREE_PAGES
ESP_IDF_VERSION
ESP_IDF_VERSION_MAJOR
ESP_IDF_VERSION_MINOR
ESP_PLATFORM
ESP_SDK_UTIL_LIB_VERSION
ESP_TASK_MAIN_STACK
ESP_WOLFSSL_DISABLE_DH
ESP_WOLFSSL_DISABLE_ECC
ESP_WOLFSSL_USE_SM
ETHERNET_AVAILABLE
ETHERNET_H
EV_TRIGGER
Expand Down Expand Up @@ -277,11 +312,13 @@ HAVE_PKCS7_RSA_RAW_SIGN_CALLBACK
HAVE_POCO_LIB
HAVE_RTP_SYS
HAVE_SECURE_GETENV
HAVE_STACK_HEAP_INFO
HAVE_STACK_SIZE_VERBOSE_LOG
HAVE_THREADX
HAVE_TM_TYPE
HAVE_VALIDATE_DATE
HAVE_VA_COPY
HAVE_WOLFCRYPT_WARMUP
HAVE_X448
HONOR_MATH_USED_LENGTH
HSM_KEY_TYPE_HMAC_224
Expand Down Expand Up @@ -453,6 +490,7 @@ PEER_INFO
PKA_ECC_SCALAR_MUL_IN_B_COEFF
PLATFORMIO
PLUTON_CRYPTO_ECC
POSIX_LINUX
PRINT_SESSION_STATS
PTHREAD_STACK_MIN
QAT_ENABLE_HASH
Expand Down Expand Up @@ -1080,6 +1118,7 @@ byte
configTICK_RATE_HZ
fallthrough
noinline
sizeof_server_ecc_cert
ssize_t
sun
versal
Expand Down
55 changes: 50 additions & 5 deletions IDE/Espressif/ESP-IDF/examples/template/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,11 +1,35 @@
# wolfSSL Espressif Example Project CMakeLists.txt
# v1.3
# v5.8.2.001
#
# The following lines of boilerplate have to be in your project's
# CMakeLists in this exact order for cmake to work correctly
message(STATUS "Begin project ${CMAKE_PROJECT_NAME}")

cmake_minimum_required(VERSION 3.16)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DWOLFSSL_USER_SETTINGS")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DWOLFSSL_USER_SETTINGS")

# Optionally set flag for using a private include. See wolfcrypt/port/Espressif/esp-sdk-lib.h
if( "$ENV{CONFIG_WOLFSSL_USE_MY_PRIVATE_CONFIG}" STREQUAL "1" )
message(STATUS "Setting CONFIG_WOLFSSL_USE_MY_PRIVATE_CONFIG from environment variable")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DCONFIG_WOLFSSL_USE_MY_PRIVATE_CONFIG=1")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DCONFIG_WOLFSSL_USE_MY_PRIVATE_CONFIG=1")
else()
message(STATUS "CONFIG_WOLFSSL_USE_MY_PRIVATE_CONFIG not set, not using private config.")
endif()

# Different ESP-IDF versions have different lock files.
# Not starting fresh has unintuitive results.
# So force a fresh dependencies.lock by deleting the current one:
file(REMOVE "./dependencies.lock")

# Force custom partition table regardless of IDE presets
set(PARTITION_TABLE_CUSTOM ON CACHE BOOL "" FORCE)
set(PARTITION_TABLE_FILENAME "${CMAKE_SOURCE_DIR}/partitions_singleapp_large.csv" CACHE STRING "" FORCE)

if("${IDF_TARGET}" STREQUAL "linux")
set(COMPONENTS main)
endif()

# For the main project using ESP-IDF version 6 or greater.
# Numerous "dangerous relocation: call8: call target out of range: memcpy" errors encountered
Expand Down Expand Up @@ -34,13 +58,16 @@ endif()
#
# Optional WOLFSSL_CMAKE_SYSTEM_NAME detection to find
# USE_MY_PRIVATE_CONFIG path for my_private_config.h
# See: wolfcrypt/port/Espressif/esp-sdk-lib.h
#
# Expected path varies:
#
# WSL: /mnt/c/workspace
# Linux: ~/workspace
# Windows: C:\workspace
#


if(WIN32)
# Windows-specific configuration here
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DWOLFSSL_CMAKE_SYSTEM_NAME_WINDOWS")
Expand All @@ -49,9 +76,6 @@ endif()
if(CMAKE_HOST_UNIX)
message(STATUS "Detected UNIX")
endif()
if(APPLE)
message(STATUS "Detected APPLE")
endif()
if(CMAKE_HOST_UNIX AND (NOT APPLE) AND EXISTS "/proc/sys/fs/binfmt_misc/WSLInterop")
# Windows-specific configuration here
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DWOLFSSL_CMAKE_SYSTEM_NAME_WSL")
Expand All @@ -63,7 +87,7 @@ if(CMAKE_HOST_UNIX AND (NOT APPLE) AND (NOT WIN32))
message(STATUS "Detected Linux")
endif()
if(APPLE)
# Windows-specific configuration here
# Apple-specific configuration here
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DWOLFSSL_CMAKE_SYSTEM_NAME_APPLE")
message(STATUS "Detected Apple")
endif()
Expand Down Expand Up @@ -157,6 +181,27 @@ endif()

include($ENV{IDF_PATH}/tools/cmake/project.cmake)

message(STATUS "Checking Project CONFIG_WOLFSSL_FORCE_V6_INTELLISENSE_FIX=$ENV{CONFIG_WOLFSSL_FORCE_V6_INTELLISENSE_FIX}")
# Optionally force syntax highlighting fix in Visual Studio 2022 for ESP-IDF v6
# See https://sysprogs.com/w/forums/topic/espressif-esp-idf-v6-0-intellisense-error-invalid-value-gnu2b-in-stdgnu2b/
# To resolve, enter the text in VisualGDB Project Properties - Intellisense Settings Tab, "Additional flags for C files":
# -std=gnu17
# And set here:
if( "$ENV{CONFIG_WOLFSSL_FORCE_V6_INTELLISENSE_FIX}" STREQUAL "1" )
set(PREFERRED_DIALECT "gnu17")
if(DEFINED IDF_VERSION_MAJOR AND IDF_VERSION_MAJOR GREATER_EQUAL 6)
message(STATUS "-- Found CONFIG_WOLFSSL_FORCE_V6_INTELLISENSE_FIX, replacing -std=gnu2b with -std=${PREFERRED_DIALECT}")
if(CMAKE_C_COMPILER_ID MATCHES "Clang")
string(REPLACE "-std=gnu2b" "-std=${PREFERRED_DIALECT}" CMAKE_C_FLAGS "${CMAKE_C_FLAGS}")
endif()
else()
message(STATUS "-- Visual Studio Intellisense Fix not needed for this ESP-IDF version=${IDF_VERSION_MAJOR}")
endif()
else()
message(STATUS "-- Not replacing -std=gnu2b with -std=${PREFERRED_DIALECT} for Viosual Studio Intellisense fix")
message(STATUS "-- To enable, define environment variable: CONFIG_WOLFSSL_FORCE_V6_INTELLISENSE_FIX=1")
endif()

# Once the project is loaded, next check for ESP-IDF version 6 or greater.
# Numerous "dangerous relocation: call8: call target out of range: memcpy" errors encountered
# So we'll allow long calls with the `-mlongcalls` compiler option for all components.
Expand Down
153 changes: 150 additions & 3 deletions IDE/Espressif/ESP-IDF/examples/template/Makefile
Original file line number Diff line number Diff line change
@@ -1,14 +1,161 @@
# ESP8266 Project Makefile for wolfssl_client
#
# This is a project Makefile. It is assumed the directory this Makefile resides in is a
# project subdirectory.
# Copyright (C) 2006-2025 wolfSSL Inc.
#
# This file is part of wolfSSL.
#
# wolfSSL is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# wolfSSL is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA
#

PROJECT_NAME := wolfssl_template
$(info ************* wolfssl_template *************)

# ------------- BEGIN COMMON SECTION -------------

ifeq ($(strip $(IDF_PATH)),)
$(error IDF_PATH is not set. Please export it before running make)
endif

# Default compiler flags
CFLAGS ?=
CXXFLAGS ?=

CFLAGS += -DWOLFSSL_USER_SETTINGS

# Some of the tests are CPU intenstive, so we'll force the watchdog timer off.
# There's an espressif NO_WATCHDOG; we don't use it, as it is reset by sdkconfig.
CFLAGS += -DWOLFSSL_ESP_NO_WATCHDOG=1

PROJECT_NAME := wolfssl_template
# Check if CONFIG_WOLFSSL_USE_MY_PRIVATE_CONFIG is set to 1 in environment
ifeq ($(CONFIG_WOLFSSL_USE_MY_PRIVATE_CONFIG),1)
$(info Setting CONFIG_WOLFSSL_USE_MY_PRIVATE_CONFIG from environment variablev for Makefile)
CFLAGS += -DCONFIG_WOLFSSL_USE_MY_PRIVATE_CONFIG=1
CXXFLAGS += -DCONFIG_WOLFSSL_USE_MY_PRIVATE_CONFIG=1
else
$(info CONFIG_WOLFSSL_USE_MY_PRIVATE_CONFIG not set, not using private config.)
endif

#
# This is a project Makefile.
# It is assumed the directory this Makefile resides in is a
# project subdirectory containing an entire project.
#
# Optional private config headers. Define environment variables
# to include various default header files that are typically
# not in a git path, and thus excluded from being checked in.
#
# Environment Variable Name | Header file name included
# ---------------------------------- | ---------------------------------------
# MY_PRIVATE_CONFIG (files detected / selected in header)
# USE_MY_PRIVATE_WSL_CONFIG /mnt/c/workspace/my_private_config.h
# USE_MY_PRIVATE_MAC_CONFIG ~/Documents/my_private_config.h
# USE_MY_PRIVATE_LINUX_CONFIG ~/workspace/my_private_config.h
# USE_MY_PRIVATE_WINDOWS_CONFIG /workspace/my_private_config.h
#
#

# Optionally include component source when print path (needs work to then properly build)
#
# include components/wolfssl/component.mk

MY_PRIVATE_CONFIG ?= n
USE_MY_PRIVATE_WSL_CONFIG ?= n
USE_MY_PRIVATE_MAC_CONFIG ?= n
USE_MY_PRIVATE_LINUX_CONFIG ?= n
USE_MY_PRIVATE_WINDOWS_CONFIG ?= n

# Calling shell causes unintuitive error in Windows:
# OS := $(shell uname -s)
#
# But OS, or MY_PRIVATE_CONFIG should already be defined:

ifeq ($(MY_PRIVATE_CONFIG),y)
CFLAGS += -DMY_PRIVATE_CONFIG
$(info Enabled MY_PRIVATE_CONFIG")
endif

# Check for Windows environment variable: USE_MY_PRIVATE_WINDOWS_CONFIG
ifeq ($(USE_MY_PRIVATE_WINDOWS_CONFIG),y)
# This hard coded MY_CONFIG_FILE value must match that in the header file.
MY_CONFIG_FILE := /workspace/my_private_config.h
ifeq ($(wildcard $(MY_CONFIG_FILE)),)
$(info File does not exist: $(MY_CONFIG_FILE))
else
CFLAGS += -DUSE_MY_PRIVATE_WINDOWS_CONFIG
$(info Using private config file for: Windows)
endif
endif

# Check for WSL environment variable: USE_MY_PRIVATE_WSL_CONFIG
ifeq ($(USE_MY_PRIVATE_WSL_CONFIG),y)
# This hard coded MY_CONFIG_FILE value must match that in the header file.
MY_CONFIG_FILE := /mnt/c/workspace/my_private_config.h
ifeq ($(wildcard $(MY_CONFIG_FILE)),)
$(info File does not exist: $(MY_CONFIG_FILE))
else
CFLAGS += -DUSE_MY_PRIVATE_WSL_CONFIG
$(info Using private config file for: WSL)
endif
endif

# Check for Linux environment variable: USE_MY_PRIVATE_LINUX_CONFIG
ifeq ($(USE_MY_PRIVATE_LINUX_CONFIG),y)
# This hard coded MY_CONFIG_FILE value must match that in the header file.
MY_CONFIG_FILE := ~/workspace/my_private_config.h
ifeq ($(wildcard $(MY_CONFIG_FILE)),)
$(info File does not exist: $(MY_CONFIG_FILE))
else
CFLAGS += -DUSE_MY_PRIVATE_LINUX_CONFIG
$(info Using private config file for: Linux)
endif
endif

# Check for Mac environment variable: USE_MY_PRIVATE_MAC_CONFIG
ifeq ($(USE_MY_PRIVATE_MAC_CONFIG),y)
# This hard coded MY_CONFIG_FILE value must match that in the header file.
MY_CONFIG_FILE := ~/Documents/my_private_config.h
ifeq ($(wildcard $(MY_CONFIG_FILE)),)
$(info File does not exist: $(MY_CONFIG_FILE))
else
CFLAGS += -DUSE_MY_PRIVATE_MAC_CONFIG
$(info Using private config file for: Mac)
endif
endif

ifneq ($(OS),MY_PRIVATE_CONFIG)
CFLAGS += -DMY_PRIVATE_CONFIG="$(MY_PRIVATE_CONFIG)"
else
ifeq ($(OS),Linux)
CFLAGS += -DOS_LINUX
endif
ifeq ($(OS),Windows_NT)
CFLAGS += -DWOLFSSL_MAKE_SYSTEM_NAME_WINDOWS
endif
ifeq ($(OS),Darwin)
CFLAGS += -DWOLFSSL_MAKE_SYSTEM_NAME_APPLE
endif
ifneq (,$(findstring MINGW,$(OS)))
CFLAGS += -DWOLFSSL_MAKE_SYSTEM_NAME_MINGW
endif
ifneq (,$(findstring CYGWIN,$(OS)))
CFLAGS += -DWOLFSSL_MAKE_SYSTEM_NAME_CYGWIN
endif
endif

# if there isn't the directory, please disable the line below.
EXTRA_COMPONENT_DIRS = $(IDF_PATH)/examples/common_components/protocol_examples_common

# The Standard Espressif IDF include:
include $(IDF_PATH)/make/project.mk
Loading
Loading