blob: 8ec12f1571c6b396fe7eaeebe51cd94045f30289 [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)
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)
113endif()
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)
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 Green8eca7e12020-06-24 20:15:46 +0100145 set(LWS_WITH_SYS_SMD 0)
Andy Greenb3131fd2020-05-22 16:47:40 +0100146endif()
147
148if (LWS_WITH_CGI)
149 set(LWS_WITH_SPAWN 1)
150endif()
151
152if (LWS_WITH_STRUCT_SQLITE3)
153 set(LWS_WITH_SQLITE3 1)
154endif()
155
156if (LWS_WITH_HTTP_BASIC_AUTH)
157 # WWW_AUTHENTICATE used by basic auth is an "uncommon header"
158 set(LWS_WITH_HTTP_UNCOMMON_HEADERS 1)
159endif()
160
161if (APPLE)
162 set(LWS_ROLE_DBUS 0)
163endif()
164
165if(NOT DEFINED CMAKE_BUILD_TYPE)
166 set(CMAKE_BUILD_TYPE Release CACHE STRING "Build type")
167endif()
168
Andy Green911898a2020-05-24 13:57:21 +0100169if (LWS_PLAT_FREERTOS)
Andy Greenb3131fd2020-05-22 16:47:40 +0100170 set(LWS_UNIX_SOCK 0)
171endif()
172
173if (LWS_PLAT_FREERTOS)
Andy Greenb3131fd2020-05-22 16:47:40 +0100174 set(LWS_WITH_FTS 0)
175endif()
176
177if (LWS_WITH_HTTP2)
178 set(LWS_ROLE_H2 1)
179endif()
180if (LWS_WITH_CGI)
181 set(LWS_ROLE_CGI 1)
182endif()
183
184if (NOT LWS_ROLE_WS)
185 set(LWS_WITHOUT_EXTENSIONS 1)
186endif()
187
188if (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)
198endif()
199
200# sshd plugin
201if (LWS_WITH_PLUGINS)
202 set(LWS_WITH_GENCRYPTO 1)
203endif()
204
205if (LWS_ROLE_RAW_PROXY)
206 set (LWS_WITH_CLIENT 1)
207 set (LWS_WITH_SERVER 1)
208endif()
209
210if (LWS_WITH_ACME)
211 set (LWS_WITH_CLIENT 1)
212 set (LWS_WITH_SERVER 1)
213 set (LWS_WITH_JOSE 1)
214endif()
215
216if (LWS_WITH_JOSE)
217 set(LWS_WITH_LEJP 1)
218 set(LWS_WITH_GENCRYPTO 1)
219endif()
220
221if (LWS_WITH_PLUGINS AND NOT LWS_WITH_LIBUV)
222message(STATUS "LWS_WITH_PLUGINS --> Enabling LWS_WITH_LIBUV")
223 set(LWS_WITH_LIBUV 1)
224endif()
225
226if (LWS_WITH_PLUGINS OR LWS_WITH_CGI)
227 # sshd plugin
228 set(LWS_WITH_GENCRYPTO 1)
229endif()
230
231if (LWS_WITH_GENERIC_SESSIONS)
232 set(LWS_WITH_SQLITE3 1)
233 # set(LWS_WITH_SMTP 1)
234 set(LWS_WITH_STRUCT_SQLITE3 1)
235endif()
236
237if (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)
251endif()
252
253#if (LWS_WITH_ESP32)
254# set(LWS_WITH_ZIP_FOPS 1)
255#endif()
256
257if (WIN32)
258set(LWS_MAX_SMP 1)
259endif()
260
261if (LWS_WITHOUT_SERVER)
262set(LWS_WITH_LWSWS OFF)
263endif()
264
265if (LWS_WITH_LEJP_CONF)
266 set(LWS_WITH_DIR 1)
267endif()
268
269# confirm H1 relationships
270
271if (NOT LWS_ROLE_H1 AND LWS_ROLE_H2)
272 message(FATAL_ERROR "H2 requires LWS_ROLE_H1")
273endif()
274
275if (NOT LWS_ROLE_H1 AND LWS_ROLE_WS)
276 message(FATAL_ERROR "WS requires LWS_ROLE_H1")
277endif()
278
279if (NOT LWS_ROLE_H1 AND LWS_ROLE_CGI)
280 message(FATAL_ERROR "CGI requires LWS_ROLE_H1")
281endif()
282
283# confirm HTTP relationships
284
285if (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")
287endif()
288
289if (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")
291endif()
292
293if (NOT LWS_ROLE_H1 AND NOT LWS_ROLE_H2 AND LWS_WITH_RANGES)
294 message(FATAL_ERROR "LWS_WITH_RANGES requires LWS_ROLE_H1")
295endif()
296
297if (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")
299endif()
300
301if (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)
304endif()
305
306if (NOT LWS_WITHOUT_EXTENSIONS OR LWS_WITH_ZIP_FOPS)
307 set(LWS_WITH_ZLIB 1)
308endif()
309
310if (LWS_WITH_SECURE_STREAMS)
311 set(LWS_WITH_SECURE_STREAMS_SYS_AUTH_API_AMAZON_COM 1)
312endif()
313
314if (NOT (LWS_WITH_STATIC OR LWS_WITH_SHARED))
315 message(FATAL_ERROR "Makes no sense to compile with neither static nor shared libraries.")
316endif()
317
318if (LWS_WITHOUT_DAEMONIZE OR WIN32)
319 set(LWS_NO_DAEMONIZE 1)
320endif()
321
322if (LWS_WITH_LIBEV)
323 set(LWS_WITH_LIBEV 1)
324endif()
325
326if (LWS_WITH_LIBUV)
327 set(LWS_WITH_LIBUV 1)
328endif()
329
330if (LWS_WITH_LIBEVENT)
331 set(LWS_WITH_LIBEVENT 1)
332endif()
333
334if (LWS_IPV6)
335 set(LWS_WITH_IPV6 1)
336endif()
337
338if (LWS_UNIX_SOCK)
339 set(LWS_WITH_UNIX_SOCK 1)
340endif()
341
342if (NOT LWS_MAX_SMP)
343 set(LWS_MAX_SMP 1)
344endif()
345if ("${LWS_MAX_SMP}" STREQUAL "")
346 set(LWS_MAX_SMP 1)
347endif()
348
349set(LWS_WITH_CLIENT 1)
350if (LWS_WITHOUT_CLIENT)
351 set(LWS_WITH_CLIENT)
Andy Green6747ab82020-06-17 11:13:01 +0100352 set(LWS_WITH_SECURE_STREAMS 0)
Andy Greenb3131fd2020-05-22 16:47:40 +0100353endif()
354set(LWS_WITH_SERVER 1)
355if (LWS_WITHOUT_SERVER)
356 set(LWS_WITH_SERVER)
357endif()
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
365if (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")
367endif()
368
369if (LWS_SSL_SERVER_WITH_ECDH_CERT)
370 set(LWS_SSL_SERVER_WITH_ECDH_CERT 1)
371endif()
372
373# LWS_OPENSSL_SUPPORT deprecated... use LWS_WITH_TLS
374if (LWS_WITH_SSL OR LWS_WITH_MBEDTLS)
375 set(LWS_OPENSSL_SUPPORT 1)
376 set(LWS_WITH_TLS 1)
377endif()
378
379if (NOT LWS_WITH_SSL)
Andy Green8eca7e12020-06-24 20:15:46 +0100380 set(LWS_WITHOUT_BUILTIN_SHA1 OFF)
Andy Greenb3131fd2020-05-22 16:47:40 +0100381endif()