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.

131 lines
5.0 KiB

1 year ago
  1. cmake_minimum_required(VERSION 3.10)
  2. project(spi 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. if(${BUILD_TIDY})
  15. set(CMAKE_CXX_CLANG_TIDY
  16. clang-tidy;
  17. -header-filter=^global;
  18. -checks=-*,readability-*,bugprone-*,performace-*,clang-analyzer-*,modernize-*,hicpp-*,-hicpp-vararg,-hicpp-avoid-c-arrays,-readability-magic-numbers;
  19. )
  20. endif(${BUILD_TIDY})
  21. # check if Doxygen is installed (from https://vicrucann.github.io/tutorials/quick-cmake-doxygen/)
  22. find_package(Doxygen)
  23. if (DOXYGEN_FOUND AND BUILD_DOCS)
  24. # set input and output files
  25. set(DOXYGEN_IN ${CMAKE_CURRENT_SOURCE_DIR}/doxygen/Doxyfile.in)
  26. set(DOXYGEN_OUT ${CMAKE_CURRENT_BINARY_DIR}/doxygen/Doxyfile)
  27. # request to configure the file
  28. configure_file(${DOXYGEN_IN} ${DOXYGEN_OUT} @ONLY)
  29. # note the option ALL which allows to build the docs together with the application
  30. add_custom_target( spi_doc_doxygen ALL
  31. COMMAND ${DOXYGEN_EXECUTABLE} ${DOXYGEN_OUT}
  32. WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
  33. COMMENT "Generating API documentation with Doxygen"
  34. VERBATIM )
  35. elseif (BUILD_DOCS)
  36. message("doxygen need to be installed to generate the doxygen documentation. for generating tree views graphviz is needed.")
  37. else ()
  38. message("Selected option doxygen build OFF. Doxygen will not be build.")
  39. endif ()
  40. add_compile_options(
  41. -Wall
  42. -Wextra
  43. -Wshadow
  44. -Wpedantic
  45. -O3
  46. )
  47. configure_file(
  48. "${PROJECT_CONFIG_DIR}/version.h"
  49. "${PROJECT_HEADER_DIR}/version.h"
  50. )
  51. set(PROJECT_SOURCE_FILES
  52. "${PROJECT_SRC_DIR}/spidevices/spidevice.cpp"
  53. "${PROJECT_SRC_DIR}/spidevices/gpx2/gpx2.cpp"
  54. "${PROJECT_SRC_DIR}/spidevices/gpx2/config.cpp"
  55. )
  56. set(PROJECT_HEADER_FILES
  57. "${PROJECT_HEADER_DIR}/spidevices/spidevice.h"
  58. "${PROJECT_HEADER_DIR}/spidevices/gpx2/gpx2.h"
  59. "${PROJECT_HEADER_DIR}/spidevices/gpx2/config.h"
  60. )
  61. add_definitions(-Dspi_objlib_LIBRARY_EXPORT)
  62. add_library(spi_objlib OBJECT ${PROJECT_SOURCE_FILES} ${PROJECT_HEADER_FILES})
  63. add_library(spi SHARED $<TARGET_OBJECTS:spi_objlib>)
  64. add_library(spi_static STATIC $<TARGET_OBJECTS:spi_objlib>)
  65. target_include_directories(spi_objlib PUBLIC
  66. ${PROJECT_HEADER_DIR}
  67. )
  68. set_property(TARGET spi_objlib PROPERTY POSITION_INDEPENDENT_CODE 1)
  69. #set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -s")
  70. #set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -s")
  71. set_target_properties(
  72. spi
  73. PROPERTIES
  74. SOVERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}"
  75. )
  76. include(GNUInstallDirs)
  77. set(SPI_PACKAGE_NAME "spi")
  78. add_custom_target(changelog ALL COMMAND gzip -cn9 "${PROJECT_CONFIG_DIR}/changelog" > "${CMAKE_CURRENT_BINARY_DIR}/changelog.gz")
  79. install(TARGETS spi DESTINATION lib COMPONENT "${SPI_PACKAGE_NAME}")
  80. install(FILES ${PROJECT_HEADER_FILES} DESTINATION include COMPONENT "${SPI_PACKAGE_NAME}")
  81. install(FILES "${CMAKE_CURRENT_BINARY_DIR}/changelog.gz" DESTINATION "${CMAKE_INSTALL_DOCDIR}" COMPONENT "${SPI_PACKAGE_NAME}")
  82. install(FILES "${PROJECT_CONFIG_DIR}/copyright" DESTINATION "${CMAKE_INSTALL_DOCDIR}" COMPONENT "${SPI_PACKAGE_NAME}")
  83. set(CPACK_GENERATOR "DEB")
  84. set(CPACK_DEBIAN_PACKAGE_SHLIBDEPS ON)
  85. set(CPACK_PACKAGE_DESCRIPTION_FILE "${PROJECT_CONFIG_DIR}/copyright")
  86. set(CPACK_DEBIAN_PACKAGE_DEPENDS "")
  87. set(CPACK_RESOURCE_FILE_LICENSE "${PROJECT_CONFIG_DIR}/license")
  88. set(CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA "${PROJECT_CONFIG_DIR}/triggers")
  89. set(CPACK_PACKAGE_VENDOR "Marvin Peter")
  90. set(CPACK_DEBIAN_PACKAGE_SECTION "libs")
  91. set(CPACK_DEBIAN_PACKAGE_HOMEPAGE "https://github.com/marvin5300/SPI-TDC")
  92. set(CPACK_PACKAGE_VERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}")
  93. set(CPACK_PACKAGE_VERSION_MAJOR "${PROJECT_VERSION_MAJOR}")
  94. set(CPACK_PACKAGE_VERSION_MINOR "${PROJECT_VERSION_MINOR}")
  95. set(CPACK_PACKAGE_VERSION_PATCH "${PROJECT_VERSION_PATCH}")
  96. set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Library for SPI control")
  97. set(CPACK_DEBIAN_PACKAGE_DESCRIPTION " It makes connecting to SPI devices possible.
  98. It uses the linux spidev c api.
  99. It is licensed under the GNU Lesser General Public License version 3 (LGPL v3).")
  100. set(CPACK_DEBIAN_PACKAGE_MAINTAINER "Marvin Peter <marvin.peter@physik.uni-giessen.de>")
  101. set(CPACK_PACKAGE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/../packages/")
  102. set(CPACK_STRIP_FILES "${CMAKE_CURRENT_BINARY_DIR}/../lib/${SPI_PACKAGE_NAME}")
  103. set(CPACK_PACKAGE_NAME "${SPI_PACKAGE_NAME}")
  104. set(CPACK_SOURCE_PACKAGE_FILE_NAME "${SPI_PACKAGE_NAME}")
  105. set(CPACK_SYSTEM_NAME "Linux-armv7l")
  106. set(CPACK_TOPLEVEL_TAG "Linux-armv7l")
  107. set(CPACK_DEBIAN_PACKAGE_GENERATE_SHLIBS ON)
  108. include(CPack)