JD2022-TU1/main/extern/Hue/CMakeLists.txt

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")