CMakeLists.txt 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. # Define root location for all external dependencies
  2. set(DXC_EXTERNAL_ROOT_DIR "${CMAKE_CURRENT_SOURCE_DIR}"
  3. CACHE STRING "Root location of all external projects")
  4. # Enabling SPIR-V codegen requires SPIRV-Headers for spirv.hpp and
  5. # SPIRV-Tools for SPIR-V disassembling functionality.
  6. if (${ENABLE_SPIRV_CODEGEN})
  7. set(DXC_SPIRV_HEADERS_DIR "${DXC_EXTERNAL_ROOT_DIR}/SPIRV-Headers"
  8. CACHE STRING "Location of SPIRV-Headers source")
  9. set(DXC_SPIRV_TOOLS_DIR "${DXC_EXTERNAL_ROOT_DIR}/SPIRV-Tools"
  10. CACHE STRING "Location of SPIRV-Tools source")
  11. if (NOT DEFINED SPIRV-Headers_SOURCE_DIR)
  12. if (IS_DIRECTORY ${DXC_SPIRV_HEADERS_DIR})
  13. add_subdirectory(${DXC_SPIRV_HEADERS_DIR} EXCLUDE_FROM_ALL)
  14. endif()
  15. endif()
  16. if (NOT DEFINED SPIRV-Headers_SOURCE_DIR)
  17. message(FATAL_ERROR "SPIRV-Headers was not found - required for SPIR-V codegen")
  18. else()
  19. set(SPIRV_HEADER_INCLUDE_DIR ${SPIRV-Headers_SOURCE_DIR}/include PARENT_SCOPE)
  20. endif()
  21. if (NOT TARGET SPIRV-Tools)
  22. if (IS_DIRECTORY ${DXC_SPIRV_TOOLS_DIR})
  23. # We only need the library from SPIRV-Tools.
  24. set(SPIRV_SKIP_EXECUTABLES ON CACHE BOOL "Skip building SPIRV-Tools executables")
  25. if (NOT HLSL_ENABLE_DEBUG_ITERATORS)
  26. set(SPIRV_TOOLS_EXTRA_DEFINITIONS /D_ITERATOR_DEBUG_LEVEL=0)
  27. endif()
  28. add_subdirectory(${DXC_SPIRV_TOOLS_DIR} EXCLUDE_FROM_ALL)
  29. endif()
  30. endif()
  31. if (NOT TARGET SPIRV-Tools)
  32. message(FATAL_ERROR "SPIRV-Tools was not found - required for SPIR-V codegen")
  33. else()
  34. set(SPIRV_TOOLS_INCLUDE_DIR ${spirv-tools_SOURCE_DIR}/include PARENT_SCOPE)
  35. endif()
  36. set(SPIRV_DEP_TARGETS
  37. SPIRV-Tools
  38. SPIRV-Tools-opt
  39. )
  40. # Organize these targets better in Visual Studio
  41. foreach(target ${SPIRV_DEP_TARGETS})
  42. set_property(TARGET ${target} PROPERTY FOLDER "External dependencies")
  43. endforeach()
  44. # We need GoogleTest for unit and SPIR-V codegen testing.
  45. if (${SPIRV_BUILD_TESTS})
  46. set(DXC_GTEST_DIR "${DXC_EXTERNAL_ROOT_DIR}/googletest"
  47. CACHE STRING "Location of GoogleTest source")
  48. if (NOT TARGET gtest)
  49. if (IS_DIRECTORY ${DXC_GTEST_DIR})
  50. # Configure googletest
  51. include(GTestConfig.cmake)
  52. endif()
  53. if (NOT TARGET gtest)
  54. message(FATAL_ERROR "GoogleTest was not found - required for SPIR-V codegen")
  55. endif()
  56. endif()
  57. endif()
  58. # We need Effcee for SPIR-V codegen testing.
  59. if (${SPIRV_BUILD_TESTS})
  60. # re2 is needed since it's required by effcee.
  61. set(DXC_RE2_DIR "${DXC_EXTERNAL_ROOT_DIR}/re2" CACHE STRING "Location of RE2 source")
  62. set(DXC_EFFCEE_DIR "${DXC_EXTERNAL_ROOT_DIR}/effcee" CACHE STRING "Location of Effcee source")
  63. if (NOT TARGET re2)
  64. if (IS_DIRECTORY ${DXC_RE2_DIR})
  65. # Avoid exception handling warning from MSVC.
  66. # This add_compile_options() will only affect the current directory and its subdirectories.
  67. if (WIN32)
  68. add_compile_options(/EHs)
  69. else(WIN32)
  70. # Disable all warnings in subproject RE2
  71. add_compile_options(-w)
  72. endif(WIN32)
  73. # Don't build/run re2's tests.
  74. set(RE2_BUILD_TESTING OFF CACHE BOOL "Skip RE2 tests")
  75. add_subdirectory(${DXC_RE2_DIR} EXCLUDE_FROM_ALL)
  76. endif()
  77. endif()
  78. if (NOT TARGET effcee)
  79. if (IS_DIRECTORY ${DXC_EFFCEE_DIR})
  80. # Configure effcee
  81. set(EFFCEE_RE2_DIR "${DXC_RE2_DIR}" CACHE STRING "Location of RE2 for effcee")
  82. set(EFFCEE_ENABLE_SHARED_CRT ON CACHE BOOL "Enable using shared C Runtime")
  83. # Don't build/run effcee's tests.
  84. set(EFFCEE_BUILD_TESTING OFF CACHE BOOL "Skip effcee tests")
  85. set(EFFCEE_BUILD_SAMPLES OFF CACHE BOOL "Skip building effcee examples")
  86. add_subdirectory(${DXC_EFFCEE_DIR} EXCLUDE_FROM_ALL)
  87. endif()
  88. endif()
  89. # Organize these targets better in Visual Studio
  90. set(SPIRV_TEST_DEP_TARGETS
  91. effcee
  92. re2
  93. )
  94. foreach(target ${SPIRV_TEST_DEP_TARGETS})
  95. set_property(TARGET ${target} PROPERTY FOLDER "External dependencies")
  96. endforeach()
  97. endif()
  98. endif()