readout software for 2 channels [0 and 1] of the tdc-gpx2 board with raspberry pi 3B SPI readout. This code is a fork of the original design by marvin.peter@physik.uni-giessen.de https://github.com/marvin5300/tdc-gpx2_software
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

125 lines
4.7 KiB

1 year ago
  1. cmake_minimum_required(VERSION 3.10)
  2. project(gpx2 LANGUAGES CXX C)
  3. set(PROJECT_SRC_DIR "${CMAKE_CURRENT_SOURCE_DIR}/src")
  4. set(PROJECT_HEADER_DIR "${CMAKE_CURRENT_SOURCE_DIR}/include")
  5. set(PROJECT_CONFIG_DIR "${CMAKE_CURRENT_SOURCE_DIR}/config")
  6. set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/../lib")
  7. set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/../lib")
  8. set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/../bin")
  9. include("${CMAKE_CURRENT_SOURCE_DIR}/cmake/version.cmake")
  10. set(CMAKE_CXX_STANDARD 17)
  11. set(CMAKE_CXX_STANDARD_REQUIRED ON)
  12. set(CMAKE_C_STANDARD 11)
  13. set(CMAKE_C_STANDARD_REQUIRED ON)
  14. # check if Doxygen is installed (from https://vicrucann.github.io/tutorials/quick-cmake-doxygen/)
  15. find_package(Doxygen)
  16. if (DOXYGEN_FOUND AND BUILD_DOCS)
  17. # set input and output files
  18. set(DOXYGEN_IN ${CMAKE_CURRENT_SOURCE_DIR}/doxygen/Doxyfile.in)
  19. set(DOXYGEN_OUT ${CMAKE_CURRENT_BINARY_DIR}/doxygen/Doxyfile)
  20. # request to configure the file
  21. configure_file(${DOXYGEN_IN} ${DOXYGEN_OUT} @ONLY)
  22. # note the option ALL which allows to build the docs together with the application
  23. add_custom_target( doc_doxygen ALL
  24. COMMAND ${DOXYGEN_EXECUTABLE} ${DOXYGEN_OUT}
  25. WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
  26. COMMENT "Generating API documentation with Doxygen"
  27. VERBATIM )
  28. elseif (BUILD_DOCS)
  29. message("doxygen need to be installed to generate the doxygen documentation. for generating tree views graphviz is needed.")
  30. else ()
  31. message("Selected option doxygen build OFF. Doxygen will not be build.")
  32. endif ()
  33. find_library(PIGPIOD_IF2 pigpiod_if2 REQUIRED)
  34. add_compile_options(
  35. -Wall
  36. -Wextra
  37. -Wshadow
  38. -Wpedantic
  39. -O3
  40. )
  41. configure_file(
  42. "${PROJECT_CONFIG_DIR}/version.h"
  43. "${PROJECT_HEADER_DIR}/version.h"
  44. )
  45. set(GPX2_SOURCE_FILES
  46. "${PROJECT_SRC_DIR}/gpx2.cpp"
  47. "${PROJECT_SRC_DIR}/config.cpp"
  48. )
  49. set(GPX2_HEADER_FILES
  50. "${PROJECT_HEADER_DIR}/gpx2.h"
  51. "${PROJECT_HEADER_DIR}/config.h"
  52. )
  53. add_definitions(-Dgpx2_objlib_LIBRARY_EXPORT)
  54. add_library(gpx2_objlib OBJECT ${GPX2_SOURCE_FILES} ${GPX2_HEADER_FILES})
  55. add_library(gpx2 SHARED $<TARGET_OBJECTS:gpx2_objlib>)
  56. add_library(gpx2_static STATIC $<TARGET_OBJECTS:gpx2_objlib>)
  57. target_include_directories(gpx2_objlib PUBLIC
  58. ${PROJECT_HEADER_DIR}
  59. )
  60. set_property(TARGET gpx2_objlib PROPERTY POSITION_INDEPENDENT_CODE 1)
  61. target_link_libraries(gpx2_objlib
  62. pigpiod_if2
  63. )
  64. set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -s")
  65. set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -s")
  66. set_target_properties(
  67. gpx2
  68. PROPERTIES
  69. SOVERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}"
  70. )
  71. include(GNUInstallDirs)
  72. set(GPX2_PACKAGE_NAME "gpx2")
  73. add_custom_target(changelog ALL COMMAND gzip -cn9 "${PROJECT_CONFIG_DIR}/changelog" > "${CMAKE_CURRENT_BINARY_DIR}/changelog.gz")
  74. install(TARGETS gpx2 DESTINATION lib COMPONENT "${GPX2_PACKAGE_NAME}")
  75. install(FILES ${GPX2_HEADER_FILES} DESTINATION include COMPONENT "${GPX2_PACKAGE_NAME}")
  76. install(FILES "${CMAKE_CURRENT_BINARY_DIR}/changelog.gz" DESTINATION "${CMAKE_INSTALL_DOCDIR}" COMPONENT "${GPX2_PACKAGE_NAME}")
  77. install(FILES "${PROJECT_CONFIG_DIR}/copyright" DESTINATION "${CMAKE_INSTALL_DOCDIR}" COMPONENT "${GPX2_PACKAGE_NAME}")
  78. set(CPACK_GENERATOR "DEB")
  79. set(CPACK_DEBIAN_PACKAGE_SHLIBDEPS ON)
  80. set(CPACK_PACKAGE_DESCRIPTION_FILE "${PROJECT_CONFIG_DIR}/copyright")
  81. set(CPACK_DEBIAN_PACKAGE_DEPENDS "pigpiod")
  82. set(CPACK_RESOURCE_FILE_LICENSE "${PROJECT_CONFIG_DIR}/license")
  83. set(CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA "${PROJECT_CONFIG_DIR}/triggers")
  84. set(CPACK_PACKAGE_VENDOR "Marvin Peter")
  85. set(CPACK_DEBIAN_PACKAGE_SECTION "libs")
  86. set(CPACK_DEBIAN_PACKAGE_HOMEPAGE "https://github.com/marvin5300/GPX2-TDC")
  87. set(CPACK_PACKAGE_VERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}")
  88. set(CPACK_PACKAGE_VERSION_MAJOR "${PROJECT_VERSION_MAJOR}")
  89. set(CPACK_PACKAGE_VERSION_MINOR "${PROJECT_VERSION_MINOR}")
  90. set(CPACK_PACKAGE_VERSION_PATCH "${PROJECT_VERSION_PATCH}")
  91. set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Library for GPX2 TDC control")
  92. set(CPACK_DEBIAN_PACKAGE_DESCRIPTION " It makes connecting to TDC board possible.
  93. It is licensed under the GNU Lesser General Public License version 3 (LGPL v3).")
  94. set(CPACK_DEBIAN_PACKAGE_MAINTAINER "Marvin Peter <marvin.peter@physik.uni-giessen.de>")
  95. set(CPACK_PACKAGE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/../packages/")
  96. set(CPACK_STRIP_FILES "${CMAKE_CURRENT_BINARY_DIR}/../lib/${GPX2_PACKAGE_NAME}")
  97. set(CPACK_PACKAGE_NAME "${GPX2_PACKAGE_NAME}")
  98. set(CPACK_SOURCE_PACKAGE_FILE_NAME "${GPX2_PACKAGE_NAME}")
  99. set(CPACK_SYSTEM_NAME "Linux-armv7l")
  100. set(CPACK_TOPLEVEL_TAG "Linux-armv7l")
  101. set(CPACK_DEBIAN_PACKAGE_GENERATE_SHLIBS ON)
  102. include(CPack)