This CL allows setting the location of glslangValidator and spirv-remap when calling the runtests script. A test target is added to CMake to execute runtests and sets the location to the build folder for the two applications.
201 lines
6.8 KiB
CMake
201 lines
6.8 KiB
CMake
# increase to 3.1 once all major distributions
|
|
# include a version of CMake >= 3.1
|
|
cmake_minimum_required(VERSION 2.8.12)
|
|
if (POLICY CMP0048)
|
|
cmake_policy(SET CMP0048 NEW)
|
|
endif()
|
|
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
|
|
|
|
# Adhere to GNU filesystem layout conventions
|
|
include(GNUInstallDirs)
|
|
|
|
# Needed for CMAKE_DEPENDENT_OPTION macro
|
|
include(CMakeDependentOption)
|
|
|
|
option(BUILD_SHARED_LIBS "Build Shared Libraries" OFF)
|
|
option(BUILD_EXTERNAL "Build external dependencies in /External" ON)
|
|
|
|
set(LIB_TYPE STATIC)
|
|
|
|
if(BUILD_SHARED_LIBS)
|
|
set(LIB_TYPE SHARED)
|
|
endif()
|
|
|
|
option(SKIP_GLSLANG_INSTALL "Skip installation" ${SKIP_GLSLANG_INSTALL})
|
|
if(NOT ${SKIP_GLSLANG_INSTALL})
|
|
set(ENABLE_GLSLANG_INSTALL ON)
|
|
endif()
|
|
option(ENABLE_SPVREMAPPER "Enables building of SPVRemapper" ON)
|
|
|
|
option(ENABLE_GLSLANG_BINARIES "Builds glslangValidator and spirv-remap" ON)
|
|
|
|
option(ENABLE_GLSLANG_WEB "Reduces glslang to minimum needed for web use" OFF)
|
|
option(ENABLE_GLSLANG_WEB_DEVEL "For ENABLE_GLSLANG_WEB builds, enables compilation error messages" OFF)
|
|
option(ENABLE_EMSCRIPTEN_SINGLE_FILE "If using Emscripten, enables SINGLE_FILE build" OFF)
|
|
option(ENABLE_EMSCRIPTEN_ENVIRONMENT_NODE "If using Emscripten, builds to run on Node instead of Web" OFF)
|
|
|
|
CMAKE_DEPENDENT_OPTION(ENABLE_HLSL "Enables HLSL input support" ON "NOT ENABLE_GLSLANG_WEB" OFF)
|
|
|
|
option(ENABLE_OPT "Enables spirv-opt capability if present" ON)
|
|
|
|
if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT AND WIN32)
|
|
set(CMAKE_INSTALL_PREFIX "install" CACHE STRING "..." FORCE)
|
|
endif()
|
|
|
|
option(USE_CCACHE "Use ccache" OFF)
|
|
if(USE_CCACHE)
|
|
find_program(CCACHE_FOUND ccache)
|
|
if(CCACHE_FOUND)
|
|
set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ccache)
|
|
endif(CCACHE_FOUND)
|
|
endif()
|
|
|
|
# Precompiled header macro. Parameters are source file list and filename for pch cpp file.
|
|
macro(glslang_pch SRCS PCHCPP)
|
|
if(MSVC AND CMAKE_GENERATOR MATCHES "^Visual Studio")
|
|
set(PCH_NAME "$(IntDir)\\pch.pch")
|
|
# make source files use/depend on PCH_NAME
|
|
set_source_files_properties(${${SRCS}} PROPERTIES COMPILE_FLAGS "/Yupch.h /FIpch.h /Fp${PCH_NAME} /Zm300" OBJECT_DEPENDS "${PCH_NAME}")
|
|
# make PCHCPP file compile and generate PCH_NAME
|
|
set_source_files_properties(${PCHCPP} PROPERTIES COMPILE_FLAGS "/Ycpch.h /Fp${PCH_NAME} /Zm300" OBJECT_OUTPUTS "${PCH_NAME}")
|
|
list(APPEND ${SRCS} "${PCHCPP}")
|
|
endif()
|
|
endmacro(glslang_pch)
|
|
|
|
project(glslang)
|
|
# make testing optional
|
|
include(CTest)
|
|
|
|
if(ENABLE_HLSL)
|
|
add_definitions(-DENABLE_HLSL)
|
|
endif(ENABLE_HLSL)
|
|
|
|
if(ENABLE_GLSLANG_WEB)
|
|
add_definitions(-DGLSLANG_WEB)
|
|
if(ENABLE_GLSLANG_WEB_DEVEL)
|
|
add_definitions(-DGLSLANG_WEB_DEVEL)
|
|
endif(ENABLE_GLSLANG_WEB_DEVEL)
|
|
endif(ENABLE_GLSLANG_WEB)
|
|
|
|
if(WIN32)
|
|
set(CMAKE_DEBUG_POSTFIX "d")
|
|
if(MSVC)
|
|
include(ChooseMSVCCRT.cmake)
|
|
endif(MSVC)
|
|
add_definitions(-DGLSLANG_OSINCLUDE_WIN32)
|
|
elseif(UNIX)
|
|
add_definitions(-DGLSLANG_OSINCLUDE_UNIX)
|
|
else(WIN32)
|
|
message("unknown platform")
|
|
endif(WIN32)
|
|
|
|
if(${CMAKE_CXX_COMPILER_ID} MATCHES "GNU")
|
|
add_compile_options(-Wall -Wmaybe-uninitialized -Wuninitialized -Wunused -Wunused-local-typedefs
|
|
-Wunused-parameter -Wunused-value -Wunused-variable -Wunused-but-set-parameter -Wunused-but-set-variable -fno-exceptions)
|
|
add_compile_options(-Wno-reorder) # disable this from -Wall, since it happens all over.
|
|
add_compile_options(-fno-rtti)
|
|
elseif(${CMAKE_CXX_COMPILER_ID} MATCHES "Clang")
|
|
add_compile_options(-Wall -Wuninitialized -Wunused -Wunused-local-typedefs
|
|
-Wunused-parameter -Wunused-value -Wunused-variable -Wextra-semi)
|
|
add_compile_options(-Wno-reorder) # disable this from -Wall, since it happens all over.
|
|
add_compile_options(-fno-rtti)
|
|
elseif(${CMAKE_CXX_COMPILER_ID} MATCHES "MSVC")
|
|
add_compile_options(/GR-) # Disable RTTI
|
|
endif()
|
|
|
|
if(EMSCRIPTEN)
|
|
add_compile_options(-Os -fno-exceptions)
|
|
add_compile_options("SHELL: -s WASM=1")
|
|
add_compile_options("SHELL: -s WASM_OBJECT_FILES=0")
|
|
add_link_options(-Os)
|
|
add_link_options("SHELL: -s FILESYSTEM=0")
|
|
add_link_options("SHELL: --llvm-lto 1")
|
|
add_link_options("SHELL: --closure 1")
|
|
add_link_options("SHELL: -s ALLOW_MEMORY_GROWTH=1")
|
|
|
|
if(ENABLE_EMSCRIPTEN_SINGLE_FILE)
|
|
add_link_options("SHELL: -s SINGLE_FILE=1")
|
|
endif(ENABLE_EMSCRIPTEN_SINGLE_FILE)
|
|
else()
|
|
if(ENABLE_GLSLANG_WEB)
|
|
if(MSVC)
|
|
add_compile_options(/Os /GR-)
|
|
else()
|
|
add_compile_options(-Os -fno-exceptions)
|
|
add_link_options(-Os)
|
|
endif()
|
|
endif(ENABLE_GLSLANG_WEB)
|
|
endif(EMSCRIPTEN)
|
|
|
|
# Request C++11
|
|
if(${CMAKE_VERSION} VERSION_LESS 3.1)
|
|
# CMake versions before 3.1 do not understand CMAKE_CXX_STANDARD
|
|
# remove this block once CMake >=3.1 has fixated in the ecosystem
|
|
add_compile_options(-std=c++11)
|
|
else()
|
|
set(CMAKE_CXX_STANDARD 11)
|
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
|
set(CMAKE_CXX_EXTENSIONS OFF)
|
|
endif()
|
|
|
|
function(glslang_set_link_args TARGET)
|
|
# For MinGW compiles, statically link against the GCC and C++ runtimes.
|
|
# This avoids the need to ship those runtimes as DLLs.
|
|
if(WIN32 AND ${CMAKE_CXX_COMPILER_ID} MATCHES "GNU")
|
|
set_target_properties(${TARGET} PROPERTIES
|
|
LINK_FLAGS "-static -static-libgcc -static-libstdc++")
|
|
endif()
|
|
endfunction(glslang_set_link_args)
|
|
|
|
# CMake needs to find the right version of python, right from the beginning,
|
|
# otherwise, it will find the wrong version and fail later
|
|
if(BUILD_EXTERNAL AND IS_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/External)
|
|
find_package(PythonInterp 3 REQUIRED)
|
|
|
|
# We depend on these for later projects, so they should come first.
|
|
add_subdirectory(External)
|
|
endif()
|
|
|
|
if(NOT TARGET SPIRV-Tools-opt)
|
|
set(ENABLE_OPT OFF)
|
|
endif()
|
|
|
|
if(ENABLE_OPT)
|
|
message(STATUS "optimizer enabled")
|
|
add_definitions(-DENABLE_OPT=1)
|
|
else()
|
|
if(ENABLE_HLSL)
|
|
message(STATUS "spirv-tools not linked - illegal SPIRV may be generated for HLSL")
|
|
endif()
|
|
add_definitions(-DENABLE_OPT=0)
|
|
endif()
|
|
|
|
add_subdirectory(glslang)
|
|
add_subdirectory(OGLCompilersDLL)
|
|
if(ENABLE_GLSLANG_BINARIES)
|
|
add_subdirectory(StandAlone)
|
|
endif()
|
|
add_subdirectory(SPIRV)
|
|
if(ENABLE_HLSL)
|
|
add_subdirectory(hlsl)
|
|
endif(ENABLE_HLSL)
|
|
add_subdirectory(gtests)
|
|
|
|
if(BUILD_TESTING)
|
|
# 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()
|
|
|
|
add_test(NAME glslang-testsuite
|
|
COMMAND bash ${IGNORE_CR_FLAG} runtests
|
|
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/Test/)
|
|
|
|
set_property(TEST glslang-testsuite APPEND PROPERTY
|
|
ENVIRONMENT GLSLANG_PATH=${CMAKE_CURRENT_BINARY_DIR}/StandAlone/glslangValidator)
|
|
set_property(TEST glslang-testsuite APPEND PROPERTY
|
|
ENVIRONMENT SPIRV_REMAP_PATH=${CMAKE_CURRENT_BINARY_DIR}/StandAlone/spirv-remap)
|
|
endif(BUILD_TESTING)
|