CMakeLists.txt 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  1. cmake_minimum_required(VERSION 3.0.2)
  2. set(CMAKE_DISABLE_SOURCE_CHANGES ON) # Must go before project() below
  3. set(CMAKE_DISABLE_IN_SOURCE_BUILD ON) # Must go before project() below
  4. if(CMAKE_VERSION VERSION_GREATER "3.11" OR POLICY CMP0072)
  5. # Prefer GLVND over libGL when available; this will be enabled by default
  6. # once the minimum CMake version is at least 3.11.
  7. cmake_policy(SET CMP0072 NEW)
  8. endif()
  9. if(CMAKE_VERSION VERSION_GREATER "3.12" OR POLICY CMP0074)
  10. # Needed for THIRDPARTY_DIRECTORY support; this will be enabled by default
  11. # once the minimum CMake version is at least 3.12.
  12. cmake_policy(SET CMP0074 NEW)
  13. endif()
  14. # Figure out the version
  15. set(_s "[\\t ]*") # CMake doesn't support \s*
  16. file(STRINGS "setup.cfg" _version REGEX "^version${_s}=${_s}")
  17. string(REGEX REPLACE "^.*=${_s}" "" _version "${_version}")
  18. project(Panda3D VERSION ${_version})
  19. unset(_version)
  20. unset(_s)
  21. enable_testing()
  22. string(REPLACE "$(EFFECTIVE_PLATFORM_NAME)" "" PANDA_CFG_INTDIR "${CMAKE_CFG_INTDIR}")
  23. # Add generic modules to cmake module path,
  24. # and add Panda3D specific modules to cmake module path
  25. set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/modules/")
  26. set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/macros/")
  27. if(CMAKE_VERSION VERSION_GREATER "3.8")
  28. # When using the Xcode generator, don't append the platform name to the
  29. # intermediate configuration directory.
  30. set_property(GLOBAL PROPERTY XCODE_EMIT_EFFECTIVE_PLATFORM_NAME OFF)
  31. endif()
  32. # Include modules builtin to CMake
  33. include(GNUInstallDirs) # Defines CMAKE_INSTALL_<dir> variables
  34. # Include global modules needed for configure scripts
  35. include(PackageConfig) # Defines package_option
  36. # Configure Panda3D
  37. include(dtool/CompilerFlags.cmake)
  38. include(dtool/PandaVersion.cmake)
  39. include(dtool/Package.cmake)
  40. include(dtool/Config.cmake)
  41. # Include global modules
  42. include(AddBisonTarget) # Defines add_bison_target function
  43. include(AddFlexTarget) # Defines add_flex_target function
  44. include(BuildMetalib) # Defines add_component_library AND add_metalib
  45. include(CompositeSources) # Defines composite_sources function
  46. include(Python) # Defines add_python_target AND install_python_package
  47. include(Interrogate) # Defines target_interrogate AND add_python_module
  48. include(RunPzip) # Defines run_pzip function
  49. include(Versioning) # Hooks 'add_library' to apply VERSION/SOVERSION
  50. # Determine which trees to build.
  51. option(BUILD_DTOOL "Build the dtool source tree." ON)
  52. option(BUILD_PANDA "Build the panda source tree." ON)
  53. option(BUILD_DIRECT "Build the direct source tree." ON)
  54. option(BUILD_PANDATOOL "Build the pandatool source tree." ON)
  55. option(BUILD_CONTRIB "Build the contrib source tree." ON)
  56. option(BUILD_MODELS "Build/install the built-in models." ON)
  57. # Include Panda3D packages
  58. if(BUILD_DTOOL)
  59. add_subdirectory(dtool "${CMAKE_BINARY_DIR}/dtool")
  60. endif()
  61. if(BUILD_PANDA)
  62. add_subdirectory(panda "${CMAKE_BINARY_DIR}/panda")
  63. endif()
  64. if(BUILD_DIRECT)
  65. add_subdirectory(direct "${CMAKE_BINARY_DIR}/direct")
  66. endif()
  67. if(BUILD_PANDATOOL)
  68. add_subdirectory(pandatool "${CMAKE_BINARY_DIR}/pandatool")
  69. endif()
  70. if(BUILD_CONTRIB)
  71. add_subdirectory(contrib "${CMAKE_BINARY_DIR}/contrib")
  72. endif()
  73. if(BUILD_MODELS)
  74. run_pzip(models
  75. "${CMAKE_CURRENT_SOURCE_DIR}/models/"
  76. "${PROJECT_BINARY_DIR}/${PANDA_CFG_INTDIR}/models"
  77. *.egg)
  78. run_pzip(dmodels
  79. "${CMAKE_CURRENT_SOURCE_DIR}/dmodels/src/"
  80. "${PROJECT_BINARY_DIR}/${PANDA_CFG_INTDIR}/models"
  81. *.egg)
  82. add_custom_command(TARGET models
  83. POST_BUILD
  84. COMMAND ${CMAKE_COMMAND}
  85. -DSOURCE="${CMAKE_CURRENT_SOURCE_DIR}/models/maps/"
  86. -DDESTINATION="${PANDA_OUTPUT_DIR}/models/maps"
  87. -P ${PROJECT_SOURCE_DIR}/cmake/scripts/CopyPattern.cmake
  88. COMMENT "Copying models/maps")
  89. add_custom_command(TARGET dmodels
  90. POST_BUILD
  91. COMMAND ${CMAKE_COMMAND}
  92. -DSOURCE="${CMAKE_CURRENT_SOURCE_DIR}/dmodels/src/"
  93. -DDESTINATION="${PANDA_OUTPUT_DIR}/models"
  94. -DFILES_MATCHING="PATTERN;*.rgb;PATTERN;*.png;PATTERN;*.jpg;PATTERN;*.wav"
  95. -P ${PROJECT_SOURCE_DIR}/cmake/scripts/CopyPattern.cmake
  96. COMMENT "Copying dmodels' assets")
  97. install(DIRECTORY "${PANDA_OUTPUT_DIR}/models"
  98. COMPONENT Models DESTINATION ${CMAKE_INSTALL_DATADIR}/panda3d)
  99. endif()
  100. if(INTERROGATE_PYTHON_INTERFACE)
  101. # If we built the Python interface, run the test suite. Note, we do NOT test
  102. # for pytest before adding this test. If the user doesn't have pytest, we'd
  103. # like for the tests to fail.
  104. # In the Coverage configuration, we also require pytest-cov
  105. add_test(NAME pytest
  106. COMMAND "${PYTHON_EXECUTABLE}" -m pytest "${PROJECT_SOURCE_DIR}/tests"
  107. $<$<CONFIG:Coverage>:--cov=.>
  108. WORKING_DIRECTORY "${PANDA_OUTPUT_DIR}")
  109. endif()
  110. # Generate the Panda3DConfig.cmake file so find_package(Panda3D) works, and
  111. # also register the build directory with CMake's package registry.
  112. file(COPY "${PROJECT_SOURCE_DIR}/cmake/install/Panda3DConfig.cmake"
  113. DESTINATION "${PROJECT_BINARY_DIR}")
  114. install(FILES "${PROJECT_SOURCE_DIR}/cmake/install/Panda3DConfig.cmake"
  115. DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/Panda3D")
  116. include(CMakePackageConfigHelpers)
  117. write_basic_package_version_file(
  118. "${PROJECT_BINARY_DIR}/Panda3DConfigVersion.cmake"
  119. VERSION "${PROJECT_VERSION}"
  120. COMPATIBILITY AnyNewerVersion)
  121. install(FILES "${PROJECT_BINARY_DIR}/Panda3DConfigVersion.cmake"
  122. DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/Panda3D")
  123. if(NOT CMAKE_CROSSCOMPILING)
  124. export(PACKAGE Panda3D)
  125. endif()