CMAKE_MINIMUM_REQUIRED(VERSION 2.6) SET(PROJECTNAME "RCIOncilla") SET(LIBNAME "rcioncilla") PROJECT(${PROJECTNAME}) SET(CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS TRUE) SET(RCIONCILLA_CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake) ENABLE_LANGUAGE(C) ENABLE_LANGUAGE(CXX) SET(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) # CMake module path and modules SET(PROJECT_CMAKE_PATH "${CMAKE_INSTALL_PREFIX}/share/cmake/Modules") SET(SYSTEM_CMAKE_PATH "/usr/share/cmake/Modules") SET(CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH}" "${RCIONCILLA_CMAKE_MODULE_PATH}" "${PROJECT_CMAKE_PATH}" "${SYSTEM_CMAKE_PATH}") FIND_PACKAGE(RSC REQUIRED) SET(CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH}" "${RSC_CMAKE_MODULE_PATH}") MESSAGE(STATUS "RSC version: ${RSC_VERSION}") INCLUDE(CheckIncludeFileCXX) INCLUDE(InstallFilesRecursive) INCLUDE(EnableCoverageReport) INCLUDE(EnableSlocCount) INCLUDE(GenerateDoxygen) INCLUDE(GenerateCppcheck) INCLUDE(FindPkgConfig) SET(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) # --- user options --- OPTION(BUILD_TESTS "Decide whether unit-tests are built" ON) OPTION(BUILD_EXAMPLES "Decide whether the examples are built" ON) OPTION(BUILD_DOCS "Decide whether the docygen documentation is built" OFF) OPTION(BUILD_HARDWARE_DRIVER "Decide whether driver for the real robot is build" OFF) OPTION(WEBOTS_PROJECT_DIR "Specify folder to install the Webots Simulator Project to" "~/projects/oncillasim") # Cross-compiling IF ("${CMAKE_SYSTEM_PROCESSOR}" MATCHES "i486") SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=${CMAKE_SYSTEM_PROCESSOR}") MESSAGE(STATUS "Compiling for architecture: ${CMAKE_SYSTEM_PROCESSOR}") ENDIF () IF ("${CMAKE_SYSTEM_PROCESSOR}" MATCHES "i586") SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=${CMAKE_SYSTEM_PROCESSOR}") MESSAGE(STATUS "Compiling for architecture: ${CMAKE_SYSTEM_PROCESSOR}") ENDIF () # Dependencies FIND_PACKAGE(BoostUUID) FIND_PACKAGE(Threads REQUIRED) MESSAGE(STATUS "Threading library: ${CMAKE_THREAD_LIBS_INIT}") FIND_PACKAGE(NemoMath REQUIRED) MESSAGE(STATUS "NemoMath version: ${NemoMath_VERSION}") FIND_PACKAGE(ProtocolBuffers) FIND_PACKAGE(RST REQUIRED) MESSAGE(STATUS "RST version: ${RST_VERSION}") FIND_PACKAGE(RSB REQUIRED) MESSAGE(STATUS "RSB version: ${RSB_VERSION}") FIND_PACKAGE(CCA REQUIRED) MESSAGE(STATUS "CCA version: ${CCA_VERSION}") FIND_PACKAGE(RCI REQUIRED) MESSAGE(STATUS "RCI version: ${RCI_VERSION}") # --- global definitions --- SET(RCIONCILLA_NAME "${LIBNAME}") SET(DRIVER_TEST_NAME "${PROJECTNAME}Tests") SET(DTO_TEST_NAME "${DRIVER_TEST_NAME}DTO") SET(LWRCONTROL_TEST_NAME "${DRIVER_TEST_NAME}LWRControl") SET(INTEGRATED_TEST_NAME "${DRIVER_TEST_NAME}Integrated") SET(RCIONCILLA_VERSION_MAJOR 0) SET(RCIONCILLA_VERSION_MINOR 2) SET(RCIONCILLA_VERSION_PATCH 0) SET(RCIONCILLA_VERSION "${RCIONCILLA_VERSION_MAJOR}.${RCIONCILLA_VERSION_MINOR}.${RCIONCILLA_VERSION_PATCH}") SET(DRIVER_CMAKE_MODULE_PATH "${CMAKE_INSTALL_PREFIX}/share/cmake/Modules") SET(GTEST_DIR ${CMAKE_SOURCE_DIR}/3rdparty/gtest-1.5.0) SET(GTEST_INCLUDE_DIR ${GTEST_DIR}/include) SET(GMOCK_DIR ${CMAKE_SOURCE_DIR}/3rdparty/gmock-1.5.0) SET(GMOCK_INCLUDE_DIR ${GMOCK_DIR}/include) SET(GMOCK_LIBRARY_NAME "gmock") SET(OUTPUT_PATH ${CMAKE_BINARY_DIR}/build) SET(ARCHIVE_OUTPUT_PATH ${OUTPUT_PATH}) SET(LIBRARY_OUTPUT_PATH ${OUTPUT_PATH}) SET(EXECUTABLE_OUTPUT_PATH ${OUTPUT_PATH}) # --- dependency handling --- IF(BUILD_DOCS) FIND_PACKAGE(Doxygen) ENDIF() # Includes INCLUDE_DIRECTORIES(BEFORE src ${CMAKE_CURRENT_BINARY_DIR}/src) INCLUDE_DIRECTORIES(SYSTEM ${RSC_INCLUDE_DIRS}) INCLUDE_DIRECTORIES(SYSTEM ${RSB_INCLUDE_DIRS}) INCLUDE_DIRECTORIES(SYSTEM ${RST_INCLUDE_DIRS}) INCLUDE_DIRECTORIES(SYSTEM ${SPREAD_INCLUDE_DIRS}) INCLUDE_DIRECTORIES(SYSTEM ${CCA_INCLUDE_DIRS}) INCLUDE_DIRECTORIES(SYSTEM ${RCI_INCLUDE_DIRS}) INCLUDE_DIRECTORIES(SYSTEM ${NemoMath_INCLUDE_DIRS}) INCLUDE_DIRECTORIES(SYSTEM ${Boost_INCLUDE_DIRS}) INCLUDE_DIRECTORIES(SYSTEM ${BOOSTUUID_INCLUDE_DIRS}) INCLUDE_DIRECTORIES(SYSTEM ${LIBRARIES_INCLUDE_DIRS}) INCLUDE_DIRECTORIES(BEFORE SYSTEM ${PROTOBUF_INCLUDE_DIR} ${RST_INCLUDE_DIRS}) ADD_DEFINITIONS(${RST_CFLAGS}) LINK_DIRECTORIES(${RSC_LIBRARY_DIR} ${RSB_LIBRARY_DIR} ${CCA_LIBRARY_DIR} ${RCI_LIBRARY_DIR} ${LIBRARIES_LIBRARY_DIRS}) ADD_SUBDIRECTORY(src) ADD_SUBDIRECTORY(cmake) IF(BUILD_HARDWARE_DRIVER) INCLUDE_DIRECTORIES(SYSTEM ${LIBXML2_INCLUDE_DIR}) ENDIF(BUILD_HARDWARE_DRIVER) IF(BUILD_TESTS) ADD_SUBDIRECTORY(test) #ADD_SUBDIRECTORY(3rdparty) ENDIF() IF(BUILD_EXAMPLES) ADD_SUBDIRECTORY(examples) ENDIF() # --- cmake config file --- SET(LIB_SUFFIX ${CMAKE_SHARED_LIBRARY_SUFFIX}) IF(CMAKE_LINK_LIBRARY_SUFFIX) SET(LIB_SUFFIX ${CMAKE_LINK_LIBRARY_SUFFIX}) ENDIF() # --- pkgconfig file --- CONFIGURE_FILE(${RCIONCILLA_NAME}.pc.in ${CMAKE_CURRENT_BINARY_DIR}/${RCIONCILLA_NAME}.pc @ONLY) INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/${RCIONCILLA_NAME}.pc DESTINATION lib/pkgconfig) # --- cmake config file --- SET(LIB_SUFFIX ${CMAKE_SHARED_LIBRARY_SUFFIX}) IF(CMAKE_LINK_LIBRARY_SUFFIX) SET(LIB_SUFFIX ${CMAKE_LINK_LIBRARY_SUFFIX}) ENDIF() CONFIGURE_FILE(${PROJECTNAME}Config.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/${PROJECTNAME}Config.cmake @ONLY) INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/${PROJECTNAME}Config.cmake DESTINATION share/${LIBNAME}) # --- documentation generation --- IF(BUILD_DOCS) IF(DOXYGEN_FOUND) SET(API_DIR "${CMAKE_BINARY_DIR}/doc") SET(SOURCE_DIR "${CMAKE_SOURCE_DIR}/src") SET(DOXYFILE "${CMAKE_BINARY_DIR}/Doxyfile") SET(WARNFILE "${CMAKE_BINARY_DIR}/doxygen-warn.log") CONFIGURE_FILE(Doxyfile.in ${DOXYFILE}) ADD_CUSTOM_COMMAND(OUTPUT ${API_DIR} DEPENDS ${DOXYFILE} COMMAND ${DOXYGEN_EXECUTABLE} ARGS ${DOXYFILE} WORKING_DIRECTORY ${CMAKE_BINARY_DIR}) ADD_CUSTOM_TARGET(doc DEPENDS ${API_DIR}) INSTALL(CODE "execute_process(COMMAND ${CMAKE_BUILD_TOOL} doc)") INSTALL(DIRECTORY ${API_DIR} DESTINATION share/${LIBNAME}) ENDIF() ENDIF(BUILD_DOCS) # --- coverage --- IF(BUILD_TESTS) ENABLE_COVERAGE_REPORT(TARGETS ${RCIONCILLA_NAME} TESTS ${DTO_TEST_NAME} ${INTEGRATED_TEST_NAME} FILTER "*3rdparty*" "*test/*") ENDIF(BUILD_TESTS) # --- sloccount --- ENABLE_SLOCCOUNT(FOLDERS src test examples) # --- cppcheck --- GENERATE_CPPCHECK(SOURCES src test examples "${CMAKE_CURRENT_BINARY_DIR}/src" "${CMAKE_CURRENT_BINARY_DIR}/test" "${CMAKE_CURRENT_BINARY_DIR}/examples" ENABLE_IDS style) # --- package --- INCLUDE(CheckLSBTypes) SET(CPACK_PACKAGE_VERSION_MAJOR ${RCIONCILLA_VERSION_MAJOR}) SET(CPACK_PACKAGE_VERSION_MINOR ${RCIONCILLA_VERSION_MINOR}) SET(CPACK_PACKAGE_VERSION_PATCH ${RCIONCILLA_VERSION_PATCH}) SET(CPACK_PACKAGE_VERSION "${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}") SET(CPACK_PACKAGE_FILE_NAME ${CMAKE_PROJECT_NAME}-${CPACK_PACKAGE_VERSION}_${LSB_CODENAME}_${LSB_PROCESSOR_ARCH}) SET(CPACK_GENERATOR "TGZ") SET(CPACK_PACKAGE_VENDOR "CoR-Lab Bielefeld University") IF(CMAKE_SYSTEM_NAME STREQUAL "Linux") SET(CPACK_GENERATOR "${CPACK_GENERATOR};DEB") SET(CPACK_DEBIAN_PACKAGE_NAME "amarsi-rci-oncilla") SET(CPACK_DEBIAN_PACKAGE_VERSION ${RCIONCILLA_VERSION_MAJOR}.${RCIONCILLA_VERSION_MINOR}.${RCIONCILLA_VERSION_PATCH}) SET(CPACK_DEBIAN_PACKAGE_MAINTAINER "Arne Nordmann (anordman@cor-lab.uni-bielefeld.de)") SET(CPACK_DEBIAN_PACKAGE_DESCRIPTION "RCI Drivers for the quadruped Oncilla robot.") SET(CPACK_DEBIAN_PACKAGE_PRIORITY "optional") SET(CPACK_DEBIAN_PACKAGE_SECTION "devel") SET(CPACK_DEBIAN_ARCHITECTURE ${CMAKE_SYSTEM_PROCESSOR}) SET(CPACK_DEBIAN_PACKAGE_DEPENDS "amarsi-rci-all") SET(CPACK_DEBIAN_PACKAGE_SUGGESTS "cmake, cmake-data, doxygen, lcov, cppcheck, sloccount") ENDIF(CMAKE_SYSTEM_NAME STREQUAL "Linux") INCLUDE(CPack)