#============================================ # ______ _____ _ __ # | ____|| __ \ | |/ / # | |__ | | | || ' / # | __| | | | || < # | |____ | |__| || . \ # |______||_____/ |_|\_\ # 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")