Andy Green | b3131fd | 2020-05-22 16:47:40 +0100 | [diff] [blame] | 1 | # |
| 2 | # libwebsockets - small server side websockets and web server implementation |
| 3 | # |
| 4 | # Copyright (C) 2010 - 2020 Andy Green <andy@warmcat.com> |
| 5 | # |
| 6 | # Permission is hereby granted, free of charge, to any person obtaining a copy |
| 7 | # of this software and associated documentation files (the "Software"), to |
| 8 | # deal in the Software without restriction, including without limitation the |
| 9 | # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or |
| 10 | # sell copies of the Software, and to permit persons to whom the Software is |
| 11 | # furnished to do so, subject to the following conditions: |
| 12 | # |
| 13 | # The above copyright notice and this permission notice shall be included in |
| 14 | # all copies or substantial portions of the Software. |
| 15 | # |
| 16 | # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
| 17 | # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
| 18 | # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
| 19 | # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
| 20 | # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING |
| 21 | # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS |
| 22 | # IN THE SOFTWARE. |
| 23 | # |
| 24 | # This part of the CMakeLists.txt defines internal logic between options |
| 25 | |
| 26 | if(IOS) |
| 27 | set(LWS_DETECTED_PLAT_IOS 1) |
| 28 | endif() |
| 29 | |
| 30 | # Workaround for ESP-IDF |
| 31 | # Detect ESP_PLATFORM environment flag, if exist, set LWS_WITH_ESP32. |
| 32 | # Otherwise the user may not be able to run configuration ESP-IDF in the first time. |
Andy Green | b72ab32 | 2020-06-22 20:05:06 +0100 | [diff] [blame^] | 33 | if (ESP_PLATFORM) |
Andy Green | b3131fd | 2020-05-22 16:47:40 +0100 | [diff] [blame] | 34 | message(STATUS "ESP-IDF enabled") |
| 35 | set(LWS_WITH_ESP32 ON) |
| 36 | set(LWS_WITH_ZLIB OFF) |
Andy Green | b72ab32 | 2020-06-22 20:05:06 +0100 | [diff] [blame^] | 37 | set(LWS_HAVE_mbedtls_ssl_get_alpn_protocol 1) |
Andy Green | b3131fd | 2020-05-22 16:47:40 +0100 | [diff] [blame] | 38 | else() |
| 39 | set(LWS_WITH_ESP32_HELPER OFF) |
| 40 | endif() |
| 41 | |
| 42 | if (LWS_WITH_ESP32) |
| 43 | set(LWS_PLAT_FREERTOS 1) |
| 44 | endif() |
| 45 | |
Andy Green | b72ab32 | 2020-06-22 20:05:06 +0100 | [diff] [blame^] | 46 | if (LWS_PLAT_OPTEE) |
Andy Green | b3131fd | 2020-05-22 16:47:40 +0100 | [diff] [blame] | 47 | set(LWS_WITH_UDP 0) |
| 48 | endif() |
| 49 | |
| 50 | if (LWS_PLAT_FREERTOS) |
| 51 | message(STATUS "No LWS_WITH_DIR or LWS_WITH_LEJP_CONF") |
| 52 | set(LWS_WITH_DIR OFF) |
| 53 | set(LWS_WITH_LEJP_CONF OFF) |
| 54 | message("LWS_WITH_DIR ${LWS_WITH_DIR}") |
| 55 | else() |
| 56 | message(STATUS "Compiled with LWS_WITH_DIR and LWS_WITH_LEJP_CONF") |
| 57 | set(LWS_WITH_DIR ON) |
| 58 | set(LWS_WITH_LEJP_CONF ON) |
| 59 | endif() |
| 60 | |
| 61 | if (LWS_FOR_GITOHASHI) |
| 62 | set(LWS_WITH_THREADPOOL 1) |
| 63 | set(LWS_WITH_HTTP2 1) |
| 64 | set(LWS_UNIX_SOCK 1) |
| 65 | set(LWS_WITH_HTTP_PROXY 1) |
| 66 | set(LWS_WITH_FTS 1) |
| 67 | set(LWS_WITH_DISKCACHE 1) |
| 68 | set(LWS_WITH_LWSAC 1) |
| 69 | set(LWS_WITH_LEJP_CONF 1) |
| 70 | set(LWS_WITH_SPAWN 1) |
| 71 | set(LWS_WITH_FSMOUNT 1) |
| 72 | set(LWS_WITH_STRUCT_JSON 1) |
| 73 | set(LWS_WITH_STRUCT_SQLITE3 1) |
| 74 | endif() |
| 75 | |
| 76 | if(LWS_WITH_DISTRO_RECOMMENDED) |
| 77 | set(LWS_WITH_HTTP2 1) |
| 78 | set(LWS_WITH_LWSWS 1) |
| 79 | set(LWS_WITH_CGI 1) |
| 80 | set(LWS_IPV6 1) |
| 81 | set(LWS_WITH_ZIP_FOPS 1) |
| 82 | set(LWS_WITH_SOCKS5 1) |
| 83 | set(LWS_WITH_RANGES 1) |
| 84 | set(LWS_WITH_ACME 1) |
| 85 | set(LWS_WITH_SERVER_STATUS 1) |
| 86 | set(LWS_WITH_GLIB 1) |
| 87 | set(LWS_WITH_LIBUV 1) |
| 88 | set(LWS_WITH_LIBEV 1) |
| 89 | # libev + libevent cannot coexist at build-time |
| 90 | set(LWS_WITH_LIBEVENT 0) |
| 91 | set(LWS_WITHOUT_EXTENSIONS 0) |
| 92 | set(LWS_ROLE_DBUS 1) |
| 93 | set(LWS_WITH_FTS 1) |
| 94 | set(LWS_WITH_THREADPOOL 1) |
| 95 | set(LWS_UNIX_SOCK 1) |
| 96 | set(LWS_WITH_HTTP_PROXY 1) |
| 97 | set(LWS_WITH_DISKCACHE 1) |
| 98 | set(LWS_WITH_LWSAC 1) |
| 99 | set(LWS_WITH_LEJP_CONF 1) |
| 100 | set(LWS_WITH_PLUGINS 1) |
| 101 | set(LWS_ROLE_RAW_PROXY 1) |
| 102 | set(LWS_WITH_GENCRYPTO 1) |
| 103 | set(LWS_WITH_JOSE 1) |
| 104 | set(LWS_WITH_STRUCT_JSON 1) |
| 105 | set(LWS_WITH_STRUCT_SQLITE3 1) |
| 106 | set(LWS_WITH_SPAWN 1) |
| 107 | # libmount is problematic on Centos 8 / RHEL 8 |
| 108 | # set(LWS_WITH_FSMOUNT 1) |
| 109 | set(LWS_ROLE_MQTT 1) |
| 110 | set(LWS_WITH_SECURE_STREAMS 1) |
| 111 | set(LWS_WITH_SECURE_STREAMS_PROXY_API 1) |
| 112 | set(LWS_WITH_DIR 1) |
| 113 | endif() |
| 114 | |
| 115 | if (LWS_WITH_SECURE_STREAMS_PROXY_API) |
| 116 | set(LWS_WITH_LWS_DSH 1) |
| 117 | set(LWS_WITH_UNIX_SOCK 1) |
| 118 | endif() |
| 119 | |
| 120 | if (NOT LWS_WITH_NETWORK) |
| 121 | set(LWS_ROLE_MQTT 0) |
| 122 | set(LWS_ROLE_H1 0) |
| 123 | set(LWS_ROLE_WS 0) |
| 124 | set(LWS_ROLE_RAW 0) |
| 125 | set(LWS_WITHOUT_EXTENSIONS 1) |
| 126 | set(LWS_WITHOUT_SERVER 1) |
| 127 | set(LWS_WITHOUT_CLIENT 1) |
| 128 | set(LWS_WITH_HTTP2 0) |
| 129 | set(LWS_WITH_SOCKS5 0) |
| 130 | set(LWS_UNIX_SOCK 0) |
| 131 | set(LWS_WITH_HTTP_PROXY 0) |
| 132 | set(LWS_WITH_PLUGINS 0) |
| 133 | set(LWS_WITH_LWSWS 0) |
| 134 | set(LWS_WITH_CGI 0) |
| 135 | set(LWS_ROLE_RAW_PROXY 0) |
| 136 | set(LWS_WITH_PEER_LIMITS 0) |
| 137 | set(LWS_WITH_GENERIC_SESSIONS 0) |
| 138 | set(LWS_WITH_HTTP_STREAM_COMPRESSION 0) |
| 139 | set(LWS_WITH_HTTP_BROTLI 0) |
| 140 | set(LWS_WITH_POLL 0) |
| 141 | set(LWS_WITH_SEQUENCER 0) |
| 142 | set(LWS_ROLE_DBUS 0) |
| 143 | set(LWS_WITH_LWS_DSH 0) |
| 144 | set(LWS_WITH_THREADPOOL 0) |
Andy Green | 8eca7e1 | 2020-06-24 20:15:46 +0100 | [diff] [blame] | 145 | set(LWS_WITH_SYS_SMD 0) |
Andy Green | b3131fd | 2020-05-22 16:47:40 +0100 | [diff] [blame] | 146 | endif() |
| 147 | |
| 148 | if (LWS_WITH_CGI) |
| 149 | set(LWS_WITH_SPAWN 1) |
| 150 | endif() |
| 151 | |
| 152 | if (LWS_WITH_STRUCT_SQLITE3) |
| 153 | set(LWS_WITH_SQLITE3 1) |
| 154 | endif() |
| 155 | |
| 156 | if (LWS_WITH_HTTP_BASIC_AUTH) |
| 157 | # WWW_AUTHENTICATE used by basic auth is an "uncommon header" |
| 158 | set(LWS_WITH_HTTP_UNCOMMON_HEADERS 1) |
| 159 | endif() |
| 160 | |
| 161 | if (APPLE) |
| 162 | set(LWS_ROLE_DBUS 0) |
| 163 | endif() |
| 164 | |
| 165 | if(NOT DEFINED CMAKE_BUILD_TYPE) |
| 166 | set(CMAKE_BUILD_TYPE Release CACHE STRING "Build type") |
| 167 | endif() |
| 168 | |
Andy Green | 911898a | 2020-05-24 13:57:21 +0100 | [diff] [blame] | 169 | if (LWS_PLAT_FREERTOS) |
Andy Green | b3131fd | 2020-05-22 16:47:40 +0100 | [diff] [blame] | 170 | set(LWS_UNIX_SOCK 0) |
| 171 | endif() |
| 172 | |
| 173 | if (LWS_PLAT_FREERTOS) |
Andy Green | b3131fd | 2020-05-22 16:47:40 +0100 | [diff] [blame] | 174 | set(LWS_WITH_FTS 0) |
| 175 | endif() |
| 176 | |
| 177 | if (LWS_WITH_HTTP2) |
| 178 | set(LWS_ROLE_H2 1) |
| 179 | endif() |
| 180 | if (LWS_WITH_CGI) |
| 181 | set(LWS_ROLE_CGI 1) |
| 182 | endif() |
| 183 | |
| 184 | if (NOT LWS_ROLE_WS) |
| 185 | set(LWS_WITHOUT_EXTENSIONS 1) |
| 186 | endif() |
| 187 | |
| 188 | if (LWS_WITH_LWSWS) |
| 189 | message(STATUS "LWS_WITH_LWSWS --> Enabling LWS_WITH_PLUGINS and LWS_WITH_LIBUV") |
| 190 | set(LWS_WITH_PLUGINS 1) |
| 191 | set(LWS_WITH_LIBUV 1) |
| 192 | set(LWS_WITH_ACCESS_LOG 1) |
| 193 | set(LWS_WITH_SERVER_STATUS 1) |
| 194 | set(LWS_WITH_LEJP 1) |
| 195 | set(LWS_WITH_LEJP_CONF 1) |
| 196 | set(LWS_WITH_PEER_LIMITS 1) |
| 197 | set(LWS_ROLE_RAW_PROXY 1) |
| 198 | endif() |
| 199 | |
| 200 | # sshd plugin |
| 201 | if (LWS_WITH_PLUGINS) |
| 202 | set(LWS_WITH_GENCRYPTO 1) |
| 203 | endif() |
| 204 | |
| 205 | if (LWS_ROLE_RAW_PROXY) |
| 206 | set (LWS_WITH_CLIENT 1) |
| 207 | set (LWS_WITH_SERVER 1) |
| 208 | endif() |
| 209 | |
| 210 | if (LWS_WITH_ACME) |
| 211 | set (LWS_WITH_CLIENT 1) |
| 212 | set (LWS_WITH_SERVER 1) |
| 213 | set (LWS_WITH_JOSE 1) |
| 214 | endif() |
| 215 | |
| 216 | if (LWS_WITH_JOSE) |
| 217 | set(LWS_WITH_LEJP 1) |
| 218 | set(LWS_WITH_GENCRYPTO 1) |
| 219 | endif() |
| 220 | |
| 221 | if (LWS_WITH_PLUGINS AND NOT LWS_WITH_LIBUV) |
| 222 | message(STATUS "LWS_WITH_PLUGINS --> Enabling LWS_WITH_LIBUV") |
| 223 | set(LWS_WITH_LIBUV 1) |
| 224 | endif() |
| 225 | |
| 226 | if (LWS_WITH_PLUGINS OR LWS_WITH_CGI) |
| 227 | # sshd plugin |
| 228 | set(LWS_WITH_GENCRYPTO 1) |
| 229 | endif() |
| 230 | |
| 231 | if (LWS_WITH_GENERIC_SESSIONS) |
| 232 | set(LWS_WITH_SQLITE3 1) |
| 233 | # set(LWS_WITH_SMTP 1) |
| 234 | set(LWS_WITH_STRUCT_SQLITE3 1) |
| 235 | endif() |
| 236 | |
| 237 | if (LWS_PLAT_FREERTOS) |
| 238 | set(LWS_WITH_SHARED OFF) |
| 239 | set(LWS_WITH_MBEDTLS ON) |
| 240 | # set(LWS_WITHOUT_CLIENT ON) |
| 241 | set(LWS_WITHOUT_TESTAPPS ON) |
| 242 | set(LWS_WITHOUT_EXTENSIONS ON) |
| 243 | set(LWS_WITH_PLUGINS OFF) |
| 244 | set(LWS_WITH_RANGES ON) |
| 245 | # this implies no pthreads in the lib |
| 246 | set(LWS_MAX_SMP 1) |
| 247 | set(LWS_HAVE_MALLOC 1) |
| 248 | set(LWS_HAVE_REALLOC 1) |
| 249 | set(LWS_HAVE_GETIFADDRS 1) |
| 250 | set(LWS_WITH_CUSTOM_HEADERS 0) |
| 251 | endif() |
| 252 | |
| 253 | #if (LWS_WITH_ESP32) |
| 254 | # set(LWS_WITH_ZIP_FOPS 1) |
| 255 | #endif() |
| 256 | |
| 257 | if (WIN32) |
| 258 | set(LWS_MAX_SMP 1) |
| 259 | endif() |
| 260 | |
| 261 | if (LWS_WITHOUT_SERVER) |
| 262 | set(LWS_WITH_LWSWS OFF) |
| 263 | endif() |
| 264 | |
| 265 | if (LWS_WITH_LEJP_CONF) |
| 266 | set(LWS_WITH_DIR 1) |
| 267 | endif() |
| 268 | |
| 269 | # confirm H1 relationships |
| 270 | |
| 271 | if (NOT LWS_ROLE_H1 AND LWS_ROLE_H2) |
| 272 | message(FATAL_ERROR "H2 requires LWS_ROLE_H1") |
| 273 | endif() |
| 274 | |
| 275 | if (NOT LWS_ROLE_H1 AND LWS_ROLE_WS) |
| 276 | message(FATAL_ERROR "WS requires LWS_ROLE_H1") |
| 277 | endif() |
| 278 | |
| 279 | if (NOT LWS_ROLE_H1 AND LWS_ROLE_CGI) |
| 280 | message(FATAL_ERROR "CGI requires LWS_ROLE_H1") |
| 281 | endif() |
| 282 | |
| 283 | # confirm HTTP relationships |
| 284 | |
| 285 | if (NOT LWS_ROLE_H1 AND NOT LWS_ROLE_H2 AND LWS_WITH_HTTP_PROXY) |
| 286 | message(FATAL_ERROR "LWS_WITH_LWSWS requires LWS_ROLE_H1") |
| 287 | endif() |
| 288 | |
| 289 | if (NOT LWS_ROLE_H1 AND NOT LWS_ROLE_H2 AND LWS_WITH_HTTP_PROXY) |
| 290 | message(FATAL_ERROR "LWS_WITH_HTTP_PROXY requires LWS_ROLE_H1") |
| 291 | endif() |
| 292 | |
| 293 | if (NOT LWS_ROLE_H1 AND NOT LWS_ROLE_H2 AND LWS_WITH_RANGES) |
| 294 | message(FATAL_ERROR "LWS_WITH_RANGES requires LWS_ROLE_H1") |
| 295 | endif() |
| 296 | |
| 297 | if (NOT LWS_ROLE_H1 AND NOT LWS_ROLE_H2 AND LWS_WITH_ACCESS_LOG) |
| 298 | message(FATAL_ERROR "LWS_WITH_ACCESS_LOG requires LWS_ROLE_H1") |
| 299 | endif() |
| 300 | |
| 301 | if (LWS_WITH_HTTP_PROXY AND (LWS_WITHOUT_CLIENT OR LWS_WITHOUT_SERVER)) |
| 302 | message("You have to enable both client and server for http proxy") |
| 303 | set(LWS_WITH_HTTP_PROXY 0) |
| 304 | endif() |
| 305 | |
| 306 | if (NOT LWS_WITHOUT_EXTENSIONS OR LWS_WITH_ZIP_FOPS) |
| 307 | set(LWS_WITH_ZLIB 1) |
| 308 | endif() |
| 309 | |
| 310 | if (LWS_WITH_SECURE_STREAMS) |
| 311 | set(LWS_WITH_SECURE_STREAMS_SYS_AUTH_API_AMAZON_COM 1) |
| 312 | endif() |
| 313 | |
| 314 | if (NOT (LWS_WITH_STATIC OR LWS_WITH_SHARED)) |
| 315 | message(FATAL_ERROR "Makes no sense to compile with neither static nor shared libraries.") |
| 316 | endif() |
| 317 | |
| 318 | if (LWS_WITHOUT_DAEMONIZE OR WIN32) |
| 319 | set(LWS_NO_DAEMONIZE 1) |
| 320 | endif() |
| 321 | |
| 322 | if (LWS_WITH_LIBEV) |
| 323 | set(LWS_WITH_LIBEV 1) |
| 324 | endif() |
| 325 | |
| 326 | if (LWS_WITH_LIBUV) |
| 327 | set(LWS_WITH_LIBUV 1) |
| 328 | endif() |
| 329 | |
| 330 | if (LWS_WITH_LIBEVENT) |
| 331 | set(LWS_WITH_LIBEVENT 1) |
| 332 | endif() |
| 333 | |
| 334 | if (LWS_IPV6) |
| 335 | set(LWS_WITH_IPV6 1) |
| 336 | endif() |
| 337 | |
| 338 | if (LWS_UNIX_SOCK) |
| 339 | set(LWS_WITH_UNIX_SOCK 1) |
| 340 | endif() |
| 341 | |
| 342 | if (NOT LWS_MAX_SMP) |
| 343 | set(LWS_MAX_SMP 1) |
| 344 | endif() |
| 345 | if ("${LWS_MAX_SMP}" STREQUAL "") |
| 346 | set(LWS_MAX_SMP 1) |
| 347 | endif() |
| 348 | |
| 349 | set(LWS_WITH_CLIENT 1) |
| 350 | if (LWS_WITHOUT_CLIENT) |
| 351 | set(LWS_WITH_CLIENT) |
Andy Green | 6747ab8 | 2020-06-17 11:13:01 +0100 | [diff] [blame] | 352 | set(LWS_WITH_SECURE_STREAMS 0) |
Andy Green | b3131fd | 2020-05-22 16:47:40 +0100 | [diff] [blame] | 353 | endif() |
| 354 | set(LWS_WITH_SERVER 1) |
| 355 | if (LWS_WITHOUT_SERVER) |
| 356 | set(LWS_WITH_SERVER) |
| 357 | endif() |
| 358 | |
| 359 | # using any abstract protocol enables LWS_WITH_ABSTRACT |
| 360 | |
| 361 | #if (LWS_WITH_SMTP) |
| 362 | # set(LWS_WITH_ABSTRACT 1) |
| 363 | #endif() |
| 364 | |
| 365 | if (LWS_WITH_LIBEV AND LWS_WITH_LIBEVENT) |
| 366 | message(FATAL_ERROR "Sorry libev and libevent conflict with each others' namespace, you can only have one or the other") |
| 367 | endif() |
| 368 | |
| 369 | if (LWS_SSL_SERVER_WITH_ECDH_CERT) |
| 370 | set(LWS_SSL_SERVER_WITH_ECDH_CERT 1) |
| 371 | endif() |
| 372 | |
| 373 | # LWS_OPENSSL_SUPPORT deprecated... use LWS_WITH_TLS |
| 374 | if (LWS_WITH_SSL OR LWS_WITH_MBEDTLS) |
| 375 | set(LWS_OPENSSL_SUPPORT 1) |
| 376 | set(LWS_WITH_TLS 1) |
| 377 | endif() |
| 378 | |
| 379 | if (NOT LWS_WITH_SSL) |
Andy Green | 8eca7e1 | 2020-06-24 20:15:46 +0100 | [diff] [blame] | 380 | set(LWS_WITHOUT_BUILTIN_SHA1 OFF) |
Andy Green | b3131fd | 2020-05-22 16:47:40 +0100 | [diff] [blame] | 381 | endif() |