debundle-thirdparty.diff 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215
  1. diff --git a/ThirdParty/CMakeLists.txt b/ThirdParty/CMakeLists.txt
  2. index 00670f0..5486b48 100644
  3. --- a/ThirdParty/CMakeLists.txt
  4. +++ b/ThirdParty/CMakeLists.txt
  5. @@ -6,132 +6,48 @@ cmake_minimum_required (VERSION 3.11)
  6. # instead:
  7. set(CMAKE_POLICY_DEFAULT_CMP0063 NEW)
  8. -if (GL_SUPPORTED AND (PLATFORM_WIN32 OR PLATFORM_LINUX OR PLATFORM_MACOS) AND (NOT TARGET GLEW::glew))
  9. - add_subdirectory(glew)
  10. - if (DILIGENT_INSTALL_CORE)
  11. - install(TARGETS glew-static
  12. - ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}/${DILIGENT_CORE_DIR}/$<CONFIG>"
  13. - LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}/${DILIGENT_CORE_DIR}/$<CONFIG>"
  14. - RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}/${DILIGENT_CORE_DIR}/$<CONFIG>"
  15. - )
  16. - endif()
  17. - install(FILES glew/LICENSE.txt DESTINATION "Licenses/ThirdParty/${DILIGENT_CORE_DIR}" RENAME GLEW-License.txt)
  18. +include(FindPkgConfig)
  19. +
  20. +if (GL_SUPPORTED AND (PLATFORM_WIN32 OR PLATFORM_LINUX OR PLATFORM_MACOS) AND (NOT glew_FOUND))
  21. + pkg_check_modules(glew REQUIRED glew)
  22. endif()
  23. if (VULKAN_SUPPORTED)
  24. - if (NOT TARGET Vulkan::Headers)
  25. - # Manually add the Vulkan-Headers target as this is all we need and the
  26. - # project's CMake creates unnecessary targets
  27. - add_library(Vulkan-Headers INTERFACE)
  28. - # Vulkan-Headers_SOURCE_DIR variable is normally created by project(Vulkan-Headers)
  29. - set(Vulkan-Headers_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/Vulkan-Headers")
  30. - add_library(Vulkan::Headers ALIAS Vulkan-Headers)
  31. - target_include_directories(Vulkan-Headers INTERFACE "${Vulkan-Headers_SOURCE_DIR}/include")
  32. - install(FILES "${Vulkan-Headers_SOURCE_DIR}/LICENSE.md" DESTINATION "Licenses/ThirdParty/${DILIGENT_CORE_DIR}" RENAME Vulkan-Headers-License.md)
  33. + if (NOT vulkan-headers_FOUND)
  34. + pkg_check_modules(vulkan-headers REQUIRED vulkan-headers)
  35. endif()
  36. endif()
  37. if (VULKAN_SUPPORTED OR METAL_SUPPORTED OR WEBGPU_SUPPORTED OR (ARCHIVER_SUPPORTED AND (GL_SUPPORTED OR GLES_SUPPORTED)))
  38. set(DILIGENT_USE_SPIRV_TOOLCHAIN TRUE CACHE INTERNAL "Use SPIRV Toolchain")
  39. - if (NOT TARGET SPIRV-Headers)
  40. - # Manually add the SPIRV-Headers target as this is all we need and the
  41. - # project's CMake creates unnecessary install targets
  42. - add_library(SPIRV-Headers INTERFACE)
  43. - # Note that SPIRV-Headers_SOURCE_DIR variable is normally created by project(SPIRV-Headers)
  44. - set(SPIRV-Headers_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/SPIRV-Headers")
  45. - target_include_directories(SPIRV-Headers INTERFACE "${SPIRV-Headers_SOURCE_DIR}/include")
  46. - install(FILES "${SPIRV-Headers_SOURCE_DIR}/LICENSE" DESTINATION "Licenses/ThirdParty/${DILIGENT_CORE_DIR}" RENAME SPIRV-Headers-License.txt)
  47. + if (NOT SPIRV-Headers_FOUND)
  48. + pkg_check_modules(SPIRV-Headers REQUIRED SPIRV-Headers)
  49. endif()
  50. option(DILIGENT_NO_GLSLANG "Do NOT build glslang compiler" OFF)
  51. option(DILIGENT_IMPROVE_SPIRV_TOOLS_DEBUG_PERF "Enable some optimizations for SPIRV-Tools, glslang, SPIRV-Cross and related projects in debug build to improve performance" ON)
  52. - if (NOT (${DILIGENT_NO_GLSLANG} AND ${DILIGENT_NO_HLSL}) AND (NOT TARGET SPIRV-Tools-static))
  53. - set(SPIRV_SKIP_TESTS ON CACHE BOOL "Skip SPIRV tests")
  54. - set(SPIRV_BUILD_COMPRESSION OFF CACHE BOOL "Do not build SPIRV compressing codec")
  55. - set(SPIRV_SKIP_EXECUTABLES ON CACHE BOOL "Skip building SPIRV executable and tests along with the library")
  56. - set(SKIP_SPIRV_TOOLS_INSTALL ON CACHE BOOL "Skip SPIRV tools installation")
  57. - set(SPIRV_WERROR OFF CACHE BOOL "Do not enable error on warning")
  58. - if (${DILIGENT_IMPROVE_SPIRV_TOOLS_DEBUG_PERF})
  59. - set(SPIRV_CHECK_CONTEXT OFF CACHE BOOL "Do not check if the IR context is in a valid state")
  60. - endif()
  61. - set(CMAKE_MACOSX_RPATH TRUE)
  62. - add_subdirectory(SPIRV-Tools)
  63. - set_directory_root_folder("SPIRV-Tools" "DiligentCore/ThirdParty/SPIRV-Tools")
  64. - # We only need SPIRV-Tools-opt for glslang that also depends on SPIRV-Tools-static.
  65. - # Exclude all other targets from the build to save build time
  66. - set(SPIRV_TOOLS_EXCLUDE_TARGETS SPIRV-Tools-link SPIRV-Tools-lint SPIRV-Tools-reduce SPIRV-Tools-shared)
  67. - set_target_properties(${SPIRV_TOOLS_EXCLUDE_TARGETS} PROPERTIES EXCLUDE_FROM_ALL 1 EXCLUDE_FROM_DEFAULT_BUILD 1)
  68. -
  69. - set(THIRD_PARTY_LIBS SPIRV-Tools-static SPIRV-Tools-opt)
  70. - install(FILES "${spirv-tools_SOURCE_DIR}/LICENSE" DESTINATION "Licenses/ThirdParty/${DILIGENT_CORE_DIR}" RENAME SPIRV-Tools-License.txt)
  71. + if (NOT (${DILIGENT_NO_GLSLANG} AND ${DILIGENT_NO_HLSL}) AND (NOT SPIRV-Tools_FOUND))
  72. + pkg_check_modules(SPIRV-Tools REQUIRED SPIRV-Tools)
  73. endif()
  74. - if (NOT ${DILIGENT_NO_GLSLANG} AND (NOT TARGET glslang))
  75. - set(ENABLE_GLSLANG_BINARIES OFF CACHE BOOL "Do not build glslang binaries")
  76. - set(ENABLE_SPVREMAPPER OFF CACHE BOOL "Do not build SPIRV remapper")
  77. - set(SKIP_GLSLANG_INSTALL ON CACHE BOOL "Skip glslang installation")
  78. - set(ENABLE_CTEST OFF CACHE BOOL "Disable testing")
  79. - if (PLATFORM_EMSCRIPTEN)
  80. - # Optimization has to be disabled on Web, see build instructions on https://github.com/KhronosGroup/glslang
  81. - set(ENABLE_OPT OFF)
  82. - endif()
  83. - add_subdirectory(glslang)
  84. - set_directory_root_folder("glslang" "DiligentCore/ThirdParty/glslang")
  85. -
  86. - if (PLATFORM_EMSCRIPTEN)
  87. - set_targets_emscripten_properties(MachineIndependent)
  88. - endif()
  89. -
  90. - # glslang "kindly" sets global CMAKE_DEBUG_POSTFIX to "d", which we have to unset now
  91. - unset(CMAKE_DEBUG_POSTFIX CACHE)
  92. -
  93. - list(APPEND THIRD_PARTY_LIBS GenericCodeGen glslang OSDependent SPIRV MachineIndependent)
  94. - install(FILES "${glslang_SOURCE_DIR}/LICENSE.txt" DESTINATION "Licenses/ThirdParty/${DILIGENT_CORE_DIR}" RENAME GLSLang-License.txt)
  95. + if (NOT ${DILIGENT_NO_GLSLANG} AND (NOT glslang_FOUND))
  96. + pkg_check_modules(glslang REQUIRED glslang)
  97. endif()
  98. - if (NOT TARGET spirv-cross-core)
  99. - set(SPIRV_CROSS_CLI OFF CACHE BOOL "Build the CLI binary. Requires SPIRV_CROSS_STATIC.")
  100. - set(SPIRV_CROSS_ENABLE_TESTS OFF CACHE BOOL "Enable SPIRV-Cross tests.")
  101. - set(SPIRV_CROSS_ENABLE_MSL ${METAL_SUPPORTED} CACHE BOOL "Enable MSL target support.")
  102. - # MSL support requires GLSL
  103. - if (${SPIRV_CROSS_ENABLE_MSL} OR ${GL_SUPPORTED} OR ${GLES_SUPPORTED})
  104. - set(SPIRV_CROSS_ENABLE_GLSL TRUE CACHE BOOL "Enable GLSL support.")
  105. - else()
  106. - set(SPIRV_CROSS_ENABLE_GLSL OFF CACHE BOOL "Enable GLSL support.")
  107. - endif()
  108. - set(SPIRV_CROSS_ENABLE_HLSL OFF CACHE BOOL "Enable HLSL target support.")
  109. - set(SPIRV_CROSS_ENABLE_CPP OFF CACHE BOOL "Enable C++ target support.")
  110. - set(SPIRV_CROSS_ENABLE_REFLECT OFF CACHE BOOL "Enable JSON reflection target support.")
  111. - set(SPIRV_CROSS_ENABLE_C_API OFF CACHE BOOL "Enable C API wrapper support in static library.")
  112. - set(SPIRV_CROSS_ENABLE_UTIL OFF CACHE BOOL "Enable util module support.")
  113. - set(SPIRV_CROSS_FORCE_PIC ON CACHE BOOL "Force position-independent code.")
  114. - set(SPIRV_CROSS_SKIP_INSTALL ON CACHE BOOL "Skip SPIRV-Cross installation.")
  115. - set(SPIRV_CROSS_NAMESPACE_OVERRIDE diligent_spirv_cross CACHE STRING "Override the namespace used in the C++ API.")
  116. - add_subdirectory(SPIRV-Cross)
  117. - set_directory_root_folder("SPIRV-Cross" "DiligentCore/ThirdParty/SPIRV-Cross")
  118. -
  119. - list(APPEND THIRD_PARTY_LIBS spirv-cross-core)
  120. - if(SPIRV_CROSS_ENABLE_GLSL)
  121. - list(APPEND THIRD_PARTY_LIBS spirv-cross-glsl)
  122. - endif()
  123. - if (SPIRV_CROSS_ENABLE_MSL)
  124. - list(APPEND THIRD_PARTY_LIBS spirv-cross-msl)
  125. - endif()
  126. -
  127. - install(FILES "${SPIRV-Cross_SOURCE_DIR}/LICENSE" DESTINATION "Licenses/ThirdParty/${DILIGENT_CORE_DIR}" RENAME SPIRV-Cross-License.txt)
  128. + if (NOT spirv-cross-c_FOUND)
  129. + pkg_check_modules(spirv-cross-c REQUIRED spirv-cross-c)
  130. endif()
  131. - if (DILIGENT_INSTALL_CORE)
  132. + if (0)
  133. install(TARGETS ${THIRD_PARTY_LIBS}
  134. - ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}/${DILIGENT_CORE_DIR}/$<CONFIG>"
  135. - LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}/${DILIGENT_CORE_DIR}/$<CONFIG>"
  136. - RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}/${DILIGENT_CORE_DIR}/$<CONFIG>"
  137. + ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
  138. + LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
  139. + RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}"
  140. )
  141. endif()
  142. -
  143. - if (MSVC)
  144. + if (0)
  145. foreach(TARGET ${THIRD_PARTY_LIBS})
  146. if (${DILIGENT_IMPROVE_SPIRV_TOOLS_DEBUG_PERF})
  147. # Enable function inlining (/Ob1) in Debug build to improve shader compilation performance
  148. @@ -144,34 +60,21 @@ if (VULKAN_SUPPORTED OR METAL_SUPPORTED OR WEBGPU_SUPPORTED OR (ARCHIVER_SUPPORT
  149. endforeach()
  150. endif()
  151. - # Make sure that symbols do not leak out when third-party
  152. - # libs are linked into shared libraries
  153. - set_target_properties(${THIRD_PARTY_LIBS} PROPERTIES
  154. - CXX_VISIBILITY_PRESET hidden # -fvisibility=hidden
  155. - C_VISIBILITY_PRESET hidden # -fvisibility=hidden
  156. - VISIBILITY_INLINES_HIDDEN TRUE
  157. - )
  158. else()
  159. set(DILIGENT_USE_SPIRV_TOOLCHAIN FALSE CACHE INTERNAL "")
  160. endif()
  161. -if (VULKAN_SUPPORTED AND (PLATFORM_WIN32 OR PLATFORM_LINUX OR PLATFORM_MACOS OR PLATFORM_ANDROID) AND (NOT TARGET volk::volk_headers))
  162. - set(VOLK_PULL_IN_VULKAN OFF)
  163. - set(VOLK_INSTALL OFF)
  164. - set(VOLK_HEADERS_ONLY ON)
  165. - add_subdirectory(volk)
  166. - install(FILES "${volk_SOURCE_DIR}/LICENSE.md" DESTINATION "Licenses/ThirdParty/${DILIGENT_CORE_DIR}" RENAME Volk-License.md)
  167. +if (VULKAN_SUPPORTED AND (PLATFORM_WIN32 OR PLATFORM_LINUX OR PLATFORM_MACOS OR PLATFORM_ANDROID) AND (NOT volk_FOUND))
  168. + pkg_check_modules(volk REQUIRED volk)
  169. endif()
  170. -if (WEBGPU_SUPPORTED)
  171. - add_subdirectory(abseil-cpp EXCLUDE_FROM_ALL)
  172. - set_directory_root_folder("abseil-cpp" "DiligentCore/ThirdParty")
  173. +if (WEBGPU_SUPPORTED AND ((NOT abseil_FOUND) OR (NOT dawn_FOUND)))
  174. + pkg_check_modules(abseil REQUIRED abseil)
  175. - add_subdirectory(dawn EXCLUDE_FROM_ALL)
  176. - set_directory_root_folder("dawn" "DiligentCore/ThirdParty/dawn")
  177. + pkg_check_modules(dawn REQUIRED dawn)
  178. endif()
  179. -if ((${DILIGENT_BUILD_GOOGLE_TEST}) AND (NOT TARGET gtest))
  180. +if (0)
  181. set(INSTALL_GTEST OFF CACHE BOOL "Do not install googletest")
  182. set(BUILD_GMOCK OFF CACHE BOOL "Do not build gmock")
  183. set(gtest_force_shared_crt ON CACHE BOOL "Use shared (DLL) run-time lib even when Google Test is built as static lib.")
  184. @@ -192,15 +95,7 @@ if ((${DILIGENT_BUILD_GOOGLE_TEST}) AND (NOT TARGET gtest))
  185. endif()
  186. endif()
  187. -if (NOT TARGET xxHash::xxhash)
  188. - option(BUILD_SHARED_LIBS "Build shared library" OFF)
  189. - set(XXHASH_BUILD_XXHSUM OFF)
  190. - set(XXHASH_BUILD_ENABLE_INLINE_API OFF)
  191. - add_subdirectory(xxHash/cmake_unofficial)
  192. - set_directory_root_folder("xxHash/cmake_unofficial" "DiligentCore/ThirdParty/xxHash")
  193. - install(FILES "${xxHash_SOURCE_DIR}/../LICENSE" DESTINATION "Licenses/ThirdParty/${DILIGENT_CORE_DIR}" RENAME xxHash-License.txt)
  194. +if (NOT XXHASH_FOUND)
  195. + pkg_check_modules(XXHASH REQUIRED libxxhash)
  196. endif()
  197. -install(FILES stb/stb_image_write_license.txt DESTINATION "Licenses/ThirdParty/${DILIGENT_CORE_DIR}")
  198. -install(FILES DirectXShaderCompiler/LICENSE.TXT DESTINATION "Licenses/ThirdParty/${DILIGENT_CORE_DIR}" RENAME DXC-License.txt)
  199. -install(FILES DirectXShaderCompiler/ThirdPartyNotices.txt DESTINATION "Licenses/ThirdParty/${DILIGENT_CORE_DIR}" RENAME DXC-ThirdPartyNotices.txt)