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