diff options
author | Andy Green <andy@warmcat.com> | 2020-05-14 21:28:48 +0100 |
---|---|---|
committer | Andy Green <andy@warmcat.com> | 2020-05-27 08:40:12 +0100 |
commit | cabe0219555381f23b7231a1c481bbb60291a9c0 (patch) | |
tree | 66ddbdfa26c68a1a75af4498e1aef5c0cb5122a9 /CMakeLists.txt | |
parent | b6641af88d39f9f7c979f4de8514e62dc5fde453 (diff) | |
download | libwebsockets-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.txt | 129 |
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) |