blob: 01c9813e0e1db2176436b01d06374f77ec19f3aa [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 Greenb3131fd2020-05-22 16:47:40 +010089 # libev + libevent cannot coexist at build-time
90 set(LWS_WITH_LIBEVENT 0)
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
115if (LWS_WITH_SECURE_STREAMS_PROXY_API)
116 set(LWS_WITH_LWS_DSH 1)
117 set(LWS_WITH_UNIX_SOCK 1)
118endif()
119
120if (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)
Andy Greenb3131fd2020-05-22 16:47:40 +0100137 set(LWS_WITH_HTTP_STREAM_COMPRESSION 0)
138 set(LWS_WITH_HTTP_BROTLI 0)
139 set(LWS_WITH_POLL 0)
140 set(LWS_WITH_SEQUENCER 0)
141 set(LWS_ROLE_DBUS 0)
142 set(LWS_WITH_LWS_DSH 0)
143 set(LWS_WITH_THREADPOOL 0)
Andy Green8eca7e12020-06-24 20:15:46 +0100144 set(LWS_WITH_SYS_SMD 0)
Andy Greenb3131fd2020-05-22 16:47:40 +0100145endif()
146
147if (LWS_WITH_CGI)
148 set(LWS_WITH_SPAWN 1)
149endif()
150
151if (LWS_WITH_STRUCT_SQLITE3)
152 set(LWS_WITH_SQLITE3 1)
153endif()
154
155if (LWS_WITH_HTTP_BASIC_AUTH)
156 # WWW_AUTHENTICATE used by basic auth is an "uncommon header"
157 set(LWS_WITH_HTTP_UNCOMMON_HEADERS 1)
158endif()
159
160if (APPLE)
161 set(LWS_ROLE_DBUS 0)
162endif()
163
164if(NOT DEFINED CMAKE_BUILD_TYPE)
165 set(CMAKE_BUILD_TYPE Release CACHE STRING "Build type")
166endif()
167
Andy Green911898a2020-05-24 13:57:21 +0100168if (LWS_PLAT_FREERTOS)
Andy Greenb3131fd2020-05-22 16:47:40 +0100169 set(LWS_UNIX_SOCK 0)
170endif()
171
172if (LWS_PLAT_FREERTOS)
Andy Greenb3131fd2020-05-22 16:47:40 +0100173 set(LWS_WITH_FTS 0)
174endif()
175
176if (LWS_WITH_HTTP2)
177 set(LWS_ROLE_H2 1)
178endif()
179if (LWS_WITH_CGI)
180 set(LWS_ROLE_CGI 1)
181endif()
182
183if (NOT LWS_ROLE_WS)
184 set(LWS_WITHOUT_EXTENSIONS 1)
185endif()
186
187if (LWS_WITH_LWSWS)
188 message(STATUS "LWS_WITH_LWSWS --> Enabling LWS_WITH_PLUGINS and LWS_WITH_LIBUV")
189 set(LWS_WITH_PLUGINS 1)
190 set(LWS_WITH_LIBUV 1)
191 set(LWS_WITH_ACCESS_LOG 1)
192 set(LWS_WITH_SERVER_STATUS 1)
193 set(LWS_WITH_LEJP 1)
194 set(LWS_WITH_LEJP_CONF 1)
195 set(LWS_WITH_PEER_LIMITS 1)
196 set(LWS_ROLE_RAW_PROXY 1)
197endif()
198
199# sshd plugin
200if (LWS_WITH_PLUGINS)
201 set(LWS_WITH_GENCRYPTO 1)
202endif()
203
204if (LWS_ROLE_RAW_PROXY)
205 set (LWS_WITH_CLIENT 1)
206 set (LWS_WITH_SERVER 1)
207endif()
208
209if (LWS_WITH_ACME)
210 set (LWS_WITH_CLIENT 1)
211 set (LWS_WITH_SERVER 1)
212 set (LWS_WITH_JOSE 1)
213endif()
214
215if (LWS_WITH_JOSE)
216 set(LWS_WITH_LEJP 1)
217 set(LWS_WITH_GENCRYPTO 1)
218endif()
219
220if (LWS_WITH_PLUGINS AND NOT LWS_WITH_LIBUV)
221message(STATUS "LWS_WITH_PLUGINS --> Enabling LWS_WITH_LIBUV")
222 set(LWS_WITH_LIBUV 1)
223endif()
224
225if (LWS_WITH_PLUGINS OR LWS_WITH_CGI)
226 # sshd plugin
227 set(LWS_WITH_GENCRYPTO 1)
228endif()
229
Andy Greenb3131fd2020-05-22 16:47:40 +0100230if (LWS_PLAT_FREERTOS)
231 set(LWS_WITH_SHARED OFF)
232 set(LWS_WITH_MBEDTLS ON)
233 # set(LWS_WITHOUT_CLIENT ON)
234 set(LWS_WITHOUT_TESTAPPS ON)
235 set(LWS_WITHOUT_EXTENSIONS ON)
236 set(LWS_WITH_PLUGINS OFF)
237 set(LWS_WITH_RANGES ON)
238 # this implies no pthreads in the lib
239 set(LWS_MAX_SMP 1)
240 set(LWS_HAVE_MALLOC 1)
241 set(LWS_HAVE_REALLOC 1)
242 set(LWS_HAVE_GETIFADDRS 1)
243 set(LWS_WITH_CUSTOM_HEADERS 0)
244endif()
245
246#if (LWS_WITH_ESP32)
247# set(LWS_WITH_ZIP_FOPS 1)
248#endif()
249
250if (WIN32)
251set(LWS_MAX_SMP 1)
252endif()
253
254if (LWS_WITHOUT_SERVER)
255set(LWS_WITH_LWSWS OFF)
256endif()
257
258if (LWS_WITH_LEJP_CONF)
259 set(LWS_WITH_DIR 1)
260endif()
261
262# confirm H1 relationships
263
264if (NOT LWS_ROLE_H1 AND LWS_ROLE_H2)
265 message(FATAL_ERROR "H2 requires LWS_ROLE_H1")
266endif()
267
268if (NOT LWS_ROLE_H1 AND LWS_ROLE_WS)
269 message(FATAL_ERROR "WS requires LWS_ROLE_H1")
270endif()
271
272if (NOT LWS_ROLE_H1 AND LWS_ROLE_CGI)
273 message(FATAL_ERROR "CGI requires LWS_ROLE_H1")
274endif()
275
276# confirm HTTP relationships
277
278if (NOT LWS_ROLE_H1 AND NOT LWS_ROLE_H2 AND LWS_WITH_HTTP_PROXY)
279 message(FATAL_ERROR "LWS_WITH_LWSWS requires LWS_ROLE_H1")
280endif()
281
282if (NOT LWS_ROLE_H1 AND NOT LWS_ROLE_H2 AND LWS_WITH_HTTP_PROXY)
283 message(FATAL_ERROR "LWS_WITH_HTTP_PROXY requires LWS_ROLE_H1")
284endif()
285
286if (NOT LWS_ROLE_H1 AND NOT LWS_ROLE_H2 AND LWS_WITH_RANGES)
287 message(FATAL_ERROR "LWS_WITH_RANGES requires LWS_ROLE_H1")
288endif()
289
290if (NOT LWS_ROLE_H1 AND NOT LWS_ROLE_H2 AND LWS_WITH_ACCESS_LOG)
291 message(FATAL_ERROR "LWS_WITH_ACCESS_LOG requires LWS_ROLE_H1")
292endif()
293
294if (LWS_WITH_HTTP_PROXY AND (LWS_WITHOUT_CLIENT OR LWS_WITHOUT_SERVER))
295 message("You have to enable both client and server for http proxy")
296 set(LWS_WITH_HTTP_PROXY 0)
297endif()
298
299if (NOT LWS_WITHOUT_EXTENSIONS OR LWS_WITH_ZIP_FOPS)
300 set(LWS_WITH_ZLIB 1)
301endif()
302
303if (LWS_WITH_SECURE_STREAMS)
304 set(LWS_WITH_SECURE_STREAMS_SYS_AUTH_API_AMAZON_COM 1)
305endif()
306
307if (NOT (LWS_WITH_STATIC OR LWS_WITH_SHARED))
308 message(FATAL_ERROR "Makes no sense to compile with neither static nor shared libraries.")
309endif()
310
311if (LWS_WITHOUT_DAEMONIZE OR WIN32)
312 set(LWS_NO_DAEMONIZE 1)
313endif()
314
315if (LWS_WITH_LIBEV)
316 set(LWS_WITH_LIBEV 1)
317endif()
318
319if (LWS_WITH_LIBUV)
320 set(LWS_WITH_LIBUV 1)
321endif()
322
323if (LWS_WITH_LIBEVENT)
324 set(LWS_WITH_LIBEVENT 1)
325endif()
326
327if (LWS_IPV6)
328 set(LWS_WITH_IPV6 1)
329endif()
330
331if (LWS_UNIX_SOCK)
332 set(LWS_WITH_UNIX_SOCK 1)
333endif()
334
335if (NOT LWS_MAX_SMP)
336 set(LWS_MAX_SMP 1)
337endif()
338if ("${LWS_MAX_SMP}" STREQUAL "")
339 set(LWS_MAX_SMP 1)
340endif()
341
342set(LWS_WITH_CLIENT 1)
343if (LWS_WITHOUT_CLIENT)
344 set(LWS_WITH_CLIENT)
Andy Green6747ab82020-06-17 11:13:01 +0100345 set(LWS_WITH_SECURE_STREAMS 0)
Andy Greenb3131fd2020-05-22 16:47:40 +0100346endif()
347set(LWS_WITH_SERVER 1)
348if (LWS_WITHOUT_SERVER)
349 set(LWS_WITH_SERVER)
350endif()
351
352# using any abstract protocol enables LWS_WITH_ABSTRACT
353
354#if (LWS_WITH_SMTP)
355# set(LWS_WITH_ABSTRACT 1)
356#endif()
357
358if (LWS_WITH_LIBEV AND LWS_WITH_LIBEVENT)
359 message(FATAL_ERROR "Sorry libev and libevent conflict with each others' namespace, you can only have one or the other")
360endif()
361
362if (LWS_SSL_SERVER_WITH_ECDH_CERT)
363 set(LWS_SSL_SERVER_WITH_ECDH_CERT 1)
364endif()
365
366# LWS_OPENSSL_SUPPORT deprecated... use LWS_WITH_TLS
367if (LWS_WITH_SSL OR LWS_WITH_MBEDTLS)
368 set(LWS_OPENSSL_SUPPORT 1)
369 set(LWS_WITH_TLS 1)
370endif()
371
372if (NOT LWS_WITH_SSL)
Andy Green8eca7e12020-06-24 20:15:46 +0100373 set(LWS_WITHOUT_BUILTIN_SHA1 OFF)
Andy Greenb3131fd2020-05-22 16:47:40 +0100374endif()