CMakeLists.txt 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. project(pcitool)
  2. set(PCILIB_VERSION "0.2.7")
  3. set(PCILIB_ABI_VERSION "2")
  4. cmake_minimum_required(VERSION 2.8)
  5. #set(PKG_CONFIG_USE_CMAKE_PREFIX_PATH true)
  6. #set(CMAKE_PREFIX_PATH ${CMAKE_SYSTEM_PREFIX_PATH})
  7. set(DISABLE_PCITOOL FALSE CACHE BOOL "Build only the library")
  8. set(DISABLE_PYTHON FALSE CACHE BOOL "Disable python scripting support")
  9. #list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake")
  10. if(NOT DEFINED BIN_INSTALL_DIR)
  11. set(BIN_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/bin")
  12. endif(NOT DEFINED BIN_INSTALL_DIR)
  13. if(NOT DEFINED LIB_INSTALL_DIR)
  14. set(LIB_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/lib")
  15. endif(NOT DEFINED LIB_INSTALL_DIR)
  16. if(NOT DEFINED INCLUDE_INSTALL_DIR)
  17. set(INCLUDE_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/include")
  18. endif(NOT DEFINED INCLUDE_INSTALL_DIR)
  19. if(NOT DEFINED DATA_INSTALL_DIR)
  20. set(DATA_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/share")
  21. endif(NOT DEFINED DATA_INSTALL_DIR)
  22. if(NOT DEFINED LOCALE_INSTALL_DIR)
  23. set(LOCALE_INSTALL_DIR "${DATA_INSTALL_DIR}/locale")
  24. endif(NOT DEFINED LOCALE_INSTALL_DIR)
  25. SET(ENV{PKG_CONFIG_PATH} "${LIB_INSTALL_DIR}/pkgconfig:$ENV{PKG_CONFIG_PATH}")
  26. find_package(PkgConfig REQUIRED)
  27. find_package(Threads REQUIRED)
  28. if (NOT DISABLE_PYTHON)
  29. set(PYTHON_VERSION 2.7 CACHE STRING "python version")
  30. find_package(PythonInterp ${PYTHON_VERSION} REQUIRED)
  31. find_package(PythonLibs ${PYTHON_VERSION_STRING} EXACT REQUIRED)
  32. find_package(SWIG REQUIRED)
  33. if (NOT PYTHON_VERSION_STRING VERSION_EQUAL PYTHONLIBS_VERSION_STRING)
  34. message (FATAL_ERROR "Version mismatch between python interpreter and libraries")
  35. endif (NOT PYTHON_VERSION_STRING VERSION_EQUAL PYTHONLIBS_VERSION_STRING)
  36. # execute_process (COMMAND ${PYTHON_EXECUTABLE} -c "from sysconfig import get_path; print get_path('platlib')" OUTPUT_VARIABLE PYTHON_INSTALL_DIR OUTPUT_STRIP_TRAILING_WHITESPACE)
  37. execute_process (COMMAND ${PYTHON_EXECUTABLE} -c "import site; print (site.PREFIXES[-1])" OUTPUT_VARIABLE PYTHON_PREFIX OUTPUT_STRIP_TRAILING_WHITESPACE)
  38. file (TO_CMAKE_PATH "${PYTHON_PREFIX}" PYTHON_PREFIX)
  39. execute_process (COMMAND ${PYTHON_EXECUTABLE} -c "import site; print (site.getsitepackages()[0])" OUTPUT_VARIABLE PYTHON_SITE_DIR OUTPUT_STRIP_TRAILING_WHITESPACE)
  40. file (TO_CMAKE_PATH "${PYTHON_SITE_DIR}" PYTHON_SITE_DIR)
  41. string (REGEX REPLACE "^${PYTHON_PREFIX}/" "${CMAKE_INSTALL_PREFIX}/" PYTHON_SITE_DIR "${PYTHON_SITE_DIR}")
  42. set(PYTHON_INSTALL_DIR ${PYTHON_SITE_DIR} CACHE PATH "path to install python module")
  43. set(HAVE_PYTHON TRUE)
  44. endif (NOT DISABLE_PYTHON)
  45. set(EXTRA_SYSTEM_LIBS -lrt)
  46. check_include_files(stdatomic.h HAVE_STDATOMIC_H)
  47. find_path(UTHASH_INCLUDE_DIRS uthash.h PATH_SUFFIXES uthash)
  48. if (UTHASH_INCLUDE_DIRS)
  49. message ("uthash is found at ${UTHASH_INCLUDE_DIRS}")
  50. else (UTHASH_INCLUDE_DIRS)
  51. message (FATAL_ERROR "uthash is not found...")
  52. endif (UTHASH_INCLUDE_DIRS)
  53. pkg_check_modules(LIBXML2 libxml-2.0 REQUIRED)
  54. #Check in sibling directory
  55. if (NOT DISABLE_PCITOOL)
  56. pkg_check_modules(FASTWRITER fastwriter REQUIRED)
  57. endif (NOT DISABLE_PCITOOL)
  58. add_definitions("-fPIC --std=c99 -Wall -O2 -gdwarf-2 -g3 -fno-omit-frame-pointer")
  59. #add_definitions("-fPIC --std=c99 -Wall -O2")
  60. include(cmake/version.cmake)
  61. VERSION_TO_VARS(${PCILIB_VERSION} PCILIB_VERSION_MAJOR PCILIB_VERSION_MINOR PCILIB_VERSION_MICRO)
  62. add_custom_target(build)
  63. add_custom_command(TARGET build
  64. COMMAND ${CMAKE_COMMAND} -DPCILIB_SOURCE_DIR=${CMAKE_SOURCE_DIR} -DPCILIB_BINARY_DIR=${CMAKE_BINARY_DIR} -P ${CMAKE_SOURCE_DIR}/cmake/build.cmake
  65. WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
  66. )
  67. set_source_files_properties(${CMAKE_BINARY_DIR}/pcilib/build.h PROPERTIES GENERATED TRUE)
  68. set(TARNAME "pcitool")
  69. set(PACKAGE_VERSION ${PCILIB_VERSION})
  70. set(PACKAGE_NAME "${TARNAME}")
  71. set(PACKAGE_TARNAME "${TARNAME}")
  72. set(PACKAGE_STRING "${PACKAGE_NAME} ${PACKAGE_VERSION}")
  73. set(PACKAGE_BUGREPORT "http://ufo.kit.edu/ufo/newticket")
  74. set(PCILIB_PLUGIN_DIR "${LIB_INSTALL_DIR}/pcilib" CACHE PATH "Directory to install plugins")
  75. set(PCILIB_DATA_DIR "${DATA_INSTALL_DIR}/pcilib" CACHE PATH "Directory to install data files")
  76. set(PCILIB_MODEL_DIR "${PCILIB_DATA_DIR}/models" CACHE PATH "Directory to install XML models")
  77. set(PCILIB_DOC_DIR "${CMAKE_CURRENT_BINARY_DIR}/docs/" CACHE PATH "Directory to install documentation")
  78. set(PCILIB_DEBUG_DIR "." CACHE PATH "Directory to write debug information")
  79. add_subdirectory(dma)
  80. add_subdirectory(protocols)
  81. add_subdirectory(views)
  82. add_subdirectory(pcilib)
  83. add_subdirectory(pcitool)
  84. add_subdirectory(apps)
  85. add_subdirectory(xml)
  86. if (HAVE_PYTHON)
  87. add_subdirectory(pywrap)
  88. endif (HAVE_PYTHON)
  89. set_target_properties(pcilib PROPERTIES
  90. VERSION ${PCILIB_VERSION}
  91. SOVERSION ${PCILIB_ABI_VERSION}
  92. )
  93. configure_file(${CMAKE_CURRENT_SOURCE_DIR}/misc/pcitool.pc.in ${CMAKE_CURRENT_BINARY_DIR}/misc/pcitool.pc)
  94. configure_file(${CMAKE_CURRENT_SOURCE_DIR}/pcilib/config.h.in ${CMAKE_CURRENT_BINARY_DIR}/pcilib/config.h)
  95. configure_file(${CMAKE_CURRENT_SOURCE_DIR}/pcilib/version.h.in ${CMAKE_CURRENT_BINARY_DIR}/pcilib/version.h)
  96. configure_file(${CMAKE_CURRENT_SOURCE_DIR}/docs/Doxyfile.in ${CMAKE_CURRENT_BINARY_DIR}/docs/Doxyfile)
  97. if (NOT CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR)
  98. file(COPY ${CMAKE_SOURCE_DIR}/xml DESTINATION ${CMAKE_BINARY_DIR})
  99. file(COPY ${CMAKE_SOURCE_DIR}/pyserver DESTINATION ${CMAKE_BINARY_DIR})
  100. file(COPY ${CMAKE_SOURCE_DIR}/pci
  101. DESTINATION ${CMAKE_BINARY_DIR}
  102. FILE_PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE
  103. )
  104. file(COPY ${CMAKE_SOURCE_DIR}/run
  105. DESTINATION ${CMAKE_BINARY_DIR}
  106. FILE_PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE
  107. )
  108. endif(NOT CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR)
  109. install(FILES
  110. ${CMAKE_CURRENT_BINARY_DIR}/misc/pcitool.pc
  111. DESTINATION ${LIB_INSTALL_DIR}/pkgconfig
  112. )
  113. message("-- Configured pcitool ${PCILIB_VERSION_MAJOR}.${PCILIB_VERSION_MINOR}.${PCILIB_VERSION_MICRO} with public ABI ${PCILIB_ABI_VERSION}")