1*1c60b9acSAndroid Build Coastguard Worker# 2*1c60b9acSAndroid Build Coastguard Worker# libwebsockets - small server side websockets and web server implementation 3*1c60b9acSAndroid Build Coastguard Worker# 4*1c60b9acSAndroid Build Coastguard Worker# Copyright (C) 2010 - 2020 Andy Green <[email protected]> 5*1c60b9acSAndroid Build Coastguard Worker# 6*1c60b9acSAndroid Build Coastguard Worker# Permission is hereby granted, free of charge, to any person obtaining a copy 7*1c60b9acSAndroid Build Coastguard Worker# of this software and associated documentation files (the "Software"), to 8*1c60b9acSAndroid Build Coastguard Worker# deal in the Software without restriction, including without limitation the 9*1c60b9acSAndroid Build Coastguard Worker# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or 10*1c60b9acSAndroid Build Coastguard Worker# sell copies of the Software, and to permit persons to whom the Software is 11*1c60b9acSAndroid Build Coastguard Worker# furnished to do so, subject to the following conditions: 12*1c60b9acSAndroid Build Coastguard Worker# 13*1c60b9acSAndroid Build Coastguard Worker# The above copyright notice and this permission notice shall be included in 14*1c60b9acSAndroid Build Coastguard Worker# all copies or substantial portions of the Software. 15*1c60b9acSAndroid Build Coastguard Worker# 16*1c60b9acSAndroid Build Coastguard Worker# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17*1c60b9acSAndroid Build Coastguard Worker# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18*1c60b9acSAndroid Build Coastguard Worker# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19*1c60b9acSAndroid Build Coastguard Worker# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20*1c60b9acSAndroid Build Coastguard Worker# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 21*1c60b9acSAndroid Build Coastguard Worker# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 22*1c60b9acSAndroid Build Coastguard Worker# IN THE SOFTWARE. 23*1c60b9acSAndroid Build Coastguard Worker# 24*1c60b9acSAndroid Build Coastguard Worker 25*1c60b9acSAndroid Build Coastguard Workerinclude_directories(.) 26*1c60b9acSAndroid Build Coastguard Worker 27*1c60b9acSAndroid Build Coastguard Workermacro(add_subdir_include_dirs arg1) 28*1c60b9acSAndroid Build Coastguard Worker add_subdirectory(${arg1}) 29*1c60b9acSAndroid Build Coastguard Worker list(APPEND LWS_LIB_BUILD_INC_PATHS ${_CMAKE_INC_LIST}) 30*1c60b9acSAndroid Build Coastguard Workerendmacro() 31*1c60b9acSAndroid Build Coastguard Worker 32*1c60b9acSAndroid Build Coastguard Workerset(LWS_LIB_INCLUDES "") 33*1c60b9acSAndroid Build Coastguard Worker 34*1c60b9acSAndroid Build Coastguard Worker# 35*1c60b9acSAndroid Build Coastguard Worker# Plat specific build items 36*1c60b9acSAndroid Build Coastguard Worker# 37*1c60b9acSAndroid Build Coastguard Worker 38*1c60b9acSAndroid Build Coastguard Workerif (LWS_PLAT_FREERTOS) 39*1c60b9acSAndroid Build Coastguard Worker add_subdir_include_dirs(plat/freertos) 40*1c60b9acSAndroid Build Coastguard Worker if (ESP_PLATFORM) 41*1c60b9acSAndroid Build Coastguard Worker include_directories($ENV{IDF_PATH}/components/freertos/include 42*1c60b9acSAndroid Build Coastguard Worker $ENV{IDF_PATH}/components/esp_hw_support/include/soc/ 43*1c60b9acSAndroid Build Coastguard Worker $ENV{IDF_PATH}/components/esp_common/include 44*1c60b9acSAndroid Build Coastguard Worker $ENV{IDF_PATH}/components/esp_timer/include 45*1c60b9acSAndroid Build Coastguard Worker $ENV{IDF_PATH}/components/soc/include 46*1c60b9acSAndroid Build Coastguard Worker $ENV{IDF_PATH}/components/soc/src/esp32/include 47*1c60b9acSAndroid Build Coastguard Worker $ENV{IDF_PATH}/components/lwip/port/esp32/include 48*1c60b9acSAndroid Build Coastguard Worker $ENV{IDF_PATH}/components/lwip/lwip/src/include 49*1c60b9acSAndroid Build Coastguard Worker $ENV{IDF_PATH}/components/lwip/port/esp32/include 50*1c60b9acSAndroid Build Coastguard Worker ${CMAKE_BINARY_DIR}/config 51*1c60b9acSAndroid Build Coastguard Worker $ENV{IDF_PATH}/components/esp_rom/include 52*1c60b9acSAndroid Build Coastguard Worker $ENV{IDF_PATH}/components/esp_system/include 53*1c60b9acSAndroid Build Coastguard Worker $ENV{IDF_PATH}/components/lwip/include/apps/sntp 54*1c60b9acSAndroid Build Coastguard Worker $ENV{IDF_PATH}/components/soc/soc/esp32/include 55*1c60b9acSAndroid Build Coastguard Worker $ENV{IDF_PATH}/components/heap/include 56*1c60b9acSAndroid Build Coastguard Worker $ENV{IDF_PATH}/components/mbedtls/mbedtls/include 57*1c60b9acSAndroid Build Coastguard Worker $ENV{IDF_PATH}/components/mbedtls/port/include 58*1c60b9acSAndroid Build Coastguard Worker $ENV{IDF_PATH}/components/esp_wifi/include 59*1c60b9acSAndroid Build Coastguard Worker $ENV{IDF_PATH}/components/esp_event/include 60*1c60b9acSAndroid Build Coastguard Worker $ENV{IDF_PATH}/components/esp_netif/include 61*1c60b9acSAndroid Build Coastguard Worker $ENV{IDF_PATH}/components/esp_eth/include 62*1c60b9acSAndroid Build Coastguard Worker $ENV{IDF_PATH}/components/driver/include 63*1c60b9acSAndroid Build Coastguard Worker $ENV{IDF_PATH}/components/soc/soc/include 64*1c60b9acSAndroid Build Coastguard Worker $ENV{IDF_PATH}/components/tcpip_adapter/include 65*1c60b9acSAndroid Build Coastguard Worker $ENV{IDF_PATH}/components/lwip/include/apps 66*1c60b9acSAndroid Build Coastguard Worker $ENV{IDF_PATH}/components/nvs_flash/include 67*1c60b9acSAndroid Build Coastguard Worker $ENV{IDF_PATH}/components/esp32/include 68*1c60b9acSAndroid Build Coastguard Worker $ENV{IDF_PATH}/components/spi_flash/include 69*1c60b9acSAndroid Build Coastguard Worker $ENV{IDF_PATH}/components/mdns/include 70*1c60b9acSAndroid Build Coastguard Worker $ENV{IDF_PATH}/components/lwip/lwip/src/include/lwip 71*1c60b9acSAndroid Build Coastguard Worker $ENV{IDF_PATH}/components/lwip/lwip/src/include 72*1c60b9acSAndroid Build Coastguard Worker $ENV{IDF_PATH}/components/lwip/lwip/src/include/lwip 73*1c60b9acSAndroid Build Coastguard Worker $ENV{IDF_PATH}/components/newlib/platform_include ) 74*1c60b9acSAndroid Build Coastguard Worker endif() 75*1c60b9acSAndroid Build Coastguard Worker 76*1c60b9acSAndroid Build Coastguard Workerelse() 77*1c60b9acSAndroid Build Coastguard Worker if (LWS_PLAT_OPTEE) 78*1c60b9acSAndroid Build Coastguard Worker add_subdir_include_dirs(plat/optee) 79*1c60b9acSAndroid Build Coastguard Worker else() 80*1c60b9acSAndroid Build Coastguard Worker if (WIN32) 81*1c60b9acSAndroid Build Coastguard Worker add_subdir_include_dirs(plat/windows) 82*1c60b9acSAndroid Build Coastguard Worker else() 83*1c60b9acSAndroid Build Coastguard Worker add_subdir_include_dirs(plat/unix) 84*1c60b9acSAndroid Build Coastguard Worker endif() 85*1c60b9acSAndroid Build Coastguard Worker endif() 86*1c60b9acSAndroid Build Coastguard Workerendif() 87*1c60b9acSAndroid Build Coastguard Worker 88*1c60b9acSAndroid Build Coastguard Workerif (LIB_LIST) 89*1c60b9acSAndroid Build Coastguard Worker set(CMAKE_REQUIRED_LIBRARIES ${LIB_LIST} ${CMAKE_REQUIRED_LIBRARIES}) 90*1c60b9acSAndroid Build Coastguard Workerendif() 91*1c60b9acSAndroid Build Coastguard Worker 92*1c60b9acSAndroid Build Coastguard Workerif (LWS_WITH_ZLIB) 93*1c60b9acSAndroid Build Coastguard Worker if (LWS_WITH_BUNDLED_ZLIB) 94*1c60b9acSAndroid Build Coastguard Worker if (WIN32) 95*1c60b9acSAndroid Build Coastguard Worker # it's trying to delete internal zlib entry 96*1c60b9acSAndroid Build Coastguard Worker LIST(REMOVE_AT CMAKE_REQUIRED_LIBRARIES 0 ) 97*1c60b9acSAndroid Build Coastguard Worker endif() 98*1c60b9acSAndroid Build Coastguard Worker endif() 99*1c60b9acSAndroid Build Coastguard Workerendif() 100*1c60b9acSAndroid Build Coastguard Worker 101*1c60b9acSAndroid Build Coastguard Worker 102*1c60b9acSAndroid Build Coastguard Worker# ideally we want to use pipe2() 103*1c60b9acSAndroid Build Coastguard Worker 104*1c60b9acSAndroid Build Coastguard WorkerCHECK_C_SOURCE_COMPILES(" 105*1c60b9acSAndroid Build Coastguard Worker #ifndef _GNU_SOURCE 106*1c60b9acSAndroid Build Coastguard Worker #define _GNU_SOURCE 107*1c60b9acSAndroid Build Coastguard Worker #endif 108*1c60b9acSAndroid Build Coastguard Worker #include <unistd.h> 109*1c60b9acSAndroid Build Coastguard Worker int main(void) { 110*1c60b9acSAndroid Build Coastguard Worker int fd[2]; 111*1c60b9acSAndroid Build Coastguard Worker return pipe2(fd, 0); 112*1c60b9acSAndroid Build Coastguard Worker }" LWS_HAVE_PIPE2) 113*1c60b9acSAndroid Build Coastguard Worker 114*1c60b9acSAndroid Build Coastguard Worker# tcp keepalive needs this on linux to work practically... but it only exists 115*1c60b9acSAndroid Build Coastguard Worker# after kernel 2.6.37 116*1c60b9acSAndroid Build Coastguard Worker 117*1c60b9acSAndroid Build Coastguard WorkerCHECK_C_SOURCE_COMPILES("#include <netinet/tcp.h>\nint main(void) { return TCP_USER_TIMEOUT; }\n" LWS_HAVE_TCP_USER_TIMEOUT) 118*1c60b9acSAndroid Build Coastguard Workerset(LWS_PUBLIC_INCLUDES "") 119*1c60b9acSAndroid Build Coastguard Workerif (LWS_WITH_TLS) 120*1c60b9acSAndroid Build Coastguard Worker add_subdir_include_dirs(tls) 121*1c60b9acSAndroid Build Coastguard Workerendif() 122*1c60b9acSAndroid Build Coastguard Worker 123*1c60b9acSAndroid Build Coastguard Worker# Generate the lws_config.h that includes all the private compilation settings. 124*1c60b9acSAndroid Build Coastguard Workerconfigure_file( 125*1c60b9acSAndroid Build Coastguard Worker "${PROJECT_SOURCE_DIR}/cmake/lws_config_private.h.in" 126*1c60b9acSAndroid Build Coastguard Worker "${PROJECT_BINARY_DIR}/lws_config_private.h") 127*1c60b9acSAndroid Build Coastguard Worker 128*1c60b9acSAndroid Build Coastguard Workeradd_subdir_include_dirs(core) 129*1c60b9acSAndroid Build Coastguard Workeradd_subdir_include_dirs(misc) 130*1c60b9acSAndroid Build Coastguard Workeradd_subdir_include_dirs(system) 131*1c60b9acSAndroid Build Coastguard Worker 132*1c60b9acSAndroid Build Coastguard Workerif (LWS_WITH_DRIVERS) 133*1c60b9acSAndroid Build Coastguard Worker add_subdir_include_dirs(drivers) 134*1c60b9acSAndroid Build Coastguard Workerendif() 135*1c60b9acSAndroid Build Coastguard Worker 136*1c60b9acSAndroid Build Coastguard Workerif (LWS_WITH_NETWORK) 137*1c60b9acSAndroid Build Coastguard Worker add_subdir_include_dirs(core-net) 138*1c60b9acSAndroid Build Coastguard Worker if (LWS_WITH_ABSTRACT) 139*1c60b9acSAndroid Build Coastguard Worker add_subdir_include_dirs(abstract) 140*1c60b9acSAndroid Build Coastguard Worker endif() 141*1c60b9acSAndroid Build Coastguard Worker add_subdir_include_dirs(roles) 142*1c60b9acSAndroid Build Coastguard Workerendif() 143*1c60b9acSAndroid Build Coastguard Worker 144*1c60b9acSAndroid Build Coastguard Workerif (LWS_WITH_JOSE) 145*1c60b9acSAndroid Build Coastguard Worker add_subdir_include_dirs(jose) 146*1c60b9acSAndroid Build Coastguard Workerendif() 147*1c60b9acSAndroid Build Coastguard Workerif (LWS_WITH_COSE) 148*1c60b9acSAndroid Build Coastguard Worker add_subdir_include_dirs(cose) 149*1c60b9acSAndroid Build Coastguard Workerendif() 150*1c60b9acSAndroid Build Coastguard Worker 151*1c60b9acSAndroid Build Coastguard Worker 152*1c60b9acSAndroid Build Coastguard Workerif (LWS_WITH_SECURE_STREAMS) 153*1c60b9acSAndroid Build Coastguard Worker add_subdir_include_dirs(secure-streams) 154*1c60b9acSAndroid Build Coastguard Workerendif() 155*1c60b9acSAndroid Build Coastguard Worker 156*1c60b9acSAndroid Build Coastguard Workeradd_subdir_include_dirs(event-libs) 157*1c60b9acSAndroid Build Coastguard Worker 158*1c60b9acSAndroid Build Coastguard Workerif (LWS_WITH_STATIC) 159*1c60b9acSAndroid Build Coastguard Worker if (LWS_STATIC_PIC) 160*1c60b9acSAndroid Build Coastguard Worker set(CMAKE_POSITION_INDEPENDENT_CODE ON) 161*1c60b9acSAndroid Build Coastguard Worker endif() 162*1c60b9acSAndroid Build Coastguard Worker 163*1c60b9acSAndroid Build Coastguard Worker add_library(websockets STATIC ${SOURCES})# ${HDR_PUBLIC}) 164*1c60b9acSAndroid Build Coastguard Worker set_target_properties(websockets PROPERTIES LINKER_LANGUAGE C) 165*1c60b9acSAndroid Build Coastguard Worker list(APPEND LWS_LIBRARIES websockets) 166*1c60b9acSAndroid Build Coastguard Worker target_include_directories(websockets INTERFACE 167*1c60b9acSAndroid Build Coastguard Worker $<INSTALL_INTERFACE:${LWS_INSTALL_INCLUDE_DIR}> 168*1c60b9acSAndroid Build Coastguard Worker $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../include> 169*1c60b9acSAndroid Build Coastguard Worker $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/../include> 170*1c60b9acSAndroid Build Coastguard Worker ) 171*1c60b9acSAndroid Build Coastguard Worker target_include_directories(websockets PRIVATE ${LWS_LIB_BUILD_INC_PATHS}) 172*1c60b9acSAndroid Build Coastguard Worker target_compile_definitions(websockets PRIVATE LWS_BUILDING_STATIC) 173*1c60b9acSAndroid Build Coastguard Worker target_include_directories(websockets PUBLIC ${LWS_PUBLIC_INCLUDES}) 174*1c60b9acSAndroid Build Coastguard Worker set(LWS_PUBLIC_INCLUDES ${LWS_PUBLIC_INCLUDES} PARENT_SCOPE) 175*1c60b9acSAndroid Build Coastguard Worker 176*1c60b9acSAndroid Build Coastguard Worker if (WIN32) 177*1c60b9acSAndroid Build Coastguard Worker # Windows uses the same .lib ending for static libraries and shared 178*1c60b9acSAndroid Build Coastguard Worker # library linker files, so rename the static library. 179*1c60b9acSAndroid Build Coastguard Worker set_target_properties(websockets 180*1c60b9acSAndroid Build Coastguard Worker PROPERTIES 181*1c60b9acSAndroid Build Coastguard Worker OUTPUT_NAME websockets_static) 182*1c60b9acSAndroid Build Coastguard Worker endif() 183*1c60b9acSAndroid Build Coastguard Worker 184*1c60b9acSAndroid Build Coastguard Workerendif() 185*1c60b9acSAndroid Build Coastguard Worker 186*1c60b9acSAndroid Build Coastguard Workerif (LWS_WITH_SHARED) 187*1c60b9acSAndroid Build Coastguard Worker if (NOT RESOURCES) 188*1c60b9acSAndroid Build Coastguard Worker set(RESOURCES "") 189*1c60b9acSAndroid Build Coastguard Worker endif() 190*1c60b9acSAndroid Build Coastguard Worker 191*1c60b9acSAndroid Build Coastguard Worker add_library(websockets_shared SHARED ${SOURCES} ${RESOURCES})# ${HDR_PUBLIC}) 192*1c60b9acSAndroid Build Coastguard Worker set_target_properties(websockets_shared PROPERTIES LINKER_LANGUAGE C) 193*1c60b9acSAndroid Build Coastguard Worker list(APPEND LWS_LIBRARIES websockets_shared) 194*1c60b9acSAndroid Build Coastguard Worker target_include_directories(websockets_shared INTERFACE 195*1c60b9acSAndroid Build Coastguard Worker $<INSTALL_INTERFACE:${LWS_INSTALL_INCLUDE_DIR}> 196*1c60b9acSAndroid Build Coastguard Worker $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../include> 197*1c60b9acSAndroid Build Coastguard Worker $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/../include> 198*1c60b9acSAndroid Build Coastguard Worker ) 199*1c60b9acSAndroid Build Coastguard Worker target_include_directories(websockets_shared PRIVATE ${LWS_LIB_BUILD_INC_PATHS}) 200*1c60b9acSAndroid Build Coastguard Worker target_compile_definitions(websockets_shared PRIVATE LWS_BUILDING_SHARED) 201*1c60b9acSAndroid Build Coastguard Worker target_include_directories(websockets_shared PUBLIC ${LWS_PUBLIC_INCLUDES}) 202*1c60b9acSAndroid Build Coastguard Worker set(LWS_PUBLIC_INCLUDES ${LWS_PUBLIC_INCLUDES} PARENT_SCOPE) 203*1c60b9acSAndroid Build Coastguard Worker 204*1c60b9acSAndroid Build Coastguard Worker # We want the shared lib to be named "libwebsockets" 205*1c60b9acSAndroid Build Coastguard Worker # not "libwebsocket_shared". 206*1c60b9acSAndroid Build Coastguard Worker set_target_properties(websockets_shared 207*1c60b9acSAndroid Build Coastguard Worker PROPERTIES 208*1c60b9acSAndroid Build Coastguard Worker OUTPUT_NAME websockets) 209*1c60b9acSAndroid Build Coastguard Worker 210*1c60b9acSAndroid Build Coastguard Worker if (WIN32) 211*1c60b9acSAndroid Build Coastguard Worker # Compile as DLL (export function declarations) 212*1c60b9acSAndroid Build Coastguard Worker set_property( 213*1c60b9acSAndroid Build Coastguard Worker TARGET websockets_shared 214*1c60b9acSAndroid Build Coastguard Worker PROPERTY COMPILE_DEFINITIONS 215*1c60b9acSAndroid Build Coastguard Worker LWS_DLL 216*1c60b9acSAndroid Build Coastguard Worker LWS_INTERNAL) 217*1c60b9acSAndroid Build Coastguard Worker endif() 218*1c60b9acSAndroid Build Coastguard Worker 219*1c60b9acSAndroid Build Coastguard Worker if (APPLE) 220*1c60b9acSAndroid Build Coastguard Worker set_property(TARGET websockets_shared PROPERTY MACOSX_RPATH YES) 221*1c60b9acSAndroid Build Coastguard Worker endif() 222*1c60b9acSAndroid Build Coastguard Worker 223*1c60b9acSAndroid Build Coastguard Worker if (UNIX AND LWS_WITH_PLUGINS_API) 224*1c60b9acSAndroid Build Coastguard Worker set (CMAKE_POSITION_INDEPENDENT_CODE ON) 225*1c60b9acSAndroid Build Coastguard Worker if (NOT((${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD") OR 226*1c60b9acSAndroid Build Coastguard Worker (${CMAKE_SYSTEM_NAME} MATCHES "OpenBSD") OR 227*1c60b9acSAndroid Build Coastguard Worker (${CMAKE_SYSTEM_NAME} MATCHES "QNX"))) 228*1c60b9acSAndroid Build Coastguard Worker if (LWS_WITH_SHARED) 229*1c60b9acSAndroid Build Coastguard Worker target_link_libraries(websockets_shared dl) 230*1c60b9acSAndroid Build Coastguard Worker endif() 231*1c60b9acSAndroid Build Coastguard Worker endif() 232*1c60b9acSAndroid Build Coastguard Worker endif() 233*1c60b9acSAndroid Build Coastguard Worker 234*1c60b9acSAndroid Build Coastguard Workerendif() 235*1c60b9acSAndroid Build Coastguard Worker 236*1c60b9acSAndroid Build Coastguard Worker# 237*1c60b9acSAndroid Build Coastguard Worker# expose the library private include dirs to plugins, test apps etc that are 238*1c60b9acSAndroid Build Coastguard Worker# part of the lib build but different targets 239*1c60b9acSAndroid Build Coastguard Worker# 240*1c60b9acSAndroid Build Coastguard Worker 241*1c60b9acSAndroid Build Coastguard Workerif (LWS_WITH_SHARED) 242*1c60b9acSAndroid Build Coastguard Worker get_target_property(LWS_LIB_INCLUDES websockets_shared INCLUDE_DIRECTORIES) 243*1c60b9acSAndroid Build Coastguard Workerelse() 244*1c60b9acSAndroid Build Coastguard Worker get_target_property(LWS_LIB_INCLUDES websockets INCLUDE_DIRECTORIES) 245*1c60b9acSAndroid Build Coastguard Workerendif() 246*1c60b9acSAndroid Build Coastguard Worker 247*1c60b9acSAndroid Build Coastguard Worker 248*1c60b9acSAndroid Build Coastguard Worker# Set the so version of the lib. 249*1c60b9acSAndroid Build Coastguard Worker# Equivalent to LDFLAGS=-version-info x:x:x 250*1c60b9acSAndroid Build Coastguard Worker 251*1c60b9acSAndroid Build Coastguard Workerif (CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX OR COMPILER_IS_CLANG) 252*1c60b9acSAndroid Build Coastguard Worker foreach(lib ${LWS_LIBRARIES}) 253*1c60b9acSAndroid Build Coastguard Worker set_target_properties(${lib} 254*1c60b9acSAndroid Build Coastguard Worker PROPERTIES 255*1c60b9acSAndroid Build Coastguard Worker SOVERSION ${SOVERSION}) 256*1c60b9acSAndroid Build Coastguard Worker endforeach() 257*1c60b9acSAndroid Build Coastguard Workerendif() 258*1c60b9acSAndroid Build Coastguard Worker 259*1c60b9acSAndroid Build Coastguard Worker 260*1c60b9acSAndroid Build Coastguard Worker# Setup the linking for all libs. 261*1c60b9acSAndroid Build Coastguard Workerforeach (lib ${LWS_LIBRARIES}) 262*1c60b9acSAndroid Build Coastguard Worker target_link_libraries(${lib} ${LIB_LIST}) 263*1c60b9acSAndroid Build Coastguard Workerendforeach() 264*1c60b9acSAndroid Build Coastguard Worker 265*1c60b9acSAndroid Build Coastguard Worker# 266*1c60b9acSAndroid Build Coastguard Worker# These will be available to parent projects including libwebsockets 267*1c60b9acSAndroid Build Coastguard Worker# using add_subdirectory() 268*1c60b9acSAndroid Build Coastguard Worker# 269*1c60b9acSAndroid Build Coastguard Workerset(LIBWEBSOCKETS_LIBRARIES ${LWS_LIBRARIES} CACHE STRING "Libwebsocket libraries") 270*1c60b9acSAndroid Build Coastguard Workerif (LWS_WITH_STATIC) 271*1c60b9acSAndroid Build Coastguard Worker set(LIBWEBSOCKETS_LIBRARIES_STATIC websockets CACHE STRING "Libwebsocket static library") 272*1c60b9acSAndroid Build Coastguard Workerendif() 273*1c60b9acSAndroid Build Coastguard Workerif (LWS_WITH_SHARED) 274*1c60b9acSAndroid Build Coastguard Worker set(LIBWEBSOCKETS_LIBRARIES_SHARED websockets_shared CACHE STRING "Libwebsocket shared library") 275*1c60b9acSAndroid Build Coastguard Workerendif() 276*1c60b9acSAndroid Build Coastguard Worker 277*1c60b9acSAndroid Build Coastguard Worker# Install libs and headers. 278*1c60b9acSAndroid Build Coastguard Workerinstall(TARGETS ${LWS_LIBRARIES} 279*1c60b9acSAndroid Build Coastguard Worker EXPORT LibwebsocketsTargets 280*1c60b9acSAndroid Build Coastguard Worker LIBRARY DESTINATION "${LWS_INSTALL_LIB_DIR}${LIB_SUFFIX}" COMPONENT core 281*1c60b9acSAndroid Build Coastguard Worker ARCHIVE DESTINATION "${LWS_INSTALL_LIB_DIR}${LIB_SUFFIX}" COMPONENT core 282*1c60b9acSAndroid Build Coastguard Worker RUNTIME DESTINATION "${LWS_INSTALL_BIN_DIR}" COMPONENT core # Windows DLLs 283*1c60b9acSAndroid Build Coastguard Worker PUBLIC_HEADER DESTINATION "${LWS_INSTALL_INCLUDE_DIR}" COMPONENT dev) 284*1c60b9acSAndroid Build Coastguard Worker 285*1c60b9acSAndroid Build Coastguard Worker #set(CPACK_COMPONENT_LIBRARIES_DISPLAY_NAME "Libraries" PARENT_SCOPE) 286*1c60b9acSAndroid Build Coastguard Workerset(CPACK_COMPONENT_DEV_DISPLAY_NAME "Development files" PARENT_SCOPE) 287*1c60b9acSAndroid Build Coastguard Worker 288*1c60b9acSAndroid Build Coastguard Worker 289*1c60b9acSAndroid Build Coastguard Workerif (UNIX OR MINGW) 290*1c60b9acSAndroid Build Coastguard Worker 291*1c60b9acSAndroid Build Coastguard Worker# figure out pkfcfg required libs here 292*1c60b9acSAndroid Build Coastguard Worker 293*1c60b9acSAndroid Build Coastguard Workerset(lws_requires "") 294*1c60b9acSAndroid Build Coastguard Workerif (LWS_HAVE_LIBCAP) 295*1c60b9acSAndroid Build Coastguard Worker if (NOT lws_requires STREQUAL "") 296*1c60b9acSAndroid Build Coastguard Worker set(lws_requires "${lws_requires},libcap") 297*1c60b9acSAndroid Build Coastguard Worker else() 298*1c60b9acSAndroid Build Coastguard Worker set(lws_requires "libcap") 299*1c60b9acSAndroid Build Coastguard Worker endif() 300*1c60b9acSAndroid Build Coastguard Workerendif() 301*1c60b9acSAndroid Build Coastguard Worker 302*1c60b9acSAndroid Build Coastguard Worker 303*1c60b9acSAndroid Build Coastguard Worker# Generate and install pkgconfig. 304*1c60b9acSAndroid Build Coastguard Worker# (This is not indented, because the tabs will be part of the output) 305*1c60b9acSAndroid Build Coastguard Workerfile(WRITE "${PROJECT_BINARY_DIR}/libwebsockets.pc" 306*1c60b9acSAndroid Build Coastguard Worker"prefix=\"${CMAKE_INSTALL_PREFIX}\" 307*1c60b9acSAndroid Build Coastguard Workerexec_prefix=\${prefix} 308*1c60b9acSAndroid Build Coastguard Workerlibdir=\${exec_prefix}/lib${LIB_SUFFIX} 309*1c60b9acSAndroid Build Coastguard Workerincludedir=\${prefix}/include 310*1c60b9acSAndroid Build Coastguard Worker 311*1c60b9acSAndroid Build Coastguard WorkerName: libwebsockets 312*1c60b9acSAndroid Build Coastguard WorkerDescription: Websockets server and client library 313*1c60b9acSAndroid Build Coastguard WorkerVersion: ${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH} 314*1c60b9acSAndroid Build Coastguard Worker 315*1c60b9acSAndroid Build Coastguard WorkerLibs: -L\${libdir} -lwebsockets 316*1c60b9acSAndroid Build Coastguard WorkerCflags: -I\${includedir} 317*1c60b9acSAndroid Build Coastguard Worker" 318*1c60b9acSAndroid Build Coastguard Worker) 319*1c60b9acSAndroid Build Coastguard Workerif (NOT ${lws_requires} STREQUAL "") 320*1c60b9acSAndroid Build Coastguard Worker file(APPEND "${PROJECT_BINARY_DIR}/libwebsockets.pc" "Requires: ${lws_requires}") 321*1c60b9acSAndroid Build Coastguard Workerendif() 322*1c60b9acSAndroid Build Coastguard Worker 323*1c60b9acSAndroid Build Coastguard Worker 324*1c60b9acSAndroid Build Coastguard Worker install(FILES "${PROJECT_BINARY_DIR}/libwebsockets.pc" 325*1c60b9acSAndroid Build Coastguard Worker DESTINATION lib${LIB_SUFFIX}/pkgconfig) 326*1c60b9acSAndroid Build Coastguard Worker 327*1c60b9acSAndroid Build Coastguard Workerfile(WRITE "${PROJECT_BINARY_DIR}/libwebsockets_static.pc" 328*1c60b9acSAndroid Build Coastguard Worker"prefix=\"${CMAKE_INSTALL_PREFIX}\" 329*1c60b9acSAndroid Build Coastguard Workerexec_prefix=\${prefix} 330*1c60b9acSAndroid Build Coastguard Workerlibdir=\${exec_prefix}/lib${LIB_SUFFIX} 331*1c60b9acSAndroid Build Coastguard Workerincludedir=\${prefix}/include 332*1c60b9acSAndroid Build Coastguard Worker 333*1c60b9acSAndroid Build Coastguard WorkerName: libwebsockets_static 334*1c60b9acSAndroid Build Coastguard WorkerDescription: Websockets server and client static library 335*1c60b9acSAndroid Build Coastguard WorkerVersion: ${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH} 336*1c60b9acSAndroid Build Coastguard Worker 337*1c60b9acSAndroid Build Coastguard WorkerLibs: -L\${libdir} -lwebsockets_static 338*1c60b9acSAndroid Build Coastguard WorkerLibs.private: 339*1c60b9acSAndroid Build Coastguard WorkerCflags: -I\${includedir} 340*1c60b9acSAndroid Build Coastguard Worker" 341*1c60b9acSAndroid Build Coastguard Worker) 342*1c60b9acSAndroid Build Coastguard Worker 343*1c60b9acSAndroid Build Coastguard Workerif (NOT ${lws_requires} STREQUAL "") 344*1c60b9acSAndroid Build Coastguard Worker file(APPEND "${PROJECT_BINARY_DIR}/libwebsockets_static.pc" "Requires: ${lws_requires}") 345*1c60b9acSAndroid Build Coastguard Workerendif() 346*1c60b9acSAndroid Build Coastguard Worker 347*1c60b9acSAndroid Build Coastguard Worker 348*1c60b9acSAndroid Build Coastguard Worker install(FILES "${PROJECT_BINARY_DIR}/libwebsockets_static.pc" 349*1c60b9acSAndroid Build Coastguard Worker DESTINATION lib${LIB_SUFFIX}/pkgconfig) 350*1c60b9acSAndroid Build Coastguard Worker 351*1c60b9acSAndroid Build Coastguard Workerendif(UNIX OR MINGW) 352*1c60b9acSAndroid Build Coastguard Worker 353*1c60b9acSAndroid Build Coastguard Worker 354*1c60b9acSAndroid Build Coastguard Worker# Keep explicit parent scope exports at end 355*1c60b9acSAndroid Build Coastguard Worker# 356*1c60b9acSAndroid Build Coastguard Worker 357*1c60b9acSAndroid Build Coastguard Workerexport_to_parent_intermediate() 358*1c60b9acSAndroid Build Coastguard Workerif (DEFINED LWS_PLAT_UNIX) 359*1c60b9acSAndroid Build Coastguard Worker set(LWS_PLAT_UNIX ${LWS_PLAT_UNIX} PARENT_SCOPE) 360*1c60b9acSAndroid Build Coastguard Worker if (ILLUMOS) 361*1c60b9acSAndroid Build Coastguard Worker add_definitions("-D__illumos__") 362*1c60b9acSAndroid Build Coastguard Worker endif() 363*1c60b9acSAndroid Build Coastguard Workerendif() 364*1c60b9acSAndroid Build Coastguard Workerset(LWS_HAVE_MBEDTLS_NET_SOCKETS ${LWS_HAVE_MBEDTLS_NET_SOCKETS} PARENT_SCOPE) 365*1c60b9acSAndroid Build Coastguard Workerset(TEST_SERVER_SSL_KEY "${TEST_SERVER_SSL_KEY}" PARENT_SCOPE) 366*1c60b9acSAndroid Build Coastguard Workerset(TEST_SERVER_SSL_CERT "${TEST_SERVER_SSL_CERT}" PARENT_SCOPE) 367*1c60b9acSAndroid Build Coastguard Workerset(TEST_SERVER_DATA ${TEST_SERVER_DATA} PARENT_SCOPE) 368*1c60b9acSAndroid Build Coastguard Workerset(LWS_HAVE_PIPE2 ${LWS_HAVE_PIPE2} PARENT_SCOPE) 369*1c60b9acSAndroid Build Coastguard Workerset(LWS_LIBRARIES ${LWS_LIBRARIES} PARENT_SCOPE) 370*1c60b9acSAndroid Build Coastguard Workerif (DEFINED WIN32_HELPERS_PATH) 371*1c60b9acSAndroid Build Coastguard Worker set(WIN32_HELPERS_PATH ${WIN32_HELPERS_PATH} PARENT_SCOPE) 372*1c60b9acSAndroid Build Coastguard Workerendif() 373*1c60b9acSAndroid Build Coastguard Workerif (DEFINED HDR_PRIVATE) 374*1c60b9acSAndroid Build Coastguard Workerset(HDR_PRIVATE ${HDR_PRIVATE} PARENT_SCOPE) 375*1c60b9acSAndroid Build Coastguard Workerendif() 376*1c60b9acSAndroid Build Coastguard Workerif (DEFINED ZLIB_FOUND) 377*1c60b9acSAndroid Build Coastguard Worker set(ZLIB_FOUND ${ZLIB_FOUND} PARENT_SCOPE) 378*1c60b9acSAndroid Build Coastguard Workerendif() 379*1c60b9acSAndroid Build Coastguard Workerif (DEFINED LIB_LIST_AT_END) 380*1c60b9acSAndroid Build Coastguard Workerset(LIB_LIST_AT_END ${LIB_LIST_AT_END} PARENT_SCOPE) 381*1c60b9acSAndroid Build Coastguard Workerendif() 382*1c60b9acSAndroid Build Coastguard Workerset(USE_WOLFSSL ${USE_WOLFSSL} PARENT_SCOPE) 383*1c60b9acSAndroid Build Coastguard Workerset(LWS_DEPS_LIB_PATHS ${LWS_DEPS_LIB_PATHS} PARENT_SCOPE) 384*1c60b9acSAndroid Build Coastguard Worker 385