278 lines
10 KiB
CMake
278 lines
10 KiB
CMake
# Copyright (C) 2020 The Khronos Group Inc.
|
|
#
|
|
# All rights reserved.
|
|
#
|
|
# Redistribution and use in source and binary forms, with or without
|
|
# modification, are permitted provided that the following conditions
|
|
# are met:
|
|
#
|
|
# Redistributions of source code must retain the above copyright
|
|
# notice, this list of conditions and the following disclaimer.
|
|
#
|
|
# Redistributions in binary form must reproduce the above
|
|
# copyright notice, this list of conditions and the following
|
|
# disclaimer in the documentation and/or other materials provided
|
|
# with the distribution.
|
|
#
|
|
# Neither the name of The Khronos Group Inc. nor the names of its
|
|
# contributors may be used to endorse or promote products derived
|
|
# from this software without specific prior written permission.
|
|
#
|
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
|
# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
|
# COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
|
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
|
# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
|
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
# POSSIBILITY OF SUCH DAMAGE.
|
|
|
|
if(WIN32)
|
|
add_subdirectory(OSDependent/Windows)
|
|
elseif(UNIX OR "${CMAKE_SYSTEM_NAME}" STREQUAL "Fuchsia" OR ANDROID)
|
|
add_subdirectory(OSDependent/Unix)
|
|
else()
|
|
message("unknown platform")
|
|
endif()
|
|
|
|
if(EMSCRIPTEN OR ENABLE_GLSLANG_JS)
|
|
# May be enabled on non-Emscripten builds for binary-size testing.
|
|
add_subdirectory(OSDependent/Web)
|
|
endif()
|
|
|
|
################################################################################
|
|
# GenericCodeGen
|
|
################################################################################
|
|
set(GENERICCODEGEN_SOURCES
|
|
GenericCodeGen/CodeGen.cpp
|
|
GenericCodeGen/Link.cpp)
|
|
|
|
add_library(GenericCodeGen STATIC
|
|
stub.cpp)
|
|
set_property(TARGET GenericCodeGen PROPERTY POSITION_INDEPENDENT_CODE ON)
|
|
set_property(TARGET GenericCodeGen PROPERTY FOLDER glslang)
|
|
|
|
################################################################################
|
|
# MachineIndependent
|
|
################################################################################
|
|
set(MACHINEINDEPENDENT_SOURCES
|
|
MachineIndependent/glslang.y
|
|
MachineIndependent/glslang_tab.cpp
|
|
MachineIndependent/attribute.cpp
|
|
MachineIndependent/Constant.cpp
|
|
MachineIndependent/iomapper.cpp
|
|
MachineIndependent/InfoSink.cpp
|
|
MachineIndependent/Initialize.cpp
|
|
MachineIndependent/IntermTraverse.cpp
|
|
MachineIndependent/Intermediate.cpp
|
|
MachineIndependent/ParseContextBase.cpp
|
|
MachineIndependent/ParseHelper.cpp
|
|
MachineIndependent/PoolAlloc.cpp
|
|
MachineIndependent/RemoveTree.cpp
|
|
MachineIndependent/Scan.cpp
|
|
MachineIndependent/ShaderLang.cpp
|
|
MachineIndependent/SpirvIntrinsics.cpp
|
|
MachineIndependent/SymbolTable.cpp
|
|
MachineIndependent/Versions.cpp
|
|
MachineIndependent/intermOut.cpp
|
|
MachineIndependent/limits.cpp
|
|
MachineIndependent/linkValidate.cpp
|
|
MachineIndependent/parseConst.cpp
|
|
MachineIndependent/reflection.cpp
|
|
MachineIndependent/preprocessor/Pp.cpp
|
|
MachineIndependent/preprocessor/PpAtom.cpp
|
|
MachineIndependent/preprocessor/PpContext.cpp
|
|
MachineIndependent/preprocessor/PpScanner.cpp
|
|
MachineIndependent/preprocessor/PpTokens.cpp
|
|
MachineIndependent/propagateNoContraction.cpp
|
|
)
|
|
|
|
set(MACHINEINDEPENDENT_HEADERS
|
|
MachineIndependent/attribute.h
|
|
MachineIndependent/glslang_tab.cpp.h
|
|
MachineIndependent/gl_types.h
|
|
MachineIndependent/Initialize.h
|
|
MachineIndependent/iomapper.h
|
|
MachineIndependent/LiveTraverser.h
|
|
MachineIndependent/localintermediate.h
|
|
MachineIndependent/ParseHelper.h
|
|
MachineIndependent/reflection.h
|
|
MachineIndependent/RemoveTree.h
|
|
MachineIndependent/Scan.h
|
|
MachineIndependent/ScanContext.h
|
|
MachineIndependent/SymbolTable.h
|
|
MachineIndependent/Versions.h
|
|
MachineIndependent/parseVersions.h
|
|
MachineIndependent/propagateNoContraction.h
|
|
MachineIndependent/preprocessor/PpContext.h
|
|
MachineIndependent/preprocessor/PpTokens.h
|
|
)
|
|
|
|
if(ENABLE_HLSL)
|
|
list(APPEND MACHINEINDEPENDENT_SOURCES
|
|
HLSL/hlslAttributes.cpp
|
|
HLSL/hlslParseHelper.cpp
|
|
HLSL/hlslScanContext.cpp
|
|
HLSL/hlslOpMap.cpp
|
|
HLSL/hlslTokenStream.cpp
|
|
HLSL/hlslGrammar.cpp
|
|
HLSL/hlslParseables.cpp)
|
|
|
|
list(APPEND MACHINEINDEPENDENT_HEADERS
|
|
HLSL/hlslAttributes.h
|
|
HLSL/hlslParseHelper.h
|
|
HLSL/hlslTokens.h
|
|
HLSL/hlslScanContext.h
|
|
HLSL/hlslOpMap.h
|
|
HLSL/hlslTokenStream.h
|
|
HLSL/hlslGrammar.h
|
|
HLSL/hlslParseables.h)
|
|
endif()
|
|
|
|
add_library(MachineIndependent STATIC stub.cpp)
|
|
set_property(TARGET MachineIndependent PROPERTY POSITION_INDEPENDENT_CODE ON)
|
|
set_property(TARGET MachineIndependent PROPERTY FOLDER glslang)
|
|
target_link_libraries(MachineIndependent PRIVATE glslang)
|
|
|
|
if (NOT MSVC)
|
|
# -Wunused-but-set-variable is triggered in code generated by bison that we do not control. Turn this warning off, but only for the generated.
|
|
set_source_files_properties(MachineIndependent/glslang_tab.cpp PROPERTIES COMPILE_FLAGS -Wno-unused-but-set-variable)
|
|
endif()
|
|
|
|
################################################################################
|
|
# glslang
|
|
################################################################################
|
|
set(GLSLANG_SOURCES
|
|
CInterface/glslang_c_interface.cpp)
|
|
|
|
set(GLSLANG_HEADERS
|
|
Public/ShaderLang.h
|
|
Include/arrays.h
|
|
Include/BaseTypes.h
|
|
Include/Common.h
|
|
Include/ConstantUnion.h
|
|
Include/glslang_c_interface.h
|
|
Include/glslang_c_shader_types.h
|
|
Include/InfoSink.h
|
|
Include/InitializeGlobals.h
|
|
Include/intermediate.h
|
|
Include/PoolAlloc.h
|
|
Include/ResourceLimits.h
|
|
Include/ShHandle.h
|
|
Include/SpirvIntrinsics.h
|
|
Include/Types.h
|
|
Include/visibility.h)
|
|
|
|
add_library(glslang ${LIB_TYPE} ${GLSLANG_SOURCES} ${GLSLANG_HEADERS} ${GENERICCODEGEN_SOURCES} ${GENERICCODEGEN_HEADERS} ${OSDEPENDENT_SOURCES} ${OSDEPENDENT_HEADERS} ${MACHINEINDEPENDENT_SOURCES} ${MACHINEINDEPENDENT_HEADERS} ${SPIRV_SOURCES} ${SPIRV_HEADERS})
|
|
add_library(glslang::glslang ALIAS glslang)
|
|
set_target_properties(glslang PROPERTIES
|
|
FOLDER glslang
|
|
POSITION_INDEPENDENT_CODE ON
|
|
VERSION "${GLSLANG_VERSION}"
|
|
SOVERSION "${GLSLANG_VERSION_MAJOR}")
|
|
target_include_directories(glslang PUBLIC
|
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/..>
|
|
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)
|
|
|
|
glslang_add_build_info_dependency(glslang)
|
|
|
|
glslang_pch(glslang MachineIndependent/pch.h)
|
|
|
|
glslang_only_export_explicit_symbols(glslang)
|
|
|
|
if(WIN32 AND BUILD_SHARED_LIBS)
|
|
set_target_properties(glslang PROPERTIES PREFIX "")
|
|
endif()
|
|
|
|
if(ENABLE_SPIRV)
|
|
if(ENABLE_OPT)
|
|
target_include_directories(glslang PUBLIC
|
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../External>)
|
|
target_link_libraries(glslang SPIRV-Tools-opt)
|
|
endif()
|
|
endif()
|
|
|
|
# Link pthread
|
|
if(UNIX OR "${CMAKE_SYSTEM_NAME}" STREQUAL "Fuchsia" OR ANDROID)
|
|
set(THREADS_PREFER_PTHREAD_FLAG ON)
|
|
find_package(Threads REQUIRED)
|
|
target_link_libraries(glslang Threads::Threads)
|
|
endif()
|
|
|
|
################################################################################
|
|
# ResourceLimits
|
|
################################################################################
|
|
set(RESOURCELIMITS_SOURCES
|
|
ResourceLimits/ResourceLimits.cpp
|
|
ResourceLimits/resource_limits_c.cpp
|
|
)
|
|
|
|
set(RESOURCELIMITS_HEADERS
|
|
Public/ResourceLimits.h
|
|
Public/resource_limits_c.h
|
|
)
|
|
|
|
add_library(glslang-default-resource-limits ${RESOURCELIMITS_SOURCES} ${RESOURCELIMITS_HEADERS})
|
|
add_library(glslang::glslang-default-resource-limits ALIAS glslang-default-resource-limits)
|
|
set_target_properties(glslang-default-resource-limits PROPERTIES
|
|
VERSION "${GLSLANG_VERSION}"
|
|
SOVERSION "${GLSLANG_VERSION_MAJOR}"
|
|
FOLDER glslang
|
|
POSITION_INDEPENDENT_CODE ON)
|
|
|
|
target_include_directories(glslang-default-resource-limits PUBLIC
|
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/..>
|
|
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)
|
|
glslang_only_export_explicit_symbols(glslang-default-resource-limits)
|
|
|
|
################################################################################
|
|
# source_groups
|
|
################################################################################
|
|
if(WIN32)
|
|
source_group("OSDependent" REGULAR_EXPRESSION "OSDependent/[^/]*")
|
|
source_group("OSDependent\\Windows" REGULAR_EXPRESSION "OSDependent/Windows/*")
|
|
source_group("Public" REGULAR_EXPRESSION "Public/*")
|
|
source_group("MachineIndependent" REGULAR_EXPRESSION "MachineIndependent/[^/]*")
|
|
source_group("Include" REGULAR_EXPRESSION "Include/[^/]*")
|
|
source_group("GenericCodeGen" REGULAR_EXPRESSION "GenericCodeGen/*")
|
|
source_group("MachineIndependent\\Preprocessor" REGULAR_EXPRESSION "MachineIndependent/preprocessor/*")
|
|
source_group("HLSL" REGULAR_EXPRESSION "HLSL/*")
|
|
source_group("CInterface" REGULAR_EXPRESSION "CInterface/*")
|
|
source_group("SPIRV" REGULAR_EXPRESSION "SPIRV/[^/]*")
|
|
source_group("SPIRV\\CInterface" REGULAR_EXPRESSION "SPIRV/CInterface/*")
|
|
endif()
|
|
|
|
################################################################################
|
|
# install
|
|
################################################################################
|
|
if(GLSLANG_ENABLE_INSTALL)
|
|
install(TARGETS glslang EXPORT glslang-targets)
|
|
if(NOT BUILD_SHARED_LIBS)
|
|
install(TARGETS MachineIndependent EXPORT glslang-targets)
|
|
install(TARGETS GenericCodeGen EXPORT glslang-targets)
|
|
endif()
|
|
|
|
set(PUBLIC_HEADERS
|
|
Public/ResourceLimits.h
|
|
Public/ShaderLang.h
|
|
Public/resource_limits_c.h
|
|
Include/glslang_c_interface.h
|
|
Include/glslang_c_shader_types.h
|
|
Include/ResourceLimits.h
|
|
Include/visibility.h
|
|
MachineIndependent/Versions.h)
|
|
|
|
foreach(file ${PUBLIC_HEADERS})
|
|
get_filename_component(dir ${file} DIRECTORY)
|
|
install(FILES ${file} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/glslang/${dir})
|
|
endforeach()
|
|
|
|
install(FILES ${GLSLANG_BUILD_INFO_H} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/glslang)
|
|
|
|
install(TARGETS glslang-default-resource-limits EXPORT glslang-targets)
|
|
endif()
|