aboutsummaryrefslogtreecommitdiff
path: root/CMakeLists.txt
diff options
context:
space:
mode:
authorAndy Green <andy@warmcat.com>2020-05-14 21:28:48 +0100
committerAndy Green <andy@warmcat.com>2020-05-27 08:40:12 +0100
commitcabe0219555381f23b7231a1c481bbb60291a9c0 (patch)
tree66ddbdfa26c68a1a75af4498e1aef5c0cb5122a9 /CMakeLists.txt
parentb6641af88d39f9f7c979f4de8514e62dc5fde453 (diff)
downloadlibwebsockets-cabe0219555381f23b7231a1c481bbb60291a9c0.tar.gz
esp32: shift to support latest esp-idf
Esp-idf has an improved but still kind of abused cmake- based build system now. If we see ESP_PLATFORM coming as a cmake var, we can know we are being built from inside the esp-idf config system. Leave the existing esp32 arrangements alone but triggered off ESP_PLATFORM, adapt to use the cross toolchain file and various quirks automatically. In this way you can build lws a part of your project in a much cleaner way. Prepare a minimal esp32 test app for use in Sai Adapt .sai.json to build for esp32
Diffstat (limited to 'CMakeLists.txt')
-rw-r--r--CMakeLists.txt129
1 files changed, 52 insertions, 77 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 5d5abe38..7eb5b7dd 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -17,6 +17,11 @@ endif()
set(LWS_ROLE_RAW 1)
set(LWS_WITH_POLL 1)
+if(ESP_PLATFORM)
+ set(LWS_ESP_PLATFORM 1)
+ set(CMAKE_TOOLCHAIN_FILE contrib/cross-esp32.cmake)
+ set(LWIP_PROVIDE_ERRNO 1)
+endif()
# it's at this point any toolchain file is brought in
project(libwebsockets C)
include(CTest)
@@ -203,6 +208,7 @@ endif()
if(ESP_PLATFORM)
message(STATUS "ESP-IDF enabled")
set(LWS_WITH_ESP32 ON)
+ set(LWS_WITH_ZLIB OFF)
else()
set(LWS_WITH_ESP32_HELPER OFF)
endif()
@@ -388,7 +394,7 @@ set(CPACK_PACKAGE_RELEASE 1)
set(CPACK_PACKAGE_VERSION "${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}")
set(CPACK_PACKAGE_VENDOR "andy@warmcat.com")
set(CPACK_PACKAGE_CONTACT "andy@warmcat.com")
-set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "${PACKAGE} ${PACKAGE_VERSION}")
+set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "${PACKAGE} ${CPACK_PACKAGE_VERSION}")
set(SOVERSION "16")
if(NOT CPACK_GENERATOR)
if(UNIX)
@@ -418,10 +424,19 @@ set(LWS_LIBRARY_VERSION_MAJOR ${CPACK_PACKAGE_VERSION_MAJOR})
set(LWS_LIBRARY_VERSION_MINOR ${CPACK_PACKAGE_VERSION_MINOR})
set(LWS_LIBRARY_VERSION_PATCH ${CPACK_PACKAGE_VERSION_PATCH})
+if (NOT CMAKE_MODULE_PATH)
+ set(CMAKE_MODULE_PATH "")
+endif()
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${PROJECT_SOURCE_DIR}/cmake/")
-message(STATUS "CMAKE_TOOLCHAIN_FILE='${CMAKE_TOOLCHAIN_FILE}'")
+if (CMAKE_TOOLCHAIN_FILE)
+ message(STATUS "CMAKE_TOOLCHAIN_FILE='${CMAKE_TOOLCHAIN_FILE}'")
+endif()
+
+if (NOT LIB_SUFFIX)
+ set(LIB_SUFFIX "")
+endif()
if(WIN32)
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/win32port/version.rc.in ${CMAKE_CURRENT_BINARY_DIR}/win32port/version.rc @ONLY)
@@ -445,6 +460,10 @@ endif()
include_directories(include plugins lib/core lib/core-net lib/event-libs include/abstract lib/tls lib/roles lib/event-libs/libuv lib/event-libs/poll lib/event-libs/libevent lib/event-libs/glib lib/event-libs/libev lib/jose/jwe lib/jose/jws lib/jose lib/misc lib/roles/http lib/roles/http/compression lib/roles/h1 lib/roles/h2 lib/roles/ws lib/roles/cgi lib/roles/dbus lib/roles/raw-proxy lib/abstract lib/system/async-dns lib/roles/mqtt)
+if (ESP_PLATFORM)
+ include_directories($ENV{IDF_PATH}/components/freertos/include $ENV{IDF_PATH}/components/freertos/xtensa/include $ENV{IDF_PATH}/components/xtensa/include $ENV{IDF_PATH}/components/xtensa/esp32/include $ENV{IDF_PATH}/components/esp_common/include $ENV{IDF_PATH}/components/esp_timer/include $ENV{IDF_PATH}/components/soc/include $ENV{IDF_PATH}/components/soc/src/esp32/include $ENV{IDF_PATH}/components/lwip/port/esp32/include $ENV{IDF_PATH}/components/lwip/lwip/src/include $ENV{IDF_PATH}/components/lwip/port/esp32/include ${CMAKE_BINARY_DIR}/config $ENV{IDF_PATH}/components/esp_rom/include $ENV{IDF_PATH}/components/esp_system/include $ENV{IDF_PATH}/components/lwip/include/apps/sntp $ENV{IDF_PATH}/components/soc/soc/esp32/include $ENV{IDF_PATH}/components/heap/include $ENV{IDF_PATH}/components/mbedtls/mbedtls/include $ENV{IDF_PATH}/components/mbedtls/port/include $ENV{IDF_PATH}/components/esp_wifi/include $ENV{IDF_PATH}/components/esp_event/include $ENV{IDF_PATH}/components/esp_netif/include $ENV{IDF_PATH}/components/esp_eth/include $ENV{IDF_PATH}/components/driver/include $ENV{IDF_PATH}/components/soc/soc/include $ENV{IDF_PATH}/components/tcpip_adapter/include $ENV{IDF_PATH}/components/lwip/include/apps $ENV{IDF_PATH}/components/nvs_flash/include $ENV{IDF_PATH}/components/esp32/include $ENV{IDF_PATH}/components/spi_flash/include $ENV{IDF_PATH}/components/mdns/include $ENV{IDF_PATH}/components/lwip/lwip/src/include/lwip $ENV{IDF_PATH}/components/lwip/lwip/src/include $ENV{IDF_PATH}/components/lwip/lwip/src/include/lwip $ENV{IDF_PATH}/components/newlib/platform_include )
+endif()
+
if (LWS_WITH_SECURE_STREAMS)
set(LWS_WITH_SECURE_STREAMS_SYS_AUTH_API_AMAZON_COM 1)
endif()
@@ -529,9 +548,9 @@ if (LWS_PLAT_FREERTOS)
set(LWS_WITH_CUSTOM_HEADERS 0)
endif()
-if (LWS_WITH_ESP32)
- set(LWS_WITH_ZIP_FOPS 1)
-endif()
+#if (LWS_WITH_ESP32)
+# set(LWS_WITH_ZIP_FOPS 1)
+#endif()
if (WIN32)
set(LWS_MAX_SMP 1)
@@ -677,7 +696,7 @@ if (LWS_WITH_SSL AND LWS_WITH_WOLFSSL)
endif()
if (LWS_WITH_SSL AND LWS_WITH_MBEDTLS)
- if ("${LWS_MBEDTLS_LIBRARIES}" STREQUAL "" OR "${LWS_MBEDTLS_INCLUDE_DIRS}" STREQUAL "" AND NOT LWS_PLAT_FREERTOS)
+ if ((NOT LWS_MBEDTLS_LIBRARIES OR "${LWS_MBEDTLS_LIBRARIES}" STREQUAL "" OR NOT LWS_MBEDTLS_INCLUDE_DIRS OR "${LWS_MBEDTLS_INCLUDE_DIRS}" STREQUAL "") AND NOT LWS_PLAT_FREERTOS)
find_path(LWS_MBEDTLS_INCLUDE_DIRS mbedtls/ssl.h)
@@ -830,6 +849,9 @@ if (LWS_UNIX_SOCK)
set(LWS_WITH_UNIX_SOCK 1)
endif()
+if (NOT LWS_MAX_SMP)
+ set(LWS_MAX_SMP 1)
+endif()
if ("${LWS_MAX_SMP}" STREQUAL "")
set(LWS_MAX_SMP 1)
endif()
@@ -1039,6 +1061,16 @@ set(LWS_HAVE_WORKING_VFORK LWS_HAVE_VFORK)
CHECK_INCLUDE_FILES("stdlib.h;stdarg.h;string.h;float.h" STDC_HEADERS)
+if (NOT CMAKE_REQUIRED_FLAGS)
+ set(CMAKE_REQUIRED_FLAGS "")
+endif()
+if (NOT CMAKE_REQUIRED_INCLUDES)
+ set(CMAKE_REQUIRED_INCLUDES "")
+endif()
+if (NOT CMAKE_REQUIRED_LIBRARIES)
+ set(CMAKE_REQUIRED_LIBRARIES "")
+endif()
+
CHECK_C_SOURCE_COMPILES("#include <stdint.h>
int main(void) {
intptr_t test = 1;
@@ -1771,6 +1803,8 @@ if (CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX OR COMPILER_IS_CLANG)
endif()
if (LWS_WITH_GCOV)
set (GCOV_FLAGS "-fprofile-arcs -ftest-coverage ")
+ else()
+ set(GCOV_FLAGS "")
endif()
if (LWS_WITH_ASAN)
@@ -1779,6 +1813,8 @@ if (CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX OR COMPILER_IS_CLANG)
set (ASAN_FLAGS "${ASAN_FLAGS} -fsanitize=pointer-compare -fsanitize=pointer-subtract -fsanitize=leak")
endif()
message("Enabling ASAN")
+ else()
+ set(ASAN_FLAGS "")
endif()
check_c_compiler_flag("-Wignored-qualifiers" LWS_GCC_HAS_IGNORED_QUALIFIERS)
@@ -1833,7 +1869,9 @@ endif()
source_group("Headers Private" FILES ${HDR_PRIVATE})
source_group("Headers Public" FILES ${HDR_PUBLIC})
source_group("Sources" FILES ${SOURCES})
-source_group("Resources" FILES ${RESOURCES})
+if (RESOURCES)
+ source_group("Resources" FILES ${RESOURCES})
+endif()
#
# Create the lib.
@@ -1874,6 +1912,9 @@ if (LWS_WITH_STATIC)
endif()
if (LWS_WITH_SHARED)
+ if (NOT RESOURCES)
+ set(RESOURCES "")
+ endif()
add_library(websockets_shared SHARED
${HDR_PRIVATE}
${HDR_PUBLIC}
@@ -2226,6 +2267,10 @@ if (LWS_WITH_ZLIB)
endif()
endif()
+if (NOT VARIA)
+ set(VARIA "")
+endif()
+
CHECK_FUNCTION_EXISTS(${VARIA}SSL_CTX_set1_param LWS_HAVE_SSL_CTX_set1_param)
CHECK_FUNCTION_EXISTS(${VARIA}SSL_set_info_callback LWS_HAVE_SSL_SET_INFO_CALLBACK)
CHECK_FUNCTION_EXISTS(${VARIA}X509_VERIFY_PARAM_set1_host LWS_HAVE_X509_VERIFY_PARAM_set1_host)
@@ -3065,76 +3110,6 @@ set(CPACK_SOURCE_IGNORE_FILES $(CPACK_SOURCE_IGNORE_FILES) "/.git/" "/build/" "\
add_custom_target(dist COMMAND "${CMAKE_MAKE_PROGRAM}" package_source)
-message("---------------------------------------------------------------------")
-message(" Settings: (For more help do cmake -LH <srcpath>)")
-message("---------------------------------------------------------------------")
-message(" LWS_WITH_STATIC = ${LWS_WITH_STATIC}")
-message(" LWS_WITH_SHARED = ${LWS_WITH_SHARED}")
-message(" LWS_WITH_SSL = ${LWS_WITH_SSL} (SSL Support)")
-message(" LWS_SSL_CLIENT_USE_OS_CA_CERTS = ${LWS_SSL_CLIENT_USE_OS_CA_CERTS}")
-message(" LWS_WITH_WOLFSSL = ${LWS_WITH_WOLFSSL} (wolfSSL/CyaSSL replacement for OpenSSL)")
-if (LWS_WITH_WOLFSSL)
- message(" LWS_WOLFSSL_LIBRARIES = ${LWS_WOLFSSL_LIBRARIES}")
- message(" LWS_WOLFSSL_INCLUDE_DIRS = ${LWS_WOLFSSL_INCLUDE_DIRS}")
-endif()
-message(" LWS_WITH_MBEDTLS = ${LWS_WITH_MBEDTLS} (mbedTLS replacement for OpenSSL)")
-message(" LWS_WITHOUT_BUILTIN_SHA1 = ${LWS_WITHOUT_BUILTIN_SHA1}")
-message(" LWS_WITHOUT_BUILTIN_GETIFADDRS = ${LWS_WITHOUT_BUILTIN_GETIFADDRS}")
-message(" LWS_WITHOUT_CLIENT = ${LWS_WITHOUT_CLIENT}")
-message(" LWS_WITHOUT_SERVER = ${LWS_WITHOUT_SERVER}")
-message(" LWS_LINK_TESTAPPS_DYNAMIC = ${LWS_LINK_TESTAPPS_DYNAMIC}")
-message(" LWS_WITHOUT_TESTAPPS = ${LWS_WITHOUT_TESTAPPS}")
-message(" LWS_WITHOUT_TEST_SERVER = ${LWS_WITHOUT_TEST_SERVER}")
-message(" LWS_WITHOUT_TEST_SERVER_EXTPOLL = ${LWS_WITHOUT_TEST_SERVER_EXTPOLL}")
-message(" LWS_WITHOUT_TEST_PING = ${LWS_WITHOUT_TEST_PING}")
-message(" LWS_WITHOUT_TEST_CLIENT = ${LWS_WITHOUT_TEST_CLIENT}")
-message(" LWS_WITHOUT_EXTENSIONS = ${LWS_WITHOUT_EXTENSIONS}")
-message(" LWS_WITHOUT_DAEMONIZE = ${LWS_WITHOUT_DAEMONIZE}")
-message(" LWS_WITH_LIBEV = ${LWS_WITH_LIBEV}")
-message(" LWS_WITH_LIBUV = ${LWS_WITH_LIBUV}")
-message(" LWS_WITH_LIBEVENT = ${LWS_WITH_LIBEVENT}")
-message(" LWS_WITH_GLIB = ${LWS_WITH_GLIB}")
-message(" LWS_IPV6 = ${LWS_IPV6}")
-message(" LWS_UNIX_SOCK = ${LWS_UNIX_SOCK}")
-message(" LWS_WITH_HTTP2 = ${LWS_WITH_HTTP2}")
-message(" LWS_ROLE_MQTT = ${LWS_ROLE_MQTT}")
-message(" LWS_SSL_SERVER_WITH_ECDH_CERT = ${LWS_SSL_SERVER_WITH_ECDH_CERT}")
-message(" LWS_MAX_SMP = ${LWS_MAX_SMP}")
-message(" LWS_HAVE_PTHREAD_H = ${LWS_HAVE_PTHREAD_H}")
-message(" LWS_WITH_CGI = ${LWS_WITH_CGI}")
-message(" LWS_HAVE_OPENSSL_ECDH_H = ${LWS_HAVE_OPENSSL_ECDH_H}")
-message(" LWS_HAVE_SSL_CTX_set1_param = ${LWS_HAVE_SSL_CTX_set1_param}")
-message(" LWS_HAVE_RSA_SET0_KEY = ${LWS_HAVE_RSA_SET0_KEY}")
-message(" LWS_WITH_HTTP_PROXY = ${LWS_WITH_HTTP_PROXY}")
-message(" LIBHUBBUB_LIBRARIES = ${LIBHUBBUB_LIBRARIES}")
-message(" PLUGINS = ${PLUGINS_LIST}")
-message(" LWS_WITH_ACCESS_LOG = ${LWS_WITH_ACCESS_LOG}")
-message(" LWS_WITH_SERVER_STATUS = ${LWS_WITH_SERVER_STATUS}")
-message(" LWS_WITH_LEJP = ${LWS_WITH_LEJP}")
-message(" LWS_WITH_LEJP_CONF = ${LWS_WITH_LEJP_CONF}")
-# this is broken atm
-#message(" LWS_WITH_SMTP = ${LWS_WITH_SMTP}")
-message(" LWS_WITH_GENERIC_SESSIONS = ${LWS_WITH_GENERIC_SESSIONS}")
-message(" LWS_STATIC_PIC = ${LWS_STATIC_PIC}")
-message(" LWS_WITH_RANGES = ${LWS_WITH_RANGES}")
-message(" LWS_PLAT_OPTEE = ${LWS_PLAT_OPTEE}")
-message(" LWS_PLAT_FREERTOS = ${LWS_PLAT_FREERTOS}")
-message(" LWS_WITH_ZIP_FOPS = ${LWS_WITH_ZIP_FOPS}")
-message(" LWS_AVOID_SIGPIPE_IGN = ${LWS_AVOID_SIGPIPE_IGN}")
-message(" LWS_WITH_STATS = ${LWS_WITH_STATS}")
-message(" LWS_WITH_SOCKS5 = ${LWS_WITH_SOCKS5}")
-message(" LWS_HAVE_SYS_CAPABILITY_H = ${LWS_HAVE_SYS_CAPABILITY_H}")
-message(" LWS_HAVE_LIBCAP = ${LWS_HAVE_LIBCAP}")
-message(" LWS_WITH_PEER_LIMITS = ${LWS_WITH_PEER_LIMITS}")
-message(" LWS_HAVE_ATOLL = ${LWS_HAVE_ATOLL}")
-message(" LWS_HAVE__ATOI64 = ${LWS_HAVE__ATOI64}")
-message(" LWS_HAVE_STAT32I64 = ${LWS_HAVE_STAT32I64}")
-message(" LWS_HAS_INTPTR_T = ${LWS_HAS_INTPTR_T}")
-message(" LWS_WITH_EXPORT_LWSTARGETS = ${LWS_WITH_EXPORT_LWSTARGETS}")
-message(" LWS_WITH_ABSTRACT = ${LWS_WITH_ABSTRACT}")
-
-message("---------------------------------------------------------------------")
-
# These will be available to parent projects including libwebsockets using add_subdirectory()
set(LIBWEBSOCKETS_LIBRARIES ${LWS_LIBRARIES} CACHE STRING "Libwebsocket libraries")
if (LWS_WITH_STATIC)