blob: b2f677bed229344e3ce65f680af322d4bf3981a1 [file] [log] [blame]
# 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( 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})
if (IS_DIRECTORY ${SHADERC_SPIRV_HEADERS_DIR})
add_subdirectory(${SHADERC_SPIRV_HEADERS_DIR} spirv-headers)
endif()
# 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")
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()
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()
if(${SHADERC_ENABLE_TESTS})
# Configure out-of-source-directory tests for glslang.
# The glslang project uses a bash script called "runtests" to run tests.
# The runtests script assumes the glslangValidator executable exists in
# a location inside the source tree, but we build it elsewhere.
# We need to copy the test files, fix the path references, and then run tests.
# Use test directory named "Test" to match Glslangs Test directory, so
# that we get the right relative path names in the "include" test output.
set(GLSLANG_TEST_SRC_DIR ${SHADERC_GLSLANG_DIR}/Test)
set(GLSLANG_TEST_BIN_DIR
${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/Test)
# If we are building in a multi-configuration setting we have
# to put the glslang tests into their respective subdirectories.
if (CMAKE_CONFIGURATION_TYPES)
set(GLSLANG_CONFIGURATION_DIR ${CMAKE_CFG_INTDIR})
endif()
add_custom_target(copy-tests-if-necessary ALL
COMMAND ${PYTHON_EXE}
${shaderc_SOURCE_DIR}/utils/copy-tests-if-necessary.py
${GLSLANG_TEST_SRC_DIR} ${GLSLANG_TEST_BIN_DIR} ${GLSLANG_CONFIGURATION_DIR}
COMMENT "Copying and patching glslang tests if needed")
# glslang-testsuite runs a bash script on Windows.
# Make sure to use '-o igncr' flag to ignore carriage returns (\r).
set(IGNORE_CR_FLAG "")
if(WIN32)
set(IGNORE_CR_FLAG -o igncr)
endif()
if (CMAKE_CONFIGURATION_TYPES)
# If we are running a multi-configuration project,
# the tests will be in ${Configuration}/Test
add_test(NAME glslang-testsuite
COMMAND bash ${IGNORE_CR_FLAG} runtests
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/$<CONFIGURATION>/Test
)
else()
add_test(NAME glslang-testsuite
COMMAND bash ${IGNORE_CR_FLAG} runtests
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/Test/
)
endif()
endif()