2 # libwebsockets - small server side websockets and web server implementation
4 # Copyright (C) 2010 - 2020 Andy Green <andy@warmcat.com>
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:
13 # The above copyright notice and this permission notice shall be included in
14 # all copies or substantial portions of the Software.
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
24 # This part of the CMakeLists.txt defines internal logic between options
27 set(LWS_DETECTED_PLAT_IOS 1)
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.
34 message(STATUS "ESP-IDF enabled")
35 set(LWS_WITH_ESP32 ON)
36 set(LWS_WITH_ZLIB OFF)
37 set(LWS_HAVE_mbedtls_ssl_get_alpn_protocol 1)
39 set(LWS_WITH_ESP32_HELPER OFF)
43 set(LWS_PLAT_FREERTOS 1)
50 if (LWS_PLAT_FREERTOS OR (${CMAKE_SYSTEM_NAME} MATCHES "QNX"))
51 message(STATUS "No LWS_WITH_DIR or LWS_WITH_LEJP_CONF")
53 set(LWS_WITH_LEJP_CONF OFF)
54 message("LWS_WITH_DIR ${LWS_WITH_DIR}")
56 message(STATUS "Compiled with LWS_WITH_DIR and LWS_WITH_LEJP_CONF")
58 set(LWS_WITH_LEJP_CONF ON)
61 if (LWS_FOR_GITOHASHI)
62 set(LWS_WITH_THREADPOOL 1)
65 set(LWS_WITH_HTTP_PROXY 1)
67 set(LWS_WITH_DISKCACHE 1)
69 set(LWS_WITH_LEJP_CONF 1)
71 set(LWS_WITH_FSMOUNT 1)
72 set(LWS_WITH_STRUCT_JSON 1)
73 set(LWS_WITH_STRUCT_SQLITE3 1)
76 if(LWS_WITH_DISTRO_RECOMMENDED)
77 set(LWS_WITH_HTTP2 1) # selfcontained
78 set(LWS_WITH_LWSWS 1) # libuv
79 set(LWS_WITH_CGI 1) # selfcontained
80 set(LWS_WITH_HTTP_STREAM_COMPRESSION 1) # libz and brotli if avail
81 set(LWS_IPV6 1) # selfcontained
82 set(LWS_WITH_ZIP_FOPS 1) # libz
83 set(LWS_WITH_SOCKS5 1) # selfcontained
84 set(LWS_WITH_RANGES 1) # selfcontained
85 set(LWS_WITH_ACME 1) # selfcontained / tls
86 set(LWS_WITH_SYS_METRICS 1) # selfcontained
87 set(LWS_WITH_GLIB 1) # glib
88 set(LWS_WITH_LIBUV 1) # libuv
89 set(LWS_WITH_LIBEV 1) # libev
90 set(LWS_WITH_LIBEVENT 1) # libevent
91 set(LWS_WITH_EVLIB_PLUGINS 1) # event libraries created as plugins / individual packages
92 set(LWS_WITHOUT_EXTENSIONS 0) # libz
93 set(LWS_ROLE_DBUS 1) # dbus-related libs
94 set(LWS_WITH_FTS 1) # selfcontained
95 set(LWS_WITH_THREADPOOL 1) # pthreads
96 set(LWS_UNIX_SOCK 1) # selfcontained
97 set(LWS_WITH_HTTP_PROXY 1) # selfcontained
98 set(LWS_WITH_DISKCACHE 1) # selfcontained
99 set(LWS_WITH_LWSAC 1) # selfcontained
100 set(LWS_WITH_LEJP_CONF 1) # selfcontained
101 set(LWS_WITH_PLUGINS_BUILTIN 1) # selfcontained
102 set(LWS_ROLE_RAW_PROXY 1) # selfcontained
103 set(LWS_WITH_GENCRYPTO 1) # selfcontained / tls
104 set(LWS_WITH_CBOR 1) # selfcontained
105 set(LWS_WITH_COSE 1) # selfcontained
106 set(LWS_WITH_JOSE 1) # selfcontained
107 set(LWS_WITH_STRUCT_JSON 1) # selfcontained
108 set(LWS_WITH_STRUCT_SQLITE3 1) # sqlite3
109 set(LWS_WITH_SPAWN 1) # selfcontained
110 # libmount is problematic on Centos 8 / RHEL 8
111 # set(LWS_WITH_FSMOUNT 1)
112 set(LWS_ROLE_MQTT 1) # selfcontained
113 set(LWS_WITH_SECURE_STREAMS 1) # selfcontained
114 set(LWS_WITH_SECURE_STREAMS_PROXY_API 1) # selfcontained
115 set(LWS_WITH_DIR 1) # selfcontained
118 # LWS_WITH_EVENT_LIBS is set if any event lib selected
120 if (LWS_WITH_LIBEV OR
126 set(LWS_WITH_EVENT_LIBS 1)
128 unset(LWS_WITH_EVENT_LIBS)
131 if (LWS_WITH_SECURE_STREAMS_PROXY_API)
132 set(LWS_WITH_LWS_DSH 1)
133 set(LWS_WITH_UNIX_SOCK 1)
134 set(LWS_WITH_SYS_SMD 1)
137 if (NOT LWS_WITH_NETWORK)
142 set(LWS_WITHOUT_EXTENSIONS 1)
143 set(LWS_WITHOUT_SERVER 1)
144 set(LWS_WITHOUT_CLIENT 1)
145 set(LWS_WITH_HTTP2 0)
146 set(LWS_WITH_SOCKS5 0)
148 set(LWS_WITH_HTTP_PROXY 0)
149 set(LWS_WITH_PLUGINS 0)
150 set(LWS_WITH_LWSWS 0)
152 set(LWS_ROLE_RAW_PROXY 0)
153 set(LWS_WITH_PEER_LIMITS 0)
154 set(LWS_WITH_HTTP_STREAM_COMPRESSION 0)
155 set(LWS_WITH_HTTP_BROTLI 0)
157 set(LWS_WITH_SEQUENCER 0)
159 set(LWS_WITH_LWS_DSH 0)
160 set(LWS_WITH_THREADPOOL 0)
161 set(LWS_WITH_SYS_SMD 0)
165 set(LWS_WITH_SPAWN 1)
168 if (LWS_WITH_STRUCT_SQLITE3)
169 set(LWS_WITH_SQLITE3 1)
172 if (LWS_WITH_HTTP_BASIC_AUTH)
173 # WWW_AUTHENTICATE used by basic auth is an "uncommon header"
174 set(LWS_WITH_HTTP_UNCOMMON_HEADERS 1)
177 if (LWS_WITH_SECURE_STREAMS_AUTH_SIGV4)
178 set(LWS_WITH_GENCRYPTO 1)
185 if(NOT DEFINED CMAKE_BUILD_TYPE)
186 set(CMAKE_BUILD_TYPE Release CACHE STRING "Build type")
189 if (LWS_PLAT_FREERTOS)
193 if (LWS_PLAT_FREERTOS)
205 set(LWS_WITHOUT_EXTENSIONS 1)
208 unset(LWS_WITH_LIBUV_INTERNAL)
211 message(STATUS "LWS_WITH_LWSWS --> Enabling LWS_WITH_PLUGINS and LWS_WITH_LIBUV")
212 set(LWS_WITH_PLUGINS 1)
213 set(LWS_WITH_LIBUV 1)
214 set(LWS_WITH_LIBUV_INTERNAL 1)
215 set(LWS_WITH_EVENT_LIBS 1) # implied by LIBUV_INTERNAL
216 set(LWS_WITH_ACCESS_LOG 1)
217 set(LWS_WITH_SYS_METRICS 1)
219 set(LWS_WITH_LEJP_CONF 1)
220 set(LWS_WITH_PEER_LIMITS 1)
221 set(LWS_ROLE_RAW_PROXY 1)
225 if (LWS_WITH_PLUGINS)
226 set(LWS_WITH_GENCRYPTO 1)
229 if (LWS_ROLE_RAW_PROXY)
230 set (LWS_WITH_CLIENT 1)
231 set (LWS_WITH_SERVER 1)
235 set (LWS_WITH_CLIENT 1)
236 set (LWS_WITH_SERVER 1)
237 set (LWS_WITH_JOSE 1)
242 set(LWS_WITH_GENCRYPTO 1)
245 if (LWS_WITH_PLUGINS AND NOT LWS_WITH_LIBUV)
246 message(STATUS "LWS_WITH_PLUGINS --> Enabling LWS_WITH_LIBUV")
247 set(LWS_WITH_LIBUV 1)
248 set(LWS_WITH_EVENT_LIBS 1)
251 if (LWS_WITH_PLUGINS OR LWS_WITH_CGI)
253 set(LWS_WITH_GENCRYPTO 1)
256 if (LWS_PLAT_FREERTOS)
257 set(LWS_WITH_SHARED OFF)
259 set(LWS_WITH_MBEDTLS ON)
261 # set(LWS_WITHOUT_CLIENT ON)
262 set(LWS_WITHOUT_TESTAPPS ON)
263 set(LWS_WITHOUT_EXTENSIONS ON)
264 set(LWS_WITH_PLUGINS OFF)
265 set(LWS_WITH_RANGES ON)
266 # this implies no pthreads in the lib
268 set(LWS_HAVE_MALLOC 1)
269 set(LWS_HAVE_REALLOC 1)
270 set(LWS_HAVE_GETIFADDRS 1)
271 set(LWS_WITH_CUSTOM_HEADERS 0)
275 # set(LWS_WITH_ZIP_FOPS 1)
280 if (LWS_WITH_PLUGINS)
281 set(LWS_WITH_LIBUV_INTERNAL 1)
285 if (LWS_WITHOUT_SERVER)
286 set(LWS_WITH_LWSWS OFF)
289 if (LWS_WITH_LEJP_CONF)
293 # confirm H1 relationships
295 if (NOT LWS_ROLE_H1 AND LWS_ROLE_H2)
296 message(FATAL_ERROR "H2 requires LWS_ROLE_H1")
299 if (NOT LWS_ROLE_H1 AND LWS_ROLE_WS)
300 message(FATAL_ERROR "WS requires LWS_ROLE_H1")
303 if (NOT LWS_ROLE_H1 AND LWS_ROLE_CGI)
304 message(FATAL_ERROR "CGI requires LWS_ROLE_H1")
307 # confirm HTTP relationships
309 if (NOT LWS_ROLE_H1 AND NOT LWS_ROLE_H2 AND LWS_WITH_HTTP_PROXY)
310 message(FATAL_ERROR "LWS_WITH_LWSWS requires LWS_ROLE_H1")
313 if (NOT LWS_ROLE_H1 AND NOT LWS_ROLE_H2 AND LWS_WITH_HTTP_PROXY)
314 message(FATAL_ERROR "LWS_WITH_HTTP_PROXY requires LWS_ROLE_H1")
317 if (NOT LWS_ROLE_H1 AND NOT LWS_ROLE_H2 AND LWS_WITH_RANGES)
318 message(FATAL_ERROR "LWS_WITH_RANGES requires LWS_ROLE_H1")
321 if (NOT LWS_ROLE_H1 AND NOT LWS_ROLE_H2 AND LWS_WITH_ACCESS_LOG)
322 message(FATAL_ERROR "LWS_WITH_ACCESS_LOG requires LWS_ROLE_H1")
325 if (LWS_WITH_HTTP_PROXY AND (LWS_WITHOUT_CLIENT OR LWS_WITHOUT_SERVER))
326 message("You have to enable both client and server for http proxy")
327 set(LWS_WITH_HTTP_PROXY 0)
330 if (NOT LWS_WITHOUT_EXTENSIONS OR LWS_WITH_ZIP_FOPS)
334 if (LWS_WITH_SECURE_STREAMS)
335 set(LWS_WITH_SECURE_STREAMS_SYS_AUTH_API_AMAZON_COM 1)
338 if (NOT (LWS_WITH_STATIC OR LWS_WITH_SHARED))
339 message(FATAL_ERROR "Makes no sense to compile with neither static nor shared libraries.")
342 if (LWS_WITHOUT_DAEMONIZE OR WIN32)
343 set(LWS_NO_DAEMONIZE 1)
351 set(LWS_WITH_UNIX_SOCK 1)
357 if ("${LWS_MAX_SMP}" STREQUAL "")
361 set(LWS_WITH_CLIENT 1)
362 if (LWS_WITHOUT_CLIENT)
364 set(LWS_WITH_SECURE_STREAMS 0)
366 set(LWS_WITH_SERVER 1)
367 if (LWS_WITHOUT_SERVER)
371 # using any abstract protocol enables LWS_WITH_ABSTRACT
374 # set(LWS_WITH_ABSTRACT 1)
377 if (NOT LWS_WITH_EVLIB_PLUGINS AND (LWS_WITH_LIBEV AND LWS_WITH_LIBEVENT))
378 message(FATAL_ERROR "Sorry libev and libevent conflict with each others' namespace, you can only have one or the other")
381 if (LWS_SSL_SERVER_WITH_ECDH_CERT)
382 set(LWS_SSL_SERVER_WITH_ECDH_CERT 1)
385 # LWS_OPENSSL_SUPPORT deprecated... use LWS_WITH_TLS
386 if (LWS_WITH_SSL OR LWS_WITH_MBEDTLS)
387 set(LWS_OPENSSL_SUPPORT 1)
391 if (NOT LWS_WITH_SSL)
392 set(LWS_WITHOUT_BUILTIN_SHA1 OFF)
394 # protocol plugins dont make any sense either
395 if (LWS_WITH_PLUGINS AND NOT LWS_WITH_SHARED)
396 message("Deselecting PLUGINS since building static")
397 set(LWS_WITH_PLUGINS 0)
400 if (LWS_WITH_TLS_SESSIONS)
401 if (NOT LWS_WITH_NETWORK OR NOT LWS_WITH_CLIENT)
402 message("TLS_SESSIONS support requires client, disabling")
403 set(LWS_WITH_TLS_SESSIONS OFF)
407 # if we're only building static, we don't want event lib plugins
409 if (LWS_WITH_EVLIB_PLUGINS AND NOT LWS_WITH_SHARED)
410 message("Deselecting EVLIB_PLUGINS since building static")
411 set(LWS_WITH_EVLIB_PLUGINS 0)
414 if (LWS_WITH_PLUGINS OR (LWS_WITH_EVLIB_PLUGINS AND LWS_WITH_EVENT_LIBS))
415 set(LWS_WITH_PLUGINS_API 1)
418 if (WIN32 AND NOT LWS_EXT_PTHREAD_LIBRARIES)
420 message("SMD requires pthreads")
421 set(LWS_WITH_SYS_SMD 0)