1*1c60b9acSAndroid Build Coastguard Worker# 2*1c60b9acSAndroid Build Coastguard Worker# libwebsockets - small server side websockets and web server implementation 3*1c60b9acSAndroid Build Coastguard Worker# 4*1c60b9acSAndroid Build Coastguard Worker# Copyright (C) 2010 - 2020 Andy Green <[email protected]> 5*1c60b9acSAndroid Build Coastguard Worker# 6*1c60b9acSAndroid Build Coastguard Worker# Permission is hereby granted, free of charge, to any person obtaining a copy 7*1c60b9acSAndroid Build Coastguard Worker# of this software and associated documentation files (the "Software"), to 8*1c60b9acSAndroid Build Coastguard Worker# deal in the Software without restriction, including without limitation the 9*1c60b9acSAndroid Build Coastguard Worker# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or 10*1c60b9acSAndroid Build Coastguard Worker# sell copies of the Software, and to permit persons to whom the Software is 11*1c60b9acSAndroid Build Coastguard Worker# furnished to do so, subject to the following conditions: 12*1c60b9acSAndroid Build Coastguard Worker# 13*1c60b9acSAndroid Build Coastguard Worker# The above copyright notice and this permission notice shall be included in 14*1c60b9acSAndroid Build Coastguard Worker# all copies or substantial portions of the Software. 15*1c60b9acSAndroid Build Coastguard Worker# 16*1c60b9acSAndroid Build Coastguard Worker# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17*1c60b9acSAndroid Build Coastguard Worker# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18*1c60b9acSAndroid Build Coastguard Worker# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19*1c60b9acSAndroid Build Coastguard Worker# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20*1c60b9acSAndroid Build Coastguard Worker# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 21*1c60b9acSAndroid Build Coastguard Worker# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 22*1c60b9acSAndroid Build Coastguard Worker# IN THE SOFTWARE. 23*1c60b9acSAndroid Build Coastguard Worker# 24*1c60b9acSAndroid Build Coastguard Worker 25*1c60b9acSAndroid Build Coastguard Workercmake_minimum_required(VERSION 2.8.12) 26*1c60b9acSAndroid Build Coastguard Workerinclude(CheckFunctionExists) 27*1c60b9acSAndroid Build Coastguard Workerinclude(CheckSymbolExists) 28*1c60b9acSAndroid Build Coastguard Workerinclude(CheckIncludeFile) 29*1c60b9acSAndroid Build Coastguard Workerinclude(CheckIncludeFiles) 30*1c60b9acSAndroid Build Coastguard Workerinclude(CheckLibraryExists) 31*1c60b9acSAndroid Build Coastguard Workerinclude(CheckTypeSize) 32*1c60b9acSAndroid Build Coastguard Workerinclude(CheckCSourceCompiles) 33*1c60b9acSAndroid Build Coastguard Worker 34*1c60b9acSAndroid Build Coastguard Workerif (POLICY CMP0048) 35*1c60b9acSAndroid Build Coastguard Worker cmake_policy(SET CMP0048 NEW) 36*1c60b9acSAndroid Build Coastguard Workerendif() 37*1c60b9acSAndroid Build Coastguard Worker 38*1c60b9acSAndroid Build Coastguard Worker#if (POLICY CMP0024) 39*1c60b9acSAndroid Build Coastguard Worker# cmake_policy(SET CMP0024 NEW) 40*1c60b9acSAndroid Build Coastguard Worker#endif() 41*1c60b9acSAndroid Build Coastguard Worker 42*1c60b9acSAndroid Build Coastguard Workerif (POLICY CMP0075) 43*1c60b9acSAndroid Build Coastguard Worker cmake_policy(SET CMP0075 NEW) 44*1c60b9acSAndroid Build Coastguard Workerendif() 45*1c60b9acSAndroid Build Coastguard Worker 46*1c60b9acSAndroid Build Coastguard Worker# General Advice 47*1c60b9acSAndroid Build Coastguard Worker# 48*1c60b9acSAndroid Build Coastguard Worker# For selecting between DEBUG / RELEASE, use -DCMAKE_BUILD_TYPE=DEBUG or =RELEASE 49*1c60b9acSAndroid Build Coastguard Worker# debug builds include source level debug info and extra logging 50*1c60b9acSAndroid Build Coastguard Worker 51*1c60b9acSAndroid Build Coastguard Workerset(LWS_WITH_BUNDLED_ZLIB_DEFAULT OFF) 52*1c60b9acSAndroid Build Coastguard Workerif(WIN32) 53*1c60b9acSAndroid Build Coastguard Worker set(LWS_WITH_BUNDLED_ZLIB_DEFAULT ON) 54*1c60b9acSAndroid Build Coastguard Workerendif() 55*1c60b9acSAndroid Build Coastguard Worker 56*1c60b9acSAndroid Build Coastguard Workerset(LWS_ROLE_RAW 1) 57*1c60b9acSAndroid Build Coastguard Workerset(LWS_WITH_POLL 1) 58*1c60b9acSAndroid Build Coastguard Worker 59*1c60b9acSAndroid Build Coastguard Workerif (ESP_PLATFORM) 60*1c60b9acSAndroid Build Coastguard Worker set(LWS_ESP_PLATFORM 1) 61*1c60b9acSAndroid Build Coastguard Worker #set(CMAKE_TOOLCHAIN_FILE contrib/cross-esp32.cmake) 62*1c60b9acSAndroid Build Coastguard Worker set(LWIP_PROVIDE_ERRNO 1) 63*1c60b9acSAndroid Build Coastguard Workerendif() 64*1c60b9acSAndroid Build Coastguard Worker 65*1c60b9acSAndroid Build Coastguard Worker# it's at this point any toolchain file is brought in 66*1c60b9acSAndroid Build Coastguard Workerproject(libwebsockets C CXX) 67*1c60b9acSAndroid Build Coastguard Workerinclude(CTest) 68*1c60b9acSAndroid Build Coastguard Worker 69*1c60b9acSAndroid Build Coastguard Workerif (ESP_PLATFORM) 70*1c60b9acSAndroid Build Coastguard Worker include_directories( 71*1c60b9acSAndroid Build Coastguard Worker $ENV{IDF_PATH}/components/esp_hw_support/include/soc/ 72*1c60b9acSAndroid Build Coastguard Worker $ENV{IDF_PATH}/components/freertos/include/ 73*1c60b9acSAndroid Build Coastguard Worker $ENV{IDF_PATH}/components/xtensa/${CONFIG_IDF_TARGET}/include/ 74*1c60b9acSAndroid Build Coastguard Worker $ENV{IDF_PATH}/components/freertos/include/esp_additions 75*1c60b9acSAndroid Build Coastguard Worker $ENV{IDF_PATH}/components/hal/include 76*1c60b9acSAndroid Build Coastguard Worker $ENV{IDF_PATH}/components/soc/${CONFIG_IDF_TARGET}/include/ 77*1c60b9acSAndroid Build Coastguard Worker $ENV{IDF_PATH}/components/soc/include/ 78*1c60b9acSAndroid Build Coastguard Worker $ENV{IDF_PATH}/components/esp_hw_support/include 79*1c60b9acSAndroid Build Coastguard Worker $ENV{IDF_PATH}/components/hal/${CONFIG_IDF_TARGET}/include/ 80*1c60b9acSAndroid Build Coastguard Worker ) 81*1c60b9acSAndroid Build Coastguard Worker 82*1c60b9acSAndroid Build Coastguard Worker if (CONFIG_IDF_TARGET_ARCH_RISCV) 83*1c60b9acSAndroid Build Coastguard Worker include_directories( 84*1c60b9acSAndroid Build Coastguard Worker $ENV{IDF_PATH}/components/freertos/port/riscv/include 85*1c60b9acSAndroid Build Coastguard Worker $ENV{IDF_PATH}/components/riscv/include) 86*1c60b9acSAndroid Build Coastguard Worker else() 87*1c60b9acSAndroid Build Coastguard Worker include_directories( 88*1c60b9acSAndroid Build Coastguard Worker $ENV{IDF_PATH}/components/freertos/port/xtensa/include 89*1c60b9acSAndroid Build Coastguard Worker $ENV{IDF_PATH}/components/xtensa/include) 90*1c60b9acSAndroid Build Coastguard Worker endif() 91*1c60b9acSAndroid Build Coastguard Worker 92*1c60b9acSAndroid Build Coastguard Workerendif() 93*1c60b9acSAndroid Build Coastguard Worker 94*1c60b9acSAndroid Build Coastguard Worker 95*1c60b9acSAndroid Build Coastguard Worker# 96*1c60b9acSAndroid Build Coastguard Worker# Select features recommended for PC distro packaging 97*1c60b9acSAndroid Build Coastguard Worker# 98*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_DISTRO_RECOMMENDED "Enable features recommended for distro packaging" OFF) 99*1c60b9acSAndroid Build Coastguard Workeroption(LWS_FOR_GITOHASHI "Enable features recommended for use with gitohashi" OFF) 100*1c60b9acSAndroid Build Coastguard Worker 101*1c60b9acSAndroid Build Coastguard Worker# 102*1c60b9acSAndroid Build Coastguard Worker# Compiler features 103*1c60b9acSAndroid Build Coastguard Worker# 104*1c60b9acSAndroid Build Coastguard Workeroption(DISABLE_WERROR "Avoid treating compiler warnings as fatal errors" OFF) 105*1c60b9acSAndroid Build Coastguard Worker 106*1c60b9acSAndroid Build Coastguard Worker# 107*1c60b9acSAndroid Build Coastguard Worker# Major individual features 108*1c60b9acSAndroid Build Coastguard Worker# 109*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_NETWORK "Compile with network-related code" ON) 110*1c60b9acSAndroid Build Coastguard Workeroption(LWS_ROLE_H1 "Compile with support for http/1 (needed for ws)" ON) 111*1c60b9acSAndroid Build Coastguard Workeroption(LWS_ROLE_WS "Compile with support for websockets" ON) 112*1c60b9acSAndroid Build Coastguard Workeroption(LWS_ROLE_MQTT "Build with support for MQTT client" OFF) 113*1c60b9acSAndroid Build Coastguard Workeroption(LWS_ROLE_DBUS "Compile with support for DBUS" OFF) 114*1c60b9acSAndroid Build Coastguard Workeroption(LWS_ROLE_RAW_PROXY "Raw packet proxy" OFF) 115*1c60b9acSAndroid Build Coastguard Workeroption(LWS_ROLE_RAW_FILE "Compile with support for raw files" ON) 116*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_HTTP2 "Compile with server support for HTTP/2" ON) 117*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_LWSWS "Libwebsockets Webserver" OFF) 118*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_CGI "Include CGI (spawn process with network-connected stdin/out/err) APIs" OFF) 119*1c60b9acSAndroid Build Coastguard Workeroption(LWS_IPV6 "Compile with support for ipv6" OFF) 120*1c60b9acSAndroid Build Coastguard Workeroption(LWS_UNIX_SOCK "Compile with support for UNIX domain socket if OS supports it" ON) 121*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_PLUGINS "Support plugins for protocols and extensions (implies LWS_WITH_PLUGINS_API)" OFF) 122*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_PLUGINS_BUILTIN "Build the plugin protocols directly into lws library" OFF) 123*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_HTTP_PROXY "Support for active HTTP proxying" ON) 124*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_ZIP_FOPS "Support serving pre-zipped files" OFF) 125*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_SOCKS5 "Allow use of SOCKS5 proxy on client connections" OFF) 126*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_PEER_LIMITS "Track peers and restrict resources a single peer can allocate" OFF) 127*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_ACCESS_LOG "Support generating Apache-compatible access logs" OFF) 128*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_RANGES "Support http ranges (RFC7233)" OFF) 129*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_THREADPOOL "Managed worker thread pool support (relies on pthreads)" OFF) 130*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_HTTP_STREAM_COMPRESSION "Support HTTP stream compression" OFF) 131*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_HTTP_BROTLI "Also offer brotli http stream compression (requires LWS_WITH_HTTP_STREAM_COMPRESSION)" OFF) 132*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_ACME "Enable support for ACME automatic cert acquisition + maintenance (letsencrypt etc)" OFF) 133*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_HUBBUB "Enable libhubbub rewriting support" OFF) 134*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_ALSA "Enable alsa audio example" OFF) 135*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_GTK "Enable gtk example" OFF) 136*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_FTS "Full Text Search support" OFF) 137*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_SYS_ASYNC_DNS "Nonblocking internal IPv4 + IPv6 DNS resolver" OFF) 138*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_SYS_NTPCLIENT "Build in tiny ntpclient good for tls date validation and run via lws_system" OFF) 139*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_SYS_DHCP_CLIENT "Build in tiny DHCP client" OFF) 140*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_HTTP_BASIC_AUTH "Support Basic Auth" ON) 141*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_HTTP_UNCOMMON_HEADERS "Include less common http header support" ON) 142*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_SYS_STATE "lws_system state support" ON) 143*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_SYS_SMD "Lws System Message Distribution" ON) 144*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_SYS_FAULT_INJECTION "Enable fault injection support" OFF) 145*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_SYS_METRICS "Lws Metrics API" OFF) 146*1c60b9acSAndroid Build Coastguard Worker 147*1c60b9acSAndroid Build Coastguard Worker# 148*1c60b9acSAndroid Build Coastguard Worker# Secure Streams 149*1c60b9acSAndroid Build Coastguard Worker# 150*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_SECURE_STREAMS "Secure Streams protocol-agnostic API" OFF) 151*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_SECURE_STREAMS_CPP "Secure Streams C++ classes" OFF) 152*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_SECURE_STREAMS_PROXY_API "Secure Streams support to work across processes" OFF) 153*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_SECURE_STREAMS_SYS_AUTH_API_AMAZON_COM "Auth support for api.amazon.com" OFF) 154*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_SECURE_STREAMS_STATIC_POLICY_ONLY "Secure Streams Policy is hardcoded only" OFF) 155*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_SECURE_STREAMS_AUTH_SIGV4 "Secure Streams Auth support for AWS Sigv4" OFF) 156*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_SECURE_STREAMS_BUFFER_DUMP "Secure Streams protocol buffer dump" OFF) 157*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_SS_DIRECT_PROTOCOL_STR "Secure Streams directly set/get metadata w/o policy" OFF) 158*1c60b9acSAndroid Build Coastguard Worker 159*1c60b9acSAndroid Build Coastguard Worker# 160*1c60b9acSAndroid Build Coastguard Worker# CTest options 161*1c60b9acSAndroid Build Coastguard Worker# 162*1c60b9acSAndroid Build Coastguard Worker# 163*1c60b9acSAndroid Build Coastguard Worker# If you build with LWS_WITH_MINIMAL_EXAMPLES, you can use CTest / make test to run 164*1c60b9acSAndroid Build Coastguard Worker# examples that can give a pass/fail response. By default it runs tests both against 165*1c60b9acSAndroid Build Coastguard Worker# a local server peer and warmcat.com, if your CI wants to do the tests but does not 166*1c60b9acSAndroid Build Coastguard Worker# have internet routing, then you can still run a subset of tests with CTest / make 167*1c60b9acSAndroid Build Coastguard Worker# test that only does local tests by disabling this option. 168*1c60b9acSAndroid Build Coastguard Worker# 169*1c60b9acSAndroid Build Coastguard Workeroption(LWS_CTEST_INTERNET_AVAILABLE "CTest will performs tests that need the Internet" ON) 170*1c60b9acSAndroid Build Coastguard Worker 171*1c60b9acSAndroid Build Coastguard Worker# 172*1c60b9acSAndroid Build Coastguard Worker# TLS library options... all except mbedTLS are basically OpenSSL variants. 173*1c60b9acSAndroid Build Coastguard Worker# 174*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_SSL "Include SSL support (defaults to OpenSSL or similar, mbedTLS if LWS_WITH_MBEDTLS is set)" ON) 175*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_MBEDTLS "Use mbedTLS (>=2.0) replacement for OpenSSL. When setting this, you also may need to specify LWS_MBEDTLS_LIBRARIES and LWS_MBEDTLS_INCLUDE_DIRS" OFF) 176*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_BORINGSSL "Use BoringSSL replacement for OpenSSL" OFF) 177*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_CYASSL "Use CyaSSL replacement for OpenSSL. When setting this, you also need to specify LWS_CYASSL_LIBRARIES and LWS_CYASSL_INCLUDE_DIRS" OFF) 178*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_WOLFSSL "Use wolfSSL replacement for OpenSSL. When setting this, you also need to specify LWS_WOLFSSL_LIBRARIES and LWS_WOLFSSL_INCLUDE_DIRS" OFF) 179*1c60b9acSAndroid Build Coastguard Workeroption(LWS_SSL_CLIENT_USE_OS_CA_CERTS "SSL support should make use of the OS-installed CA root certs" ON) 180*1c60b9acSAndroid Build Coastguard Workeroption(LWS_TLS_LOG_PLAINTEXT_RX "For debugging log the received plaintext as soon as decrypted" OFF) 181*1c60b9acSAndroid Build Coastguard Workeroption(LWS_TLS_LOG_PLAINTEXT_TX "For debugging log the transmitted plaintext just before encryption" OFF) 182*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_TLS_SESSIONS "Enable persistent, resumable TLS sessions" ON) 183*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_TLS_JIT_TRUST "Enable dynamically computing which trusted TLS CA is needed to be instantiated" OFF) 184*1c60b9acSAndroid Build Coastguard Worker 185*1c60b9acSAndroid Build Coastguard Worker# 186*1c60b9acSAndroid Build Coastguard Worker# Event library options (may select multiple, or none for default poll() 187*1c60b9acSAndroid Build Coastguard Worker# 188*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_LIBEV "Compile with support for libev" OFF) 189*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_LIBUV "Compile with support for libuv" OFF) 190*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_LIBEVENT "Compile with support for libevent" OFF) 191*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_GLIB "Compile with support for glib event loop" OFF) 192*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_SDEVENT "Compile with support for sd-event loop" OFF) 193*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_ULOOP "Compile with support for uloop" OFF) 194*1c60b9acSAndroid Build Coastguard Worker 195*1c60b9acSAndroid Build Coastguard Workerif (UNIX) 196*1c60b9acSAndroid Build Coastguard Worker# since v4.1, on unix platforms default is build any event libs as runtime plugins 197*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_EVLIB_PLUGINS "Compile event lib support into runtime-selected plugins" ON) 198*1c60b9acSAndroid Build Coastguard Workerelse() 199*1c60b9acSAndroid Build Coastguard Worker# otherwise default to linking the event lib(s) to libwebsockets.so 200*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_EVLIB_PLUGINS "Compile event lib support into runtime-selected plugins" OFF) 201*1c60b9acSAndroid Build Coastguard Workerendif() 202*1c60b9acSAndroid Build Coastguard Worker# 203*1c60b9acSAndroid Build Coastguard Worker# LWS Drivers 204*1c60b9acSAndroid Build Coastguard Worker# 205*1c60b9acSAndroid Build Coastguard Worker 206*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_DRIVERS "With generic drivers for gpio, i2c, display etc" OFF) 207*1c60b9acSAndroid Build Coastguard Worker 208*1c60b9acSAndroid Build Coastguard Worker# 209*1c60b9acSAndroid Build Coastguard Worker# Static / Dynamic build options 210*1c60b9acSAndroid Build Coastguard Worker# 211*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_STATIC "Build the static version of the library" ON) 212*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_SHARED "Build the shared version of the library" ON) 213*1c60b9acSAndroid Build Coastguard Workeroption(LWS_LINK_TESTAPPS_DYNAMIC "Link the test apps to the shared version of the library. Default is to link statically" OFF) 214*1c60b9acSAndroid Build Coastguard Workeroption(LWS_STATIC_PIC "Build the static version of the library with position-independent code" OFF) 215*1c60b9acSAndroid Build Coastguard Workeroption(LWS_SUPPRESS_DEPRECATED_API_WARNINGS "Turn off complaints about, eg, openssl 3 deprecated api usage" ON) 216*1c60b9acSAndroid Build Coastguard Worker 217*1c60b9acSAndroid Build Coastguard Worker# 218*1c60b9acSAndroid Build Coastguard Worker# Specific platforms 219*1c60b9acSAndroid Build Coastguard Worker# 220*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_ESP32 "Build for ESP32" OFF) 221*1c60b9acSAndroid Build Coastguard Workeroption(LWS_PLAT_OPTEE "Build for OPTEE" OFF) 222*1c60b9acSAndroid Build Coastguard Workeroption(LWS_PLAT_FREERTOS "Build for FreeRTOS" OFF) 223*1c60b9acSAndroid Build Coastguard Workeroption(LWS_PLAT_ANDROID "Android flavour of unix platform" OFF) 224*1c60b9acSAndroid Build Coastguard Worker 225*1c60b9acSAndroid Build Coastguard Worker# 226*1c60b9acSAndroid Build Coastguard Worker# Client / Server / Test Apps build control 227*1c60b9acSAndroid Build Coastguard Worker# 228*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITHOUT_CLIENT "Don't build the client part of the library" OFF) 229*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITHOUT_SERVER "Don't build the server part of the library" OFF) 230*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITHOUT_TESTAPPS "Don't build the libwebsocket-test-apps" OFF) 231*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITHOUT_TEST_SERVER "Don't build the test server" OFF) 232*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITHOUT_TEST_SERVER_EXTPOLL "Don't build the test server version that uses external poll" OFF) 233*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITHOUT_TEST_PING "Don't build the ping test application" OFF) 234*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITHOUT_TEST_CLIENT "Don't build the client test application" OFF) 235*1c60b9acSAndroid Build Coastguard Worker# 236*1c60b9acSAndroid Build Coastguard Worker# Extensions (permessage-deflate) 237*1c60b9acSAndroid Build Coastguard Worker# 238*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITHOUT_EXTENSIONS "Don't compile with extensions" ON) 239*1c60b9acSAndroid Build Coastguard Worker# 240*1c60b9acSAndroid Build Coastguard Worker# Helpers + misc 241*1c60b9acSAndroid Build Coastguard Worker# 242*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITHOUT_BUILTIN_GETIFADDRS "Don't use the BSD getifaddrs implementation from libwebsockets if it is missing (this will result in a compilation error) ... The default is to assume that your libc provides it. On some systems such as uclibc it doesn't exist." OFF) 243*1c60b9acSAndroid Build Coastguard Workeroption(LWS_FALLBACK_GETHOSTBYNAME "Also try to do dns resolution using gethostbyname if getaddrinfo fails" OFF) 244*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITHOUT_BUILTIN_SHA1 "Don't build the lws sha-1 (eg, because openssl will provide it" OFF) 245*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITHOUT_DAEMONIZE "Don't build the daemonization api" ON) 246*1c60b9acSAndroid Build Coastguard Workeroption(LWS_SSL_SERVER_WITH_ECDH_CERT "Include SSL server use ECDH certificate" OFF) 247*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_LEJP "With the Lightweight JSON Parser" ON) 248*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_CBOR "With the Lightweight LECP CBOR Parser" OFF) 249*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_CBOR_FLOAT "Build floating point types if building CBOR LECP" ON) 250*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_SQLITE3 "Require SQLITE3 support" OFF) 251*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_STRUCT_JSON "Generic struct serialization to and from JSON" OFF) 252*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_STRUCT_SQLITE3 "Generic struct serialization to and from SQLITE3" OFF) 253*1c60b9acSAndroid Build Coastguard Worker# broken atm 254*1c60b9acSAndroid Build Coastguard Worker#option(LWS_WITH_SMTP "Provide SMTP support" OFF) 255*1c60b9acSAndroid Build Coastguard Workerif (LWS_WITH_ESP32) 256*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_DIR "Directory scanning api support" OFF) 257*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_LEJP_CONF "With LEJP configuration parser as used by lwsws" OFF) 258*1c60b9acSAndroid Build Coastguard Workerelse() 259*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_DIR "Directory scanning api support" ON) 260*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_LEJP_CONF "With LEJP configuration parser as used by lwsws" ON) 261*1c60b9acSAndroid Build Coastguard Workerendif() 262*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_NO_LOGS "Disable all logging other than _err and _user from being compiled in" OFF) 263*1c60b9acSAndroid Build Coastguard Workerset(LWS_LOGGING_BITFIELD_SET 0 CACHE STRING "Bitfield describing which log levels to force included into the build") 264*1c60b9acSAndroid Build Coastguard Workerset(LWS_LOGGING_BITFIELD_CLEAR 0 CACHE STRING "Bitfield describing which log levels to force removed from the build") 265*1c60b9acSAndroid Build Coastguard Workeroption(LWS_LOGS_TIMESTAMP "Timestamp at start of logs" ON) 266*1c60b9acSAndroid Build Coastguard Workeroption(LWS_LOG_TAG_LIFECYCLE "Log tagged object lifecycle as NOTICE" ON) 267*1c60b9acSAndroid Build Coastguard Workeroption(LWS_AVOID_SIGPIPE_IGN "Android 7+ reportedly needs this" OFF) 268*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_JOSE "JOSE JSON Web Signature / Encryption / Keys (RFC7515/6/) API" OFF) 269*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_COSE "COSE CBOR Signature / Encryption / Keys (RFC8152) API" OFF) 270*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_GENCRYPTO "Enable support for Generic Crypto apis independent of TLS backend" OFF) 271*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_SELFTESTS "Selftests run at context creation" OFF) 272*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_GCOV "Build with gcc gcov coverage instrumentation" OFF) 273*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_EXPORT_LWSTARGETS "Export libwebsockets CMake targets. Disable if they conflict with an outer cmake project." ON) 274*1c60b9acSAndroid Build Coastguard Workeroption(LWS_REPRODUCIBLE "Build libwebsockets reproducible. It removes the build user and hostname from the build" ON) 275*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_MINIMAL_EXAMPLES "Also build the normally standalone minimal examples, for QA" OFF) 276*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_LWSAC "lwsac Chunk Allocation api" ON) 277*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_CUSTOM_HEADERS "Store and allow querying custom HTTP headers (H1 only)" ON) 278*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_DISKCACHE "Hashed cache directory with lazy LRU deletion to size limit (unrelated to lws_cache_ttl)" OFF) 279*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_ASAN "Build with gcc runtime sanitizer options enabled (needs libasan)" OFF) 280*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_LEJP_CONF "With LEJP configuration parser as used by lwsws" OFF) 281*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_ZLIB "Include zlib support (required for extensions)" OFF) 282*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_BUNDLED_ZLIB "Use bundled zlib version (Windows only)" ${LWS_WITH_BUNDLED_ZLIB_DEFAULT}) 283*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_MINIZ "Use miniz instead of zlib" OFF) 284*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_SEQUENCER "lws_seq_t support" OFF) 285*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_EXTERNAL_POLL "Support external POLL integration using callback messages (not recommended)" OFF) 286*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_LWS_DSH "Support lws_dsh_t Disordered Shared Heap" OFF) 287*1c60b9acSAndroid Build Coastguard Workeroption(LWS_CLIENT_HTTP_PROXYING "Support external http proxies for client connections" ON) 288*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_FILE_OPS "Support file operations vfs" ON) 289*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_UDP "Platform supports UDP" ON) 290*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_SPAWN "Spawn subprocesses with piped stdin/out/stderr" OFF) 291*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_FSMOUNT "Overlayfs and fallback mounting apis" OFF) 292*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_FANALYZER "Enable gcc -fanalyzer if compiler supports" OFF) 293*1c60b9acSAndroid Build Coastguard Workeroption(LWS_HTTP_HEADERS_ALL "Override header reduction optimization and include all like older lws versions" OFF) 294*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_SUL_DEBUGGING "Enable zombie lws_sul checking on object deletion" OFF) 295*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_PLUGINS_API "Build generic lws_plugins apis (see LWS_WITH_PLUGINS to also build protocol plugins)" OFF) 296*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_CONMON "Collect introspectable connection latency stats on individual client connections" ON) 297*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITHOUT_EVENTFD "Force using pipe instead of eventfd" OFF) 298*1c60b9acSAndroid Build Coastguard Workerif (UNIX OR WIN32) 299*1c60b9acSAndroid Build Coastguard Worker option(LWS_WITH_CACHE_NSCOOKIEJAR "Build file-backed lws-cache-ttl that uses netscape cookie jar format (linux-only)" ON) 300*1c60b9acSAndroid Build Coastguard Workerelse() 301*1c60b9acSAndroid Build Coastguard Worker option(LWS_WITH_CACHE_NSCOOKIEJAR "Build file-backed lws-cache-ttl that uses netscape cookie jar format (linux-only)" OFF) 302*1c60b9acSAndroid Build Coastguard Workerendif() 303*1c60b9acSAndroid Build Coastguard Worker 304*1c60b9acSAndroid Build Coastguard Workerif (${CMAKE_SYSTEM_NAME} MATCHES "Linux") 305*1c60b9acSAndroid Build Coastguard Worker option(LWS_WITH_NETLINK "Monitor Netlink for Routing Table changes" ON) 306*1c60b9acSAndroid Build Coastguard Workerelse() 307*1c60b9acSAndroid Build Coastguard Worker set(LWS_WITH_NETLINK 0) 308*1c60b9acSAndroid Build Coastguard Workerendif() 309*1c60b9acSAndroid Build Coastguard Worker 310*1c60b9acSAndroid Build Coastguard Workerif (${CMAKE_SYSTEM_NAME} MATCHES "SunOS") 311*1c60b9acSAndroid Build Coastguard Worker # its openssl has md5 deprecated 312*1c60b9acSAndroid Build Coastguard Worker set(LWS_SUPPRESS_DEPRECATED_API_WARNINGS 1) 313*1c60b9acSAndroid Build Coastguard Workerendif() 314*1c60b9acSAndroid Build Coastguard Worker 315*1c60b9acSAndroid Build Coastguard Worker 316*1c60b9acSAndroid Build Coastguard Worker# 317*1c60b9acSAndroid Build Coastguard Worker# to use miniz, enable both LWS_WITH_ZLIB and LWS_WITH_MINIZ 318*1c60b9acSAndroid Build Coastguard Worker# 319*1c60b9acSAndroid Build Coastguard Worker# End of user settings 320*1c60b9acSAndroid Build Coastguard Worker# 321*1c60b9acSAndroid Build Coastguard Worker 322*1c60b9acSAndroid Build Coastguard Worker# sets of sub-options implied by other options 323*1c60b9acSAndroid Build Coastguard Worker# 324*1c60b9acSAndroid Build Coastguard Workerset(LIB_LIST "") 325*1c60b9acSAndroid Build Coastguard Workerset(LIB_LIST_AT_END) 326*1c60b9acSAndroid Build Coastguard Workerset(LWS_LIBRARIES) 327*1c60b9acSAndroid Build Coastguard Workerset(LWS_OPENSSL_SUPPORT 0) 328*1c60b9acSAndroid Build Coastguard Workerinclude(CMakeLists-implied-options.txt) 329*1c60b9acSAndroid Build Coastguard Worker 330*1c60b9acSAndroid Build Coastguard Worker# 331*1c60b9acSAndroid Build Coastguard Worker# Structural helpers for cmake in subdirs 332*1c60b9acSAndroid Build Coastguard Worker# 333*1c60b9acSAndroid Build Coastguard Worker 334*1c60b9acSAndroid Build Coastguard Workermacro(add_subdir_include_directories arg1) 335*1c60b9acSAndroid Build Coastguard Worker add_subdirectory(${arg1}) 336*1c60b9acSAndroid Build Coastguard Worker include_directories(${_CMAKE_INC_LIST}) 337*1c60b9acSAndroid Build Coastguard Workerendmacro() 338*1c60b9acSAndroid Build Coastguard Worker 339*1c60b9acSAndroid Build Coastguard Workermacro(exports_to_parent_scope) 340*1c60b9acSAndroid Build Coastguard Worker set(SOURCES ${SOURCES} PARENT_SCOPE) 341*1c60b9acSAndroid Build Coastguard Worker if (LIB_LIST) 342*1c60b9acSAndroid Build Coastguard Worker set(LIB_LIST ${LIB_LIST} PARENT_SCOPE) 343*1c60b9acSAndroid Build Coastguard Worker endif() 344*1c60b9acSAndroid Build Coastguard Worker get_property(_CURR DIRECTORY PROPERTY INCLUDE_DIRECTORIES) 345*1c60b9acSAndroid Build Coastguard Worker set(_CMAKE_INC_LIST ${_CURR} PARENT_SCOPE) 346*1c60b9acSAndroid Build Coastguard Worker if (LWS_LIB_BUILD_INC_PATHS) 347*1c60b9acSAndroid Build Coastguard Worker set(LWS_LIB_BUILD_INC_PATHS ${LWS_LIB_BUILD_INC_PATHS} PARENT_SCOPE) 348*1c60b9acSAndroid Build Coastguard Worker endif() 349*1c60b9acSAndroid Build Coastguard Workerendmacro() 350*1c60b9acSAndroid Build Coastguard Worker 351*1c60b9acSAndroid Build Coastguard Workermacro(export_to_parent_intermediate) 352*1c60b9acSAndroid Build Coastguard Worker set(SOURCES ${SOURCES} PARENT_SCOPE) 353*1c60b9acSAndroid Build Coastguard Worker if (LIB_LIST) 354*1c60b9acSAndroid Build Coastguard Worker set(LIB_LIST ${LIB_LIST} PARENT_SCOPE) 355*1c60b9acSAndroid Build Coastguard Worker endif() 356*1c60b9acSAndroid Build Coastguard Worker set(_CMAKE_INC_LIST ${_CMAKE_INC_LIST} PARENT_SCOPE) 357*1c60b9acSAndroid Build Coastguard Worker if (LWS_LIB_BUILD_INC_PATHS) 358*1c60b9acSAndroid Build Coastguard Worker set(LWS_LIB_BUILD_INC_PATHS ${LWS_LIB_BUILD_INC_PATHS} PARENT_SCOPE) 359*1c60b9acSAndroid Build Coastguard Worker endif() 360*1c60b9acSAndroid Build Coastguard Workerendmacro() 361*1c60b9acSAndroid Build Coastguard Worker 362*1c60b9acSAndroid Build Coastguard Worker# 363*1c60b9acSAndroid Build Coastguard Worker# Try to find the current Git hash 364*1c60b9acSAndroid Build Coastguard Worker# 365*1c60b9acSAndroid Build Coastguard Worker 366*1c60b9acSAndroid Build Coastguard Workerfind_package(Git) 367*1c60b9acSAndroid Build Coastguard Workerif(GIT_EXECUTABLE) 368*1c60b9acSAndroid Build Coastguard Worker execute_process( 369*1c60b9acSAndroid Build Coastguard Worker WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" 370*1c60b9acSAndroid Build Coastguard Worker COMMAND "${GIT_EXECUTABLE}" describe --tags --always 371*1c60b9acSAndroid Build Coastguard Worker OUTPUT_VARIABLE GIT_HASH 372*1c60b9acSAndroid Build Coastguard Worker OUTPUT_STRIP_TRAILING_WHITESPACE 373*1c60b9acSAndroid Build Coastguard Worker ) 374*1c60b9acSAndroid Build Coastguard Worker set(LWS_BUILD_HASH ${GIT_HASH}) 375*1c60b9acSAndroid Build Coastguard Worker 376*1c60b9acSAndroid Build Coastguard Worker # append the build user and hostname 377*1c60b9acSAndroid Build Coastguard Worker if (NOT LWS_REPRODUCIBLE) 378*1c60b9acSAndroid Build Coastguard Worker execute_process( 379*1c60b9acSAndroid Build Coastguard Worker WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" 380*1c60b9acSAndroid Build Coastguard Worker COMMAND "whoami" 381*1c60b9acSAndroid Build Coastguard Worker OUTPUT_VARIABLE GIT_USER 382*1c60b9acSAndroid Build Coastguard Worker OUTPUT_STRIP_TRAILING_WHITESPACE 383*1c60b9acSAndroid Build Coastguard Worker ) 384*1c60b9acSAndroid Build Coastguard Worker execute_process( 385*1c60b9acSAndroid Build Coastguard Worker WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" 386*1c60b9acSAndroid Build Coastguard Worker COMMAND "hostname" 387*1c60b9acSAndroid Build Coastguard Worker OUTPUT_VARIABLE GIT_HOST 388*1c60b9acSAndroid Build Coastguard Worker OUTPUT_STRIP_TRAILING_WHITESPACE 389*1c60b9acSAndroid Build Coastguard Worker ) 390*1c60b9acSAndroid Build Coastguard Worker string(REGEX REPLACE "([^\\])[\\]([^\\])" "\\1\\\\\\\\\\2" GIT_USER ${GIT_USER}) 391*1c60b9acSAndroid Build Coastguard Worker set(LWS_BUILD_HASH ${GIT_USER}@${GIT_HOST}-${GIT_HASH}) 392*1c60b9acSAndroid Build Coastguard Worker endif() 393*1c60b9acSAndroid Build Coastguard Worker 394*1c60b9acSAndroid Build Coastguard Worker message("Git commit hash: ${LWS_BUILD_HASH}") 395*1c60b9acSAndroid Build Coastguard Workerendif() 396*1c60b9acSAndroid Build Coastguard Worker 397*1c60b9acSAndroid Build Coastguard Workerif ("${LWS_BUILD_HASH}" STREQUAL "") 398*1c60b9acSAndroid Build Coastguard Worker set(LWS_BUILD_HASH "unknown") 399*1c60b9acSAndroid Build Coastguard Workerendif() 400*1c60b9acSAndroid Build Coastguard Worker 401*1c60b9acSAndroid Build Coastguard Workerset(PACKAGE "libwebsockets") 402*1c60b9acSAndroid Build Coastguard Workerset(CPACK_RPM_PACKAGE_LICENSE "MIT") 403*1c60b9acSAndroid Build Coastguard Workerset(CPACK_PACKAGE_NAME "${PACKAGE}") 404*1c60b9acSAndroid Build Coastguard Workerset(CPACK_PACKAGE_VERSION_MAJOR "4") 405*1c60b9acSAndroid Build Coastguard Workerset(CPACK_PACKAGE_VERSION_MINOR "3") 406*1c60b9acSAndroid Build Coastguard Workerset(CPACK_PACKAGE_VERSION_PATCH_NUMBER "0") 407*1c60b9acSAndroid Build Coastguard Worker 408*1c60b9acSAndroid Build Coastguard Workerset(CPACK_PACKAGE_VERSION_PATCH "${CPACK_PACKAGE_VERSION_PATCH_NUMBER}-${LWS_BUILD_HASH}") 409*1c60b9acSAndroid Build Coastguard Workerset(CPACK_PACKAGE_RELEASE 1) 410*1c60b9acSAndroid Build Coastguard Worker 411*1c60b9acSAndroid Build Coastguard Workerset(CPACK_PACKAGE_VERSION "${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}") 412*1c60b9acSAndroid Build Coastguard Workerset(CPACK_PACKAGE_VENDOR "[email protected]") 413*1c60b9acSAndroid Build Coastguard Workerset(CPACK_PACKAGE_CONTACT "[email protected]") 414*1c60b9acSAndroid Build Coastguard Workerset(CPACK_PACKAGE_DESCRIPTION_SUMMARY "${PACKAGE} ${CPACK_PACKAGE_VERSION}") 415*1c60b9acSAndroid Build Coastguard Workerset(SOVERSION "19") 416*1c60b9acSAndroid Build Coastguard Workerif(NOT CPACK_GENERATOR) 417*1c60b9acSAndroid Build Coastguard Worker if(UNIX) 418*1c60b9acSAndroid Build Coastguard Worker set(CPACK_GENERATOR "TGZ") 419*1c60b9acSAndroid Build Coastguard Worker else() 420*1c60b9acSAndroid Build Coastguard Worker set(CPACK_GENERATOR "ZIP") 421*1c60b9acSAndroid Build Coastguard Worker endif() 422*1c60b9acSAndroid Build Coastguard Workerendif() 423*1c60b9acSAndroid Build Coastguard Workerset(CPACK_SOURCE_GENERATOR "TGZ") 424*1c60b9acSAndroid Build Coastguard Workerset(CPACK_SOURCE_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}") 425*1c60b9acSAndroid Build Coastguard Workerset(VERSION "${CPACK_PACKAGE_VERSION}") 426*1c60b9acSAndroid Build Coastguard Worker 427*1c60b9acSAndroid Build Coastguard Workerset(CPACK_RPM_PACKAGE_RELEASE_DIST ON) 428*1c60b9acSAndroid Build Coastguard Workerset(CPACK_RPM_FILE_NAME "RPM-DEFAULT") 429*1c60b9acSAndroid Build Coastguard Worker# below makes path length problems in CI 430*1c60b9acSAndroid Build Coastguard Workerset(CPACK_RPM_DEBUGINFO_PACKAGE OFF) 431*1c60b9acSAndroid Build Coastguard Worker# below makes some kind of chimera rpm with binaries and sources 432*1c60b9acSAndroid Build Coastguard Workerset(CPACK_RPM_PACKAGE_SOURCES OFF) 433*1c60b9acSAndroid Build Coastguard Workerset(CPACK_RPM_INSTALL_WITH_EXEC ON) 434*1c60b9acSAndroid Build Coastguard Workerset(CPACK_RPM_COMPONENT_INSTALL ON) 435*1c60b9acSAndroid Build Coastguard Worker 436*1c60b9acSAndroid Build Coastguard Workerset(CPACK_DEBIAN_FILE_NAME "DEB-DEFAULT") 437*1c60b9acSAndroid Build Coastguard Workerset(CPACK_DEBIAN_PACKAGE_SHLIBDEPS ON) 438*1c60b9acSAndroid Build Coastguard Workerset(CPACK_DEBIAN_DEBUGINFO_PACKAGE ON) 439*1c60b9acSAndroid Build Coastguard Workerset(CPACK_DEBIAN_PACKAGE_SOURCE ON) 440*1c60b9acSAndroid Build Coastguard Workerset(CPACK_DEBIAN_COMPONENT_INSTALL ON) 441*1c60b9acSAndroid Build Coastguard Worker 442*1c60b9acSAndroid Build Coastguard Worker 443*1c60b9acSAndroid Build Coastguard Workerset(LWS_LIBRARY_VERSION ${CPACK_PACKAGE_VERSION}) 444*1c60b9acSAndroid Build Coastguard Workerset(LWS_LIBRARY_VERSION_MAJOR ${CPACK_PACKAGE_VERSION_MAJOR}) 445*1c60b9acSAndroid Build Coastguard Workerset(LWS_LIBRARY_VERSION_MINOR ${CPACK_PACKAGE_VERSION_MINOR}) 446*1c60b9acSAndroid Build Coastguard Workerset(LWS_LIBRARY_VERSION_PATCH ${CPACK_PACKAGE_VERSION_PATCH_NUMBER}) 447*1c60b9acSAndroid Build Coastguard Workerset(LWS_LIBRARY_VERSION_PATCH_ELABORATED ${CPACK_PACKAGE_VERSION_PATCH}) 448*1c60b9acSAndroid Build Coastguard Worker 449*1c60b9acSAndroid Build Coastguard Workerif (NOT CMAKE_MODULE_PATH) 450*1c60b9acSAndroid Build Coastguard Worker set(CMAKE_MODULE_PATH "") 451*1c60b9acSAndroid Build Coastguard Workerendif() 452*1c60b9acSAndroid Build Coastguard Workerset(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${PROJECT_SOURCE_DIR}/cmake/") 453*1c60b9acSAndroid Build Coastguard Worker 454*1c60b9acSAndroid Build Coastguard Worker 455*1c60b9acSAndroid Build Coastguard Workerif (CMAKE_TOOLCHAIN_FILE) 456*1c60b9acSAndroid Build Coastguard Worker message(STATUS "CMAKE_TOOLCHAIN_FILE='${CMAKE_TOOLCHAIN_FILE}'") 457*1c60b9acSAndroid Build Coastguard Workerendif() 458*1c60b9acSAndroid Build Coastguard Worker 459*1c60b9acSAndroid Build Coastguard Workerif (NOT LIB_SUFFIX) 460*1c60b9acSAndroid Build Coastguard Worker set(LIB_SUFFIX "") 461*1c60b9acSAndroid Build Coastguard Workerendif() 462*1c60b9acSAndroid Build Coastguard Worker 463*1c60b9acSAndroid Build Coastguard Workerif (WIN32) 464*1c60b9acSAndroid Build Coastguard Worker configure_file(${CMAKE_CURRENT_SOURCE_DIR}/win32port/version.rc.in ${CMAKE_CURRENT_BINARY_DIR}/win32port/version.rc @ONLY) 465*1c60b9acSAndroid Build Coastguard Worker set(RESOURCES ${CMAKE_CURRENT_BINARY_DIR}/win32port/version.rc) 466*1c60b9acSAndroid Build Coastguard Workerendif() 467*1c60b9acSAndroid Build Coastguard Worker 468*1c60b9acSAndroid Build Coastguard Workerinclude_directories(include) 469*1c60b9acSAndroid Build Coastguard Worker 470*1c60b9acSAndroid Build Coastguard Worker# Allow the user to override installation directories. 471*1c60b9acSAndroid Build Coastguard Workerset(LWS_INSTALL_LIB_DIR lib CACHE PATH "Installation directory for libraries") 472*1c60b9acSAndroid Build Coastguard Workerset(LWS_INSTALL_BIN_DIR bin CACHE PATH "Installation directory for executables") 473*1c60b9acSAndroid Build Coastguard Workerset(LWS_INSTALL_INCLUDE_DIR include CACHE PATH "Installation directory for header files") 474*1c60b9acSAndroid Build Coastguard Workerset(LWS_INSTALL_EXAMPLES_DIR bin CACHE PATH "Installation directory for example files") 475*1c60b9acSAndroid Build Coastguard Worker 476*1c60b9acSAndroid Build Coastguard Worker# if you gave LWS_WITH_MINIZ, point to MINIZ here if not found 477*1c60b9acSAndroid Build Coastguard Worker# automatically 478*1c60b9acSAndroid Build Coastguard Worker 479*1c60b9acSAndroid Build Coastguard Workerset(LWS_ZLIB_LIBRARIES CACHE PATH "Path to the zlib/miniz library") 480*1c60b9acSAndroid Build Coastguard Workerset(LWS_ZLIB_INCLUDE_DIRS CACHE PATH "Path to the zlib/miniz include directory") 481*1c60b9acSAndroid Build Coastguard Workerset(LWS_SQLITE3_LIBRARIES CACHE PATH "Path to the sqlite3 library") 482*1c60b9acSAndroid Build Coastguard Workerset(LWS_SQLITE3_INCLUDE_DIRS CACHE PATH "Path to the sqlite3 include directory") 483*1c60b9acSAndroid Build Coastguard Workerset(LWS_LIBMOUNT_INCLUDE_DIRS CACHE PATH "Path to the libmount include directory") 484*1c60b9acSAndroid Build Coastguard Workerset(LWS_LIBMOUNT_LIBRARIES CACHE PATH "Path to the libmount library") 485*1c60b9acSAndroid Build Coastguard Worker# on unix, these are in the toolchain. On win32 you have to put them somewhere 486*1c60b9acSAndroid Build Coastguard Worker# yourself and point to them here 487*1c60b9acSAndroid Build Coastguard Workerset(LWS_EXT_PTHREAD_INCLUDE_DIR CACHE PATH "Path to an external pthreads include directory") 488*1c60b9acSAndroid Build Coastguard Workerset(LWS_EXT_PTHREAD_LIBRARIES CACHE PATH "Path to an external pthreads library") 489*1c60b9acSAndroid Build Coastguard Worker 490*1c60b9acSAndroid Build Coastguard Worker 491*1c60b9acSAndroid Build Coastguard Workerif (LWS_WITH_HTTP_STREAM_COMPRESSION) 492*1c60b9acSAndroid Build Coastguard Worker set(LWS_WITH_ZLIB 1) 493*1c60b9acSAndroid Build Coastguard Workerendif() 494*1c60b9acSAndroid Build Coastguard Worker 495*1c60b9acSAndroid Build Coastguard Workerif (LWS_WITH_ZLIB AND NOT LWS_WITH_BUNDLED_ZLIB) 496*1c60b9acSAndroid Build Coastguard Worker if ("${LWS_ZLIB_LIBRARIES}" STREQUAL "" OR "${LWS_ZLIB_INCLUDE_DIRS}" STREQUAL "") 497*1c60b9acSAndroid Build Coastguard Worker else() 498*1c60b9acSAndroid Build Coastguard Worker set(ZLIB_LIBRARIES ${LWS_ZLIB_LIBRARIES}) 499*1c60b9acSAndroid Build Coastguard Worker set(ZLIB_INCLUDE_DIRS ${LWS_ZLIB_INCLUDE_DIRS}) 500*1c60b9acSAndroid Build Coastguard Worker set(ZLIB_FOUND 1) 501*1c60b9acSAndroid Build Coastguard Worker endif() 502*1c60b9acSAndroid Build Coastguard Workerendif() 503*1c60b9acSAndroid Build Coastguard Worker 504*1c60b9acSAndroid Build Coastguard Worker 505*1c60b9acSAndroid Build Coastguard Workerif (LWS_WITH_SQLITE3) 506*1c60b9acSAndroid Build Coastguard Worker if ("${LWS_SQLITE3_LIBRARIES}" STREQUAL "" OR "${LWS_SQLITE3_INCLUDE_DIRS}" STREQUAL "") 507*1c60b9acSAndroid Build Coastguard Worker else() 508*1c60b9acSAndroid Build Coastguard Worker set(SQLITE3_LIBRARIES ${LWS_SQLITE3_LIBRARIES}) 509*1c60b9acSAndroid Build Coastguard Worker set(SQLITE3_INCLUDE_DIRS ${LWS_SQLITE3_INCLUDE_DIRS}) 510*1c60b9acSAndroid Build Coastguard Worker set(SQLITE3_FOUND 1) 511*1c60b9acSAndroid Build Coastguard Worker endif() 512*1c60b9acSAndroid Build Coastguard Workerendif() 513*1c60b9acSAndroid Build Coastguard Worker 514*1c60b9acSAndroid Build Coastguard Workerinclude_directories("${PROJECT_BINARY_DIR}") 515*1c60b9acSAndroid Build Coastguard Worker 516*1c60b9acSAndroid Build Coastguard Worker# Check for different inline keyword versions. 517*1c60b9acSAndroid Build Coastguard Workerforeach(KEYWORD "inline" "__inline__" "__inline") 518*1c60b9acSAndroid Build Coastguard Worker set(CMAKE_REQUIRED_DEFINITIONS "-DKEYWORD=${KEYWORD}") 519*1c60b9acSAndroid Build Coastguard Worker CHECK_C_SOURCE_COMPILES( 520*1c60b9acSAndroid Build Coastguard Worker " 521*1c60b9acSAndroid Build Coastguard Worker #include <stdio.h> 522*1c60b9acSAndroid Build Coastguard Worker static KEYWORD void a() {} 523*1c60b9acSAndroid Build Coastguard Worker int main(int argc, char **argv) { a(); return 0; } 524*1c60b9acSAndroid Build Coastguard Worker " LWS_HAVE_${KEYWORD}) 525*1c60b9acSAndroid Build Coastguard Workerendforeach() 526*1c60b9acSAndroid Build Coastguard Worker 527*1c60b9acSAndroid Build Coastguard Workerif (NOT LWS_HAVE_inline) 528*1c60b9acSAndroid Build Coastguard Worker if (LWS_HAVE___inline__) 529*1c60b9acSAndroid Build Coastguard Worker set(inline __inline__) 530*1c60b9acSAndroid Build Coastguard Worker elseif(LWS_HAVE___inline) 531*1c60b9acSAndroid Build Coastguard Worker set(inline __inline) 532*1c60b9acSAndroid Build Coastguard Worker endif() 533*1c60b9acSAndroid Build Coastguard Workerendif() 534*1c60b9acSAndroid Build Coastguard Worker 535*1c60b9acSAndroid Build Coastguard Worker# Put the libraries and binaries that get built into directories at the 536*1c60b9acSAndroid Build Coastguard Worker# top of the build tree rather than in hard-to-find leaf directories. 537*1c60b9acSAndroid Build Coastguard WorkerSET(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/bin") 538*1c60b9acSAndroid Build Coastguard WorkerSET(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/lib") 539*1c60b9acSAndroid Build Coastguard WorkerSET(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/lib") 540*1c60b9acSAndroid Build Coastguard Worker 541*1c60b9acSAndroid Build Coastguard WorkerSET(LWS_INSTALL_PATH "${CMAKE_INSTALL_PREFIX}") 542*1c60b9acSAndroid Build Coastguard Worker 543*1c60b9acSAndroid Build Coastguard Worker# Put absolute path of dynamic libraries into the object code. Some 544*1c60b9acSAndroid Build Coastguard Worker# architectures, notably Mac OS X, need this. 545*1c60b9acSAndroid Build Coastguard WorkerSET(CMAKE_INSTALL_NAME_DIR "${CMAKE_INSTALL_PREFIX}/${LWS_INSTALL_LIB_DIR}${LIB_SUFFIX}") 546*1c60b9acSAndroid Build Coastguard Worker 547*1c60b9acSAndroid Build Coastguard Workerif (LWS_WITHOUT_BUILTIN_SHA1) 548*1c60b9acSAndroid Build Coastguard Worker set(LWS_SHA1_USE_OPENSSL_NAME 1) 549*1c60b9acSAndroid Build Coastguard Workerendif() 550*1c60b9acSAndroid Build Coastguard Worker 551*1c60b9acSAndroid Build Coastguard WorkerCHECK_C_SOURCE_COMPILES( 552*1c60b9acSAndroid Build Coastguard Worker "#include <malloc.h> 553*1c60b9acSAndroid Build Coastguard Worker int main(int argc, char **argv) { return malloc_trim(0); } 554*1c60b9acSAndroid Build Coastguard Worker " LWS_HAVE_MALLOC_TRIM) 555*1c60b9acSAndroid Build Coastguard WorkerCHECK_C_SOURCE_COMPILES( 556*1c60b9acSAndroid Build Coastguard Worker "#include <malloc.h> 557*1c60b9acSAndroid Build Coastguard Worker int main(int argc, char **argv) { return (int)malloc_usable_size((void *)0); } 558*1c60b9acSAndroid Build Coastguard Worker " LWS_HAVE_MALLOC_USABLE_SIZE) 559*1c60b9acSAndroid Build Coastguard Worker 560*1c60b9acSAndroid Build Coastguard WorkerCHECK_FUNCTION_EXISTS(fork LWS_HAVE_FORK) 561*1c60b9acSAndroid Build Coastguard WorkerCHECK_FUNCTION_EXISTS(getenv LWS_HAVE_GETENV) 562*1c60b9acSAndroid Build Coastguard WorkerCHECK_FUNCTION_EXISTS(malloc LWS_HAVE_MALLOC) 563*1c60b9acSAndroid Build Coastguard WorkerCHECK_FUNCTION_EXISTS(memset LWS_HAVE_MEMSET) 564*1c60b9acSAndroid Build Coastguard WorkerCHECK_FUNCTION_EXISTS(realloc LWS_HAVE_REALLOC) 565*1c60b9acSAndroid Build Coastguard WorkerCHECK_FUNCTION_EXISTS(socket LWS_HAVE_SOCKET) 566*1c60b9acSAndroid Build Coastguard WorkerCHECK_FUNCTION_EXISTS(strerror LWS_HAVE_STRERROR) 567*1c60b9acSAndroid Build Coastguard WorkerCHECK_FUNCTION_EXISTS(vfork LWS_HAVE_VFORK) 568*1c60b9acSAndroid Build Coastguard WorkerCHECK_FUNCTION_EXISTS(execvpe LWS_HAVE_EXECVPE) 569*1c60b9acSAndroid Build Coastguard WorkerCHECK_FUNCTION_EXISTS(getifaddrs LWS_HAVE_GETIFADDRS) 570*1c60b9acSAndroid Build Coastguard WorkerCHECK_FUNCTION_EXISTS(snprintf LWS_HAVE_SNPRINTF) 571*1c60b9acSAndroid Build Coastguard WorkerCHECK_FUNCTION_EXISTS(_snprintf LWS_HAVE__SNPRINTF) 572*1c60b9acSAndroid Build Coastguard WorkerCHECK_FUNCTION_EXISTS(_vsnprintf LWS_HAVE__VSNPRINTF) 573*1c60b9acSAndroid Build Coastguard WorkerCHECK_FUNCTION_EXISTS(getloadavg LWS_HAVE_GETLOADAVG) 574*1c60b9acSAndroid Build Coastguard WorkerCHECK_FUNCTION_EXISTS(atoll LWS_HAVE_ATOLL) 575*1c60b9acSAndroid Build Coastguard WorkerCHECK_FUNCTION_EXISTS(_atoi64 LWS_HAVE__ATOI64) 576*1c60b9acSAndroid Build Coastguard WorkerCHECK_FUNCTION_EXISTS(_stat32i64 LWS_HAVE__STAT32I64) 577*1c60b9acSAndroid Build Coastguard WorkerCHECK_FUNCTION_EXISTS(clock_gettime LWS_HAVE_CLOCK_GETTIME) 578*1c60b9acSAndroid Build Coastguard WorkerCHECK_FUNCTION_EXISTS(localtime_r LWS_HAVE_LOCALTIME_R) 579*1c60b9acSAndroid Build Coastguard WorkerCHECK_FUNCTION_EXISTS(gmtime_r LWS_HAVE_GMTIME_R) 580*1c60b9acSAndroid Build Coastguard WorkerCHECK_FUNCTION_EXISTS(ctime_r LWS_HAVE_CTIME_R) 581*1c60b9acSAndroid Build Coastguard WorkerCHECK_FUNCTION_EXISTS(getgrgid_r LWS_HAVE_GETGRGID_R) 582*1c60b9acSAndroid Build Coastguard WorkerCHECK_FUNCTION_EXISTS(getgrnam_r LWS_HAVE_GETGRNAM_R) 583*1c60b9acSAndroid Build Coastguard WorkerCHECK_FUNCTION_EXISTS(getpwuid_r LWS_HAVE_GETPWUID_R) 584*1c60b9acSAndroid Build Coastguard WorkerCHECK_FUNCTION_EXISTS(getpwnam_r LWS_HAVE_GETPWNAM_R) 585*1c60b9acSAndroid Build Coastguard WorkerCHECK_FUNCTION_EXISTS(timegm LWS_HAVE_TIMEGM) 586*1c60b9acSAndroid Build Coastguard Worker 587*1c60b9acSAndroid Build Coastguard Workerif(CMAKE_SYSTEM_NAME MATCHES "Darwin") 588*1c60b9acSAndroid Build Coastguard Worker if(CMAKE_OSX_DEPLOYMENT_TARGET LESS "10.12") 589*1c60b9acSAndroid Build Coastguard Worker message("No clock_gettime found on macOS ${CMAKE_OSX_DEPLOYMENT_TARGET}. Disabling LWS_HAVE_CLOCK_GETTIME.") 590*1c60b9acSAndroid Build Coastguard Worker set(LWS_HAVE_CLOCK_GETTIME 0) 591*1c60b9acSAndroid Build Coastguard Worker endif() 592*1c60b9acSAndroid Build Coastguard Workerendif() 593*1c60b9acSAndroid Build Coastguard Worker 594*1c60b9acSAndroid Build Coastguard Workerif (NOT LWS_HAVE_GETIFADDRS) 595*1c60b9acSAndroid Build Coastguard Worker if (LWS_WITHOUT_BUILTIN_GETIFADDRS) 596*1c60b9acSAndroid Build Coastguard Worker message(FATAL_ERROR "No getifaddrs was found on the system. Turn off the LWS_WITHOUT_BUILTIN_GETIFADDRS compile option to use the supplied BSD version.") 597*1c60b9acSAndroid Build Coastguard Worker endif() 598*1c60b9acSAndroid Build Coastguard Worker set(LWS_BUILTIN_GETIFADDRS 1) 599*1c60b9acSAndroid Build Coastguard Workerendif() 600*1c60b9acSAndroid Build Coastguard Worker 601*1c60b9acSAndroid Build Coastguard Workerif (LWS_EXT_PTHREAD_INCLUDE_DIR) 602*1c60b9acSAndroid Build Coastguard Worker set(CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES};${LWS_EXT_PTHREAD_INCLUDE_DIR}) 603*1c60b9acSAndroid Build Coastguard Worker include_directories(${LWS_EXT_PTHREAD_INCLUDE_DIR}) 604*1c60b9acSAndroid Build Coastguard Worker 605*1c60b9acSAndroid Build Coastguard Worker list(APPEND LIB_LIST_AT_END ${LWS_EXT_PTHREAD_LIBRARIES}) 606*1c60b9acSAndroid Build Coastguard Worker set(CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS} " -DHAVE_STRUCT_TIMESPEC=1") 607*1c60b9acSAndroid Build Coastguard Workerendif() 608*1c60b9acSAndroid Build Coastguard Worker 609*1c60b9acSAndroid Build Coastguard Worker# 610*1c60b9acSAndroid Build Coastguard Worker# add libs here that need to be at the end of the link order 611*1c60b9acSAndroid Build Coastguard Worker# 612*1c60b9acSAndroid Build Coastguard Worker 613*1c60b9acSAndroid Build Coastguard Workerif (LWS_EXT_PTHREAD_INCLUDE_DIR) 614*1c60b9acSAndroid Build Coastguard Worker list(APPEND LIB_LIST_AT_END ${LWS_EXT_PTHREAD_LIBRARIES}) 615*1c60b9acSAndroid Build Coastguard Workerendif() 616*1c60b9acSAndroid Build Coastguard Worker 617*1c60b9acSAndroid Build Coastguard Workerif (LWS_WITH_ZLIB AND NOT LWS_WITH_BUNDLED_ZLIB) 618*1c60b9acSAndroid Build Coastguard Worker list(APPEND LIB_LIST_AT_END "${ZLIB_LIBRARIES}") 619*1c60b9acSAndroid Build Coastguard Workerendif() 620*1c60b9acSAndroid Build Coastguard Worker 621*1c60b9acSAndroid Build Coastguard Workerif (LWS_WITH_PLUGINS_API AND UNIX AND CMAKE_DL_LIBS AND NOT (${CMAKE_SYSTEM_NAME} MATCHES "QNX")) 622*1c60b9acSAndroid Build Coastguard Worker list(APPEND LIB_LIST_AT_END ${CMAKE_DL_LIBS}) 623*1c60b9acSAndroid Build Coastguard Workerendif() 624*1c60b9acSAndroid Build Coastguard Worker 625*1c60b9acSAndroid Build Coastguard Worker 626*1c60b9acSAndroid Build Coastguard WorkerCHECK_INCLUDE_FILE(in6addr.h LWS_HAVE_IN6ADDR_H) 627*1c60b9acSAndroid Build Coastguard WorkerCHECK_INCLUDE_FILE(memory.h LWS_HAVE_MEMORY_H) 628*1c60b9acSAndroid Build Coastguard WorkerCHECK_INCLUDE_FILE(netinet/in.h LWS_HAVE_NETINET_IN_H) 629*1c60b9acSAndroid Build Coastguard WorkerCHECK_INCLUDE_FILE(stdint.h LWS_HAVE_STDINT_H) 630*1c60b9acSAndroid Build Coastguard WorkerCHECK_INCLUDE_FILE(stdlib.h LWS_HAVE_STDLIB_H) 631*1c60b9acSAndroid Build Coastguard WorkerCHECK_INCLUDE_FILE(strings.h LWS_HAVE_STRINGS_H) 632*1c60b9acSAndroid Build Coastguard WorkerCHECK_INCLUDE_FILE(string.h LWS_HAVE_STRING_H) 633*1c60b9acSAndroid Build Coastguard WorkerCHECK_INCLUDE_FILE(sys/prctl.h LWS_HAVE_SYS_PRCTL_H) 634*1c60b9acSAndroid Build Coastguard WorkerCHECK_INCLUDE_FILE(sys/socket.h LWS_HAVE_SYS_SOCKET_H) 635*1c60b9acSAndroid Build Coastguard WorkerCHECK_INCLUDE_FILE(sys/sockio.h LWS_HAVE_SYS_SOCKIO_H) 636*1c60b9acSAndroid Build Coastguard WorkerCHECK_INCLUDE_FILE(sys/stat.h LWS_HAVE_SYS_STAT_H) 637*1c60b9acSAndroid Build Coastguard WorkerCHECK_INCLUDE_FILE(sys/types.h LWS_HAVE_SYS_TYPES_H) 638*1c60b9acSAndroid Build Coastguard WorkerCHECK_INCLUDE_FILE(unistd.h LWS_HAVE_UNISTD_H) 639*1c60b9acSAndroid Build Coastguard WorkerCHECK_INCLUDE_FILE(vfork.h LWS_HAVE_VFORK_H) 640*1c60b9acSAndroid Build Coastguard WorkerCHECK_INCLUDE_FILE(sys/capability.h LWS_HAVE_SYS_CAPABILITY_H) 641*1c60b9acSAndroid Build Coastguard WorkerCHECK_INCLUDE_FILE(malloc.h LWS_HAVE_MALLOC_H) 642*1c60b9acSAndroid Build Coastguard WorkerCHECK_INCLUDE_FILE(pthread.h LWS_HAVE_PTHREAD_H) 643*1c60b9acSAndroid Build Coastguard WorkerCHECK_INCLUDE_FILE(inttypes.h LWS_HAVE_INTTYPES_H) 644*1c60b9acSAndroid Build Coastguard WorkerCHECK_INCLUDE_FILE(sys/resource.h LWS_HAVE_SYS_RESOURCE_H) 645*1c60b9acSAndroid Build Coastguard Worker 646*1c60b9acSAndroid Build Coastguard Workerif (WIN32 OR MSVC) 647*1c60b9acSAndroid Build Coastguard Worker CHECK_C_SOURCE_COMPILES("#include <winsock2.h> 648*1c60b9acSAndroid Build Coastguard Worker #include <afunix.h> 649*1c60b9acSAndroid Build Coastguard Worker int main() { return 0; }" LWS_HAVE_WIN32_AFUNIX_H) 650*1c60b9acSAndroid Build Coastguard Worker 651*1c60b9acSAndroid Build Coastguard Worker if (LWS_UNIX_SOCK AND NOT LWS_HAVE_WIN32_AFUNIX_H) 652*1c60b9acSAndroid Build Coastguard Worker message("No afunix.h found. Disabling LWS_UNIX_SOCK.") 653*1c60b9acSAndroid Build Coastguard Worker set(LWS_WITH_UNIX_SOCK OFF) 654*1c60b9acSAndroid Build Coastguard Worker endif() 655*1c60b9acSAndroid Build Coastguard Workerendif() 656*1c60b9acSAndroid Build Coastguard Worker 657*1c60b9acSAndroid Build Coastguard WorkerCHECK_LIBRARY_EXISTS(cap cap_set_flag "" LWS_HAVE_LIBCAP) 658*1c60b9acSAndroid Build Coastguard Worker 659*1c60b9acSAndroid Build Coastguard Worker 660*1c60b9acSAndroid Build Coastguard Workerif (LWS_WITH_ZLIB AND NOT LWS_WITH_BUNDLED_ZLIB) 661*1c60b9acSAndroid Build Coastguard Worker if (LWS_WITH_MINIZ) 662*1c60b9acSAndroid Build Coastguard Worker CHECK_INCLUDE_FILE(miniz.h LWS_HAVE_ZLIB_H) 663*1c60b9acSAndroid Build Coastguard Worker else() 664*1c60b9acSAndroid Build Coastguard Worker CHECK_INCLUDE_FILE(zlib.h LWS_HAVE_ZLIB_H) 665*1c60b9acSAndroid Build Coastguard Worker endif() 666*1c60b9acSAndroid Build Coastguard Workerendif() 667*1c60b9acSAndroid Build Coastguard Worker 668*1c60b9acSAndroid Build Coastguard WorkerCHECK_INCLUDE_FILES("stdlib.h;stdarg.h;string.h" STDC_HEADERS) 669*1c60b9acSAndroid Build Coastguard Worker 670*1c60b9acSAndroid Build Coastguard Workerif (NOT CMAKE_REQUIRED_FLAGS) 671*1c60b9acSAndroid Build Coastguard Worker set(CMAKE_REQUIRED_FLAGS "") 672*1c60b9acSAndroid Build Coastguard Workerendif() 673*1c60b9acSAndroid Build Coastguard Workerif (NOT CMAKE_REQUIRED_INCLUDES) 674*1c60b9acSAndroid Build Coastguard Worker set(CMAKE_REQUIRED_INCLUDES "") 675*1c60b9acSAndroid Build Coastguard Workerendif() 676*1c60b9acSAndroid Build Coastguard Workerif (NOT CMAKE_REQUIRED_LIBRARIES) 677*1c60b9acSAndroid Build Coastguard Worker set(CMAKE_REQUIRED_LIBRARIES "") 678*1c60b9acSAndroid Build Coastguard Workerendif() 679*1c60b9acSAndroid Build Coastguard Worker 680*1c60b9acSAndroid Build Coastguard WorkerCHECK_C_SOURCE_COMPILES("#include <stdint.h> 681*1c60b9acSAndroid Build Coastguard Worker int main(void) { 682*1c60b9acSAndroid Build Coastguard Worker intptr_t test = 1; 683*1c60b9acSAndroid Build Coastguard Worker return 0; 684*1c60b9acSAndroid Build Coastguard Worker }" LWS_HAS_INTPTR_T) 685*1c60b9acSAndroid Build Coastguard Worker 686*1c60b9acSAndroid Build Coastguard Workerif ((CMAKE_C_COMPILER_ID MATCHES "Clang") OR 687*1c60b9acSAndroid Build Coastguard Worker (CMAKE_CXX_COMPILER_ID MATCHES "Clang")) 688*1c60b9acSAndroid Build Coastguard Worker set(COMPILER_IS_CLANG ON) 689*1c60b9acSAndroid Build Coastguard Workerendif() 690*1c60b9acSAndroid Build Coastguard Worker 691*1c60b9acSAndroid Build Coastguard Workerif (LWS_HAVE_PTHREAD_H AND NOT LWS_PLAT_FREERTOS) 692*1c60b9acSAndroid Build Coastguard Worker CHECK_C_SOURCE_COMPILES(" 693*1c60b9acSAndroid Build Coastguard Worker #ifndef _GNU_SOURCE 694*1c60b9acSAndroid Build Coastguard Worker #define _GNU_SOURCE 695*1c60b9acSAndroid Build Coastguard Worker #endif 696*1c60b9acSAndroid Build Coastguard Worker #include <pthread.h> 697*1c60b9acSAndroid Build Coastguard Worker int main(void) { 698*1c60b9acSAndroid Build Coastguard Worker #ifdef __PTW32_H 699*1c60b9acSAndroid Build Coastguard Worker pthread_t th = {0,0}; 700*1c60b9acSAndroid Build Coastguard Worker #else 701*1c60b9acSAndroid Build Coastguard Worker pthread_t th = 0; 702*1c60b9acSAndroid Build Coastguard Worker #endif 703*1c60b9acSAndroid Build Coastguard Worker pthread_setname_np(th, NULL); 704*1c60b9acSAndroid Build Coastguard Worker return 0; 705*1c60b9acSAndroid Build Coastguard Worker }" LWS_HAS_PTHREAD_SETNAME_NP) 706*1c60b9acSAndroid Build Coastguard Workerendif() 707*1c60b9acSAndroid Build Coastguard Worker 708*1c60b9acSAndroid Build Coastguard WorkerCHECK_C_SOURCE_COMPILES("#include <stddef.h> 709*1c60b9acSAndroid Build Coastguard Worker #include <getopt.h> 710*1c60b9acSAndroid Build Coastguard Worker int main(void) { 711*1c60b9acSAndroid Build Coastguard Worker void *p = (void *)getopt_long; 712*1c60b9acSAndroid Build Coastguard Worker return p != NULL; 713*1c60b9acSAndroid Build Coastguard Worker }" LWS_HAS_GETOPT_LONG) 714*1c60b9acSAndroid Build Coastguard Worker 715*1c60b9acSAndroid Build Coastguard WorkerCHECK_C_SOURCE_COMPILES("#include <linux/rtnetlink.h> 716*1c60b9acSAndroid Build Coastguard Worker int main(void) { 717*1c60b9acSAndroid Build Coastguard Worker int test = RTA_PREF; 718*1c60b9acSAndroid Build Coastguard Worker return 0; 719*1c60b9acSAndroid Build Coastguard Worker }" LWS_HAVE_RTA_PREF) 720*1c60b9acSAndroid Build Coastguard Worker 721*1c60b9acSAndroid Build Coastguard WorkerCHECK_C_SOURCE_COMPILES("#include <sys/types.h> 722*1c60b9acSAndroid Build Coastguard Worker int main(void) { 723*1c60b9acSAndroid Build Coastguard Worker suseconds_t x = 0; 724*1c60b9acSAndroid Build Coastguard Worker return (int)x; 725*1c60b9acSAndroid Build Coastguard Worker }" LWS_HAVE_SUSECONDS_T) 726*1c60b9acSAndroid Build Coastguard Worker 727*1c60b9acSAndroid Build Coastguard Workerif (NOT PID_T_SIZE) 728*1c60b9acSAndroid Build Coastguard Worker set(pid_t int) 729*1c60b9acSAndroid Build Coastguard Workerendif() 730*1c60b9acSAndroid Build Coastguard Worker 731*1c60b9acSAndroid Build Coastguard Workerif (NOT SIZE_T_SIZE) 732*1c60b9acSAndroid Build Coastguard Worker set(size_t "unsigned int") 733*1c60b9acSAndroid Build Coastguard Workerendif() 734*1c60b9acSAndroid Build Coastguard Worker 735*1c60b9acSAndroid Build Coastguard Workerif (NOT LWS_HAVE_MALLOC) 736*1c60b9acSAndroid Build Coastguard Worker set(malloc rpl_malloc) 737*1c60b9acSAndroid Build Coastguard Workerendif() 738*1c60b9acSAndroid Build Coastguard Worker 739*1c60b9acSAndroid Build Coastguard Workerif (NOT LWS_HAVE_REALLOC) 740*1c60b9acSAndroid Build Coastguard Worker set(realloc rpl_realloc) 741*1c60b9acSAndroid Build Coastguard Workerendif() 742*1c60b9acSAndroid Build Coastguard Worker 743*1c60b9acSAndroid Build Coastguard Worker 744*1c60b9acSAndroid Build Coastguard Worker 745*1c60b9acSAndroid Build Coastguard Worker 746*1c60b9acSAndroid Build Coastguard Workerif (CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX OR COMPILER_IS_CLANG) 747*1c60b9acSAndroid Build Coastguard Worker include (CheckCCompilerFlag) 748*1c60b9acSAndroid Build Coastguard Worker CHECK_C_COMPILER_FLAG(-fvisibility=hidden LWS_HAVE_VISIBILITY) 749*1c60b9acSAndroid Build Coastguard Worker if (LWS_WITH_FANALYZER) 750*1c60b9acSAndroid Build Coastguard Worker CHECK_C_COMPILER_FLAG(-fanalyzer LWS_HAVE_FANALYZER) 751*1c60b9acSAndroid Build Coastguard Worker endif() 752*1c60b9acSAndroid Build Coastguard Worker if (LWS_HAVE_VISIBILITY) 753*1c60b9acSAndroid Build Coastguard Worker set(VISIBILITY_FLAG -fvisibility=hidden) 754*1c60b9acSAndroid Build Coastguard Worker endif() 755*1c60b9acSAndroid Build Coastguard Worker if (LWS_WITH_GCOV) 756*1c60b9acSAndroid Build Coastguard Worker set (GCOV_FLAGS "-fprofile-arcs -ftest-coverage ") 757*1c60b9acSAndroid Build Coastguard Worker else() 758*1c60b9acSAndroid Build Coastguard Worker set(GCOV_FLAGS "") 759*1c60b9acSAndroid Build Coastguard Worker endif() 760*1c60b9acSAndroid Build Coastguard Worker 761*1c60b9acSAndroid Build Coastguard Worker if (LWS_WITH_ASAN) 762*1c60b9acSAndroid Build Coastguard Worker set (ASAN_FLAGS "-fsanitize=address -fsanitize=undefined -fsanitize-address-use-after-scope -fsanitize-undefined-trap-on-error") 763*1c60b9acSAndroid Build Coastguard Worker if (NOT COMPILER_IS_CLANG) 764*1c60b9acSAndroid Build Coastguard Worker set (ASAN_FLAGS "${ASAN_FLAGS} -fsanitize=pointer-compare -fsanitize=pointer-subtract -fsanitize=leak") 765*1c60b9acSAndroid Build Coastguard Worker endif() 766*1c60b9acSAndroid Build Coastguard Worker message("Enabling ASAN") 767*1c60b9acSAndroid Build Coastguard Worker else() 768*1c60b9acSAndroid Build Coastguard Worker set(ASAN_FLAGS "") 769*1c60b9acSAndroid Build Coastguard Worker endif() 770*1c60b9acSAndroid Build Coastguard Worker 771*1c60b9acSAndroid Build Coastguard Worker check_c_compiler_flag("-Wignored-qualifiers" LWS_GCC_HAS_IGNORED_QUALIFIERS) 772*1c60b9acSAndroid Build Coastguard Worker check_c_compiler_flag("-Wtype-limits" LWS_GCC_HAS_TYPE_LIMITS) 773*1c60b9acSAndroid Build Coastguard Worker check_c_compiler_flag("-Wno-deprecated-declarations" LWS_GCC_HAS_NO_DEPRECATED_DECLARATIONS) 774*1c60b9acSAndroid Build Coastguard Worker 775*1c60b9acSAndroid Build Coastguard Worker if (LWS_GCC_HAS_IGNORED_QUALIFIERS) 776*1c60b9acSAndroid Build Coastguard Worker set(CMAKE_C_FLAGS "-Wignored-qualifiers ${CMAKE_C_FLAGS}" ) 777*1c60b9acSAndroid Build Coastguard Worker endif() 778*1c60b9acSAndroid Build Coastguard Worker 779*1c60b9acSAndroid Build Coastguard Worker if (LWS_GCC_HAS_TYPE_LIMITS) 780*1c60b9acSAndroid Build Coastguard Worker set(CMAKE_C_FLAGS "-Wtype-limits ${CMAKE_C_FLAGS}" ) 781*1c60b9acSAndroid Build Coastguard Worker endif() 782*1c60b9acSAndroid Build Coastguard Worker 783*1c60b9acSAndroid Build Coastguard Worker if (LWS_WITH_FANALYZER AND LWS_HAVE_FANALYZER) 784*1c60b9acSAndroid Build Coastguard Worker set(CMAKE_C_FLAGS "-fanalyzer ${CMAKE_C_FLAGS}" ) 785*1c60b9acSAndroid Build Coastguard Worker endif() 786*1c60b9acSAndroid Build Coastguard Worker 787*1c60b9acSAndroid Build Coastguard Worker if (CMAKE_COMPILER_IS_CLANG OR CMAKE_C_COMPILER_VERSION VERSION_GREATER 4.4) 788*1c60b9acSAndroid Build Coastguard Worker set(CMAKE_C_FLAGS "-Wuninitialized ${CMAKE_C_FLAGS}") 789*1c60b9acSAndroid Build Coastguard Worker endif() 790*1c60b9acSAndroid Build Coastguard Worker 791*1c60b9acSAndroid Build Coastguard Worker # always warn all and generate debug info 792*1c60b9acSAndroid Build Coastguard Worker if (UNIX AND NOT LWS_PLAT_FREERTOS) 793*1c60b9acSAndroid Build Coastguard Worker set(CMAKE_C_FLAGS "-Wall -Wextra -Wno-unused-parameter -Wconversion -Wsign-compare -Wstrict-aliasing ${VISIBILITY_FLAG} -Wundef ${GCOV_FLAGS} ${CMAKE_C_FLAGS} ${ASAN_FLAGS}" ) 794*1c60b9acSAndroid Build Coastguard Worker else() 795*1c60b9acSAndroid Build Coastguard Worker set(CMAKE_C_FLAGS "-Wall -Wsign-compare ${VISIBILITY_FLAG} ${GCOV_FLAGS} ${CMAKE_C_FLAGS}" ) 796*1c60b9acSAndroid Build Coastguard Worker endif() 797*1c60b9acSAndroid Build Coastguard Worker 798*1c60b9acSAndroid Build Coastguard Worker if ("${DISABLE_WERROR}" STREQUAL "OFF") 799*1c60b9acSAndroid Build Coastguard Worker set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Werror") 800*1c60b9acSAndroid Build Coastguard Worker endif() 801*1c60b9acSAndroid Build Coastguard Worker 802*1c60b9acSAndroid Build Coastguard Worker if (LWS_SUPPRESS_DEPRECATED_API_WARNINGS) 803*1c60b9acSAndroid Build Coastguard Worker set(CMAKE_C_FLAGS "-Wno-deprecated ${CMAKE_C_FLAGS}") 804*1c60b9acSAndroid Build Coastguard Worker if (LWS_GCC_HAS_NO_DEPRECATED_DECLARATIONS) 805*1c60b9acSAndroid Build Coastguard Worker set(CMAKE_C_FLAGS "-Wno-deprecated-declarations ${CMAKE_C_FLAGS}") 806*1c60b9acSAndroid Build Coastguard Worker endif() 807*1c60b9acSAndroid Build Coastguard Worker endif() 808*1c60b9acSAndroid Build Coastguard Workerendif () 809*1c60b9acSAndroid Build Coastguard Worker 810*1c60b9acSAndroid Build Coastguard Workerif ((CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX) AND NOT LWS_WITHOUT_TESTAPPS) 811*1c60b9acSAndroid Build Coastguard Worker if (UNIX AND LWS_HAVE_PTHREAD_H AND NOT (${CMAKE_SYSTEM_NAME} MATCHES "QNX")) 812*1c60b9acSAndroid Build Coastguard Worker # jeez clang understands -pthread but dies if he sees it at link time! 813*1c60b9acSAndroid Build Coastguard Worker # http://stackoverflow.com/questions/2391194/what-is-gs-pthread-equiv-in-clang 814*1c60b9acSAndroid Build Coastguard Worker set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -pthread" ) 815*1c60b9acSAndroid Build Coastguard Worker list(APPEND LIB_LIST_AT_END -lpthread) 816*1c60b9acSAndroid Build Coastguard Worker endif() 817*1c60b9acSAndroid Build Coastguard Workerendif() 818*1c60b9acSAndroid Build Coastguard Worker 819*1c60b9acSAndroid Build Coastguard Workerif (COMPILER_IS_CLANG) 820*1c60b9acSAndroid Build Coastguard Worker 821*1c60b9acSAndroid Build Coastguard Worker # otherwise osx blows a bunch of openssl deprecated api errors 822*1c60b9acSAndroid Build Coastguard Worker set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-deprecated-declarations" ) 823*1c60b9acSAndroid Build Coastguard Worker if (UNIX AND LWS_HAVE_PTHREAD_H) 824*1c60b9acSAndroid Build Coastguard Worker set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -pthread -Wno-error=unused-command-line-argument" ) 825*1c60b9acSAndroid Build Coastguard Worker endif() 826*1c60b9acSAndroid Build Coastguard Workerendif() 827*1c60b9acSAndroid Build Coastguard Worker 828*1c60b9acSAndroid Build Coastguard Workerif (WINCE) 829*1c60b9acSAndroid Build Coastguard Worker list(APPEND LIB_LIST_AT_END ws2.lib) 830*1c60b9acSAndroid Build Coastguard Workerelseif (WIN32) 831*1c60b9acSAndroid Build Coastguard Worker list(APPEND LIB_LIST_AT_END ws2_32.lib userenv.lib psapi.lib iphlpapi.lib crypt32.lib) 832*1c60b9acSAndroid Build Coastguard Workerendif() 833*1c60b9acSAndroid Build Coastguard Worker 834*1c60b9acSAndroid Build Coastguard Workerif (MSVC) 835*1c60b9acSAndroid Build Coastguard Worker # Turn off pointless microsoft security warnings. 836*1c60b9acSAndroid Build Coastguard Worker add_definitions(-D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE) 837*1c60b9acSAndroid Build Coastguard Worker # Fail the build if any warnings 838*1c60b9acSAndroid Build Coastguard Worker add_compile_options(/W3 /WX) 839*1c60b9acSAndroid Build Coastguard Worker # Unbreak MSVC broken preprocessor __VA_ARGS__ behaviour 840*1c60b9acSAndroid Build Coastguard Worker add_compile_options(/Zc:preprocessor /experimental:preprocessor /wd5105) 841*1c60b9acSAndroid Build Coastguard Workerendif(MSVC) 842*1c60b9acSAndroid Build Coastguard Worker 843*1c60b9acSAndroid Build Coastguard Workerif (MINGW) 844*1c60b9acSAndroid Build Coastguard Worker set(LWS_MINGW_SUPPORT 1) 845*1c60b9acSAndroid Build Coastguard Worker set(CMAKE_C_FLAGS "-D__USE_MINGW_ANSI_STDIO ${CMAKE_C_FLAGS}") 846*1c60b9acSAndroid Build Coastguard Worker add_definitions(-DWINVER=0x0601 -D_WIN32_WINNT=0x0601) 847*1c60b9acSAndroid Build Coastguard Workerendif() 848*1c60b9acSAndroid Build Coastguard Worker 849*1c60b9acSAndroid Build Coastguard Workerif (HDR_PRIVATE) 850*1c60b9acSAndroid Build Coastguard Worker source_group("Headers Private" FILES ${HDR_PRIVATE}) 851*1c60b9acSAndroid Build Coastguard Workerendif() 852*1c60b9acSAndroid Build Coastguard Workerif (HDR_PUBLIC) 853*1c60b9acSAndroid Build Coastguard Worker source_group("Headers Public" FILES ${HDR_PUBLIC}) 854*1c60b9acSAndroid Build Coastguard Workerendif() 855*1c60b9acSAndroid Build Coastguard Workerif (SOURCES) 856*1c60b9acSAndroid Build Coastguard Worker source_group("Sources" FILES ${SOURCES}) 857*1c60b9acSAndroid Build Coastguard Workerendif() 858*1c60b9acSAndroid Build Coastguard Workerif (RESOURCES) 859*1c60b9acSAndroid Build Coastguard Worker source_group("Resources" FILES ${RESOURCES}) 860*1c60b9acSAndroid Build Coastguard Workerendif() 861*1c60b9acSAndroid Build Coastguard Worker 862*1c60b9acSAndroid Build Coastguard Worker 863*1c60b9acSAndroid Build Coastguard Worker# 864*1c60b9acSAndroid Build Coastguard Worker# ZLIB (needed for deflate extension and if LWS_WITH_HTTP_STREAM_COMPRESSION) 865*1c60b9acSAndroid Build Coastguard Worker# 866*1c60b9acSAndroid Build Coastguard Workerif (LWS_WITH_ZLIB) 867*1c60b9acSAndroid Build Coastguard Worker if (NOT ZLIB_FOUND) 868*1c60b9acSAndroid Build Coastguard Worker if (LWS_WITH_MINIZ) 869*1c60b9acSAndroid Build Coastguard Worker find_package(Miniz REQUIRED) 870*1c60b9acSAndroid Build Coastguard Worker set(ZLIB_INCLUDE_DIRS ${MINIZ_INCLUDE_DIR}) 871*1c60b9acSAndroid Build Coastguard Worker set(ZLIB_LIBRARIES ${MINIZ_LIBRARIES}) 872*1c60b9acSAndroid Build Coastguard Worker else() 873*1c60b9acSAndroid Build Coastguard Worker find_package(ZLIB REQUIRED) 874*1c60b9acSAndroid Build Coastguard Worker endif() 875*1c60b9acSAndroid Build Coastguard Worker endif() 876*1c60b9acSAndroid Build Coastguard Worker message("zlib/miniz include dirs: ${ZLIB_INCLUDE_DIRS}") 877*1c60b9acSAndroid Build Coastguard Worker message("zlib/miniz libraries: ${ZLIB_LIBRARIES}") 878*1c60b9acSAndroid Build Coastguard Worker include_directories(${ZLIB_INCLUDE_DIRS}) 879*1c60b9acSAndroid Build Coastguard Worker # done later at end of link list 880*1c60b9acSAndroid Build Coastguard Worker # list(APPEND LIB_LIST ${ZLIB_LIBRARIES}) 881*1c60b9acSAndroid Build Coastguard Worker set(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} ${ZLIB_LIBRARIES}) 882*1c60b9acSAndroid Build Coastguard Worker list(APPEND LIB_LIST_AT_END ${ZLIB_LIBRARIES}) 883*1c60b9acSAndroid Build Coastguard Workerendif() 884*1c60b9acSAndroid Build Coastguard Worker 885*1c60b9acSAndroid Build Coastguard Worker 886*1c60b9acSAndroid Build Coastguard Workerif (LWS_WITH_FSMOUNT AND ${CMAKE_SYSTEM_NAME} STREQUAL "Linux") 887*1c60b9acSAndroid Build Coastguard Worker if (NOT LWS_LIBMOUNT_INCLUDE_DIRS STREQUAL "") 888*1c60b9acSAndroid Build Coastguard Worker include_directories(${LWS_LIBMOUNT_INCLUDE_DIRS}) 889*1c60b9acSAndroid Build Coastguard Worker message("libmount include dir: ${LWS_LIBMOUNT_INCLUDE_DIRS}") 890*1c60b9acSAndroid Build Coastguard Worker endif() 891*1c60b9acSAndroid Build Coastguard Worker if (NOT LWS_LIBMOUNT_LIBRARIES STREQUAL "") 892*1c60b9acSAndroid Build Coastguard Worker message("libmount libraries: ${LWS_LIBMOUNT_LIBRARIES}") 893*1c60b9acSAndroid Build Coastguard Worker list(APPEND LIB_LIST ${LWS_LIBMOUNT_LIBRARIES}) 894*1c60b9acSAndroid Build Coastguard Worker else() 895*1c60b9acSAndroid Build Coastguard Worker list(APPEND LIB_LIST mount) 896*1c60b9acSAndroid Build Coastguard Worker endif() 897*1c60b9acSAndroid Build Coastguard Workerendif() 898*1c60b9acSAndroid Build Coastguard Worker 899*1c60b9acSAndroid Build Coastguard Worker 900*1c60b9acSAndroid Build Coastguard Workerif (LWS_WITH_SQLITE3) 901*1c60b9acSAndroid Build Coastguard Worker if (NOT SQLITE3_FOUND) 902*1c60b9acSAndroid Build Coastguard Worker find_path(SQLITE3_INCLUDE_DIRS NAMES sqlite3.h) 903*1c60b9acSAndroid Build Coastguard Worker find_library(SQLITE3_LIBRARIES NAMES sqlite3) 904*1c60b9acSAndroid Build Coastguard Worker if(SQLITE3_INCLUDE_DIRS AND SQLITE3_LIBRARIES) 905*1c60b9acSAndroid Build Coastguard Worker set(SQLITE3_FOUND 1) 906*1c60b9acSAndroid Build Coastguard Worker endif() 907*1c60b9acSAndroid Build Coastguard Worker endif() 908*1c60b9acSAndroid Build Coastguard Worker message("sqlite3 include dir: ${SQLITE3_INCLUDE_DIRS}") 909*1c60b9acSAndroid Build Coastguard Worker message("sqlite3 libraries: ${SQLITE3_LIBRARIES}") 910*1c60b9acSAndroid Build Coastguard Worker include_directories("${SQLITE3_INCLUDE_DIRS}") 911*1c60b9acSAndroid Build Coastguard Worker list(APPEND LIB_LIST ${SQLITE3_LIBRARIES}) 912*1c60b9acSAndroid Build Coastguard Workerendif() 913*1c60b9acSAndroid Build Coastguard Worker 914*1c60b9acSAndroid Build Coastguard Worker 915*1c60b9acSAndroid Build Coastguard Workerif (LWS_WITH_HUBBUB) 916*1c60b9acSAndroid Build Coastguard Worker find_library(LIBHUBBUB_LIBRARIES NAMES hubbub) 917*1c60b9acSAndroid Build Coastguard Worker list(APPEND LIB_LIST ${LIBHUBBUB_LIBRARIES} ) 918*1c60b9acSAndroid Build Coastguard Workerendif() 919*1c60b9acSAndroid Build Coastguard Worker 920*1c60b9acSAndroid Build Coastguard Workerif (LWS_HAVE_LIBCAP) 921*1c60b9acSAndroid Build Coastguard Worker find_library(LIBCAP_LIBRARIES NAMES cap) 922*1c60b9acSAndroid Build Coastguard Worker list(APPEND LIB_LIST ${LIBCAP_LIBRARIES} ) 923*1c60b9acSAndroid Build Coastguard Workerendif() 924*1c60b9acSAndroid Build Coastguard Worker 925*1c60b9acSAndroid Build Coastguard Workerif (LWS_WITH_PLUGINS_BUILTIN) 926*1c60b9acSAndroid Build Coastguard Worker add_subdirectory(plugins) 927*1c60b9acSAndroid Build Coastguard Workerendif() 928*1c60b9acSAndroid Build Coastguard Worker 929*1c60b9acSAndroid Build Coastguard Worker 930*1c60b9acSAndroid Build Coastguard Worker# 931*1c60b9acSAndroid Build Coastguard Worker# Append the "at end" pieces to the lib list 932*1c60b9acSAndroid Build Coastguard Worker# 933*1c60b9acSAndroid Build Coastguard Workerlist(APPEND LIB_LIST ${LIB_LIST_AT_END}) 934*1c60b9acSAndroid Build Coastguard Worker 935*1c60b9acSAndroid Build Coastguard Worker# 936*1c60b9acSAndroid Build Coastguard Worker# Second-level CMakeLists 937*1c60b9acSAndroid Build Coastguard Worker# 938*1c60b9acSAndroid Build Coastguard Worker 939*1c60b9acSAndroid Build Coastguard Workerinclude_directories("${PROJECT_SOURCE_DIR}/lib") 940*1c60b9acSAndroid Build Coastguard Worker 941*1c60b9acSAndroid Build Coastguard Workeradd_subdirectory(lib) 942*1c60b9acSAndroid Build Coastguard Worker 943*1c60b9acSAndroid Build Coastguard Worker 944*1c60b9acSAndroid Build Coastguard Workerif(WIN32 AND NOT CYGWIN) 945*1c60b9acSAndroid Build Coastguard Worker set(DEF_INSTALL_CMAKE_DIR cmake) 946*1c60b9acSAndroid Build Coastguard Workerelse() 947*1c60b9acSAndroid Build Coastguard Worker set(DEF_INSTALL_CMAKE_DIR lib${LIB_SUFFIX}/cmake/libwebsockets) 948*1c60b9acSAndroid Build Coastguard Workerendif() 949*1c60b9acSAndroid Build Coastguard Worker 950*1c60b9acSAndroid Build Coastguard Workerconfigure_file(${PROJECT_SOURCE_DIR}/cmake/LwsCheckRequirements.cmake 951*1c60b9acSAndroid Build Coastguard Worker ${PROJECT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/LwsCheckRequirements.cmake 952*1c60b9acSAndroid Build Coastguard Worker @ONLY) 953*1c60b9acSAndroid Build Coastguard Worker 954*1c60b9acSAndroid Build Coastguard Workerconfigure_file(${PROJECT_SOURCE_DIR}/cmake/LwsCheckRequirements.cmake 955*1c60b9acSAndroid Build Coastguard Worker ${PROJECT_BINARY_DIR}/LwsCheckRequirements.cmake 956*1c60b9acSAndroid Build Coastguard Worker @ONLY) 957*1c60b9acSAndroid Build Coastguard Worker 958*1c60b9acSAndroid Build Coastguard Worker# Generate version info for both build-tree and install-tree. 959*1c60b9acSAndroid Build Coastguard Workerconfigure_file(${PROJECT_SOURCE_DIR}/cmake/libwebsockets-config-version.cmake.in 960*1c60b9acSAndroid Build Coastguard Worker ${PROJECT_BINARY_DIR}/libwebsockets-config-version.cmake 961*1c60b9acSAndroid Build Coastguard Worker @ONLY) 962*1c60b9acSAndroid Build Coastguard Worker 963*1c60b9acSAndroid Build Coastguard Worker# Generate the config file for the build-tree. 964*1c60b9acSAndroid Build Coastguard Workerset(LWS__INCLUDE_DIRS 965*1c60b9acSAndroid Build Coastguard Worker "${PROJECT_SOURCE_DIR}/lib" 966*1c60b9acSAndroid Build Coastguard Worker "${PROJECT_BINARY_DIR}") 967*1c60b9acSAndroid Build Coastguard Workerset(LIBWEBSOCKETS_INCLUDE_DIRS ${LWS__INCLUDE_DIRS} CACHE PATH "Libwebsockets include directories") 968*1c60b9acSAndroid Build Coastguard Workerconfigure_file(${PROJECT_SOURCE_DIR}/cmake/libwebsockets-config.cmake.in 969*1c60b9acSAndroid Build Coastguard Worker ${PROJECT_BINARY_DIR}/libwebsockets-config.cmake 970*1c60b9acSAndroid Build Coastguard Worker @ONLY) 971*1c60b9acSAndroid Build Coastguard Workerset(LWS_INSTALL_CMAKE_DIR ${DEF_INSTALL_CMAKE_DIR} CACHE PATH "Installation directory for CMake files") 972*1c60b9acSAndroid Build Coastguard Worker 973*1c60b9acSAndroid Build Coastguard Worker# Export targets (This is used for other CMake projects to easily find the libraries and include files). 974*1c60b9acSAndroid Build Coastguard Workerif (LWS_WITH_EXPORT_LWSTARGETS) 975*1c60b9acSAndroid Build Coastguard Worker export(TARGETS ${LWS_LIBRARIES} 976*1c60b9acSAndroid Build Coastguard Worker FILE "${PROJECT_BINARY_DIR}/LibwebsocketsTargets.cmake") 977*1c60b9acSAndroid Build Coastguard Workerendif() 978*1c60b9acSAndroid Build Coastguard Worker 979*1c60b9acSAndroid Build Coastguard Worker 980*1c60b9acSAndroid Build Coastguard Worker 981*1c60b9acSAndroid Build Coastguard Workerset(libwebsockets_DIR ${PROJECT_BINARY_DIR}) 982*1c60b9acSAndroid Build Coastguard Workerset(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake") 983*1c60b9acSAndroid Build Coastguard Workermessage("DIR ${libwebsockets_DIR} CMP ${CMAKE_MODULE_PATH}") 984*1c60b9acSAndroid Build Coastguard Worker 985*1c60b9acSAndroid Build Coastguard Workerif (LWS_WITH_MINIMAL_EXAMPLES) 986*1c60b9acSAndroid Build Coastguard Worker add_subdirectory(minimal-examples) 987*1c60b9acSAndroid Build Coastguard Workerendif() 988*1c60b9acSAndroid Build Coastguard Worker 989*1c60b9acSAndroid Build Coastguard Workerif (NOT LWS_WITHOUT_TESTAPPS) 990*1c60b9acSAndroid Build Coastguard Worker add_subdirectory(test-apps) 991*1c60b9acSAndroid Build Coastguard Workerendif() 992*1c60b9acSAndroid Build Coastguard Worker 993*1c60b9acSAndroid Build Coastguard Workerif (NOT LWS_WITH_PLUGINS_BUILTIN) 994*1c60b9acSAndroid Build Coastguard Workeradd_subdirectory(plugins) 995*1c60b9acSAndroid Build Coastguard Workerendif() 996*1c60b9acSAndroid Build Coastguard Workeradd_subdirectory(lwsws) 997*1c60b9acSAndroid Build Coastguard Worker 998*1c60b9acSAndroid Build Coastguard Worker# Generate the lws_config.h that includes all the public compilation settings. 999*1c60b9acSAndroid Build Coastguard Workerconfigure_file( 1000*1c60b9acSAndroid Build Coastguard Worker "${PROJECT_SOURCE_DIR}/cmake/lws_config.h.in" 1001*1c60b9acSAndroid Build Coastguard Worker "${PROJECT_BINARY_DIR}/lws_config.h") 1002*1c60b9acSAndroid Build Coastguard Worker 1003*1c60b9acSAndroid Build Coastguard Workeradd_custom_command( 1004*1c60b9acSAndroid Build Coastguard Worker OUTPUT ${PROJECT_BINARY_DIR}/include/lws_config.h 1005*1c60b9acSAndroid Build Coastguard Worker ${PROJECT_BINARY_DIR}/include/libwebsockets 1006*1c60b9acSAndroid Build Coastguard Worker ${PROJECT_BINARY_DIR}/include/libwebsockets.h 1007*1c60b9acSAndroid Build Coastguard Worker COMMENT "Creating build include dir" 1008*1c60b9acSAndroid Build Coastguard Worker COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/include/libwebsockets.h 1009*1c60b9acSAndroid Build Coastguard Worker ${CMAKE_CURRENT_BINARY_DIR}/include/libwebsockets.h 1010*1c60b9acSAndroid Build Coastguard Worker COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/include/libwebsockets/ 1011*1c60b9acSAndroid Build Coastguard Worker ${CMAKE_CURRENT_BINARY_DIR}/include/libwebsockets 1012*1c60b9acSAndroid Build Coastguard Worker COMMAND ${CMAKE_COMMAND} -E copy ${PROJECT_BINARY_DIR}/lws_config.h 1013*1c60b9acSAndroid Build Coastguard Worker ${CMAKE_CURRENT_BINARY_DIR}/include/lws_config.h 1014*1c60b9acSAndroid Build Coastguard Worker MAIN_DEPENDENCY ${PROJECT_BINARY_DIR}/lws_config.h 1015*1c60b9acSAndroid Build Coastguard Worker) 1016*1c60b9acSAndroid Build Coastguard Worker 1017*1c60b9acSAndroid Build Coastguard Workeradd_custom_target(GENHDR DEPENDS ${PROJECT_BINARY_DIR}/include/lws_config.h) 1018*1c60b9acSAndroid Build Coastguard Worker 1019*1c60b9acSAndroid Build Coastguard Workerfile(GLOB HDR_PUBLIC1 RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} include/libwebsockets/*.h) 1020*1c60b9acSAndroid Build Coastguard Workerfile(GLOB HDR_PUBLIC2 RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} include/libwebsockets.h) 1021*1c60b9acSAndroid Build Coastguard Workerfile(GLOB HDR_PUBLIC3 RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR}/include/lws_config.h) 1022*1c60b9acSAndroid Build Coastguard Workerlist(APPEND HDR_PUBLIC ${HDR_PUBLIC1} ${HDR_PUBLIC2} ${HDR_PUBLIC3}) 1023*1c60b9acSAndroid Build Coastguard Worker 1024*1c60b9acSAndroid Build Coastguard Workerset_source_files_properties(${HDR_PUBLIC} PROPERTIES GENERATED 1) 1025*1c60b9acSAndroid Build Coastguard Worker 1026*1c60b9acSAndroid Build Coastguard Workerif (LWS_WITH_STATIC) 1027*1c60b9acSAndroid Build Coastguard Worker add_dependencies(websockets GENHDR) 1028*1c60b9acSAndroid Build Coastguard Workerendif() 1029*1c60b9acSAndroid Build Coastguard Workerif (LWS_WITH_SHARED) 1030*1c60b9acSAndroid Build Coastguard Worker add_dependencies(websockets_shared GENHDR) 1031*1c60b9acSAndroid Build Coastguard Workerendif() 1032*1c60b9acSAndroid Build Coastguard Worker 1033*1c60b9acSAndroid Build Coastguard Worker 1034*1c60b9acSAndroid Build Coastguard Worker 1035*1c60b9acSAndroid Build Coastguard Worker# 1036*1c60b9acSAndroid Build Coastguard Worker# 1037*1c60b9acSAndroid Build Coastguard Worker# Installation preparations. 1038*1c60b9acSAndroid Build Coastguard Worker# 1039*1c60b9acSAndroid Build Coastguard Worker 1040*1c60b9acSAndroid Build Coastguard Workerexport(PACKAGE libwebsockets) 1041*1c60b9acSAndroid Build Coastguard Worker 1042*1c60b9acSAndroid Build Coastguard Workerinstall(DIRECTORY include/libwebsockets 1043*1c60b9acSAndroid Build Coastguard Worker DESTINATION "${LWS_INSTALL_INCLUDE_DIR}" COMPONENT dev) 1044*1c60b9acSAndroid Build Coastguard Workerinstall(FILES ${PROJECT_BINARY_DIR}/include/libwebsockets.h ${PROJECT_BINARY_DIR}/include/lws_config.h 1045*1c60b9acSAndroid Build Coastguard Worker DESTINATION "${LWS_INSTALL_INCLUDE_DIR}" COMPONENT dev) 1046*1c60b9acSAndroid Build Coastguard Worker 1047*1c60b9acSAndroid Build Coastguard Worker# Generate the config file for the installation tree. 1048*1c60b9acSAndroid Build Coastguard Workerget_filename_component(LWS_ABSOLUTE_INSTALL_CMAKE_DIR ${LWS_INSTALL_CMAKE_DIR} ABSOLUTE) 1049*1c60b9acSAndroid Build Coastguard Workerget_filename_component(LWS_ABSOLUTE_INSTALL_INCLUDE_DIR ${LWS_INSTALL_INCLUDE_DIR} ABSOLUTE) 1050*1c60b9acSAndroid Build Coastguard Workerfile(RELATIVE_PATH 1051*1c60b9acSAndroid Build Coastguard Worker REL_INCLUDE_DIR 1052*1c60b9acSAndroid Build Coastguard Worker "${LWS_ABSOLUTE_INSTALL_CMAKE_DIR}" 1053*1c60b9acSAndroid Build Coastguard Worker "${LWS_ABSOLUTE_INSTALL_INCLUDE_DIR}") # Calculate the relative directory from the cmake dir. 1054*1c60b9acSAndroid Build Coastguard Worker 1055*1c60b9acSAndroid Build Coastguard Workerif (DEFINED REL_INCLUDE_DIR) 1056*1c60b9acSAndroid Build Coastguard Worker set(LWS__INCLUDE_DIRS "\${LWS_CMAKE_DIR}/${REL_INCLUDE_DIR}") 1057*1c60b9acSAndroid Build Coastguard Workerendif() 1058*1c60b9acSAndroid Build Coastguard Workerif (DEFINED OPENSSL_INCLUDE_DIRS) 1059*1c60b9acSAndroid Build Coastguard Worker set(LWS__INCLUDE_DIRS "${LWS__INCLUDE_DIRS};${OPENSSL_INCLUDE_DIRS}") 1060*1c60b9acSAndroid Build Coastguard Workerendif() 1061*1c60b9acSAndroid Build Coastguard Worker 1062*1c60b9acSAndroid Build Coastguard Workerconfigure_file(${PROJECT_SOURCE_DIR}/cmake/libwebsockets-config.cmake.in 1063*1c60b9acSAndroid Build Coastguard Worker ${PROJECT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/libwebsockets-config.cmake 1064*1c60b9acSAndroid Build Coastguard Worker @ONLY) 1065*1c60b9acSAndroid Build Coastguard Worker 1066*1c60b9acSAndroid Build Coastguard Workerset_target_properties(${LWS_LIBRARIES} 1067*1c60b9acSAndroid Build Coastguard Worker PROPERTIES PUBLIC_HEADER "${HDR_PUBLIC}") 1068*1c60b9acSAndroid Build Coastguard Worker 1069*1c60b9acSAndroid Build Coastguard Worker# Install the LibwebsocketsConfig.cmake and LibwebsocketsConfigVersion.cmake 1070*1c60b9acSAndroid Build Coastguard Workerinstall(FILES 1071*1c60b9acSAndroid Build Coastguard Worker "${PROJECT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/libwebsockets-config.cmake" 1072*1c60b9acSAndroid Build Coastguard Worker "${PROJECT_BINARY_DIR}/libwebsockets-config-version.cmake" 1073*1c60b9acSAndroid Build Coastguard Worker "${PROJECT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/LwsCheckRequirements.cmake" 1074*1c60b9acSAndroid Build Coastguard Worker DESTINATION "${LWS_INSTALL_CMAKE_DIR}" COMPONENT dev) 1075*1c60b9acSAndroid Build Coastguard Worker 1076*1c60b9acSAndroid Build Coastguard Worker# Install exports for the install-tree. 1077*1c60b9acSAndroid Build Coastguard Workerif (LWS_WITH_EXPORT_LWSTARGETS) 1078*1c60b9acSAndroid Build Coastguard Worker install(EXPORT LibwebsocketsTargets 1079*1c60b9acSAndroid Build Coastguard Worker DESTINATION "${LWS_INSTALL_CMAKE_DIR}" COMPONENT dev) 1080*1c60b9acSAndroid Build Coastguard Workerendif() 1081*1c60b9acSAndroid Build Coastguard Worker 1082*1c60b9acSAndroid Build Coastguard Worker# build subdir is not part of sources 1083*1c60b9acSAndroid Build Coastguard Workerset(CPACK_SOURCE_IGNORE_FILES $(CPACK_SOURCE_IGNORE_FILES) "/.git/" "/build/" "\\\\.tgz$" "\\\\.tar\\\\.gz$") 1084*1c60b9acSAndroid Build Coastguard Worker 1085*1c60b9acSAndroid Build Coastguard Worker# Most people are more used to "make dist" compared to "make package_source" 1086*1c60b9acSAndroid Build Coastguard Workeradd_custom_target(dist COMMAND "${CMAKE_MAKE_PROGRAM}" package_source) 1087*1c60b9acSAndroid Build Coastguard Worker 1088*1c60b9acSAndroid Build Coastguard Worker 1089*1c60b9acSAndroid Build Coastguard Worker 1090*1c60b9acSAndroid Build Coastguard Worker# This must always be last! 1091*1c60b9acSAndroid Build Coastguard Workerinclude(CPack) 1092