| # Define root location for all external dependencies |
| set(DXC_EXTERNAL_ROOT_DIR "${CMAKE_CURRENT_SOURCE_DIR}" |
| CACHE STRING "Root location of all external projects") |
| |
| # We need to match this setting across everything we link together |
| if (NOT HLSL_ENABLE_DEBUG_ITERATORS) |
| add_definitions(/D_ITERATOR_DEBUG_LEVEL=0) |
| endif (NOT HLSL_ENABLE_DEBUG_ITERATORS) |
| |
| # Need DirectX-Headers module if not on windows |
| if (NOT DIRECTX_HEADER_INCLUDE_DIR) |
| if (NOT WIN32) |
| if (IS_DIRECTORY "${DXC_EXTERNAL_ROOT_DIR}/DirectX-Headers") |
| set(DIRECTX_HEADER_INCLUDE_DIR ${DXC_EXTERNAL_ROOT_DIR}/DirectX-Headers/include PARENT_SCOPE) |
| else() |
| message(FATAL_ERROR "DirectX-Headers was not found - required for reflection support on *nix see https://github.com/microsoft/DirectX-Headers") |
| endif() |
| endif (NOT WIN32) |
| endif(NOT DIRECTX_HEADER_INCLUDE_DIR) |
| |
| # Enabling SPIR-V codegen requires SPIRV-Headers for spirv.hpp and |
| # SPIRV-Tools for SPIR-V disassembling functionality. |
| if (${ENABLE_SPIRV_CODEGEN}) |
| set(DXC_SPIRV_HEADERS_DIR "${DXC_EXTERNAL_ROOT_DIR}/SPIRV-Headers" |
| CACHE STRING "Location of SPIRV-Headers source") |
| set(DXC_SPIRV_TOOLS_DIR "${DXC_EXTERNAL_ROOT_DIR}/SPIRV-Tools" |
| CACHE STRING "Location of SPIRV-Tools source") |
| |
| if (NOT DEFINED SPIRV-Headers_SOURCE_DIR) |
| if (IS_DIRECTORY ${DXC_SPIRV_HEADERS_DIR}) |
| add_subdirectory(${DXC_SPIRV_HEADERS_DIR} |
| "${CMAKE_BINARY_DIR}/external/SPIRV-Headers" |
| EXCLUDE_FROM_ALL) |
| endif() |
| endif() |
| if (NOT DEFINED SPIRV-Headers_SOURCE_DIR) |
| message(FATAL_ERROR "SPIRV-Headers was not found - required for SPIR-V codegen") |
| else() |
| set(SPIRV_HEADER_INCLUDE_DIR ${SPIRV-Headers_SOURCE_DIR}/include PARENT_SCOPE) |
| endif() |
| |
| if (NOT TARGET SPIRV-Tools) |
| if (IS_DIRECTORY ${DXC_SPIRV_TOOLS_DIR}) |
| # Avoid implicit fallthrough warning from clang |
| # This add_compile_options() will only affect the current directory and its subdirectories. |
| if(CMAKE_CXX_COMPILER_ID MATCHES "Clang") |
| add_compile_options(-Wno-implicit-fallthrough) |
| endif() |
| # We only need the library from SPIRV-Tools. |
| set(SPIRV_SKIP_EXECUTABLES ON CACHE BOOL "Skip building SPIRV-Tools executables") |
| if (NOT HLSL_ENABLE_DEBUG_ITERATORS) |
| set(SPIRV_TOOLS_EXTRA_DEFINITIONS /D_ITERATOR_DEBUG_LEVEL=0) |
| endif() |
| add_subdirectory(${DXC_SPIRV_TOOLS_DIR} |
| "${CMAKE_BINARY_DIR}/external/SPIRV-Tools" |
| EXCLUDE_FROM_ALL) |
| endif() |
| endif() |
| if (NOT TARGET SPIRV-Tools) |
| message(FATAL_ERROR "SPIRV-Tools was not found - required for SPIR-V codegen") |
| else() |
| set(SPIRV_TOOLS_INCLUDE_DIR ${spirv-tools_SOURCE_DIR}/include PARENT_SCOPE) |
| endif() |
| |
| set(SPIRV_DEP_TARGETS |
| SPIRV-Tools-static |
| SPIRV-Tools-opt |
| ) |
| |
| # Organize these targets better in Visual Studio |
| foreach(target ${SPIRV_DEP_TARGETS}) |
| set_property(TARGET ${target} PROPERTY FOLDER "External dependencies") |
| endforeach() |
| |
| endif() |