stk-code_catmod/lib/shaderc/third_party/CMakeLists.txt
Benau bc1d885bd1 Add shaderc v2022.1 for GLSL to SPIR-V shaders
Ran ./utils/git-sync-deps already, removed some unneeded files
2022-03-17 12:21:20 +08:00

101 lines
4.0 KiB
CMake

# 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)