blob: 5f5455ec1a691632ca3558878849047f1639679b [file] [log] [blame]
Andy Greenb3131fd2020-05-22 16:47:40 +01001#
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
26if(IOS)
27 set(LWS_DETECTED_PLAT_IOS 1)
28endif()
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 Greenb72ab322020-06-22 20:05:06 +010033if (ESP_PLATFORM)
Andy Greenb3131fd2020-05-22 16:47:40 +010034 message(STATUS "ESP-IDF enabled")
35 set(LWS_WITH_ESP32 ON)
36 set(LWS_WITH_ZLIB OFF)
Andy Greenb72ab322020-06-22 20:05:06 +010037 set(LWS_HAVE_mbedtls_ssl_get_alpn_protocol 1)
Andy Greenb3131fd2020-05-22 16:47:40 +010038else()
39 set(LWS_WITH_ESP32_HELPER OFF)
40endif()
41
42if (LWS_WITH_ESP32)
43 set(LWS_PLAT_FREERTOS 1)
44endif()
45
Andy Greenb72ab322020-06-22 20:05:06 +010046if (LWS_PLAT_OPTEE)
Andy Greenb3131fd2020-05-22 16:47:40 +010047 set(LWS_WITH_UDP 0)
48endif()
49
50if (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}")
55else()
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)
59endif()
60
61if (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)
74endif()
75
76if(LWS_WITH_DISTRO_RECOMMENDED)
Andy Green195fe762020-07-20 07:35:11 +010077 set(LWS_WITH_HTTP2 1) # selfcontained
78 set(LWS_WITH_LWSWS 1) # libuv
79 set(LWS_WITH_CGI 1) # selfcontained
80 set(LWS_IPV6 1) # selfcontained
81 set(LWS_WITH_ZIP_FOPS 1) # libz
82 set(LWS_WITH_SOCKS5 1) # selfcontained
83 set(LWS_WITH_RANGES 1) # selfcontained
84 set(LWS_WITH_ACME 1) # selfcontained / tls
85 set(LWS_WITH_SERVER_STATUS 1) # selfcontained
86 set(LWS_WITH_GLIB 1) # glib
87 set(LWS_WITH_LIBUV 1) # libuv
88 set(LWS_WITH_LIBEV 1) # libev
Andy Greenc6c7ab22020-08-27 15:37:14 +010089 set(LWS_WITH_LIBEVENT 1) # libevent
90 set(LWS_WITH_EVLIB_PLUGINS 1) # event libraries created as plugins / individual packages
Andy Green195fe762020-07-20 07:35:11 +010091 set(LWS_WITHOUT_EXTENSIONS 0) # libz
92 set(LWS_ROLE_DBUS 1) # dbus-related libs
93 set(LWS_WITH_FTS 1) # selfcontained
94 set(LWS_WITH_THREADPOOL 1) # pthreads
95 set(LWS_UNIX_SOCK 1) # selfcontained
96 set(LWS_WITH_HTTP_PROXY 1) # selfcontained
97 set(LWS_WITH_DISKCACHE 1) # selfcontained
98 set(LWS_WITH_LWSAC 1) # selfcontained
99 set(LWS_WITH_LEJP_CONF 1) # selfcontained
100 set(LWS_WITH_PLUGINS 1) # libdl
101 set(LWS_ROLE_RAW_PROXY 1) # selfcontained
102 set(LWS_WITH_GENCRYPTO 1) # selfcontained / tls
103 set(LWS_WITH_JOSE 1) # selfcontained
104 set(LWS_WITH_STRUCT_JSON 1) # selfcontained
105 set(LWS_WITH_STRUCT_SQLITE3 1) # sqlite3
106 set(LWS_WITH_SPAWN 1) # selfcontained
Andy Greenb3131fd2020-05-22 16:47:40 +0100107# libmount is problematic on Centos 8 / RHEL 8
108# set(LWS_WITH_FSMOUNT 1)
Andy Green195fe762020-07-20 07:35:11 +0100109 set(LWS_ROLE_MQTT 1) # selfcontained
110 set(LWS_WITH_SECURE_STREAMS 1) # selfcontained
111 set(LWS_WITH_SECURE_STREAMS_PROXY_API 1) # selfcontained
112 set(LWS_WITH_DIR 1) # selfcontained
Andy Greenb3131fd2020-05-22 16:47:40 +0100113endif()
114
Andy Greenc6c7ab22020-08-27 15:37:14 +0100115# LWS_WITH_EVENT_LIBS is set if any event lib selected
116
117if (LWS_WITH_LIBEV OR
118 LWS_WITH_LIBUV OR
119 LWS_WITH_LIBEVENT OR
120 LWS_WITH_GLIB)
121 set(LWS_WITH_EVENT_LIBS 1)
122else()
123 unset(LWS_WITH_EVENT_LIBS)
124endif()
125
Andy Greenb3131fd2020-05-22 16:47:40 +0100126if (LWS_WITH_SECURE_STREAMS_PROXY_API)
127 set(LWS_WITH_LWS_DSH 1)
128 set(LWS_WITH_UNIX_SOCK 1)
129endif()
130
131if (NOT LWS_WITH_NETWORK)
132 set(LWS_ROLE_MQTT 0)
133 set(LWS_ROLE_H1 0)
134 set(LWS_ROLE_WS 0)
135 set(LWS_ROLE_RAW 0)
136 set(LWS_WITHOUT_EXTENSIONS 1)
137 set(LWS_WITHOUT_SERVER 1)
138 set(LWS_WITHOUT_CLIENT 1)
139 set(LWS_WITH_HTTP2 0)
140 set(LWS_WITH_SOCKS5 0)
141 set(LWS_UNIX_SOCK 0)
142 set(LWS_WITH_HTTP_PROXY 0)
143 set(LWS_WITH_PLUGINS 0)
144 set(LWS_WITH_LWSWS 0)
145 set(LWS_WITH_CGI 0)
146 set(LWS_ROLE_RAW_PROXY 0)
147 set(LWS_WITH_PEER_LIMITS 0)
Andy Greenb3131fd2020-05-22 16:47:40 +0100148 set(LWS_WITH_HTTP_STREAM_COMPRESSION 0)
149 set(LWS_WITH_HTTP_BROTLI 0)
150 set(LWS_WITH_POLL 0)
151 set(LWS_WITH_SEQUENCER 0)
152 set(LWS_ROLE_DBUS 0)
153 set(LWS_WITH_LWS_DSH 0)
154 set(LWS_WITH_THREADPOOL 0)
Andy Green8eca7e12020-06-24 20:15:46 +0100155 set(LWS_WITH_SYS_SMD 0)
Andy Greenb3131fd2020-05-22 16:47:40 +0100156endif()
157
158if (LWS_WITH_CGI)
159 set(LWS_WITH_SPAWN 1)
160endif()
161
162if (LWS_WITH_STRUCT_SQLITE3)
163 set(LWS_WITH_SQLITE3 1)
164endif()
165
166if (LWS_WITH_HTTP_BASIC_AUTH)
167 # WWW_AUTHENTICATE used by basic auth is an "uncommon header"
168 set(LWS_WITH_HTTP_UNCOMMON_HEADERS 1)
169endif()
170
171if (APPLE)
172 set(LWS_ROLE_DBUS 0)
173endif()
174
175if(NOT DEFINED CMAKE_BUILD_TYPE)
176 set(CMAKE_BUILD_TYPE Release CACHE STRING "Build type")
177endif()
178
Andy Green911898a2020-05-24 13:57:21 +0100179if (LWS_PLAT_FREERTOS)
Andy Greenb3131fd2020-05-22 16:47:40 +0100180 set(LWS_UNIX_SOCK 0)
181endif()
182
183if (LWS_PLAT_FREERTOS)
Andy Greenb3131fd2020-05-22 16:47:40 +0100184 set(LWS_WITH_FTS 0)
185endif()
186
187if (LWS_WITH_HTTP2)
188 set(LWS_ROLE_H2 1)
189endif()
190if (LWS_WITH_CGI)
191 set(LWS_ROLE_CGI 1)
192endif()
193
194if (NOT LWS_ROLE_WS)
195 set(LWS_WITHOUT_EXTENSIONS 1)
196endif()
197
Andy Greenc6c7ab22020-08-27 15:37:14 +0100198unset(LWS_WITH_LIBUV_INTERNAL)
199
Andy Greenb3131fd2020-05-22 16:47:40 +0100200if (LWS_WITH_LWSWS)
201 message(STATUS "LWS_WITH_LWSWS --> Enabling LWS_WITH_PLUGINS and LWS_WITH_LIBUV")
202 set(LWS_WITH_PLUGINS 1)
203 set(LWS_WITH_LIBUV 1)
Andy Greenc6c7ab22020-08-27 15:37:14 +0100204 set(LWS_WITH_LIBUV_INTERNAL 1)
205 set(LWS_WITH_EVENT_LIBS 1) # implied by LIBUV_INTERNAL
Andy Greenb3131fd2020-05-22 16:47:40 +0100206 set(LWS_WITH_ACCESS_LOG 1)
207 set(LWS_WITH_SERVER_STATUS 1)
208 set(LWS_WITH_LEJP 1)
209 set(LWS_WITH_LEJP_CONF 1)
210 set(LWS_WITH_PEER_LIMITS 1)
211 set(LWS_ROLE_RAW_PROXY 1)
212endif()
213
214# sshd plugin
215if (LWS_WITH_PLUGINS)
216 set(LWS_WITH_GENCRYPTO 1)
217endif()
218
219if (LWS_ROLE_RAW_PROXY)
220 set (LWS_WITH_CLIENT 1)
221 set (LWS_WITH_SERVER 1)
222endif()
223
224if (LWS_WITH_ACME)
225 set (LWS_WITH_CLIENT 1)
226 set (LWS_WITH_SERVER 1)
227 set (LWS_WITH_JOSE 1)
228endif()
229
230if (LWS_WITH_JOSE)
231 set(LWS_WITH_LEJP 1)
232 set(LWS_WITH_GENCRYPTO 1)
233endif()
234
235if (LWS_WITH_PLUGINS AND NOT LWS_WITH_LIBUV)
236message(STATUS "LWS_WITH_PLUGINS --> Enabling LWS_WITH_LIBUV")
237 set(LWS_WITH_LIBUV 1)
238endif()
239
240if (LWS_WITH_PLUGINS OR LWS_WITH_CGI)
241 # sshd plugin
242 set(LWS_WITH_GENCRYPTO 1)
243endif()
244
Andy Greenb3131fd2020-05-22 16:47:40 +0100245if (LWS_PLAT_FREERTOS)
246 set(LWS_WITH_SHARED OFF)
247 set(LWS_WITH_MBEDTLS ON)
248 # set(LWS_WITHOUT_CLIENT ON)
249 set(LWS_WITHOUT_TESTAPPS ON)
250 set(LWS_WITHOUT_EXTENSIONS ON)
251 set(LWS_WITH_PLUGINS OFF)
252 set(LWS_WITH_RANGES ON)
253 # this implies no pthreads in the lib
254 set(LWS_MAX_SMP 1)
255 set(LWS_HAVE_MALLOC 1)
256 set(LWS_HAVE_REALLOC 1)
257 set(LWS_HAVE_GETIFADDRS 1)
258 set(LWS_WITH_CUSTOM_HEADERS 0)
259endif()
260
261#if (LWS_WITH_ESP32)
262# set(LWS_WITH_ZIP_FOPS 1)
263#endif()
264
265if (WIN32)
266set(LWS_MAX_SMP 1)
Andy Greenc6c7ab22020-08-27 15:37:14 +0100267if (LWS_WITH_PLUGINS)
268set(LWS_WITH_LIBUV_INTERNAL 1)
269endif()
Andy Greenb3131fd2020-05-22 16:47:40 +0100270endif()
271
272if (LWS_WITHOUT_SERVER)
273set(LWS_WITH_LWSWS OFF)
274endif()
275
276if (LWS_WITH_LEJP_CONF)
277 set(LWS_WITH_DIR 1)
278endif()
279
280# confirm H1 relationships
281
282if (NOT LWS_ROLE_H1 AND LWS_ROLE_H2)
283 message(FATAL_ERROR "H2 requires LWS_ROLE_H1")
284endif()
285
286if (NOT LWS_ROLE_H1 AND LWS_ROLE_WS)
287 message(FATAL_ERROR "WS requires LWS_ROLE_H1")
288endif()
289
290if (NOT LWS_ROLE_H1 AND LWS_ROLE_CGI)
291 message(FATAL_ERROR "CGI requires LWS_ROLE_H1")
292endif()
293
294# confirm HTTP relationships
295
296if (NOT LWS_ROLE_H1 AND NOT LWS_ROLE_H2 AND LWS_WITH_HTTP_PROXY)
297 message(FATAL_ERROR "LWS_WITH_LWSWS requires LWS_ROLE_H1")
298endif()
299
300if (NOT LWS_ROLE_H1 AND NOT LWS_ROLE_H2 AND LWS_WITH_HTTP_PROXY)
301 message(FATAL_ERROR "LWS_WITH_HTTP_PROXY requires LWS_ROLE_H1")
302endif()
303
304if (NOT LWS_ROLE_H1 AND NOT LWS_ROLE_H2 AND LWS_WITH_RANGES)
305 message(FATAL_ERROR "LWS_WITH_RANGES requires LWS_ROLE_H1")
306endif()
307
308if (NOT LWS_ROLE_H1 AND NOT LWS_ROLE_H2 AND LWS_WITH_ACCESS_LOG)
309 message(FATAL_ERROR "LWS_WITH_ACCESS_LOG requires LWS_ROLE_H1")
310endif()
311
312if (LWS_WITH_HTTP_PROXY AND (LWS_WITHOUT_CLIENT OR LWS_WITHOUT_SERVER))
313 message("You have to enable both client and server for http proxy")
314 set(LWS_WITH_HTTP_PROXY 0)
315endif()
316
317if (NOT LWS_WITHOUT_EXTENSIONS OR LWS_WITH_ZIP_FOPS)
318 set(LWS_WITH_ZLIB 1)
319endif()
320
321if (LWS_WITH_SECURE_STREAMS)
322 set(LWS_WITH_SECURE_STREAMS_SYS_AUTH_API_AMAZON_COM 1)
323endif()
324
325if (NOT (LWS_WITH_STATIC OR LWS_WITH_SHARED))
326 message(FATAL_ERROR "Makes no sense to compile with neither static nor shared libraries.")
327endif()
328
329if (LWS_WITHOUT_DAEMONIZE OR WIN32)
330 set(LWS_NO_DAEMONIZE 1)
331endif()
332
333if (LWS_WITH_LIBEV)
334 set(LWS_WITH_LIBEV 1)
335endif()
336
337if (LWS_WITH_LIBUV)
338 set(LWS_WITH_LIBUV 1)
339endif()
340
341if (LWS_WITH_LIBEVENT)
342 set(LWS_WITH_LIBEVENT 1)
343endif()
344
345if (LWS_IPV6)
346 set(LWS_WITH_IPV6 1)
347endif()
348
349if (LWS_UNIX_SOCK)
350 set(LWS_WITH_UNIX_SOCK 1)
351endif()
352
353if (NOT LWS_MAX_SMP)
354 set(LWS_MAX_SMP 1)
355endif()
356if ("${LWS_MAX_SMP}" STREQUAL "")
357 set(LWS_MAX_SMP 1)
358endif()
359
360set(LWS_WITH_CLIENT 1)
361if (LWS_WITHOUT_CLIENT)
362 set(LWS_WITH_CLIENT)
Andy Green6747ab82020-06-17 11:13:01 +0100363 set(LWS_WITH_SECURE_STREAMS 0)
Andy Greenb3131fd2020-05-22 16:47:40 +0100364endif()
365set(LWS_WITH_SERVER 1)
366if (LWS_WITHOUT_SERVER)
367 set(LWS_WITH_SERVER)
368endif()
369
370# using any abstract protocol enables LWS_WITH_ABSTRACT
371
372#if (LWS_WITH_SMTP)
373# set(LWS_WITH_ABSTRACT 1)
374#endif()
375
Andy Greenc6c7ab22020-08-27 15:37:14 +0100376if (NOT LWS_WITH_EVLIB_PLUGINS AND (LWS_WITH_LIBEV AND LWS_WITH_LIBEVENT))
Andy Greenb3131fd2020-05-22 16:47:40 +0100377 message(FATAL_ERROR "Sorry libev and libevent conflict with each others' namespace, you can only have one or the other")
378endif()
379
380if (LWS_SSL_SERVER_WITH_ECDH_CERT)
381 set(LWS_SSL_SERVER_WITH_ECDH_CERT 1)
382endif()
383
384# LWS_OPENSSL_SUPPORT deprecated... use LWS_WITH_TLS
385if (LWS_WITH_SSL OR LWS_WITH_MBEDTLS)
386 set(LWS_OPENSSL_SUPPORT 1)
387 set(LWS_WITH_TLS 1)
388endif()
389
390if (NOT LWS_WITH_SSL)
Andy Green8eca7e12020-06-24 20:15:46 +0100391 set(LWS_WITHOUT_BUILTIN_SHA1 OFF)
Andy Greenb3131fd2020-05-22 16:47:40 +0100392endif()