cmake_minimum_required(VERSION 3.2) project(icsneonext VERSION 0.1.0) set(CMAKE_CXX_STANDARD 11) include(GNUInstallDirs) set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake") # macOS Homebrew Boost Fix if(NOT MSVC) include_directories(AFTER /usr/local/include) endif() # Enable Warnings if(MSVC) # Force to always compile with W4 if(CMAKE_CXX_FLAGS MATCHES "/W[0-4]") string(REGEX REPLACE "/W[0-4]" "/W4" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") else() set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W4") endif() else() #if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wno-switch -Wno-nested-anon-types -Wno-gnu-anonymous-struct -Wno-unknown-pragmas -Wno-zero-length-array") endif() # libftdi if(NOT WIN32) include_directories(${CMAKE_CURRENT_SOURCE_DIR} third-party/libftdi/src third-party/libftdi/ftdipp) add_subdirectory(third-party/libftdi) endif(NOT WIN32) # winpcap if(WIN32) include_directories(AFTER third-party/winpcap/include) add_definitions(-DWPCAP -DHAVE_REMOTE -DWIN32_LEAN_AND_MEAN) endif(WIN32) # doxygen find_package(Doxygen) if(DOXYGEN_FOUND) set(DOXYGEN_OUT ${CMAKE_CURRENT_BINARY_DIR}/generated/Doxyfile) set(ICSNEO_DOCS_DIR ${CMAKE_CURRENT_SOURCE_DIR}/docs) configure_file(${ICSNEO_DOCS_DIR}/Doxyfile.template ${DOXYGEN_OUT} @ONLY) message("Doxygen build started") add_custom_target(libicsneo_doxygen ALL COMMAND ${DOXYGEN_EXECUTABLE} ${DOXYGEN_OUT} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} COMMENT "Generating API documentation with Doxygen" VERBATIM DEPENDS icsneocpp icsneoc icsneolegacy) # sphinx find_package(Sphinx) if(SPHINX_EXECUTABLE) # configured documentation tools and intermediate build results set(SPHINX_BUILD_DIR ${CMAKE_CURRENT_BINARY_DIR}/_build) # Sphinx cache with pickled ReST documents set(SPHINX_CACHE_DIR ${CMAKE_CURRENT_BINARY_DIR}/_doctrees) # HTML output directory set(SPHINX_HTML_DIR ${CMAKE_CURRENT_BINARY_DIR}/doc_sphinx) configure_file( "${ICSNEO_DOCS_DIR}/conf.py.template" "${SPHINX_BUILD_DIR}/conf.py" @ONLY) add_custom_target(libicsneo_sphinx ALL ${SPHINX_EXECUTABLE} -q -b html -c "${SPHINX_BUILD_DIR}" -d "${SPHINX_CACHE_DIR}" "${ICSNEO_DOCS_DIR}" "${SPHINX_HTML_DIR}" COMMENT "Building HTML documentation with Sphinx" DEPENDS icsneocpp icsneoc icsneolegacy libicsneo_doxygen) endif() endif() if(WIN32) file(GLOB PLATFORM_SRC_EXTERNAL ${CMAKE_CURRENT_SOURCE_DIR}/platform/windows/*.cpp) file(GLOB PLATFORM_SRC_INTERNAL ${CMAKE_CURRENT_SOURCE_DIR}/platform/windows/internal/*.cpp) set(PLATFORM_SRC ${PLATFORM_SRC_EXTERNAL} ${PLATFORM_SRC_INTERNAL}) else() file(GLOB PLATFORM_SRC ${CMAKE_CURRENT_SOURCE_DIR}/platform/posix/*.cpp) endif() set(COMMON_SRC communication/message/neomessage.cpp communication/decoder.cpp communication/encoder.cpp communication/packetizer.cpp communication/multichannelcommunication.cpp communication/communication.cpp communication/icommunication.cpp device/idevicesettings.cpp device/devicefinder.cpp device/device.cpp ) set(SRC_FILES ${COMMON_SRC} ${PLATFORM_SRC}) # Generate build info header execute_process( COMMAND git rev-parse --abbrev-ref HEAD WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} OUTPUT_VARIABLE GIT_BRANCH OUTPUT_STRIP_TRAILING_WHITESPACE ) execute_process( COMMAND git describe --abbrev=6 --dirty --always --tags WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} OUTPUT_VARIABLE GIT_DESCRIBE ERROR_VARIABLE GIT_DESCRIBE OUTPUT_STRIP_TRAILING_WHITESPACE ) configure_file(api/icsneocpp/buildinfo.h.template ${CMAKE_CURRENT_BINARY_DIR}/generated/buildinfo.h) include_directories(BEFORE ${CMAKE_CURRENT_BINARY_DIR}) add_library(icsneocpp api/icsneocpp/icsneocpp.cpp api/icsneocpp/error.cpp api/icsneocpp/errormanager.cpp api/icsneocpp/version.cpp ${SRC_FILES} ) target_include_directories(icsneocpp PUBLIC $ $ PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include ) set_property(TARGET icsneocpp PROPERTY POSITION_INDEPENDENT_CODE ON) add_library(icsneoc SHARED api/icsneoc/icsneoc.cpp) target_include_directories(icsneoc PUBLIC $ $ PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include ) target_link_libraries(icsneoc icsneocpp) add_library(icsneolegacy SHARED api/icsneolegacy/icsneolegacy.cpp api/icsneoc/icsneoc.cpp ) target_include_directories(icsneolegacy PUBLIC $ $ PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include ) target_link_libraries(icsneolegacy icsneocpp) target_compile_features(icsneocpp PRIVATE cxx_auto_type cxx_constexpr cxx_lambdas cxx_nullptr cxx_range_for cxx_rvalue_references cxx_sizeof_member cxx_strong_enums) target_compile_features(icsneoc PRIVATE cxx_auto_type cxx_constexpr cxx_lambdas cxx_nullptr cxx_range_for cxx_rvalue_references cxx_sizeof_member cxx_strong_enums) target_compile_features(icsneolegacy PRIVATE cxx_auto_type cxx_constexpr cxx_lambdas cxx_nullptr cxx_range_for cxx_rvalue_references cxx_sizeof_member cxx_strong_enums) # libftdi if(NOT WIN32) find_package(Threads) set_property(TARGET ftdi1-static PROPERTY POSITION_INDEPENDENT_CODE ON) set_property(TARGET ftdipp1-static PROPERTY POSITION_INDEPENDENT_CODE ON) target_link_libraries(icsneocpp ftdipp1-static) target_link_libraries(icsneoc ftdipp1-static) target_link_libraries(icsneolegacy ftdipp1-static) target_link_libraries(icsneocpp ftdi1-static) target_link_libraries(icsneoc ftdi1-static) target_link_libraries(icsneolegacy ftdi1-static) target_link_libraries(icsneocpp ${CMAKE_THREAD_LIBS_INIT}) target_link_libraries(icsneoc ${CMAKE_THREAD_LIBS_INIT}) target_link_libraries(icsneolegacy ${CMAKE_THREAD_LIBS_INIT}) endif() set(CPACK_PROJECT_NAME ${PROJECT_NAME}) set(CPACK_PROJECT_VERSION ${PROJECT_VERSION}) include(CPack)