128 lines
4.3 KiB
CMake
128 lines
4.3 KiB
CMake
cmake_minimum_required(VERSION 3.10.2...3.28)
|
|
|
|
# Add cmake dir to module path, so Find*.cmake can be found
|
|
set(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake" ${CMAKE_MODULE_PATH})
|
|
|
|
project(hueplusplus VERSION 1.2.0 LANGUAGES CXX)
|
|
|
|
# check whether hueplusplus is compiled directly or included as a subdirectory
|
|
if(NOT DEFINED hueplusplus_master_project)
|
|
if(CMAKE_PROJECT_NAME STREQUAL PROJECT_NAME)
|
|
set(hueplusplus_master_project ON)
|
|
else()
|
|
set(hueplusplus_master_project OFF)
|
|
endif()
|
|
endif()
|
|
|
|
# options to set
|
|
option(hueplusplus_TESTS "Build tests" OFF)
|
|
option(hueplusplus_EXAMPLES "Build examples" OFF)
|
|
option(hueplusplus_NO_EXTERNAL_LIBRARIES "Do not try to use external libraries" OFF)
|
|
|
|
# Try to find installed packages
|
|
if(NOT hueplusplus_NO_EXTERNAL_LIBRARIES)
|
|
# Suppress warnings if libraries are not found, they will be built from submodules
|
|
find_package(MbedTLS QUIET)
|
|
find_package(nlohmann_json QUIET)
|
|
endif()
|
|
|
|
set(NEED_SUBMODULES NOT (${MbedTLS_FOUND} AND ${nlohmann_json_FOUND}))
|
|
|
|
option(CLANG_TIDY_FIX "Perform fixes for Clang-Tidy" OFF)
|
|
find_program(CLANG_TIDY_EXE NAMES "clang-tidy" DOC "Path to clang-tidy executable")
|
|
if(CLANG_TIDY_EXE)
|
|
if(CLANG_TIDY_FIX)
|
|
set(DO_CLANG_TIDY "${CLANG_TIDY_EXE}" "-fix")
|
|
else()
|
|
set(DO_CLANG_TIDY "${CLANG_TIDY_EXE}")
|
|
endif()
|
|
endif()
|
|
|
|
# update submodules
|
|
find_package(Git QUIET)
|
|
if(GIT_FOUND AND EXISTS "${PROJECT_SOURCE_DIR}/.git")
|
|
option(GIT_SUBMODULE "Check submodules during build" ON)
|
|
if(GIT_SUBMODULE AND NEED_SUBMODULES)
|
|
message(STATUS "Submodule update")
|
|
execute_process(COMMAND ${GIT_EXECUTABLE} submodule update --init --recursive WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
|
|
RESULT_VARIABLE GIT_SUBMOD_RESULT)
|
|
if(NOT GIT_SUBMOD_RESULT EQUAL "0")
|
|
message(FATAL_ERROR "git submodule update --init failed with ${GIT_SUBMOD_RESULT}, please checkout submodules")
|
|
endif()
|
|
endif()
|
|
endif()
|
|
|
|
# Set default build type if none was specified
|
|
set(default_build_type "Release")
|
|
if(hueplusplus_master_project AND (NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES))
|
|
message(STATUS "Setting build type to '${default_build_type}' as none was specified")
|
|
set(CMAKE_BUILD_TYPE "${default_build_type}" CACHE STRING "Choose the type of build." FORCE)
|
|
# Set possible values for cmake-gui
|
|
set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS
|
|
"Debug" "Release" "MinSizeRel" "RelWithDebInfo")
|
|
endif()
|
|
|
|
|
|
# get the correct installation directory for add_library() to work
|
|
if(WIN32 AND NOT CYGWIN)
|
|
set(DEF_INSTALL_CMAKE_DIR cmake)
|
|
else()
|
|
set(DEF_INSTALL_CMAKE_DIR lib/cmake/hueplusplus)
|
|
endif()
|
|
set(INSTALL_CMAKE_DIR ${DEF_INSTALL_CMAKE_DIR} CACHE PATH "Installation directory for CMake files")
|
|
|
|
# target for uninstall
|
|
if(NOT TARGET uninstall)
|
|
configure_file(
|
|
"${PROJECT_SOURCE_DIR}/cmake/cmake_uninstall.cmake.in"
|
|
"${PROJECT_BINARY_DIR}/cmake_uninstall.cmake"
|
|
IMMEDIATE @ONLY)
|
|
|
|
add_custom_target(uninstall
|
|
COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake)
|
|
endif()
|
|
|
|
# if we are on a apple machine this is needed
|
|
if (1 AND APPLE)
|
|
set(CMAKE_MACOSX_RPATH 1)
|
|
endif()
|
|
|
|
if(NOT MbedTLS_FOUND)
|
|
# Build mbedtls if not installed
|
|
message(STATUS "MbedTLS was not found, the submodule is used.")
|
|
set(USE_STATIC_MBEDTLS_LIBRARY ON)
|
|
set(USE_SHARED_MBEDTLS_LIBRARY OFF)
|
|
add_subdirectory("lib/mbedtls" EXCLUDE_FROM_ALL)
|
|
|
|
# Compile the mbedtls library as a static with position independent code,
|
|
# because we need it for both a shared and static library
|
|
set_property(TARGET mbedtls PROPERTY POSITION_INDEPENDENT_CODE ON)
|
|
set_property(TARGET mbedcrypto PROPERTY POSITION_INDEPENDENT_CODE ON)
|
|
set_property(TARGET mbedx509 PROPERTY POSITION_INDEPENDENT_CODE ON)
|
|
|
|
if(CMAKE_VERSION VERSION_LESS 3.18)
|
|
# Aliases for compatibility with find_package, newer cmake versions add these already
|
|
add_library(MbedTLS::mbedtls ALIAS mbedtls)
|
|
add_library(MbedTLS::mbedcrypto ALIAS mbedcrypto)
|
|
add_library(MbedTLS::mbedx509 ALIAS mbedx509)
|
|
endif()
|
|
endif()
|
|
|
|
if(NOT nlohmann_json_FOUND)
|
|
# Use embedded json
|
|
message(STATUS "nlohmann_json was not found, the submodule is used.")
|
|
# disable tests for json
|
|
set(JSON_BuildTests OFF CACHE INTERNAL "")
|
|
add_subdirectory("lib/json" EXCLUDE_FROM_ALL)
|
|
endif()
|
|
|
|
add_subdirectory(src)
|
|
|
|
# if the user decided to use tests add the subdirectory
|
|
if(hueplusplus_TESTS)
|
|
add_subdirectory("test")
|
|
endif()
|
|
|
|
if(hueplusplus_EXAMPLES)
|
|
add_subdirectory("examples")
|
|
endif()
|