214 lines
6.6 KiB
CMake
214 lines
6.6 KiB
CMake
#============================================
|
|
# ______ _____ _ __
|
|
# | ____|| __ \ | |/ /
|
|
# | |__ | | | || ' /
|
|
# | __| | | | || <
|
|
# | |____ | |__| || . \
|
|
# |______||_____/ |_|\_\
|
|
# Philips HUE
|
|
#============================================
|
|
cmake_minimum_required (VERSION 3.2)
|
|
cmake_policy(SET CMP0054 NEW)
|
|
|
|
project (libhuestream C CXX)
|
|
|
|
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin")
|
|
#============================================
|
|
# cmake modules
|
|
#============================================
|
|
set(CMAKE_MODULE_PATH
|
|
${CMAKE_SOURCE_DIR}/CMAKE
|
|
${CMAKE_MODULE_PATH}
|
|
)
|
|
|
|
#============================================
|
|
# Install dirs
|
|
#============================================
|
|
|
|
set(BUILD_DIR ${CMAKE_BINARY_DIR}/bin)
|
|
file(MAKE_DIRECTORY ${BUILD_DIR})
|
|
|
|
if (NOT CMAKE_INSTALL_PREFIX)
|
|
set(CMAKE_INSTALL_PREFIX ${CMAKE_CURRENT_BINARY_DIR})
|
|
endif()
|
|
|
|
set(INSTALL_INC_DIR_NAME include)
|
|
set(INSTALL_DIR ${CMAKE_INSTALL_PREFIX})
|
|
|
|
SET( CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG "${BUILD_DIR}")
|
|
SET( CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE "${BUILD_DIR}")
|
|
SET( CMAKE_LIBRARY_OUTPUT_DIRECTORY_DEBUG "${BUILD_DIR}")
|
|
SET( CMAKE_LIBRARY_OUTPUT_DIRECTORY_RELEASE "${BUILD_DIR}")
|
|
SET( CMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG "${BUILD_DIR}")
|
|
SET( CMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE "${BUILD_DIR}")
|
|
#============================================
|
|
# External projects and cmake modules
|
|
#============================================
|
|
include(GitInfo)
|
|
include(ExternalProject)
|
|
include(ExternalData)
|
|
include(GenerateExportHeader)
|
|
include(Helpers)
|
|
include(PostInstall)
|
|
include_directories(${CMAKE_BINARY_DIR}/include)
|
|
link_directories(${CMAKE_BINARY_DIR}/lib)
|
|
#============================================
|
|
# ctest
|
|
#============================================
|
|
enable_testing()
|
|
set(CTEST_OUTPUT_ON_FAILURE 1)
|
|
|
|
generate_build_info(${CMAKE_SOURCE_DIR})
|
|
#============================================
|
|
# CONFIGURATION OPTIONS
|
|
#============================================
|
|
option(BUILD_CURL "Build Curl" ON)
|
|
option(BUILD_TEST "Build tests" ON)
|
|
option(BUILD_EXAMPLES "Build examples" ON)
|
|
option(BUILD_SWIG "Build swig" ON)
|
|
option(BUILD_WRAPPERS "Build wrappers" ON)
|
|
option(BUILD_TEST_COV "Build tests with coverage" OFF)
|
|
option(BUILD_WITHOUT_RTTI "Build without RTTI support" ON)
|
|
option(BUILD_WITHOUT_EXCEPTIONS "Build without exception support" ON)
|
|
|
|
#============================================
|
|
# SHARED/STATIC settings
|
|
#============================================
|
|
if (NOT LIB_BUILD_MODE)
|
|
set(LIB_BUILD_MODE "STATIC")
|
|
endif()
|
|
|
|
if (LIB_BUILD_MODE STREQUAL "SHARED")
|
|
set(BUILD_SHARED ON)
|
|
elseif(LIB_BUILD_MODE STREQUAL "STATIC")
|
|
set(BUILD_STATIC ON)
|
|
else()
|
|
message(FATAL_ERROR "LIB_BUILD_MODE has invalid value: ${LIB_BUILD_MODE}")
|
|
endif()
|
|
|
|
#============================================
|
|
# COMPILER DETECTION AND SETTINGS
|
|
#============================================
|
|
|
|
if(WIN32)
|
|
add_definitions(-DWIN32)
|
|
endif()
|
|
|
|
# RTTI support
|
|
if (BUILD_WITHOUT_RTTI)
|
|
add_definitions(-DNO_RTTI)
|
|
endif()
|
|
|
|
if ("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang")
|
|
# ------------------------------------------
|
|
# CLANG
|
|
# ------------------------------------------
|
|
add_definitions(-DCLANG)
|
|
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -stdlib=libc++ -I\"/usr/include/libcxxabi\"")
|
|
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -stdlib=libc++ -lc++abi -pthread")
|
|
|
|
# Coverage
|
|
if (BUILD_TEST_COV)
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -O0 --coverage -fprofile-arcs -ftest-coverage")
|
|
endif()
|
|
|
|
# RTTI support
|
|
if (BUILD_WITHOUT_RTTI)
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-rtti")
|
|
endif()
|
|
|
|
# Exception support
|
|
if (BUILD_WITHOUT_EXCEPTIONS)
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-exceptions")
|
|
endif()
|
|
|
|
elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
|
|
# ------------------------------------------
|
|
# GNU GCC
|
|
# ------------------------------------------
|
|
add_definitions(-DGNU)
|
|
execute_process(COMMAND ${CMAKE_C_COMPILER} -dumpversion OUTPUT_VARIABLE GCC_VERSION)
|
|
|
|
# Extra defines for detecting specific GCC version
|
|
string(REGEX MATCHALL "[0-9]+" GCC_VERSION_COMPONENTS ${GCC_VERSION})
|
|
list(GET GCC_VERSION_COMPONENTS 0 GCC_MAJOR)
|
|
list(GET GCC_VERSION_COMPONENTS 1 GCC_MINOR)
|
|
add_definitions(-DGCC_MAJOR=${GCC_MAJOR})
|
|
add_definitions(-DGCC_MINOR=${GCC_MINOR})
|
|
|
|
# RTTI support
|
|
if (BUILD_WITHOUT_RTTI)
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-rtti")
|
|
endif()
|
|
|
|
# Exception support
|
|
if (BUILD_WITHOUT_EXCEPTIONS)
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-exceptions")
|
|
endif()
|
|
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread")
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -lm")
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wno-unknown-pragmas -Wno-unused-variable -Wno-unused-but-set-variable -Wno-sign-compare -Wno-reorder")
|
|
|
|
if (UNIX)
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC")
|
|
endif (UNIX)
|
|
|
|
# Coverage
|
|
if (BUILD_TEST_COV)
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -O0 --coverage -fprofile-arcs -ftest-coverage")
|
|
endif()
|
|
elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
|
|
# ------------------------------------------
|
|
# Visual Studio
|
|
# ------------------------------------------
|
|
add_definitions(-D_CRT_SECURE_NO_WARNINGS)
|
|
add_definitions(-D_WINSOCK_DEPRECATED_NO_WARNINGS)
|
|
|
|
# RTTI support
|
|
if (BUILD_WITHOUT_RTTI)
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -GR-")
|
|
endif()
|
|
|
|
# Exception support
|
|
if (BUILD_WITHOUT_EXCEPTIONS)
|
|
string(REGEX REPLACE "/EHsc" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
|
|
add_definitions(-D_HAS_EXCEPTIONS=0)
|
|
endif()
|
|
|
|
# Specific code define for exporting DLLs
|
|
if (BUILD_SHARED)
|
|
add_definitions(-DUSE_EXPORT)
|
|
endif()
|
|
endif()
|
|
|
|
#In this variable the shared libraries needed are collected and on windows
|
|
# copied to output next the executable
|
|
set(shared_libs "")
|
|
|
|
#============================================
|
|
# libhuestream
|
|
#============================================
|
|
include_directories(libhuestream)
|
|
add_subdirectory(libhuestream)
|
|
|
|
#============================================
|
|
# examples
|
|
#============================================
|
|
if (BUILD_EXAMPLES)
|
|
add_subdirectory(examples)
|
|
endif()
|
|
|
|
#============================================
|
|
# wrappers
|
|
#============================================
|
|
if (BUILD_WRAPPERS)
|
|
add_subdirectory(wrappers)
|
|
endif()
|
|
|
|
add_custom_target(install_huestream
|
|
$(MAKE) install
|
|
DEPENDS huestream
|
|
COMMENT "Installing huestream")
|