1 cmake_minimum_required(VERSION 2.6)
5 set(PACKAGE "libwebsockets")
6 set(PACKAGE_VERSION "1.1")
7 set(PACKAGE_BUGREPORT "andy@warmcat.com")
8 set(PACKAGE_NAME "${PACKAGE}")
9 set(PACKAGE_STRING "${PACKAGE} ${PACKAGE_VERSION}")
10 set(PACKAGE_TARNAME "${PACKAGE}")
11 set(PACKAGE_URL "http://libwebsockets.org")
12 set(VERSION "{PACKAGE_VERSION}")
14 option(WITH_SSL "Include SSL support (default OpenSSL, CyaSSL if USE_CYASSL is set)" ON)
15 option(USE_INCLUDED_WIN32_ZLIB "Use the internal version of ZLib instead of searching the system" ON)
16 option(USE_CYASSL "Use CyaSSL replacement for OpenSSL" OFF)
17 option(WITH_BUILTIN_GETIFADDRS "Use BSD getifaddrs implementation from libwebsockets... default is your libc provides it" OFF)
18 option(WITHOUT_TESTAPPS "Don't build the libwebsocket-test-apps" OFF)
19 option(WITHOUT_CLIENT "Don't build the client part of the library" OFF)
20 option(WITHOUT_SERVER "Don't build the server part of the library" OFF)
21 option(WITH_LIBCRYPTO "Use libcrypto MD5 and SHA1 implementations" ON)
22 option(WITHOUT_PING "Don't build the ping test application" OFF)
23 option(WITHOUT_DEBUG "Don't compile debug related code" OFF)
25 set(CYASSL_LIB ON CACHE STRING "")
26 set(CYASSL_INCLUDE_DIRS ON CACHE STRING "")
29 if (NOT CYASSL_LIB OR NOT CYASSL_INCLUDE_DIRS)
30 error("You must set CYASSL_LIB and CYASSL_INCLUDE_DIRS when USE_CYASSL is turned on")
34 set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${PROJECT_SOURCE_DIR}/cmake/")
35 include_directories(${PROJECT_BINARY_DIR})
37 include(CheckFunctionExists)
38 include(CheckIncludeFile)
39 include(CheckIncludeFiles)
40 include(CheckLibraryExists)
42 CHECK_FUNCTION_EXISTS(bzero HAVE_BZERO)
43 CHECK_FUNCTION_EXISTS(fork HAVE_FORK)
44 CHECK_FUNCTION_EXISTS(malloc HAVE_MALLOC)
45 CHECK_FUNCTION_EXISTS(memset HAVE_MEMSET)
46 CHECK_FUNCTION_EXISTS(realloc HAVE_REALLOC)
47 CHECK_FUNCTION_EXISTS(socket HAVE_SOCKET)
48 CHECK_FUNCTION_EXISTS(strerror HAVE_STRERROR)
49 CHECK_FUNCTION_EXISTS(vfork HAVE_VFORK)
50 CHECK_FUNCTION_EXISTS(getifaddrs HAVE_GETIFADDRS)
52 CHECK_INCLUDE_FILE(dlfcn.h HAVE_DLFCN_H)
53 CHECK_INCLUDE_FILE(fcntl.h HAVE_FCNTL_H)
54 CHECK_INCLUDE_FILE(inttypes.h HAVE_INTTYPES_H)
55 CHECK_INCLUDE_FILE(memory.h HAVE_MEMORY_H)
56 CHECK_INCLUDE_FILE(netinet/in.h HAVE_NETINET_IN_H)
57 CHECK_INCLUDE_FILE(stdint.h HAVE_STDINT_H)
58 CHECK_INCLUDE_FILE(stdlib.h HAVE_STDLIB_H)
59 CHECK_INCLUDE_FILE(strings.h HAVE_STRINGS_H)
60 CHECK_INCLUDE_FILE(string.h HAVE_STRING_H)
61 CHECK_INCLUDE_FILE(sys/prctl.h HAVE_SYS_PRCTL_H)
62 CHECK_INCLUDE_FILE(sys/socket.h HAVE_SYS_SOCKET_H)
63 CHECK_INCLUDE_FILE(sys/stat.h HAVE_SYS_STAT_H)
64 CHECK_INCLUDE_FILE(sys/types.h HAVE_SYS_TYPES_H)
65 CHECK_INCLUDE_FILE(unistd.h HAVE_UNISTD_H)
66 CHECK_INCLUDE_FILE(vfork.h HAVE_VFORK_H)
67 CHECK_INCLUDE_FILE(zlib.h HAVE_ZLIB_H)
69 # TODO: These can be tested if they actually work also...
70 set(HAVE_WORKING_FORK HAVE_FORK)
71 set(HAVE_WORKING_VFORK HAVE_VFORK)
73 CHECK_INCLUDE_FILES("stdlib.h;stdarg.h;string.h;float.h" STDC_HEADERS)
75 if (NOT HAVE_SYS_TYPES_H)
77 set(size_t "unsigned int")
81 set(malloc rpl_malloc)
85 set(realloc rpl_realloc)
89 set(LWS_OPENSSL_SUPPORT)
92 # Generate the config.h that includes all the compilation settings.
94 ${PROJECT_SOURCE_DIR}/config.h.cmake
95 ${PROJECT_BINARY_DIR}/config.h)
100 # Turn off stupid microsoft security warnings.
101 add_definitions(-D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE)
105 # For windows, do not allow the compiler to use default target (Vista).
106 add_definitions(-D_WIN32_WINNT=0x0501)
109 # Group headers and sources.
110 # Some IDEs use this for nicer file structure.
112 lib/private-libwebsockets.h
113 lib/extension-deflate-frame.h
114 lib/lib/extension-deflate-stream.h)
123 lib/client-handshake.c
127 lib/extension-deflate-frame.c
128 lib/extension-deflate-stream.c
135 lib/server-handshake.c
139 # Add helper files for Windows.
141 set(WIN32_HELPERS_PATH ${PROJECT_SOURCE_DIR}/win32port/win32helpers)
143 list(APPEND HDR_PRIVATE
144 ${WIN32_HELPERS_PATH}/websock-w32.h
145 ${WIN32_HELPERS_PATH}/gettimeofday.h
149 ${WIN32_HELPERS_PATH}/websock-w32.c
150 ${WIN32_HELPERS_PATH}/gettimeofday.c
155 if (!WITH_BUILTIN_GETIFADDRS)
156 list(APPEND HDR_PRIVATE lib/getifaddrs.h)
157 list(APPEND SOURCES lib/getifaddrs.c)
161 source_group("Headers Private" FILES ${HDR_PRIVATE})
162 source_group("Headers Public" FILES ${HDR_PUBLIC})
163 source_group("Sources" FILES ${SOURCES})
168 add_library(websocket STATIC
180 if (WIN32 AND USE_INCLUDED_WIN32_ZLIB)
181 # Compile ZLib if needed.
182 if (USE_INCLUDED_WIN32_ZLIB)
183 set(WIN32_ZLIB_PATH "${PROJECT_SOURCE_DIR}/win32port/zlib")
185 ${WIN32_ZLIB_PATH}/adler32.c
186 ${WIN32_ZLIB_PATH}/compress.c
187 ${WIN32_ZLIB_PATH}/crc32.c
188 ${WIN32_ZLIB_PATH}/deflate.c
189 ${WIN32_ZLIB_PATH}/gzclose.c
190 ${WIN32_ZLIB_PATH}/gzio.c
191 ${WIN32_ZLIB_PATH}/gzlib.c
192 ${WIN32_ZLIB_PATH}/gzread.c
193 ${WIN32_ZLIB_PATH}/gzwrite.c
194 ${WIN32_ZLIB_PATH}/infback.c
195 ${WIN32_ZLIB_PATH}/inffast.c
196 ${WIN32_ZLIB_PATH}/inflate.c
197 ${WIN32_ZLIB_PATH}/inftrees.c
198 ${WIN32_ZLIB_PATH}/trees.c
199 ${WIN32_ZLIB_PATH}/uncompr.c
200 ${WIN32_ZLIB_PATH}/zutil.c
203 # Create the library.
204 add_library(zlib STATIC ${ZLIB_SRCS})
206 # Set the same variables as find_package would.
207 set(${ZLIB_INCLUDE_DIRS} ${WIN32_ZLIB_PATH})
208 get_property(ZLIB_LIBRARIES TARGET zlib PROPERTY LOCATION)
212 find_package(zlib REQUIRED)
215 include_directories(${ZLIB_INCLUDE_DIRS})
216 target_link_libraries(websocket ${ZLIB_LIBRARIES})
223 # Use CyaSSL as OpenSSL replacement.
224 set(OPENSSL_LIBRARIES ${CYASSL_LIB})
225 set(OPENSSL_INCLUDE_DIRS ${CYASSL_INCLUDE_DIRS})
228 # TODO: Add support for STATIC also.
229 find_package(OpenSSL REQUIRED)
232 include_directories(${OPENSSL_INCLUDE_DIR})
233 target_link_libraries(websocket ${OPENSSL_LIBRARIES})