Açıklama Yok

CMakeLists.txt 6.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. cmake_minimum_required (VERSION 2.8.11)
  2. project (upm)
  3. if ("${CMAKE_SOURCE_DIR}" STREQUAL "${CMAKE_BINARY_DIR}")
  4. message("WARNING: building into sources dir can be risky, prefer other directory")
  5. endif ()
  6. find_package (SWIG)
  7. if (SWIG_FOUND)
  8. include (${SWIG_USE_FILE})
  9. endif ()
  10. find_package (Threads REQUIRED)
  11. find_package (PkgConfig REQUIRED)
  12. # force a libmraa search and minimum required version every time a config is generated
  13. unset(MRAA_FOUND CACHE)
  14. pkg_check_modules (MRAA REQUIRED mraa>=0.6.0)
  15. message (INFO " found libmraa version: ${MRAA_VERSION}")
  16. # Appends the cmake/modules path to MAKE_MODULE_PATH variable.
  17. set (CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules ${CMAKE_MODULE_PATH})
  18. set (LIB_INSTALL_DIR "lib${LIB_SUFFIX}" CACHE PATH "Installation path for libraries")
  19. # Set CMAKE_LIB_INSTALL_DIR if not defined
  20. include(GNUInstallDirs)
  21. # Make a version file containing the current version from git.
  22. include (GetGitRevisionDescription)
  23. git_describe (VERSION "--tags")
  24. if ("x_${VERSION}" STREQUAL "x_GIT-NOTFOUND")
  25. message (WARNING " - Install git to compile a production libmraa!")
  26. set (VERSION "v0.3.0-dirty")
  27. endif ()
  28. message (INFO " - UPM Version ${VERSION}")
  29. #parse the version information into pieces.
  30. string (REGEX REPLACE "^v([0-9]+)\\..*" "\\1" VERSION_MAJOR "${VERSION}")
  31. string (REGEX REPLACE "^v[0-9]+\\.([0-9]+).*" "\\1" VERSION_MINOR "${VERSION}")
  32. string (REGEX REPLACE "^v[0-9]+\\.[0-9]+\\.([0-9]+).*" "\\1" VERSION_PATCH "${VERSION}")
  33. string (REGEX REPLACE "^v[0-9]+\\.[0-9]+\\.[0-9]+\\-([0-9]+).*" "\\1" VERSION_COMMIT "${VERSION}")
  34. string (REGEX REPLACE "^v[0-9]+\\.[0-9]+\\.[0-9]+-[0-9]+\\-(.*)" "\\1" VERSION_SHA1 "${VERSION}")
  35. if ("${VERSION_COMMIT}" MATCHES "^v.*")
  36. set (VERSION_COMMIT "")
  37. endif()
  38. set (upm_VERSION_MAJOR ${VERSION_MAJOR})
  39. set (upm_VERSION_MINOR ${VERSION_MINOR})
  40. set (upm_VERSION_PATCH ${VERSION_PATCH})
  41. set (upm_VERSION_STRING ${upm_VERSION_MAJOR}.${upm_VERSION_MINOR}.${upm_VERSION_PATCH})
  42. set (CMAKE_SWIG_FLAGS "")
  43. option (IPK "Generate IPK using CPack" OFF)
  44. option (BUILDDOC "Build all doc." OFF)
  45. option (BUILDSWIG "Build swig modules." ON)
  46. option (BUILDSWIGPYTHON "Build swig python modules." ON)
  47. option (BUILDSWIGNODE "Build swig node modules." ON)
  48. option (BUILDEXAMPLES "Build C++ example binaries" OFF)
  49. if (BUILDDOC)
  50. # add a target to generate API documentation with Doxygen
  51. find_package (Doxygen)
  52. if (DOXYGEN_FOUND)
  53. configure_file (${CMAKE_CURRENT_SOURCE_DIR}/doxy/Doxyfile.in ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile @ONLY)
  54. configure_file (${CMAKE_CURRENT_SOURCE_DIR}/docs/c++.png ${CMAKE_CURRENT_BINARY_DIR}/html/docs/c++.png COPYONLY)
  55. configure_file (${CMAKE_CURRENT_SOURCE_DIR}/docs/python.png ${CMAKE_CURRENT_BINARY_DIR}/html/docs/python.png COPYONLY)
  56. configure_file (${CMAKE_CURRENT_SOURCE_DIR}/docs/node.png ${CMAKE_CURRENT_BINARY_DIR}/html/docs/node.png COPYONLY)
  57. add_custom_target (doc
  58. ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile
  59. WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
  60. COMMENT "Generating API documentation with Doxygen" VERBATIM
  61. )
  62. endif (DOXYGEN_FOUND)
  63. # check if Sphinx is installed and add target to generate API documentation
  64. find_package (Sphinx)
  65. if(SPHINX_FOUND AND BUILDSWIG AND BUILDSWIGPYTHON)
  66. # python required for Sphinx build
  67. find_package (PythonLibs)
  68. string (REPLACE "." ";" PYTHON_VERSION_LIST ${PYTHONLIBS_VERSION_STRING})
  69. list (GET PYTHON_VERSION_LIST 0 PYTHON_VERSION_MAJOR)
  70. list (GET PYTHON_VERSION_LIST 1 PYTHON_VERSION_MINOR)
  71. set (SITE_PACKAGES ${CMAKE_INSTALL_PREFIX}/${LIB_INSTALL_DIR}/python${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR}/site-packages)
  72. configure_file (${CMAKE_CURRENT_SOURCE_DIR}/doxy/conf.py.in ${CMAKE_CURRENT_BINARY_DIR}/pydoc/conf.py @ONLY)
  73. configure_file (${CMAKE_CURRENT_SOURCE_DIR}/doxy/index.rst ${CMAKE_CURRENT_BINARY_DIR}/pydoc/index.rst COPYONLY)
  74. add_custom_target (pydoc ALL
  75. COMMAND rm -r -f ${CMAKE_BINARY_DIR}/pyupm && mkdir -p ${CMAKE_BINARY_DIR}/pyupm
  76. COMMAND find ${CMAKE_BINARY_DIR}/src -name "_pyupm_*.so" -exec cp {} ${CMAKE_BINARY_DIR}/pyupm \;
  77. COMMAND find ${CMAKE_BINARY_DIR}/src -name "pyupm_*.py" -exec cp {} ${CMAKE_BINARY_DIR}/pyupm \;
  78. COMMAND ${SPHINX_API_EXECUTABLE} -f -o pydoc ${CMAKE_BINARY_DIR}/pyupm
  79. # todo: use a separate cmake FILE module for string replacement instead
  80. COMMAND ${SPHINX_EXECUTABLE} -b html pydoc html/python
  81. COMMAND sed -i.bak s|\">pyupm_|\">|g html/python/index.html html/python/modules.html
  82. COMMAND sed -i.bak s|[[:space:]][mM]odule</a>|</a>|g html/python/index.html html/python/modules.html
  83. DEPENDS doc
  84. WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
  85. COMMENT "Generating API documentation with Sphinx" VERBATIM
  86. )
  87. endif ()
  88. # check if Yuidoc is installed and add target for API documentation
  89. find_package(Yuidoc)
  90. if(YUIDOC_FOUND AND BUILDSWIGNODE)
  91. # node required for Yuidoc documentation
  92. find_package(Node)
  93. file(GLOB_RECURSE JSDOC_FILES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}/doxy/node doxy/node/*)
  94. foreach(JSDOC_FILE ${JSDOC_FILES})
  95. configure_file(${CMAKE_CURRENT_SOURCE_DIR}/doxy/node/${JSDOC_FILE} ${CMAKE_CURRENT_BINARY_DIR}/${JSDOC_FILE} COPYONLY)
  96. endforeach()
  97. add_custom_target(jsdoc ALL
  98. COMMAND ${NODE_EXECUTABLE} docgen -m upm -i xml -t ${CMAKE_CURRENT_SOURCE_DIR}/src -g ../../../../docs/images/
  99. COMMAND ${YUIDOC_EXECUTABLE} -C --no-sort --helpers generators/yuidoc/helper.js --themedir generators/yuidoc/tmpl -o html/node jsdoc/yuidoc/upm
  100. COMMAND ${NODE_EXECUTABLE} tolower -i html/node
  101. DEPENDS doc
  102. WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
  103. COMMENT "Generating API documentation with Yuidoc" VERBATIM
  104. )
  105. endif()
  106. endif()
  107. if (IPK)
  108. include (TargetArch)
  109. target_architecture (DETECTED_ARCH)
  110. message( INFO " - Target arch is ${DETECTED_ARCH}")
  111. set(CPACK_GENERATOR "DEB" "TGZ")
  112. set(OPKG_ARCH ${DETECTED_ARCH})
  113. set(CPACK_BINARY_DIR ${CMAKE_BINARY_DIR})
  114. set(CPACK_DEBIAN_PACKAGE_MAINTAINER "Intel IoT-Devkit") #required
  115. set(upm_PACKAGE_ON_TAG ".")
  116. if ("${VERSION_COMMIT}" STREQUAL "")
  117. set(upm_PACKAGE_ON_TAG "")
  118. endif()
  119. set(CPACK_PACKAGE_VERSION
  120. "${upm_VERSION_MAJOR}.${upm_VERSION_MINOR}.${upm_VERSION_PATCH}${upm_PACKAGE_ON_TAG}${VERSION_COMMIT}")
  121. set(CPACK_PACKAGE_NAME "upm")
  122. set(CPACK_DEBIAN_PACKAGE_SECTION "libs")
  123. set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE ${DETECTED_ARCH})
  124. set(CPACK_SYSTEM_NAME ${DETECTED_ARCH})
  125. set(CPACK_DEBIAN_PACKAGE_DEPENDS "libmraa0 (>= ${MRAA_VERSION})")
  126. set(CPACK_DEBIAN_PACKAGE_PROVIDES "upm-dev, upm-dbg, upm-doc")
  127. set(CPACK_DEBIAN_PACKAGE_REPLACES ${CPACK_DEBIAN_PACKAGE_PROVIDES})
  128. set(CPACK_DEBIAN_PACKAGE_CONFLICTS ${CPACK_DEBIAN_PACKAGE_PROVIDES})
  129. set(WDIR "${CPACK_TOPLEVEL_DIRECTORY}/${CPACK_PACKAGE_FILE_NAME}")
  130. include (CPack)
  131. endif()
  132. add_subdirectory (src)
  133. if(BUILDEXAMPLES)
  134. add_subdirectory (examples/c++)
  135. endif()