CMakeLists.txt 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  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 (IS_DIRECTORY ${DXC_SPIRV_HEADERS_DIR})
  12. add_subdirectory(${DXC_SPIRV_HEADERS_DIR} EXCLUDE_FROM_ALL)
  13. endif()
  14. if (NOT DEFINED SPIRV-Headers_SOURCE_DIR)
  15. message(FATAL_ERROR "SPIRV-Headers was not found - required for SPIR-V codegen")
  16. else()
  17. set(SPIRV_HEADER_INCLUDE_DIR ${SPIRV-Headers_SOURCE_DIR}/include PARENT_SCOPE)
  18. endif()
  19. if (IS_DIRECTORY ${DXC_SPIRV_TOOLS_DIR})
  20. # We only need the library from SPIRV-Tools.
  21. set(SPIRV_SKIP_EXECUTABLES ON CACHE BOOL "Skip building SPIRV-Tools executables")
  22. set(SPIRV_TOOLS_EXTRA_DEFINITIONS /D_ITERATOR_DEBUG_LEVEL=0)
  23. add_subdirectory(${DXC_SPIRV_TOOLS_DIR} EXCLUDE_FROM_ALL)
  24. endif()
  25. if (NOT TARGET SPIRV-Tools)
  26. message(FATAL_ERROR "SPIRV-Tools was not found - required for SPIR-V codegen")
  27. else()
  28. set(SPIRV_TOOLS_INCLUDE_DIR ${spirv-tools_SOURCE_DIR}/include PARENT_SCOPE)
  29. endif()
  30. set(SPIRV_DEP_TARGETS
  31. SPIRV-Tools
  32. SPIRV-Tools-opt
  33. )
  34. # Organize these targets better in Visual Studio
  35. foreach(target ${SPIRV_DEP_TARGETS})
  36. set_property(TARGET ${target} PROPERTY FOLDER "External dependencies")
  37. endforeach()
  38. # We need GoogleTest for unit and SPIR-V codegen testing.
  39. if (${SPIRV_BUILD_TESTS})
  40. set(DXC_GTEST_DIR "${DXC_EXTERNAL_ROOT_DIR}/googletest"
  41. CACHE STRING "Location of GoogleTest source")
  42. if (IS_DIRECTORY ${DXC_GTEST_DIR})
  43. # Configure googletest
  44. include(GTestConfig.cmake)
  45. endif()
  46. if (NOT TARGET gtest)
  47. message(FATAL_ERROR "GoogleTest was not found - required for SPIR-V codegen")
  48. endif()
  49. endif()
  50. # We need Effcee for SPIR-V codegen testing.
  51. if (${SPIRV_BUILD_TESTS})
  52. # re2 is needed since it's required by effcee.
  53. set(DXC_RE2_DIR "${DXC_EXTERNAL_ROOT_DIR}/re2" CACHE STRING "Location of RE2 source")
  54. set(DXC_EFFCEE_DIR "${DXC_EXTERNAL_ROOT_DIR}/effcee" CACHE STRING "Location of Effcee source")
  55. if (IS_DIRECTORY ${DXC_RE2_DIR})
  56. # Avoid exception handling warning from MSVC.
  57. # This add_compile_options() will only affect the current directory and its subdirectories.
  58. add_compile_options(/EHs)
  59. # Don't build/run re2's tests.
  60. set(RE2_BUILD_TESTING OFF CACHE BOOL "Skip RE2 tests")
  61. add_subdirectory(${DXC_RE2_DIR} EXCLUDE_FROM_ALL)
  62. endif()
  63. if (IS_DIRECTORY ${DXC_EFFCEE_DIR})
  64. # Configure effcee
  65. set(EFFCEE_RE2_DIR "${DXC_RE2_DIR}" CACHE STRING "Location of RE2 for effcee")
  66. set(EFFCEE_ENABLE_SHARED_CRT ON CACHE BOOL "Enable using shared C Runtime")
  67. # Don't build/run effcee's tests.
  68. set(EFFCEE_BUILD_TESTING OFF CACHE BOOL "Skip effcee tests")
  69. set(EFFCEE_BUILD_SAMPLES OFF CACHE BOOL "Skip building effcee examples")
  70. add_subdirectory(${DXC_EFFCEE_DIR} EXCLUDE_FROM_ALL)
  71. endif()
  72. # Organize these targets better in Visual Studio
  73. set(SPIRV_TEST_DEP_TARGETS
  74. effcee
  75. re2
  76. )
  77. foreach(target ${SPIRV_TEST_DEP_TARGETS})
  78. set_property(TARGET ${target} PROPERTY FOLDER "External dependencies")
  79. endforeach()
  80. endif()
  81. endif()