CMakeLists-implied-options.txt 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412
  1. #
  2. # libwebsockets - small server side websockets and web server implementation
  3. #
  4. # Copyright (C) 2010 - 2020 Andy Green <[email protected]>
  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. if(IOS)
  26. set(LWS_DETECTED_PLAT_IOS 1)
  27. endif()
  28. # Workaround for ESP-IDF
  29. # Detect ESP_PLATFORM environment flag, if exist, set LWS_WITH_ESP32.
  30. # Otherwise the user may not be able to run configuration ESP-IDF in the first time.
  31. if (ESP_PLATFORM)
  32. message(STATUS "ESP-IDF enabled")
  33. set(LWS_WITH_ESP32 ON)
  34. set(LWS_WITH_ZLIB OFF)
  35. set(LWS_HAVE_mbedtls_ssl_get_alpn_protocol 1)
  36. else()
  37. set(LWS_WITH_ESP32_HELPER OFF)
  38. endif()
  39. if (LWS_WITH_ESP32)
  40. set(LWS_PLAT_FREERTOS 1)
  41. endif()
  42. if (LWS_PLAT_OPTEE)
  43. set(LWS_WITH_UDP 0)
  44. endif()
  45. if (LWS_PLAT_FREERTOS)
  46. message(STATUS "No LWS_WITH_DIR or LWS_WITH_LEJP_CONF")
  47. set(LWS_WITH_DIR OFF)
  48. set(LWS_WITH_LEJP_CONF OFF)
  49. message("LWS_WITH_DIR ${LWS_WITH_DIR}")
  50. else()
  51. message(STATUS "Compiled with LWS_WITH_DIR and LWS_WITH_LEJP_CONF")
  52. set(LWS_WITH_DIR ON)
  53. set(LWS_WITH_LEJP_CONF ON)
  54. endif()
  55. if (LWS_FOR_GITOHASHI)
  56. set(LWS_WITH_THREADPOOL 1)
  57. set(LWS_WITH_HTTP2 1)
  58. set(LWS_UNIX_SOCK 1)
  59. set(LWS_WITH_HTTP_PROXY 1)
  60. set(LWS_WITH_FTS 1)
  61. set(LWS_WITH_DISKCACHE 1)
  62. set(LWS_WITH_LWSAC 1)
  63. set(LWS_WITH_LEJP_CONF 1)
  64. set(LWS_WITH_SPAWN 1)
  65. set(LWS_WITH_FSMOUNT 1)
  66. set(LWS_WITH_STRUCT_JSON 1)
  67. set(LWS_WITH_STRUCT_SQLITE3 1)
  68. endif()
  69. if(LWS_WITH_DISTRO_RECOMMENDED)
  70. set(LWS_WITH_HTTP2 1) # selfcontained
  71. set(LWS_WITH_LWSWS 1) # libuv
  72. set(LWS_WITH_CGI 1) # selfcontained
  73. set(LWS_IPV6 1) # selfcontained
  74. set(LWS_WITH_ZIP_FOPS 1) # libz
  75. set(LWS_WITH_SOCKS5 1) # selfcontained
  76. set(LWS_WITH_RANGES 1) # selfcontained
  77. set(LWS_WITH_ACME 1) # selfcontained / tls
  78. set(LWS_WITH_SERVER_STATUS 1) # selfcontained
  79. set(LWS_WITH_GLIB 1) # glib
  80. set(LWS_WITH_LIBUV 1) # libuv
  81. set(LWS_WITH_LIBEV 1) # libev
  82. set(LWS_WITH_LIBEVENT 1) # libevent
  83. set(LWS_WITH_EVLIB_PLUGINS 1) # event libraries created as plugins / individual packages
  84. set(LWS_WITHOUT_EXTENSIONS 0) # libz
  85. set(LWS_ROLE_DBUS 1) # dbus-related libs
  86. set(LWS_WITH_FTS 1) # selfcontained
  87. set(LWS_WITH_THREADPOOL 1) # pthreads
  88. set(LWS_UNIX_SOCK 1) # selfcontained
  89. set(LWS_WITH_HTTP_PROXY 1) # selfcontained
  90. set(LWS_WITH_DISKCACHE 1) # selfcontained
  91. set(LWS_WITH_LWSAC 1) # selfcontained
  92. set(LWS_WITH_LEJP_CONF 1) # selfcontained
  93. set(LWS_WITH_PLUGINS 1) # libdl
  94. set(LWS_ROLE_RAW_PROXY 1) # selfcontained
  95. set(LWS_WITH_GENCRYPTO 1) # selfcontained / tls
  96. set(LWS_WITH_JOSE 1) # selfcontained
  97. set(LWS_WITH_STRUCT_JSON 1) # selfcontained
  98. set(LWS_WITH_STRUCT_SQLITE3 1) # sqlite3
  99. set(LWS_WITH_SPAWN 1) # selfcontained
  100. # libmount is problematic on Centos 8 / RHEL 8
  101. # set(LWS_WITH_FSMOUNT 1)
  102. set(LWS_ROLE_MQTT 1) # selfcontained
  103. set(LWS_WITH_SECURE_STREAMS 1) # selfcontained
  104. set(LWS_WITH_SECURE_STREAMS_PROXY_API 1) # selfcontained
  105. set(LWS_WITH_DIR 1) # selfcontained
  106. endif()
  107. # LWS_WITH_EVENT_LIBS is set if any event lib selected
  108. if (LWS_WITH_LIBEV OR
  109. LWS_WITH_LIBUV OR
  110. LWS_WITH_LIBEVENT OR
  111. LWS_WITH_GLIB)
  112. set(LWS_WITH_EVENT_LIBS 1)
  113. else()
  114. unset(LWS_WITH_EVENT_LIBS)
  115. endif()
  116. if (LWS_WITH_SECURE_STREAMS_PROXY_API)
  117. set(LWS_WITH_LWS_DSH 1)
  118. set(LWS_WITH_UNIX_SOCK 1)
  119. endif()
  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_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)
  144. set(LWS_WITH_SYS_SMD 0)
  145. endif()
  146. if (LWS_WITH_CGI)
  147. set(LWS_WITH_SPAWN 1)
  148. endif()
  149. if (LWS_WITH_STRUCT_SQLITE3)
  150. set(LWS_WITH_SQLITE3 1)
  151. endif()
  152. if (LWS_WITH_HTTP_BASIC_AUTH)
  153. # WWW_AUTHENTICATE used by basic auth is an "uncommon header"
  154. set(LWS_WITH_HTTP_UNCOMMON_HEADERS 1)
  155. endif()
  156. if (APPLE)
  157. set(LWS_ROLE_DBUS 0)
  158. endif()
  159. if(NOT DEFINED CMAKE_BUILD_TYPE)
  160. set(CMAKE_BUILD_TYPE Release CACHE STRING "Build type")
  161. endif()
  162. if (LWS_PLAT_FREERTOS)
  163. set(LWS_UNIX_SOCK 0)
  164. endif()
  165. if (LWS_PLAT_FREERTOS)
  166. set(LWS_WITH_FTS 0)
  167. endif()
  168. if (LWS_WITH_HTTP2)
  169. set(LWS_ROLE_H2 1)
  170. endif()
  171. if (LWS_WITH_CGI)
  172. set(LWS_ROLE_CGI 1)
  173. endif()
  174. if (NOT LWS_ROLE_WS)
  175. set(LWS_WITHOUT_EXTENSIONS 1)
  176. endif()
  177. unset(LWS_WITH_LIBUV_INTERNAL)
  178. if (LWS_WITH_LWSWS)
  179. message(STATUS "LWS_WITH_LWSWS --> Enabling LWS_WITH_PLUGINS and LWS_WITH_LIBUV")
  180. set(LWS_WITH_PLUGINS 1)
  181. set(LWS_WITH_LIBUV 1)
  182. set(LWS_WITH_LIBUV_INTERNAL 1)
  183. set(LWS_WITH_EVENT_LIBS 1) # implied by LIBUV_INTERNAL
  184. set(LWS_WITH_ACCESS_LOG 1)
  185. set(LWS_WITH_SERVER_STATUS 1)
  186. set(LWS_WITH_LEJP 1)
  187. set(LWS_WITH_LEJP_CONF 1)
  188. set(LWS_WITH_PEER_LIMITS 1)
  189. set(LWS_ROLE_RAW_PROXY 1)
  190. endif()
  191. # sshd plugin
  192. if (LWS_WITH_PLUGINS)
  193. set(LWS_WITH_GENCRYPTO 1)
  194. endif()
  195. if (LWS_ROLE_RAW_PROXY)
  196. set (LWS_WITH_CLIENT 1)
  197. set (LWS_WITH_SERVER 1)
  198. endif()
  199. if (LWS_WITH_ACME)
  200. set (LWS_WITH_CLIENT 1)
  201. set (LWS_WITH_SERVER 1)
  202. set (LWS_WITH_JOSE 1)
  203. endif()
  204. if (LWS_WITH_JOSE)
  205. set(LWS_WITH_LEJP 1)
  206. set(LWS_WITH_GENCRYPTO 1)
  207. endif()
  208. if (LWS_WITH_PLUGINS AND NOT LWS_WITH_LIBUV)
  209. message(STATUS "LWS_WITH_PLUGINS --> Enabling LWS_WITH_LIBUV")
  210. set(LWS_WITH_LIBUV 1)
  211. endif()
  212. if (LWS_WITH_PLUGINS OR LWS_WITH_CGI)
  213. # sshd plugin
  214. set(LWS_WITH_GENCRYPTO 1)
  215. endif()
  216. if (LWS_PLAT_FREERTOS)
  217. set(LWS_WITH_SHARED OFF)
  218. if (LWS_WITH_SSL)
  219. set(LWS_WITH_MBEDTLS ON)
  220. endif()
  221. # set(LWS_WITHOUT_CLIENT ON)
  222. set(LWS_WITHOUT_TESTAPPS ON)
  223. set(LWS_WITHOUT_EXTENSIONS ON)
  224. set(LWS_WITH_PLUGINS OFF)
  225. set(LWS_WITH_RANGES ON)
  226. # this implies no pthreads in the lib
  227. set(LWS_MAX_SMP 1)
  228. set(LWS_HAVE_MALLOC 1)
  229. set(LWS_HAVE_REALLOC 1)
  230. set(LWS_HAVE_GETIFADDRS 1)
  231. set(LWS_WITH_CUSTOM_HEADERS 0)
  232. endif()
  233. #if (LWS_WITH_ESP32)
  234. # set(LWS_WITH_ZIP_FOPS 1)
  235. #endif()
  236. if (WIN32)
  237. set(LWS_MAX_SMP 1)
  238. if (LWS_WITH_PLUGINS)
  239. set(LWS_WITH_LIBUV_INTERNAL 1)
  240. endif()
  241. endif()
  242. if (LWS_WITHOUT_SERVER)
  243. set(LWS_WITH_LWSWS OFF)
  244. endif()
  245. if (LWS_WITH_LEJP_CONF)
  246. set(LWS_WITH_DIR 1)
  247. endif()
  248. # confirm H1 relationships
  249. if (NOT LWS_ROLE_H1 AND LWS_ROLE_H2)
  250. message(FATAL_ERROR "H2 requires LWS_ROLE_H1")
  251. endif()
  252. if (NOT LWS_ROLE_H1 AND LWS_ROLE_WS)
  253. message(FATAL_ERROR "WS requires LWS_ROLE_H1")
  254. endif()
  255. if (NOT LWS_ROLE_H1 AND LWS_ROLE_CGI)
  256. message(FATAL_ERROR "CGI requires LWS_ROLE_H1")
  257. endif()
  258. # confirm HTTP relationships
  259. if (NOT LWS_ROLE_H1 AND NOT LWS_ROLE_H2 AND LWS_WITH_HTTP_PROXY)
  260. message(FATAL_ERROR "LWS_WITH_LWSWS requires LWS_ROLE_H1")
  261. endif()
  262. if (NOT LWS_ROLE_H1 AND NOT LWS_ROLE_H2 AND LWS_WITH_HTTP_PROXY)
  263. message(FATAL_ERROR "LWS_WITH_HTTP_PROXY requires LWS_ROLE_H1")
  264. endif()
  265. if (NOT LWS_ROLE_H1 AND NOT LWS_ROLE_H2 AND LWS_WITH_RANGES)
  266. message(FATAL_ERROR "LWS_WITH_RANGES requires LWS_ROLE_H1")
  267. endif()
  268. if (NOT LWS_ROLE_H1 AND NOT LWS_ROLE_H2 AND LWS_WITH_ACCESS_LOG)
  269. message(FATAL_ERROR "LWS_WITH_ACCESS_LOG requires LWS_ROLE_H1")
  270. endif()
  271. if (LWS_WITH_HTTP_PROXY AND (LWS_WITHOUT_CLIENT OR LWS_WITHOUT_SERVER))
  272. message("You have to enable both client and server for http proxy")
  273. set(LWS_WITH_HTTP_PROXY 0)
  274. endif()
  275. if (NOT LWS_WITHOUT_EXTENSIONS OR LWS_WITH_ZIP_FOPS)
  276. set(LWS_WITH_ZLIB 1)
  277. endif()
  278. if (LWS_WITH_SECURE_STREAMS)
  279. set(LWS_WITH_SECURE_STREAMS_SYS_AUTH_API_AMAZON_COM 1)
  280. endif()
  281. if (NOT (LWS_WITH_STATIC OR LWS_WITH_SHARED))
  282. message(FATAL_ERROR "Makes no sense to compile with neither static nor shared libraries.")
  283. endif()
  284. if (LWS_WITHOUT_DAEMONIZE OR WIN32)
  285. set(LWS_NO_DAEMONIZE 1)
  286. endif()
  287. if (LWS_WITH_LIBEV)
  288. set(LWS_WITH_LIBEV 1)
  289. endif()
  290. if (LWS_WITH_LIBUV)
  291. set(LWS_WITH_LIBUV 1)
  292. endif()
  293. if (LWS_WITH_LIBEVENT)
  294. set(LWS_WITH_LIBEVENT 1)
  295. endif()
  296. if (LWS_IPV6)
  297. set(LWS_WITH_IPV6 1)
  298. endif()
  299. if (LWS_UNIX_SOCK)
  300. set(LWS_WITH_UNIX_SOCK 1)
  301. endif()
  302. if (NOT LWS_MAX_SMP)
  303. set(LWS_MAX_SMP 1)
  304. endif()
  305. if ("${LWS_MAX_SMP}" STREQUAL "")
  306. set(LWS_MAX_SMP 1)
  307. endif()
  308. set(LWS_WITH_CLIENT 1)
  309. if (LWS_WITHOUT_CLIENT)
  310. set(LWS_WITH_CLIENT)
  311. set(LWS_WITH_SECURE_STREAMS 0)
  312. endif()
  313. set(LWS_WITH_SERVER 1)
  314. if (LWS_WITHOUT_SERVER)
  315. set(LWS_WITH_SERVER)
  316. endif()
  317. # using any abstract protocol enables LWS_WITH_ABSTRACT
  318. #if (LWS_WITH_SMTP)
  319. # set(LWS_WITH_ABSTRACT 1)
  320. #endif()
  321. if (NOT LWS_WITH_EVLIB_PLUGINS AND (LWS_WITH_LIBEV AND LWS_WITH_LIBEVENT))
  322. message(FATAL_ERROR "Sorry libev and libevent conflict with each others' namespace, you can only have one or the other")
  323. endif()
  324. if (LWS_SSL_SERVER_WITH_ECDH_CERT)
  325. set(LWS_SSL_SERVER_WITH_ECDH_CERT 1)
  326. endif()
  327. # LWS_OPENSSL_SUPPORT deprecated... use LWS_WITH_TLS
  328. if (LWS_WITH_SSL OR LWS_WITH_MBEDTLS)
  329. set(LWS_OPENSSL_SUPPORT 1)
  330. set(LWS_WITH_TLS 1)
  331. endif()
  332. if (NOT LWS_WITH_SSL)
  333. set(LWS_WITHOUT_BUILTIN_SHA1 OFF)
  334. endif()
  335. # protocol plugins dont make any sense either
  336. if (LWS_WITH_PLUGINS AND NOT LWS_WITH_SHARED)
  337. message("Deselecting PLUGINS since building static")
  338. set(LWS_WITH_PLUGINS 0)
  339. endif()
  340. # if we're only building static, we don't want event lib plugins
  341. #
  342. if (LWS_WITH_EVLIB_PLUGINS AND NOT LWS_WITH_SHARED)
  343. message("Deselecting EVLIB_PLUGINS since building static")
  344. set(LWS_WITH_EVLIB_PLUGINS 0)
  345. endif()
  346. if (LWS_WITH_PLUGINS OR (LWS_WITH_EVLIB_PLUGINS AND LWS_WITH_EVENT_LIBS))
  347. set(LWS_WITH_PLUGINS_API 1)
  348. endif()