# Copyright (c) 2021 Samsung Electronics Co., Ltd All Rights Reserved # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # CMAKE_MINIMUM_REQUIRED(VERSION 2.8.3...3.19.1) CMAKE_POLICY(SET CMP0048 NEW) SET(fw_name "vine") PROJECT(${fw_name}) SET(PACKAGE_DESCRIPTION "Library and header files for Vine Native API") SET(VINE_VERSION_MAJOR "1") SET(VINE_VERSION_MINOR "0") SET(VINE_VERSION_PATCH "0") SET(VINE_VERSION ${VINE_VERSION_MAJOR}.${VINE_VERSION_MINOR}.${VINE_VERSION_PATCH}) OPTION(USE_EVENT_LOOP_EPOLL "Use epoll event loop" ON) OPTION(USE_EVENT_LOOP_EXTERNAL_GLIB "Use glib event loop" OFF) OPTION(USE_LIBWEBSOCKETS "Use libwebsockets for data path" ON) OPTION(USE_LIBWEBSOCKETS_STATIC "Use libwebsockets static library" ON) OPTION(USE_LIBWEBSOCKETS_STATIC_PREBUILT "Use prebuilt static library(.a)" ON) OPTION(WITH_UNITTEST "With unit tests" OFF) OPTION(WITH_VINE_TEST "With vine command-line test tools" OFF) OPTION(ENABLE_INSTRUMENTATION_MODE "Enable instrumentation mode" OFF) OPTION(ENABLE_DATAPATH_PLUGIN_DEBUG "Enable debug mode for data path plugin" OFF) OPTION(NAN_SUPPORT "Support NAN" OFF) INCLUDE(FindPkgConfig) SET(BUILD_OS "default") SET(DEPS "") FIND_PROGRAM(UNAME NAMES uname) EXEC_PROGRAM("${UNAME}" ARGS "-m" OUTPUT_VARIABLE "BUILD_ARCH") IF(HW_FP) SET(BUILD_ARCH "armv7hl") ENDIF(HW_FP) IF(TIZEN_OS) SET(BUILD_OS "tizen") STRING(CONCAT DEPS ${DEPS} "dlog capi-base-common capi-system-info") ENDIF(TIZEN_OS) IF(USE_EVENT_LOOP_EPOLL) ADD_DEFINITIONS("-DUSE_VINE_EVENT_LOOP_EPOLL") ENDIF(USE_EVENT_LOOP_EPOLL) IF(USE_EVENT_LOOP_EXTERNAL_GLIB) ADD_DEFINITIONS("-DUSE_VINE_EVENT_LOOP_EXTERNAL_GLIB") STRING(CONCAT DEPS ${DEPS} " glib-2.0 gio-2.0") ENDIF(USE_EVENT_LOOP_EXTERNAL_GLIB) pkg_check_modules(fw_name_deps REQUIRED ${DEPS}) IF(NOT ANDROID) SET(VINE_DEPS_LIB pthread) ENDIF(NOT ANDROID) FOREACH(flag ${fw_name_deps_CFLAGS}) SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}") ENDFOREACH(flag) IF(ANDROID) SET(BUILD_OS "android") SET(BUILD_ARCH ${ANDROID_ABI}) SET(CMAKE_INSTALL_PREFIX ".") ENDIF(ANDROID) SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS} -fPIC -Wall -g") SET(CMAKE_C_FLAGS_DEBUG "-O0 -g") SET(CMAKE_C_FLAGS_RELEASE "-O2 -g") # Don't export symbols by default ADD_DEFINITIONS("-fvisibility=hidden") IF(TIZEN_OS) ADD_DEFINITIONS("-DTIZEN_OS -DUSE_DLOG") ENDIF(TIZEN_OS) SET(BT_SUPPORT OFF) IF(TIZEN_OS AND USE_EVENT_LOOP_EXTERNAL_GLIB) ADD_DEFINITIONS("-DBT_SUPPORT") SET(BT_SUPPORT ON) ENDIF(TIZEN_OS AND USE_EVENT_LOOP_EXTERNAL_GLIB) IF(NAN_SUPPORT) IF(NOT TIZEN_OS OR NOT USE_EVENT_LOOP_EXTERNAL_GLIB) MESSAGE("NAN is supported in Tizen with external glib loop") SET(NAN_SUPPORT OFF) ELSE(NOT TIZEN_OS OR NOT USE_EVENT_LOOP_EXTERNAL_GLIB) ADD_DEFINITIONS("-DNAN_SUPPORT") ENDIF(NOT TIZEN_OS OR NOT USE_EVENT_LOOP_EXTERNAL_GLIB) ENDIF(NAN_SUPPORT) IF(ENABLE_INSTRUMENTATION_MODE) SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -finstrument-functions -finstrument-functions-exclude-file-list=src/logger") ADD_DEFINITIONS("-DENABLE_INSTRUMENTATION_MODE") ENDIF(ENABLE_INSTRUMENTATION_MODE) SET(CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS} -std=c++11") SET(CMAKE_EXE_LINKER_FLAGS "-Wl,--as-needed -Wl,--rpath=${LIBDIR}") SET(TARGET_VINE "vine") SET(VINE_LOGGER "vine-logger") SET(VINE_PATH ${PROJECT_SOURCE_DIR}/src) SET(VINE_LOGGER_PATH ${PROJECT_SOURCE_DIR}/src/logger) IF(USE_LIBWEBSOCKETS_STATIC) IF(NOT USE_LIBWEBSOCKETS_STATIC_PREBUILT) SET(TARGET_LWS "libwebsockets-v4.3-stable") SET(LWS_WITH_STATIC ON CACHE BOOL "" FORCE) SET(LWS_WITH_SHARED OFF CACHE BOOL "" FORCE) SET(LWS_WITH_EXTERNAL_POLL ON CACHE BOOL "" FORCE) SET(LWS_IPV6 ON CACHE BOOL "" FORCE) SET(LWS_WITHOUT_TESTAPPS ON CACHE BOOL "" FORCE) SET(LWS_WITH_FILE_OPS OFF CACHE BOOL "" FORCE) SET(LWS_WITH_SYS_SMD OFF CACHE BOOL "" FORCE) SET(LWS_WITH_NETLINK OFF CACHE BOOL "" FORCE) SET(LWS_WITH_VINE_EXT ON CACHE BOOL "" FORCE) EXECUTE_PROCESS( WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}/third-party" COMMAND tar xzf "${PROJECT_SOURCE_DIR}/third-party/${TARGET_LWS}.tar.gz" ) ADD_SUBDIRECTORY(third-party/${TARGET_LWS}) ENDIF(NOT USE_LIBWEBSOCKETS_STATIC_PREBUILT) SET(PREBUILT_THIRD_PARTY_INCLUDE_PATH "${PROJECT_SOURCE_DIR}/third-party/prebuilt/include") ENDIF(USE_LIBWEBSOCKETS_STATIC) IF(USE_LIBWEBSOCKETS) ADD_DEFINITIONS("-DUSE_LIBWEBSOCKETS") ADD_SUBDIRECTORY(plugins/libwebsockets) ENDIF(USE_LIBWEBSOCKETS) ADD_SUBDIRECTORY(plugins/dns-sd) IF(BT_SUPPORT) ADD_SUBDIRECTORY(plugins/ble) ADD_SUBDIRECTORY(plugins/ble-gatt) ENDIF(BT_SUPPORT) IF(NAN_SUPPORT) ADD_SUBDIRECTORY(plugins/nan) ENDIF(NAN_SUPPORT) ADD_SUBDIRECTORY(include) ADD_SUBDIRECTORY(src/logger) ADD_SUBDIRECTORY(src) ADD_SUBDIRECTORY(pkgconfig) ADD_SUBDIRECTORY(tool) IF(WITH_UNITTEST) ADD_SUBDIRECTORY(tests/unittest) ENDIF(WITH_UNITTEST) IF(WITH_VINE_TEST) ADD_SUBDIRECTORY(tests/vine-test) ADD_SUBDIRECTORY(tests/verifier) ENDIF()