Upgrade libwebsockets to v4.3-stable
[platform/core/api/vine.git] / CMakeLists.txt
1 # Copyright (c) 2021 Samsung Electronics Co., Ltd All Rights Reserved
2 #
3 #    Licensed under the Apache License, Version 2.0 (the "License");
4 #    you may not use this file except in compliance with the License.
5 #    You may obtain a copy of the License at
6 #
7 #        http://www.apache.org/licenses/LICENSE-2.0
8 #
9 #    Unless required by applicable law or agreed to in writing, software
10 #    distributed under the License is distributed on an "AS IS" BASIS,
11 #    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 #    See the License for the specific language governing permissions and
13 #    limitations under the License.
14 #
15
16 CMAKE_MINIMUM_REQUIRED(VERSION 2.8.3...3.19.1)
17
18 CMAKE_POLICY(SET CMP0048 NEW)
19
20 SET(fw_name "vine")
21 PROJECT(${fw_name})
22 SET(PACKAGE_DESCRIPTION "Library and header files for Vine Native API")
23
24 SET(VINE_VERSION_MAJOR "1")
25 SET(VINE_VERSION_MINOR "0")
26 SET(VINE_VERSION_PATCH "0")
27 SET(VINE_VERSION ${VINE_VERSION_MAJOR}.${VINE_VERSION_MINOR}.${VINE_VERSION_PATCH})
28
29 OPTION(USE_EVENT_LOOP_EPOLL "Use epoll event loop" ON)
30 OPTION(USE_EVENT_LOOP_EXTERNAL_GLIB "Use glib event loop" OFF)
31 OPTION(USE_LIBWEBSOCKETS "Use libwebsockets for data path" ON)
32 OPTION(USE_LIBWEBSOCKETS_STATIC "Use libwebsockets static library" ON)
33 OPTION(USE_LIBWEBSOCKETS_STATIC_PREBUILT "Use prebuilt static library(.a)" ON)
34 OPTION(WITH_UNITTEST "With unit tests" OFF)
35 OPTION(WITH_VINE_TEST "With vine command-line test tools" OFF)
36 OPTION(ENABLE_INSTRUMENTATION_MODE "Enable instrumentation mode" OFF)
37 OPTION(ENABLE_DATAPATH_PLUGIN_DEBUG "Enable debug mode for data path plugin" OFF)
38
39 OPTION(NAN_SUPPORT "Support NAN" OFF)
40
41 INCLUDE(FindPkgConfig)
42
43 SET(BUILD_OS "default")
44 SET(DEPS "")
45
46 FIND_PROGRAM(UNAME NAMES uname)
47 EXEC_PROGRAM("${UNAME}" ARGS "-m" OUTPUT_VARIABLE "BUILD_ARCH")
48
49 IF(HW_FP)
50         SET(BUILD_ARCH "armv7hl")
51 ENDIF(HW_FP)
52
53 IF(TIZEN_OS)
54     SET(BUILD_OS "tizen")
55     STRING(CONCAT DEPS ${DEPS} "dlog capi-base-common capi-system-info")
56 ENDIF(TIZEN_OS)
57
58 IF(USE_EVENT_LOOP_EPOLL)
59         ADD_DEFINITIONS("-DUSE_VINE_EVENT_LOOP_EPOLL")
60 ENDIF(USE_EVENT_LOOP_EPOLL)
61
62 IF(USE_EVENT_LOOP_EXTERNAL_GLIB)
63         ADD_DEFINITIONS("-DUSE_VINE_EVENT_LOOP_EXTERNAL_GLIB")
64         STRING(CONCAT DEPS ${DEPS} " glib-2.0 gio-2.0")
65 ENDIF(USE_EVENT_LOOP_EXTERNAL_GLIB)
66
67 pkg_check_modules(fw_name_deps REQUIRED ${DEPS})
68
69 IF(NOT ANDROID)
70         SET(VINE_DEPS_LIB pthread)
71 ENDIF(NOT ANDROID)
72
73 FOREACH(flag ${fw_name_deps_CFLAGS})
74     SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}")
75 ENDFOREACH(flag)
76
77 IF(ANDROID)
78         SET(BUILD_OS "android")
79         SET(BUILD_ARCH ${ANDROID_ABI})
80         SET(CMAKE_INSTALL_PREFIX ".")
81 ENDIF(ANDROID)
82
83 SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS} -fPIC -Wall -g")
84 SET(CMAKE_C_FLAGS_DEBUG      "-O0 -g")
85 SET(CMAKE_C_FLAGS_RELEASE    "-O2 -g")
86
87 # Don't export symbols by default
88 ADD_DEFINITIONS("-fvisibility=hidden")
89 IF(TIZEN_OS)
90     ADD_DEFINITIONS("-DTIZEN_OS -DUSE_DLOG")
91 ENDIF(TIZEN_OS)
92
93 SET(BT_SUPPORT OFF)
94 IF(TIZEN_OS AND USE_EVENT_LOOP_EXTERNAL_GLIB)
95         ADD_DEFINITIONS("-DBT_SUPPORT")
96         SET(BT_SUPPORT ON)
97 ENDIF(TIZEN_OS AND USE_EVENT_LOOP_EXTERNAL_GLIB)
98
99 IF(NAN_SUPPORT)
100         IF(NOT TIZEN_OS OR NOT USE_EVENT_LOOP_EXTERNAL_GLIB)
101                 MESSAGE("NAN is supported in Tizen with external glib loop")
102                 SET(NAN_SUPPORT OFF)
103         ELSE(NOT TIZEN_OS OR NOT USE_EVENT_LOOP_EXTERNAL_GLIB)
104                 ADD_DEFINITIONS("-DNAN_SUPPORT")
105         ENDIF(NOT TIZEN_OS OR NOT USE_EVENT_LOOP_EXTERNAL_GLIB)
106 ENDIF(NAN_SUPPORT)
107
108 IF(ENABLE_INSTRUMENTATION_MODE)
109         SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -finstrument-functions -finstrument-functions-exclude-file-list=src/logger")
110         ADD_DEFINITIONS("-DENABLE_INSTRUMENTATION_MODE")
111 ENDIF(ENABLE_INSTRUMENTATION_MODE)
112
113 SET(CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS} -std=c++11")
114 SET(CMAKE_EXE_LINKER_FLAGS "-Wl,--as-needed -Wl,--rpath=${LIBDIR}")
115
116 SET(TARGET_VINE "vine")
117 SET(VINE_LOGGER "vine-logger")
118 SET(VINE_PATH ${PROJECT_SOURCE_DIR}/src)
119 SET(VINE_LOGGER_PATH ${PROJECT_SOURCE_DIR}/src/logger)
120
121 IF(USE_LIBWEBSOCKETS_STATIC)
122 IF(NOT USE_LIBWEBSOCKETS_STATIC_PREBUILT)
123         SET(TARGET_LWS "libwebsockets-v4.3-stable")
124         SET(LWS_WITH_STATIC ON CACHE BOOL "" FORCE)
125         SET(LWS_WITH_SHARED OFF CACHE BOOL "" FORCE)
126         SET(LWS_WITH_EXTERNAL_POLL ON CACHE BOOL "" FORCE)
127         SET(LWS_IPV6 ON CACHE BOOL "" FORCE)
128         SET(LWS_WITHOUT_TESTAPPS ON CACHE BOOL "" FORCE)
129         SET(LWS_WITH_FILE_OPS OFF CACHE BOOL "" FORCE)
130         SET(LWS_WITH_SYS_SMD OFF CACHE BOOL "" FORCE)
131         SET(LWS_WITH_NETLINK OFF CACHE BOOL "" FORCE)
132         SET(LWS_WITH_VINE_EXT ON CACHE BOOL "" FORCE)
133         EXECUTE_PROCESS(
134                 WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}/third-party"
135                 COMMAND tar xzf "${PROJECT_SOURCE_DIR}/third-party/${TARGET_LWS}.tar.gz"
136         )
137         ADD_SUBDIRECTORY(third-party/${TARGET_LWS})
138 ENDIF(NOT USE_LIBWEBSOCKETS_STATIC_PREBUILT)
139         SET(PREBUILT_THIRD_PARTY_INCLUDE_PATH "${PROJECT_SOURCE_DIR}/third-party/prebuilt/include")
140 ENDIF(USE_LIBWEBSOCKETS_STATIC)
141
142 IF(USE_LIBWEBSOCKETS)
143         ADD_DEFINITIONS("-DUSE_LIBWEBSOCKETS")
144         ADD_SUBDIRECTORY(plugins/libwebsockets)
145 ENDIF(USE_LIBWEBSOCKETS)
146
147 ADD_SUBDIRECTORY(plugins/dns-sd)
148 IF(BT_SUPPORT)
149         ADD_SUBDIRECTORY(plugins/ble)
150         ADD_SUBDIRECTORY(plugins/ble-gatt)
151 ENDIF(BT_SUPPORT)
152 IF(NAN_SUPPORT)
153         ADD_SUBDIRECTORY(plugins/nan)
154 ENDIF(NAN_SUPPORT)
155
156 ADD_SUBDIRECTORY(include)
157 ADD_SUBDIRECTORY(src/logger)
158 ADD_SUBDIRECTORY(src)
159 ADD_SUBDIRECTORY(pkgconfig)
160 ADD_SUBDIRECTORY(tool)
161
162 IF(WITH_UNITTEST)
163 ADD_SUBDIRECTORY(tests/unittest)
164 ENDIF(WITH_UNITTEST)
165
166 IF(WITH_VINE_TEST)
167 ADD_SUBDIRECTORY(tests/vine-test)
168 ADD_SUBDIRECTORY(tests/verifier)
169 ENDIF()