143 lines
5.1 KiB
CMake
143 lines
5.1 KiB
CMake
# Copyright 2017 The NXT Authors
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this file except in compliance with the License.
|
|
# You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
|
|
# GLFW, only build the library
|
|
set(GLFW_BUILD_DOCS OFF CACHE BOOL "" FORCE)
|
|
set(GLFW_BUILD_EXAMPLES OFF CACHE BOOL "" FORCE)
|
|
set(GLFW_BUILD_TESTS OFF CACHE BOOL "" FORCE)
|
|
set(GLFW_INSTALL OFF CACHE BOOL "" FORCE)
|
|
add_subdirectory(glfw)
|
|
NXTExternalTarget("third_party" glfw)
|
|
|
|
# GoogleTest
|
|
set(GTEST_DIR ${CMAKE_CURRENT_SOURCE_DIR}/googletest/googletest)
|
|
set(GMOCK_DIR ${CMAKE_CURRENT_SOURCE_DIR}/googletest/googlemock)
|
|
add_library(gtest STATIC ${GTEST_DIR}/src/gtest-all.cc ${GMOCK_DIR}/src/gmock-all.cc)
|
|
target_include_directories(gtest SYSTEM PUBLIC ${GTEST_DIR}/include ${GMOCK_DIR}/include)
|
|
target_include_directories(gtest SYSTEM PRIVATE ${GTEST_DIR} ${GMOCK_DIR})
|
|
find_package(Threads)
|
|
target_link_libraries(gtest ${CMAKE_THREAD_LIBS_INIT})
|
|
NXTExternalTarget("third_party" gtest)
|
|
|
|
# Glad
|
|
add_library(glad STATIC
|
|
${CMAKE_CURRENT_SOURCE_DIR}/glad/src/glad.c
|
|
${CMAKE_CURRENT_SOURCE_DIR}/glad/include/glad/glad.h
|
|
${CMAKE_CURRENT_SOURCE_DIR}/glad/include/KHR/khrplatform.h
|
|
)
|
|
target_include_directories(glad SYSTEM PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/glad/include)
|
|
NXTExternalTarget("third_party" glad)
|
|
|
|
# ShaderC
|
|
# Prevent SPIRV-Tools from using Werror as it has a warning on MSVC
|
|
set(SPIRV_WERROR OFF CACHE BOOL "" FORCE)
|
|
# Don't add unnecessary shaderc targets
|
|
set(SHADERC_SKIP_TESTS ON)
|
|
set(SHADERC_SKIP_INSTALL ON)
|
|
# Remove unused glslang and spirv-tools parts
|
|
# set(ENABLE_HLSL OFF CACHE BOOL "")
|
|
set(ENABLE_OPT OFF CACHE BOOL "")
|
|
set(ENABLE_GLSLANG_BINARIES OFF CACHE BOOL "")
|
|
set(SKIP_GLSLANG_INSTALL ON CACHE BOOL "")
|
|
set(SKIP_SPIRV_TOOLS_INSTALL ON CACHE BOOL "")
|
|
set(SPIRV_SKIP_EXECUTABLES ON CACHE BOOL "")
|
|
# Help shaderc find the non-standard paths for its dependencies
|
|
set(SHADERC_GOOGLE_TEST_DIR ${CMAKE_CURRENT_SOURCE_DIR}/googletest CACHE STRING "Location of googletest source")
|
|
set(SHADERC_GLSLANG_DIR "${CMAKE_CURRENT_SOURCE_DIR}/glslang" CACHE STRING "Location of glslang source")
|
|
set(SHADERC_SPIRV_TOOLS_DIR ${CMAKE_CURRENT_SOURCE_DIR}/spirv-tools CACHE STRING "Location of spirv-tools source")
|
|
# Help shaderc find the python executable when run inside VS.
|
|
find_package(PythonInterp REQUIRED)
|
|
set(PYTHON_EXE ${PYTHON_EXECUTABLE})
|
|
# Need to include this for spirv-tools to find it
|
|
add_subdirectory(spirv-headers)
|
|
add_subdirectory(shaderc)
|
|
# Namespace the shaderc targets in a folder to avoid cluttering the
|
|
# Visual Studio solution explorer
|
|
set_target_properties(
|
|
add-copyright
|
|
build-version
|
|
check-copyright
|
|
glslc
|
|
glslc_exe
|
|
install-headers
|
|
shaderc
|
|
shaderc_shared
|
|
shaderc_util
|
|
shaderc_combined_genfile
|
|
shaderc-online-compile testdata
|
|
SPIRV-Headers-example
|
|
SPIRV-Headers-example-1.1
|
|
PROPERTIES FOLDER "third_party/shaderc"
|
|
)
|
|
# Remove a bunch of targets we don't need that are pulled by shaderc and glslang
|
|
set_target_properties(
|
|
SPIRV-Headers-example-1.1
|
|
SPIRV-Headers-example
|
|
glslc_exe
|
|
SPIRV-Tools-link
|
|
SPVRemapper
|
|
shaderc
|
|
shaderc-online-compile
|
|
shaderc_combined_genfile
|
|
PROPERTIES EXCLUDE_FROM_ALL true
|
|
)
|
|
|
|
# SPIRV-Cross
|
|
set(SPIRV_CROSS_SOURCES
|
|
${CMAKE_CURRENT_SOURCE_DIR}/spirv-cross/GLSL.std.450.h
|
|
${CMAKE_CURRENT_SOURCE_DIR}/spirv-cross/spirv_common.hpp
|
|
${CMAKE_CURRENT_SOURCE_DIR}/spirv-cross/spirv_cfg.cpp
|
|
${CMAKE_CURRENT_SOURCE_DIR}/spirv-cross/spirv_cfg.hpp
|
|
${CMAKE_CURRENT_SOURCE_DIR}/spirv-cross/spirv_cross.cpp
|
|
${CMAKE_CURRENT_SOURCE_DIR}/spirv-cross/spirv_cross.hpp
|
|
${CMAKE_CURRENT_SOURCE_DIR}/spirv-cross/spirv.hpp
|
|
)
|
|
|
|
set(NEED_SPIRV_CROSS_GLSL OFF)
|
|
if (NXT_ENABLE_D3D12)
|
|
list(APPEND SPIRV_CROSS_SOURCES
|
|
${CMAKE_CURRENT_SOURCE_DIR}/spirv-cross/spirv_hlsl.cpp
|
|
${CMAKE_CURRENT_SOURCE_DIR}/spirv-cross/spirv_hlsl.hpp
|
|
)
|
|
set(NEED_SPIRV_CROSS_GLSL ON)
|
|
endif()
|
|
|
|
if (NXT_ENABLE_METAL)
|
|
list(APPEND SPIRV_CROSS_SOURCES
|
|
${CMAKE_CURRENT_SOURCE_DIR}/spirv-cross/spirv_msl.cpp
|
|
${CMAKE_CURRENT_SOURCE_DIR}/spirv-cross/spirv_msl.hpp
|
|
)
|
|
set(NEED_SPIRV_CROSS_GLSL ON)
|
|
endif()
|
|
|
|
if (NXT_ENABLE_OPENGL OR NEED_SPIRV_CROSS_GLSL)
|
|
list(APPEND SPIRV_CROSS_SOURCES
|
|
${CMAKE_CURRENT_SOURCE_DIR}/spirv-cross/spirv_glsl.cpp
|
|
${CMAKE_CURRENT_SOURCE_DIR}/spirv-cross/spirv_glsl.hpp
|
|
)
|
|
endif()
|
|
|
|
add_library(spirv_cross STATIC ${SPIRV_CROSS_SOURCES})
|
|
target_include_directories(spirv_cross SYSTEM PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
|
|
NXTExternalTarget("third_party" spirv_cross)
|
|
|
|
# STB, used for stb_image
|
|
set(STB_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/stb PARENT_SCOPE)
|
|
|
|
# glm matrix math library
|
|
set(GLM_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/glm PARENT_SCOPE)
|
|
|
|
# Vulkan headers
|
|
set(VULKAN_HEADERS_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR} PARENT_SCOPE)
|