# Suppress all warnings from third-party projects. set_property(DIRECTORY APPEND PROPERTY COMPILE_OPTIONS -w) set(SHADERC_THIRD_PARTY_ROOT_DIR "${CMAKE_CURRENT_SOURCE_DIR}" CACHE STRING "Root location of all third_party projects") set(SHADERC_GOOGLE_TEST_DIR "${SHADERC_THIRD_PARTY_ROOT_DIR}/googletest" CACHE STRING "Location of googletest source") set(SHADERC_SPIRV_TOOLS_DIR "${SHADERC_THIRD_PARTY_ROOT_DIR}/spirv-tools" CACHE STRING "Location of spirv-tools source") set(SHADERC_SPIRV_HEADERS_DIR "${SHADERC_THIRD_PARTY_ROOT_DIR}/spirv-headers" CACHE STRING "Location of spirv-headers source") set(SHADERC_GLSLANG_DIR "${SHADERC_THIRD_PARTY_ROOT_DIR}/glslang" CACHE STRING "Location of glslang source") set(SHADERC_EFFCEE_DIR "${SHADERC_THIRD_PARTY_ROOT_DIR}/effcee" CACHE STRING "Location of effcee source") set(SHADERC_RE2_DIR "${SHADERC_THIRD_PARTY_ROOT_DIR}/re2" CACHE STRING "Location of re2 source") set(SHADERC_TINT_DIR "${SHADERC_THIRD_PARTY_ROOT_DIR}/tint" CACHE STRING "Location of tint source") set( SKIP_GLSLANG_INSTALL ${SHADERC_SKIP_INSTALL} ) set( SKIP_SPIRV_TOOLS_INSTALL ${SHADERC_SKIP_INSTALL} ) set( SKIP_GOOGLETEST_INSTALL ${SHADERC_SKIP_INSTALL} ) # Configure third party projects. if(${SHADERC_ENABLE_TESTS}) if (IS_DIRECTORY ${SHADERC_GOOGLE_TEST_DIR}) add_subdirectory(${SHADERC_GOOGLE_TEST_DIR} googletest) endif() if (NOT TARGET gmock) message(FATAL_ERROR "gmock was not found - required for tests") endif() endif() set(OLD_PLATFORM_TOOLSET ${CMAKE_GENERATOR_TOOLSET}) check_cxx_compiler_flag(-fPIC COMPILER_SUPPORTS_PIC) if (IS_DIRECTORY ${SHADERC_SPIRV_HEADERS_DIR}) set(SPIRV_HEADERS_SKIP_EXAMPLES ON) add_subdirectory(${SHADERC_SPIRV_HEADERS_DIR} spirv-headers) endif() if (NOT TARGET SPIRV-Tools) # Check SPIRV-Tools before glslang so that it is linked into glslang. # we control optimizations via glslang API calls directly. if (IS_DIRECTORY ${SHADERC_SPIRV_TOOLS_DIR}) if ("${SHADERC_SKIP_TESTS}") # Also skip building tests in SPIRV-Tools. set(SPIRV_SKIP_TESTS ON CACHE BOOL "Skip building SPIRV-Tools tests") elseif(NOT "${SPIRV_SKIP_TESTS}") # SPIRV-Tools requires effcee and re2 to build tests. # re2 tests take a long time and do not add much value, since re2 is a # dependency of a dependency, so not running them. set(RE2_BUILD_TESTING OFF CACHE STRING "Run RE2 Tests") add_subdirectory(${SHADERC_RE2_DIR} re2) add_subdirectory(${SHADERC_EFFCEE_DIR} effcee) endif() add_subdirectory(${SHADERC_SPIRV_TOOLS_DIR} spirv-tools) endif() if (NOT TARGET SPIRV-Tools) message(FATAL_ERROR "SPIRV-Tools was not found - required for compilation") endif() endif() if (NOT TARGET glslang) if (IS_DIRECTORY ${SHADERC_GLSLANG_DIR}) add_subdirectory(${SHADERC_GLSLANG_DIR} glslang) endif() if (NOT TARGET glslang) message(FATAL_ERROR "glslang was not found - required for compilation") endif() if(WIN32) # This is unfortunate but glslang forces our # platform toolset to be v110, which we may not even have # installed, undo anything glslang has done to it. set(CMAKE_GENERATOR_TOOLSET "${OLD_PLATFORM_TOOLSET}" CACHE STRING "Platform Toolset" FORCE) endif() endif() if (SHADERC_ENABLE_WGSL_OUTPUT) # Use Google Tint for WGSL output. if (NOT TARGET libtint) if (IS_DIRECTORY ${SHADERC_TINT_DIR}) if (NOT IS_DIRECTORY ${SHADERC_TINT_DIR}/out/docs) # The Tint Doxygen configuration assumes it can write to the out/docs # source directory. message(STATUS "Tint source directory out/docs does not exist. Disabling doc generation") set(TINT_BUILD_DOCS OFF) endif() set(TINT_BUILD_SPV_READER ON CACHE BOOL "Built Tint SPIR-V reader" FORCE) set(TINT_BUILD_WGSL_WRITER ON CACHE BOOL "Build Tint WGSL writer" FORCE) add_subdirectory(${SHADERC_TINT_DIR} tint) endif() endif() if (NOT TARGET libtint) message(FATAL_ERROR "Tint was not found - required for WGSL output") endif() endif (SHADERC_ENABLE_WGSL_OUTPUT)