2022-04-06 19:37:27 +00:00
|
|
|
# Copyright 2022 The Dawn & Tint Authors
|
2020-02-05 17:16:05 +00:00
|
|
|
#
|
|
|
|
# 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.
|
|
|
|
|
2020-03-02 20:47:43 +00:00
|
|
|
cmake_minimum_required(VERSION 3.10.2)
|
2020-02-05 17:16:05 +00:00
|
|
|
|
2022-04-19 22:25:45 +00:00
|
|
|
# When upgrading to CMake 3.11 we can remove DAWN_PLACEHOLDER_FILE because source-less add_library
|
2020-02-05 17:16:05 +00:00
|
|
|
# becomes available.
|
|
|
|
# When upgrading to CMake 3.12 we should add CONFIGURE_DEPENDS to DawnGenerator to rerun CMake in
|
2020-04-10 17:04:31 +00:00
|
|
|
# case any of the generator files changes. We should also remove the CACHE "" FORCE stuff to
|
2020-10-20 19:46:21 +00:00
|
|
|
# override options in third_party dependencies. We can also add the HOMEPAGE_URL
|
|
|
|
# entry to the project `HOMEPAGE_URL "https://dawn.googlesource.com/dawn"`
|
2020-02-05 17:16:05 +00:00
|
|
|
|
|
|
|
project(
|
|
|
|
Dawn
|
|
|
|
DESCRIPTION "Dawn, a WebGPU implementation"
|
|
|
|
LANGUAGES C CXX
|
|
|
|
)
|
2020-03-02 20:47:43 +00:00
|
|
|
enable_testing()
|
2020-02-05 17:16:05 +00:00
|
|
|
|
|
|
|
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
|
|
|
|
|
2020-03-02 20:47:43 +00:00
|
|
|
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR})
|
|
|
|
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
|
2022-01-06 09:23:11 +00:00
|
|
|
set(CMAKE_CXX_STANDARD 17)
|
2020-03-02 20:47:43 +00:00
|
|
|
set(CMAKE_DEBUG_POSTFIX "")
|
|
|
|
|
|
|
|
if ("${CMAKE_BUILD_TYPE}" STREQUAL "")
|
|
|
|
message(STATUS "No build type selected, default to Debug")
|
|
|
|
set(CMAKE_BUILD_TYPE "Debug")
|
2020-02-05 17:16:05 +00:00
|
|
|
endif()
|
|
|
|
|
|
|
|
set(DAWN_BUILD_GEN_DIR "${Dawn_BINARY_DIR}/gen")
|
|
|
|
set(DAWN_GENERATOR_DIR "${Dawn_SOURCE_DIR}/generator")
|
|
|
|
set(DAWN_SRC_DIR "${Dawn_SOURCE_DIR}/src")
|
2022-02-04 18:18:18 +00:00
|
|
|
set(DAWN_INCLUDE_DIR "${Dawn_SOURCE_DIR}/include")
|
2020-02-05 17:16:05 +00:00
|
|
|
set(DAWN_TEMPLATE_DIR "${DAWN_GENERATOR_DIR}/templates")
|
|
|
|
|
2022-04-19 22:25:45 +00:00
|
|
|
set(DAWN_PLACEHOLDER_FILE "${DAWN_SRC_DIR}/Placeholder.cpp")
|
2020-02-05 17:16:05 +00:00
|
|
|
|
|
|
|
################################################################################
|
|
|
|
# Configuration options
|
|
|
|
################################################################################
|
|
|
|
|
2021-09-24 10:38:18 +00:00
|
|
|
# option_if_not_defined(name description default)
|
|
|
|
# Behaves like:
|
|
|
|
# option(name description default)
|
|
|
|
# If a variable is not already defined with the given name, otherwise the
|
|
|
|
# function does nothing.
|
|
|
|
# Simplifies customization by projects that use Dawn as a dependency.
|
|
|
|
function (option_if_not_defined name description default)
|
|
|
|
if(NOT DEFINED ${name})
|
|
|
|
option(${name} ${description} ${default})
|
|
|
|
endif()
|
|
|
|
endfunction()
|
|
|
|
|
|
|
|
# set_if_not_defined(name value description)
|
|
|
|
# Behaves like:
|
|
|
|
# set(${name} ${value} CACHE STRING ${description})
|
|
|
|
# If a variable is not already defined with the given name, otherwise the
|
|
|
|
# function does nothing.
|
|
|
|
# Simplifies customization by projects that use Dawn as a dependency.
|
|
|
|
function (set_if_not_defined name value description)
|
|
|
|
if(NOT DEFINED ${name})
|
|
|
|
set(${name} ${value} CACHE STRING ${description})
|
|
|
|
endif()
|
|
|
|
endfunction()
|
|
|
|
|
2020-02-05 17:16:05 +00:00
|
|
|
# Default values for the backend-enabling options
|
|
|
|
set(ENABLE_D3D12 OFF)
|
|
|
|
set(ENABLE_METAL OFF)
|
2021-06-30 15:06:43 +00:00
|
|
|
set(ENABLE_OPENGLES OFF)
|
|
|
|
set(ENABLE_DESKTOP_GL OFF)
|
2020-02-05 17:16:05 +00:00
|
|
|
set(ENABLE_VULKAN OFF)
|
2020-02-18 02:12:35 +00:00
|
|
|
set(USE_X11 OFF)
|
2022-02-04 18:35:55 +00:00
|
|
|
set(BUILD_SAMPLES OFF)
|
2020-02-05 17:16:05 +00:00
|
|
|
if (WIN32)
|
|
|
|
set(ENABLE_D3D12 ON)
|
2021-06-28 08:19:28 +00:00
|
|
|
if (NOT WINDOWS_STORE)
|
2021-06-24 07:00:16 +00:00
|
|
|
# Enable Vulkan in win32 compilation only
|
|
|
|
# since UWP only supports d3d
|
|
|
|
set(ENABLE_VULKAN ON)
|
|
|
|
endif()
|
2020-02-05 17:16:05 +00:00
|
|
|
elseif(APPLE)
|
|
|
|
set(ENABLE_METAL ON)
|
2022-03-25 13:18:46 +00:00
|
|
|
elseif(ANDROID)
|
|
|
|
set(ENABLE_VULKAN ON)
|
|
|
|
set(ENABLE_OPENGLES ON)
|
2020-02-05 17:16:05 +00:00
|
|
|
elseif(UNIX)
|
2021-06-30 15:06:43 +00:00
|
|
|
set(ENABLE_OPENGLES ON)
|
|
|
|
set(ENABLE_DESKTOP_GL ON)
|
2020-02-05 17:16:05 +00:00
|
|
|
set(ENABLE_VULKAN ON)
|
2020-02-18 02:12:35 +00:00
|
|
|
set(USE_X11 ON)
|
2020-02-05 17:16:05 +00:00
|
|
|
endif()
|
|
|
|
|
2021-06-24 07:00:16 +00:00
|
|
|
# GLFW is not supported in UWP
|
2022-04-06 19:37:27 +00:00
|
|
|
if ((WIN32 AND NOT WINDOWS_STORE) OR UNIX AND NOT ANDROID)
|
2021-06-24 07:00:16 +00:00
|
|
|
set(DAWN_SUPPORTS_GLFW_FOR_WINDOWING ON)
|
|
|
|
endif()
|
|
|
|
|
|
|
|
# Current examples are depend on GLFW
|
|
|
|
if (DAWN_SUPPORTS_GLFW_FOR_WINDOWING)
|
2022-02-04 18:35:55 +00:00
|
|
|
set(BUILD_SAMPLES ON)
|
2021-06-24 07:00:16 +00:00
|
|
|
endif()
|
|
|
|
|
2022-04-08 18:08:36 +00:00
|
|
|
option_if_not_defined(DAWN_ENABLE_MSAN "Enable memory sanitizer" OFF)
|
|
|
|
option_if_not_defined(DAWN_ENABLE_ASAN "Enable address sanitizer" OFF)
|
|
|
|
option_if_not_defined(DAWN_ENABLE_UBSAN "Enable undefined behaviour sanitizer" OFF)
|
|
|
|
|
2021-09-24 10:38:18 +00:00
|
|
|
option_if_not_defined(DAWN_ENABLE_D3D12 "Enable compilation of the D3D12 backend" ${ENABLE_D3D12})
|
|
|
|
option_if_not_defined(DAWN_ENABLE_METAL "Enable compilation of the Metal backend" ${ENABLE_METAL})
|
|
|
|
option_if_not_defined(DAWN_ENABLE_NULL "Enable compilation of the Null backend" ON)
|
|
|
|
option_if_not_defined(DAWN_ENABLE_DESKTOP_GL "Enable compilation of the OpenGL backend" ${ENABLE_DESKTOP_GL})
|
|
|
|
option_if_not_defined(DAWN_ENABLE_OPENGLES "Enable compilation of the OpenGL ES backend" ${ENABLE_OPENGLES})
|
|
|
|
option_if_not_defined(DAWN_ENABLE_VULKAN "Enable compilation of the Vulkan backend" ${ENABLE_VULKAN})
|
|
|
|
option_if_not_defined(DAWN_ALWAYS_ASSERT "Enable assertions on all build types" OFF)
|
|
|
|
option_if_not_defined(DAWN_USE_X11 "Enable support for X11 surface" ${USE_X11})
|
2020-02-05 17:16:05 +00:00
|
|
|
|
2022-02-04 18:35:55 +00:00
|
|
|
option_if_not_defined(DAWN_BUILD_SAMPLES "Enables building Dawn's samples" ${BUILD_SAMPLES})
|
2021-09-28 11:14:42 +00:00
|
|
|
option_if_not_defined(DAWN_BUILD_NODE_BINDINGS "Enables building Dawn's NodeJS bindings" OFF)
|
2022-04-11 16:48:43 +00:00
|
|
|
option_if_not_defined(DAWN_ENABLE_SWIFTSHADER "Enables building Swiftshader as part of the build and Vulkan adapter discovery" OFF)
|
2021-09-28 11:14:42 +00:00
|
|
|
|
|
|
|
option_if_not_defined(DAWN_ENABLE_PIC "Build with Position-Independent-Code enabled" OFF)
|
2020-02-05 17:16:05 +00:00
|
|
|
|
2021-09-24 10:38:18 +00:00
|
|
|
set_if_not_defined(DAWN_THIRD_PARTY_DIR "${Dawn_SOURCE_DIR}/third_party" "Directory in which to find third-party dependencies.")
|
2020-10-20 14:26:10 +00:00
|
|
|
|
2021-09-23 20:36:03 +00:00
|
|
|
# Recommended setting for compability with future abseil releases.
|
|
|
|
set(ABSL_PROPAGATE_CXX_STD ON)
|
2021-09-24 10:38:18 +00:00
|
|
|
|
|
|
|
set_if_not_defined(DAWN_ABSEIL_DIR "${DAWN_THIRD_PARTY_DIR}/abseil-cpp" "Directory in which to find Abseil")
|
|
|
|
set_if_not_defined(DAWN_GLFW_DIR "${DAWN_THIRD_PARTY_DIR}/glfw" "Directory in which to find GLFW")
|
|
|
|
set_if_not_defined(DAWN_JINJA2_DIR "${DAWN_THIRD_PARTY_DIR}/jinja2" "Directory in which to find Jinja2")
|
|
|
|
set_if_not_defined(DAWN_SPIRV_HEADERS_DIR "${DAWN_THIRD_PARTY_DIR}/vulkan-deps/spirv-headers/src" "Directory in which to find SPIRV-Headers")
|
|
|
|
set_if_not_defined(DAWN_SPIRV_TOOLS_DIR "${DAWN_THIRD_PARTY_DIR}/vulkan-deps/spirv-tools/src" "Directory in which to find SPIRV-Tools")
|
2022-04-11 16:48:43 +00:00
|
|
|
set_if_not_defined(DAWN_SWIFTSHADER_DIR "${DAWN_THIRD_PARTY_DIR}/swiftshader" "Directory in which to find swiftshader")
|
2022-04-06 19:37:27 +00:00
|
|
|
set_if_not_defined(DAWN_TINT_DIR "${Dawn_SOURCE_DIR}" "Directory in which to find Tint")
|
2022-04-09 00:10:08 +00:00
|
|
|
set_if_not_defined(DAWN_VULKAN_DEPS_DIR "${DAWN_THIRD_PARTY_DIR}/vulkan-deps" "Directory in which to find vulkan-deps")
|
|
|
|
set_if_not_defined(DAWN_VULKAN_HEADERS_DIR "${DAWN_VULKAN_DEPS_DIR}/vulkan-headers/src" "Directory in which to find Vulkan-Headers")
|
2022-04-13 19:14:46 +00:00
|
|
|
set_if_not_defined(DAWN_VULKAN_TOOLS_DIR "${DAWN_VULKAN_DEPS_DIR}/vulkan-tools/src" "Directory in which to find Vulkan-Tools")
|
2020-02-05 17:16:05 +00:00
|
|
|
|
2021-09-28 11:14:42 +00:00
|
|
|
# Dependencies for DAWN_BUILD_NODE_BINDINGS
|
|
|
|
set_if_not_defined(NODE_ADDON_API_DIR "${DAWN_THIRD_PARTY_DIR}/node-addon-api" "Directory in which to find node-addon-api")
|
2021-09-30 18:04:01 +00:00
|
|
|
set_if_not_defined(NODE_API_HEADERS_DIR "${DAWN_THIRD_PARTY_DIR}/node-api-headers" "Directory in which to find node-api-headers")
|
2021-09-28 11:14:42 +00:00
|
|
|
set_if_not_defined(WEBGPU_IDL_PATH "${DAWN_THIRD_PARTY_DIR}/gpuweb/webgpu.idl" "Path to the webgpu.idl definition file")
|
2021-10-15 14:28:32 +00:00
|
|
|
set_if_not_defined(GO_EXECUTABLE "go" "Golang executable for running the IDL generator")
|
2021-09-28 11:14:42 +00:00
|
|
|
|
2021-06-30 15:06:43 +00:00
|
|
|
# Much of the backend code is shared among desktop OpenGL and OpenGL ES
|
|
|
|
if (${DAWN_ENABLE_DESKTOP_GL} OR ${DAWN_ENABLE_OPENGLES})
|
|
|
|
set(DAWN_ENABLE_OPENGL ON)
|
|
|
|
endif()
|
|
|
|
|
2021-09-28 11:14:42 +00:00
|
|
|
if(DAWN_ENABLE_PIC)
|
|
|
|
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
|
|
|
|
endif()
|
|
|
|
|
2022-04-08 18:08:36 +00:00
|
|
|
################################################################################
|
|
|
|
# common_compile_options - sets compiler and linker options common for dawn and
|
|
|
|
# tint on the given target
|
|
|
|
################################################################################
|
|
|
|
function(common_compile_options TARGET)
|
|
|
|
if (COMPILER_IS_LIKE_GNU)
|
|
|
|
target_compile_options(${TARGET} PRIVATE
|
|
|
|
-fno-exceptions
|
|
|
|
-fno-rtti
|
2022-05-16 09:16:41 +00:00
|
|
|
-fvisibility-inlines-hidden
|
2022-04-08 18:08:36 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
if (${DAWN_ENABLE_MSAN})
|
|
|
|
target_compile_options(${TARGET} PRIVATE -fsanitize=memory)
|
|
|
|
target_link_options(${TARGET} PRIVATE -fsanitize=memory)
|
|
|
|
elseif (${DAWN_ENABLE_ASAN})
|
|
|
|
target_compile_options(${TARGET} PRIVATE -fsanitize=address)
|
|
|
|
target_link_options(${TARGET} PRIVATE -fsanitize=address)
|
|
|
|
elseif (${DAWN_ENABLE_UBSAN})
|
|
|
|
target_compile_options(${TARGET} PRIVATE -fsanitize=undefined)
|
|
|
|
target_link_options(${TARGET} PRIVATE -fsanitize=undefined)
|
|
|
|
endif()
|
|
|
|
endif(COMPILER_IS_LIKE_GNU)
|
|
|
|
endfunction()
|
|
|
|
|
2020-02-05 17:16:05 +00:00
|
|
|
################################################################################
|
|
|
|
# Dawn's public and internal "configs"
|
|
|
|
################################################################################
|
|
|
|
|
|
|
|
# The public config contains only the include paths for the Dawn headers.
|
|
|
|
add_library(dawn_public_config INTERFACE)
|
|
|
|
target_include_directories(dawn_public_config INTERFACE
|
2022-02-04 18:18:18 +00:00
|
|
|
"${DAWN_INCLUDE_DIR}"
|
|
|
|
"${DAWN_BUILD_GEN_DIR}/include"
|
2020-02-05 17:16:05 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
# The internal config conatins additional path but includes the dawn_public_config include paths
|
|
|
|
add_library(dawn_internal_config INTERFACE)
|
|
|
|
target_include_directories(dawn_internal_config INTERFACE
|
|
|
|
"${DAWN_SRC_DIR}"
|
|
|
|
"${DAWN_BUILD_GEN_DIR}/src"
|
|
|
|
)
|
|
|
|
target_link_libraries(dawn_internal_config INTERFACE dawn_public_config)
|
|
|
|
|
|
|
|
# Compile definitions for the internal config
|
|
|
|
if (DAWN_ALWAYS_ASSERT OR $<CONFIG:Debug>)
|
|
|
|
target_compile_definitions(dawn_internal_config INTERFACE "DAWN_ENABLE_ASSERTS")
|
|
|
|
endif()
|
|
|
|
if (DAWN_ENABLE_D3D12)
|
|
|
|
target_compile_definitions(dawn_internal_config INTERFACE "DAWN_ENABLE_BACKEND_D3D12")
|
|
|
|
endif()
|
|
|
|
if (DAWN_ENABLE_METAL)
|
|
|
|
target_compile_definitions(dawn_internal_config INTERFACE "DAWN_ENABLE_BACKEND_METAL")
|
|
|
|
endif()
|
|
|
|
if (DAWN_ENABLE_NULL)
|
|
|
|
target_compile_definitions(dawn_internal_config INTERFACE "DAWN_ENABLE_BACKEND_NULL")
|
|
|
|
endif()
|
2021-06-30 15:06:43 +00:00
|
|
|
if (DAWN_ENABLE_DESKTOP_GL)
|
|
|
|
target_compile_definitions(dawn_internal_config INTERFACE "DAWN_ENABLE_BACKEND_DESKTOP_GL")
|
|
|
|
endif()
|
|
|
|
if (DAWN_ENABLE_OPENGLES)
|
|
|
|
target_compile_definitions(dawn_internal_config INTERFACE "DAWN_ENABLE_BACKEND_OPENGLES")
|
|
|
|
endif()
|
2020-02-05 17:16:05 +00:00
|
|
|
if (DAWN_ENABLE_OPENGL)
|
|
|
|
target_compile_definitions(dawn_internal_config INTERFACE "DAWN_ENABLE_BACKEND_OPENGL")
|
|
|
|
endif()
|
|
|
|
if (DAWN_ENABLE_VULKAN)
|
|
|
|
target_compile_definitions(dawn_internal_config INTERFACE "DAWN_ENABLE_BACKEND_VULKAN")
|
|
|
|
endif()
|
2020-02-18 02:12:35 +00:00
|
|
|
if (DAWN_USE_X11)
|
2020-02-05 17:16:05 +00:00
|
|
|
target_compile_definitions(dawn_internal_config INTERFACE "DAWN_USE_X11")
|
|
|
|
endif()
|
2020-02-24 13:27:28 +00:00
|
|
|
if (WIN32)
|
|
|
|
target_compile_definitions(dawn_internal_config INTERFACE "NOMINMAX" "WIN32_LEAN_AND_MEAN")
|
|
|
|
endif()
|
|
|
|
|
2022-01-05 09:26:46 +00:00
|
|
|
set(CMAKE_CXX_STANDARD "17")
|
2020-02-05 17:16:05 +00:00
|
|
|
|
2022-04-06 19:37:27 +00:00
|
|
|
################################################################################
|
|
|
|
# Tint
|
|
|
|
################################################################################
|
|
|
|
|
|
|
|
# TINT_IS_SUBPROJECT is 1 if added via add_subdirectory() from another project.
|
|
|
|
get_directory_property(TINT_IS_SUBPROJECT PARENT_DIRECTORY)
|
|
|
|
if(TINT_IS_SUBPROJECT)
|
|
|
|
set(TINT_IS_SUBPROJECT 1)
|
|
|
|
|
|
|
|
# If tint is used as a subproject, default to disabling the building of
|
|
|
|
# documentation and tests. These are unlikely to be desirable, but can be
|
|
|
|
# enabled.
|
|
|
|
set(TINT_BUILD_DOCS_DEFAULT OFF)
|
|
|
|
set(TINT_BUILD_TESTS_DEFAULT OFF)
|
|
|
|
else()
|
|
|
|
set(TINT_BUILD_DOCS_DEFAULT ON)
|
|
|
|
set(TINT_BUILD_TESTS_DEFAULT ON)
|
|
|
|
endif()
|
|
|
|
|
2021-10-15 19:10:50 +00:00
|
|
|
option_if_not_defined(TINT_BUILD_SAMPLES "Build samples" ON)
|
|
|
|
option_if_not_defined(TINT_BUILD_DOCS "Build documentation" ${TINT_BUILD_DOCS_DEFAULT})
|
|
|
|
option_if_not_defined(TINT_DOCS_WARN_AS_ERROR "When building documentation, treat warnings as errors" OFF)
|
|
|
|
option_if_not_defined(TINT_BUILD_SPV_READER "Build the SPIR-V input reader" ON)
|
|
|
|
option_if_not_defined(TINT_BUILD_WGSL_READER "Build the WGSL input reader" ON)
|
|
|
|
option_if_not_defined(TINT_BUILD_GLSL_WRITER "Build the GLSL output writer" ON)
|
|
|
|
option_if_not_defined(TINT_BUILD_HLSL_WRITER "Build the HLSL output writer" ON)
|
|
|
|
option_if_not_defined(TINT_BUILD_MSL_WRITER "Build the MSL output writer" ON)
|
|
|
|
option_if_not_defined(TINT_BUILD_SPV_WRITER "Build the SPIR-V output writer" ON)
|
|
|
|
option_if_not_defined(TINT_BUILD_WGSL_WRITER "Build the WGSL output writer" ON)
|
|
|
|
option_if_not_defined(TINT_BUILD_FUZZERS "Build fuzzers" OFF)
|
|
|
|
option_if_not_defined(TINT_BUILD_SPIRV_TOOLS_FUZZER "Build SPIRV-Tools fuzzer" OFF)
|
|
|
|
option_if_not_defined(TINT_BUILD_AST_FUZZER "Build AST fuzzer" OFF)
|
|
|
|
option_if_not_defined(TINT_BUILD_REGEX_FUZZER "Build regex fuzzer" OFF)
|
2022-01-18 18:58:16 +00:00
|
|
|
option_if_not_defined(TINT_BUILD_BENCHMARKS "Build benchmarks" OFF)
|
2021-10-15 19:10:50 +00:00
|
|
|
option_if_not_defined(TINT_BUILD_TESTS "Build tests" ${TINT_BUILD_TESTS_DEFAULT})
|
|
|
|
option_if_not_defined(TINT_BUILD_AS_OTHER_OS "Override OS detection to force building of *_other.cc files" OFF)
|
|
|
|
option_if_not_defined(TINT_BUILD_REMOTE_COMPILE "Build the remote-compile tool for validating shaders on a remote machine" OFF)
|
2020-04-28 19:27:38 +00:00
|
|
|
|
2021-09-02 23:49:25 +00:00
|
|
|
set(TINT_LIB_FUZZING_ENGINE_LINK_OPTIONS "" CACHE STRING "Used by OSS-Fuzz to control, via link options, which fuzzing engine should be used")
|
|
|
|
|
2022-02-18 18:56:43 +00:00
|
|
|
option_if_not_defined(TINT_ENABLE_BREAK_IN_DEBUGGER "Enable tint::debugger::Break()" OFF)
|
|
|
|
|
2021-10-15 19:10:50 +00:00
|
|
|
option_if_not_defined(TINT_EMIT_COVERAGE "Emit code coverage information" OFF)
|
2020-10-27 21:04:59 +00:00
|
|
|
|
2021-10-15 19:10:50 +00:00
|
|
|
option_if_not_defined(TINT_CHECK_CHROMIUM_STYLE "Check for [chromium-style] issues during build" OFF)
|
2020-04-28 19:27:38 +00:00
|
|
|
|
2021-12-07 14:43:17 +00:00
|
|
|
option_if_not_defined(TINT_SYMBOL_STORE_DEBUG_NAME "Enable storing of name in tint::ast::Symbol to help debugging the AST" OFF)
|
|
|
|
|
2021-08-31 18:43:36 +00:00
|
|
|
message(STATUS "Tint build samples: ${TINT_BUILD_SAMPLES}")
|
2020-03-02 20:47:43 +00:00
|
|
|
message(STATUS "Tint build docs: ${TINT_BUILD_DOCS}")
|
2021-06-25 14:00:36 +00:00
|
|
|
message(STATUS "Tint build docs with warn as error: ${TINT_DOCS_WARN_AS_ERROR}")
|
2020-03-18 14:08:48 +00:00
|
|
|
message(STATUS "Tint build SPIR-V reader: ${TINT_BUILD_SPV_READER}")
|
|
|
|
message(STATUS "Tint build WGSL reader: ${TINT_BUILD_WGSL_READER}")
|
Implement GLSL writer backend.
This is a modified version of the HLSL writer.
Basic types, arrays, entry points, reserved keywords, uniforms,
builtin uniforms, structs, some builtin functions, zero initialization
are implemented. Textures, SSBOs and storage textures in particular are
unimplemented. All the unit tests "pass", but the output is not correct
in many cases.
triangle.wgsl outputs correct vertex and fragment shaders that pass
GLSL validation via glslang. compute_boids.wgsl outputs a valid but not
correct compute shader.
Change-Id: I96c7aaf60cf2d4237e45d732e5f51b345aea0552
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/57780
Kokoro: Kokoro <noreply+kokoro@google.com>
Commit-Queue: Stephen White <senorblanco@chromium.org>
Reviewed-by: Ben Clayton <bclayton@google.com>
2021-10-06 18:55:10 +00:00
|
|
|
message(STATUS "Tint build GLSL writer: ${TINT_BUILD_GLSL_WRITER}")
|
2020-07-20 22:13:37 +00:00
|
|
|
message(STATUS "Tint build HLSL writer: ${TINT_BUILD_HLSL_WRITER}")
|
2020-06-23 17:48:40 +00:00
|
|
|
message(STATUS "Tint build MSL writer: ${TINT_BUILD_MSL_WRITER}")
|
2020-03-18 14:08:48 +00:00
|
|
|
message(STATUS "Tint build SPIR-V writer: ${TINT_BUILD_SPV_WRITER}")
|
|
|
|
message(STATUS "Tint build WGSL writer: ${TINT_BUILD_WGSL_WRITER}")
|
2020-03-02 20:47:43 +00:00
|
|
|
message(STATUS "Tint build fuzzers: ${TINT_BUILD_FUZZERS}")
|
2021-06-24 18:10:46 +00:00
|
|
|
message(STATUS "Tint build SPIRV-Tools fuzzer: ${TINT_BUILD_SPIRV_TOOLS_FUZZER}")
|
2021-07-13 12:01:25 +00:00
|
|
|
message(STATUS "Tint build AST fuzzer: ${TINT_BUILD_AST_FUZZER}")
|
2021-07-28 11:11:26 +00:00
|
|
|
message(STATUS "Tint build regex fuzzer: ${TINT_BUILD_REGEX_FUZZER}")
|
2022-01-18 18:58:16 +00:00
|
|
|
message(STATUS "Tint build benchmarks: ${TINT_BUILD_BENCHMARKS}")
|
2020-12-09 14:47:30 +00:00
|
|
|
message(STATUS "Tint build tests: ${TINT_BUILD_TESTS}")
|
2022-04-08 18:08:36 +00:00
|
|
|
message(STATUS "Tint build with ASAN: ${DAWN_ENABLE_ASAN}")
|
|
|
|
message(STATUS "Tint build with MSAN: ${DAWN_ENABLE_MSAN}")
|
|
|
|
message(STATUS "Tint build with UBSAN: ${DAWN_ENABLE_UBSAN}")
|
2020-04-28 19:27:38 +00:00
|
|
|
message(STATUS "Tint build checking [chromium-style]: ${TINT_CHECK_CHROMIUM_STYLE}")
|
2021-07-08 19:35:53 +00:00
|
|
|
message(STATUS "Tint build remote-compile tool: ${TINT_BUILD_REMOTE_COMPILE}")
|
2020-03-02 20:47:43 +00:00
|
|
|
|
2021-09-02 23:49:25 +00:00
|
|
|
if (NOT ${TINT_LIB_FUZZING_ENGINE_LINK_OPTIONS} STREQUAL "")
|
|
|
|
message(STATUS "Using provided LIB_FUZZING_ENGINE options: ${TINT_LIB_FUZZING_ENGINE_LINK_OPTIONS}")
|
|
|
|
endif()
|
|
|
|
|
2020-03-02 20:47:43 +00:00
|
|
|
message(STATUS "Using python3")
|
|
|
|
find_package(PythonInterp 3 REQUIRED)
|
|
|
|
|
2021-06-24 18:10:46 +00:00
|
|
|
if (${TINT_BUILD_SPIRV_TOOLS_FUZZER})
|
|
|
|
message(STATUS "TINT_BUILD_SPIRV_TOOLS_FUZZER is ON - setting
|
2021-07-13 12:01:25 +00:00
|
|
|
TINT_BUILD_FUZZERS
|
|
|
|
TINT_BUILD_SPV_READER
|
2021-07-22 10:14:34 +00:00
|
|
|
TINT_BUILD_SPV_WRITER
|
2021-07-13 12:01:25 +00:00
|
|
|
TINT_BUILD_WGSL_READER
|
|
|
|
TINT_BUILD_WGSL_WRITER
|
Implement GLSL writer backend.
This is a modified version of the HLSL writer.
Basic types, arrays, entry points, reserved keywords, uniforms,
builtin uniforms, structs, some builtin functions, zero initialization
are implemented. Textures, SSBOs and storage textures in particular are
unimplemented. All the unit tests "pass", but the output is not correct
in many cases.
triangle.wgsl outputs correct vertex and fragment shaders that pass
GLSL validation via glslang. compute_boids.wgsl outputs a valid but not
correct compute shader.
Change-Id: I96c7aaf60cf2d4237e45d732e5f51b345aea0552
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/57780
Kokoro: Kokoro <noreply+kokoro@google.com>
Commit-Queue: Stephen White <senorblanco@chromium.org>
Reviewed-by: Ben Clayton <bclayton@google.com>
2021-10-06 18:55:10 +00:00
|
|
|
TINT_BUILD_GLSL_WRITER
|
2021-07-13 12:01:25 +00:00
|
|
|
TINT_BUILD_HLSL_WRITER
|
2021-07-22 10:14:34 +00:00
|
|
|
TINT_BUILD_MSL_WRITER to ON")
|
|
|
|
set(TINT_BUILD_FUZZERS ON CACHE BOOL "Build tint fuzzers" FORCE)
|
|
|
|
set(TINT_BUILD_SPV_READER ON CACHE BOOL "Build SPIR-V reader" FORCE)
|
|
|
|
set(TINT_BUILD_SPV_WRITER ON CACHE BOOL "Build SPIR-V writer" FORCE)
|
|
|
|
set(TINT_BUILD_WGSL_READER ON CACHE BOOL "Build WGSL reader" FORCE)
|
|
|
|
set(TINT_BUILD_WGSL_WRITER ON CACHE BOOL "Build WGSL writer" FORCE)
|
Implement GLSL writer backend.
This is a modified version of the HLSL writer.
Basic types, arrays, entry points, reserved keywords, uniforms,
builtin uniforms, structs, some builtin functions, zero initialization
are implemented. Textures, SSBOs and storage textures in particular are
unimplemented. All the unit tests "pass", but the output is not correct
in many cases.
triangle.wgsl outputs correct vertex and fragment shaders that pass
GLSL validation via glslang. compute_boids.wgsl outputs a valid but not
correct compute shader.
Change-Id: I96c7aaf60cf2d4237e45d732e5f51b345aea0552
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/57780
Kokoro: Kokoro <noreply+kokoro@google.com>
Commit-Queue: Stephen White <senorblanco@chromium.org>
Reviewed-by: Ben Clayton <bclayton@google.com>
2021-10-06 18:55:10 +00:00
|
|
|
set(TINT_BUILD_GLSL_WRITER ON CACHE BOOL "Build HLSL writer" FORCE)
|
2021-07-22 10:14:34 +00:00
|
|
|
set(TINT_BUILD_HLSL_WRITER ON CACHE BOOL "Build HLSL writer" FORCE)
|
|
|
|
set(TINT_BUILD_MSL_WRITER ON CACHE BOOL "Build MSL writer" FORCE)
|
2021-06-24 18:10:46 +00:00
|
|
|
endif()
|
|
|
|
|
2021-07-13 12:01:25 +00:00
|
|
|
if (${TINT_BUILD_AST_FUZZER})
|
|
|
|
message(STATUS "TINT_BUILD_AST_FUZZER is ON - setting
|
|
|
|
TINT_BUILD_FUZZERS
|
|
|
|
TINT_BUILD_WGSL_READER
|
|
|
|
TINT_BUILD_WGSL_WRITER
|
|
|
|
TINT_BUILD_SPV_WRITER
|
|
|
|
TINT_BUILD_MSL_WRITER
|
Implement GLSL writer backend.
This is a modified version of the HLSL writer.
Basic types, arrays, entry points, reserved keywords, uniforms,
builtin uniforms, structs, some builtin functions, zero initialization
are implemented. Textures, SSBOs and storage textures in particular are
unimplemented. All the unit tests "pass", but the output is not correct
in many cases.
triangle.wgsl outputs correct vertex and fragment shaders that pass
GLSL validation via glslang. compute_boids.wgsl outputs a valid but not
correct compute shader.
Change-Id: I96c7aaf60cf2d4237e45d732e5f51b345aea0552
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/57780
Kokoro: Kokoro <noreply+kokoro@google.com>
Commit-Queue: Stephen White <senorblanco@chromium.org>
Reviewed-by: Ben Clayton <bclayton@google.com>
2021-10-06 18:55:10 +00:00
|
|
|
TINT_BUILD_GLSL_WRITER
|
2021-07-13 12:01:25 +00:00
|
|
|
TINT_BUILD_HLSL_WRITER to ON")
|
2021-07-22 10:14:34 +00:00
|
|
|
set(TINT_BUILD_FUZZERS ON CACHE BOOL "Build tint fuzzers" FORCE)
|
|
|
|
set(TINT_BUILD_WGSL_READER ON CACHE BOOL "Build WGSL reader" FORCE)
|
|
|
|
set(TINT_BUILD_WGSL_WRITER ON CACHE BOOL "Build WGSL writer" FORCE)
|
|
|
|
set(TINT_BUILD_SPV_WRITER ON CACHE BOOL "Build SPIR-V writer" FORCE)
|
|
|
|
set(TINT_BUILD_MSL_WRITER ON CACHE BOOL "Build MSL writer" FORCE)
|
Implement GLSL writer backend.
This is a modified version of the HLSL writer.
Basic types, arrays, entry points, reserved keywords, uniforms,
builtin uniforms, structs, some builtin functions, zero initialization
are implemented. Textures, SSBOs and storage textures in particular are
unimplemented. All the unit tests "pass", but the output is not correct
in many cases.
triangle.wgsl outputs correct vertex and fragment shaders that pass
GLSL validation via glslang. compute_boids.wgsl outputs a valid but not
correct compute shader.
Change-Id: I96c7aaf60cf2d4237e45d732e5f51b345aea0552
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/57780
Kokoro: Kokoro <noreply+kokoro@google.com>
Commit-Queue: Stephen White <senorblanco@chromium.org>
Reviewed-by: Ben Clayton <bclayton@google.com>
2021-10-06 18:55:10 +00:00
|
|
|
set(TINT_BUILD_GLSL_WRITER ON CACHE BOOL "Build GLSL writer" FORCE)
|
2021-07-22 10:14:34 +00:00
|
|
|
set(TINT_BUILD_HLSL_WRITER ON CACHE BOOL "Build HLSL writer" FORCE)
|
2021-07-13 12:01:25 +00:00
|
|
|
endif()
|
|
|
|
|
2021-07-28 11:11:26 +00:00
|
|
|
if (${TINT_BUILD_REGEX_FUZZER})
|
|
|
|
message(STATUS "TINT_BUILD_REGEX_FUZZER is ON - setting
|
|
|
|
TINT_BUILD_FUZZERS
|
|
|
|
TINT_BUILD_WGSL_READER
|
|
|
|
TINT_BUILD_WGSL_WRITER
|
|
|
|
TINT_BUILD_SPV_WRITER
|
|
|
|
TINT_BUILD_MSL_WRITER
|
Implement GLSL writer backend.
This is a modified version of the HLSL writer.
Basic types, arrays, entry points, reserved keywords, uniforms,
builtin uniforms, structs, some builtin functions, zero initialization
are implemented. Textures, SSBOs and storage textures in particular are
unimplemented. All the unit tests "pass", but the output is not correct
in many cases.
triangle.wgsl outputs correct vertex and fragment shaders that pass
GLSL validation via glslang. compute_boids.wgsl outputs a valid but not
correct compute shader.
Change-Id: I96c7aaf60cf2d4237e45d732e5f51b345aea0552
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/57780
Kokoro: Kokoro <noreply+kokoro@google.com>
Commit-Queue: Stephen White <senorblanco@chromium.org>
Reviewed-by: Ben Clayton <bclayton@google.com>
2021-10-06 18:55:10 +00:00
|
|
|
TINT_BUILD_GLSL_WRITER
|
2021-07-28 11:11:26 +00:00
|
|
|
TINT_BUILD_HLSL_WRITER to ON")
|
|
|
|
set(TINT_BUILD_FUZZERS ON CACHE BOOL "Build tint fuzzers" FORCE)
|
|
|
|
set(TINT_BUILD_WGSL_READER ON CACHE BOOL "Build WGSL reader" FORCE)
|
|
|
|
set(TINT_BUILD_WGSL_WRITER ON CACHE BOOL "Build WGSL writer" FORCE)
|
|
|
|
set(TINT_BUILD_SPV_WRITER ON CACHE BOOL "Build SPIR-V writer" FORCE)
|
|
|
|
set(TINT_BUILD_MSL_WRITER ON CACHE BOOL "Build MSL writer" FORCE)
|
Implement GLSL writer backend.
This is a modified version of the HLSL writer.
Basic types, arrays, entry points, reserved keywords, uniforms,
builtin uniforms, structs, some builtin functions, zero initialization
are implemented. Textures, SSBOs and storage textures in particular are
unimplemented. All the unit tests "pass", but the output is not correct
in many cases.
triangle.wgsl outputs correct vertex and fragment shaders that pass
GLSL validation via glslang. compute_boids.wgsl outputs a valid but not
correct compute shader.
Change-Id: I96c7aaf60cf2d4237e45d732e5f51b345aea0552
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/57780
Kokoro: Kokoro <noreply+kokoro@google.com>
Commit-Queue: Stephen White <senorblanco@chromium.org>
Reviewed-by: Ben Clayton <bclayton@google.com>
2021-10-06 18:55:10 +00:00
|
|
|
set(TINT_BUILD_GLSL_WRITER ON CACHE BOOL "Build GLSL writer" FORCE)
|
2021-07-28 11:11:26 +00:00
|
|
|
set(TINT_BUILD_HLSL_WRITER ON CACHE BOOL "Build HLSL writer" FORCE)
|
|
|
|
endif()
|
|
|
|
|
2021-07-08 19:35:53 +00:00
|
|
|
set(TINT_ROOT_SOURCE_DIR ${PROJECT_SOURCE_DIR})
|
|
|
|
|
2021-03-17 13:32:54 +00:00
|
|
|
# CMake < 3.15 sets /W3 in CMAKE_CXX_FLAGS. Remove it if it's there.
|
|
|
|
# See https://gitlab.kitware.com/cmake/cmake/-/issues/18317
|
|
|
|
if (MSVC)
|
2021-06-24 18:10:46 +00:00
|
|
|
if (CMAKE_CXX_FLAGS MATCHES "/W3")
|
|
|
|
string(REPLACE "/W3" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
|
|
|
|
endif()
|
2021-03-17 13:32:54 +00:00
|
|
|
endif()
|
|
|
|
|
2020-04-28 19:27:38 +00:00
|
|
|
if (${TINT_CHECK_CHROMIUM_STYLE})
|
|
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Xclang -add-plugin -Xclang find-bad-constructs")
|
|
|
|
endif()
|
|
|
|
|
2020-03-18 14:08:48 +00:00
|
|
|
if (${TINT_BUILD_SPV_READER})
|
2022-04-06 19:37:27 +00:00
|
|
|
include_directories("${DAWN_THIRD_PARTY_DIR}/vulkan-deps/spirv-tools/include")
|
2020-03-02 20:47:43 +00:00
|
|
|
endif()
|
|
|
|
|
2021-03-23 20:51:09 +00:00
|
|
|
if((CMAKE_CXX_COMPILER_ID STREQUAL "Clang") AND (CMAKE_CXX_SIMULATE_ID STREQUAL "MSVC"))
|
|
|
|
set(COMPILER_IS_CLANG_CL TRUE)
|
|
|
|
endif()
|
|
|
|
|
|
|
|
if((CMAKE_CXX_COMPILER_ID STREQUAL "GNU") OR
|
|
|
|
(CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang") OR
|
|
|
|
((CMAKE_CXX_COMPILER_ID STREQUAL "Clang") AND
|
|
|
|
(NOT COMPILER_IS_CLANG_CL)))
|
2020-03-02 20:47:43 +00:00
|
|
|
set(COMPILER_IS_LIKE_GNU TRUE)
|
|
|
|
endif()
|
|
|
|
|
2021-03-23 20:51:09 +00:00
|
|
|
# Enable msbuild multiprocessor builds
|
|
|
|
if (MSVC AND NOT COMPILER_IS_CLANG_CL)
|
|
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP")
|
|
|
|
endif()
|
|
|
|
|
2021-04-16 14:43:34 +00:00
|
|
|
set(TINT_OS_CC_SUFFIX "other")
|
|
|
|
if (NOT TINT_BUILD_AS_OTHER_OS)
|
|
|
|
if(UNIX OR APPLE)
|
|
|
|
set(TINT_OS_CC_SUFFIX "posix")
|
|
|
|
set(TINT_OS_CC_SUFFIX "posix")
|
|
|
|
elseif(WIN32)
|
|
|
|
set(TINT_OS_CC_SUFFIX "windows")
|
|
|
|
set(TINT_OS_CC_SUFFIX "windows")
|
|
|
|
endif()
|
|
|
|
endif()
|
|
|
|
|
2020-06-26 22:29:27 +00:00
|
|
|
if(${TINT_BUILD_DOCS})
|
|
|
|
find_package(Doxygen)
|
|
|
|
if(DOXYGEN_FOUND)
|
2021-06-25 14:00:36 +00:00
|
|
|
set(DOXYGEN_WARN_AS_ERROR NO)
|
|
|
|
if(TINT_DOCS_WARN_AS_ERROR)
|
|
|
|
set(DOXYGEN_WARN_AS_ERROR YES)
|
|
|
|
endif()
|
2021-06-25 14:53:06 +00:00
|
|
|
|
|
|
|
set(DOXYGEN_WARN_FORMAT "$file:$line: $text")
|
|
|
|
if (MSVC)
|
|
|
|
set(DOXYGEN_WARN_FORMAT "$file($line): $text")
|
|
|
|
endif()
|
|
|
|
|
2020-06-26 22:29:27 +00:00
|
|
|
add_custom_target(tint-docs ALL
|
2021-05-12 08:15:41 +00:00
|
|
|
COMMAND ${CMAKE_COMMAND}
|
2021-06-25 14:00:36 +00:00
|
|
|
-E env
|
|
|
|
"DOXYGEN_OUTPUT_DIRECTORY=${CMAKE_BINARY_DIR}/docs"
|
|
|
|
"DOXYGEN_WARN_AS_ERROR=${DOXYGEN_WARN_AS_ERROR}"
|
2021-06-25 14:53:06 +00:00
|
|
|
"DOXYGEN_WARN_FORMAT=${DOXYGEN_WARN_FORMAT}"
|
2021-05-12 08:15:41 +00:00
|
|
|
${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile
|
2020-06-26 22:29:27 +00:00
|
|
|
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
|
|
|
|
COMMENT "Generating API documentation"
|
|
|
|
VERBATIM)
|
|
|
|
else()
|
|
|
|
message("Doxygen not found. Skipping documentation")
|
|
|
|
endif(DOXYGEN_FOUND)
|
2020-07-15 20:54:48 +00:00
|
|
|
endif()
|
2020-03-02 20:47:43 +00:00
|
|
|
|
2022-01-18 18:58:16 +00:00
|
|
|
function(tint_core_compile_options TARGET)
|
2021-07-08 19:35:53 +00:00
|
|
|
target_include_directories(${TARGET} PUBLIC "${TINT_ROOT_SOURCE_DIR}")
|
|
|
|
target_include_directories(${TARGET} PUBLIC "${TINT_ROOT_SOURCE_DIR}/include")
|
2020-10-23 17:04:10 +00:00
|
|
|
|
|
|
|
if (${TINT_BUILD_SPV_READER} OR ${TINT_BUILD_SPV_WRITER})
|
|
|
|
target_include_directories(${TARGET} PUBLIC
|
2022-04-06 19:37:27 +00:00
|
|
|
"${DAWN_THIRD_PARTY_DIR}/spirv-headers/include")
|
2020-10-23 17:04:10 +00:00
|
|
|
endif()
|
2020-03-02 20:47:43 +00:00
|
|
|
|
2022-01-18 18:58:16 +00:00
|
|
|
target_compile_definitions(${TARGET} PUBLIC -DTINT_BUILD_SPV_READER=$<BOOL:${TINT_BUILD_SPV_READER}>)
|
|
|
|
target_compile_definitions(${TARGET} PUBLIC -DTINT_BUILD_WGSL_READER=$<BOOL:${TINT_BUILD_WGSL_READER}>)
|
|
|
|
target_compile_definitions(${TARGET} PUBLIC -DTINT_BUILD_GLSL_WRITER=$<BOOL:${TINT_BUILD_GLSL_WRITER}>)
|
|
|
|
target_compile_definitions(${TARGET} PUBLIC -DTINT_BUILD_HLSL_WRITER=$<BOOL:${TINT_BUILD_HLSL_WRITER}>)
|
|
|
|
target_compile_definitions(${TARGET} PUBLIC -DTINT_BUILD_MSL_WRITER=$<BOOL:${TINT_BUILD_MSL_WRITER}>)
|
|
|
|
target_compile_definitions(${TARGET} PUBLIC -DTINT_BUILD_SPV_WRITER=$<BOOL:${TINT_BUILD_SPV_WRITER}>)
|
|
|
|
target_compile_definitions(${TARGET} PUBLIC -DTINT_BUILD_WGSL_WRITER=$<BOOL:${TINT_BUILD_WGSL_WRITER}>)
|
|
|
|
|
2022-04-08 18:08:36 +00:00
|
|
|
common_compile_options(${TARGET})
|
2022-01-18 18:58:16 +00:00
|
|
|
|
|
|
|
if (TINT_EMIT_COVERAGE)
|
|
|
|
if(CMAKE_CXX_COMPILER_ID MATCHES "GNU")
|
|
|
|
target_compile_options(${TARGET} PRIVATE "--coverage")
|
|
|
|
target_link_options(${TARGET} PRIVATE "gcov")
|
|
|
|
elseif(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
|
|
|
|
target_compile_options(${TARGET} PRIVATE "-fprofile-instr-generate" "-fcoverage-mapping")
|
|
|
|
target_link_options(${TARGET} PRIVATE "-fprofile-instr-generate" "-fcoverage-mapping")
|
|
|
|
else()
|
|
|
|
message(FATAL_ERROR "Coverage generation not supported for the ${CMAKE_CXX_COMPILER_ID} toolchain")
|
|
|
|
endif()
|
|
|
|
endif(TINT_EMIT_COVERAGE)
|
|
|
|
endfunction()
|
|
|
|
|
|
|
|
function(tint_default_compile_options TARGET)
|
|
|
|
tint_core_compile_options(${TARGET})
|
2020-03-11 18:43:12 +00:00
|
|
|
|
2021-04-27 19:24:47 +00:00
|
|
|
set(COMMON_GNU_OPTIONS
|
|
|
|
-Wall
|
|
|
|
-Werror
|
|
|
|
-Wextra
|
|
|
|
-Wno-documentation-unknown-command
|
|
|
|
-Wno-padded
|
|
|
|
-Wno-switch-enum
|
|
|
|
-Wno-unknown-pragmas
|
|
|
|
)
|
|
|
|
|
|
|
|
set(COMMON_CLANG_OPTIONS
|
|
|
|
-Wno-c++98-compat
|
|
|
|
-Wno-c++98-compat-pedantic
|
|
|
|
-Wno-format-pedantic
|
|
|
|
-Wno-return-std-move-in-c++11
|
|
|
|
-Wno-unknown-warning-option
|
|
|
|
-Wno-undefined-var-template
|
|
|
|
-Wno-used-but-marked-unused
|
|
|
|
-Weverything
|
|
|
|
)
|
|
|
|
|
2022-01-18 18:58:16 +00:00
|
|
|
if (COMPILER_IS_LIKE_GNU)
|
2020-03-02 20:47:43 +00:00
|
|
|
target_compile_options(${TARGET} PRIVATE
|
|
|
|
-pedantic-errors
|
2021-04-27 19:24:47 +00:00
|
|
|
${COMMON_GNU_OPTIONS}
|
2020-03-02 20:47:43 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
if (("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") OR
|
|
|
|
("${CMAKE_CXX_COMPILER_ID}" STREQUAL "AppleClang"))
|
|
|
|
target_compile_options(${TARGET} PRIVATE
|
2021-04-27 19:24:47 +00:00
|
|
|
${COMMON_CLANG_OPTIONS}
|
2020-03-02 20:47:43 +00:00
|
|
|
)
|
|
|
|
endif()
|
2022-01-18 18:58:16 +00:00
|
|
|
endif(COMPILER_IS_LIKE_GNU)
|
2020-10-27 21:04:59 +00:00
|
|
|
|
2020-03-02 20:47:43 +00:00
|
|
|
if (MSVC)
|
|
|
|
# Specify /EHs for exception handling.
|
|
|
|
target_compile_options(${TARGET} PRIVATE
|
|
|
|
/bigobj
|
|
|
|
/EHsc
|
2021-03-16 15:05:33 +00:00
|
|
|
/W4
|
2020-03-02 20:47:43 +00:00
|
|
|
/WX
|
|
|
|
/wd4068
|
2021-03-17 13:32:54 +00:00
|
|
|
/wd4127
|
2020-05-04 18:58:24 +00:00
|
|
|
/wd4244
|
|
|
|
/wd4267
|
2021-03-23 14:03:58 +00:00
|
|
|
/wd4324
|
2021-03-17 13:32:54 +00:00
|
|
|
/wd4458
|
2020-03-02 20:47:43 +00:00
|
|
|
/wd4514
|
|
|
|
/wd4571
|
|
|
|
/wd4625
|
|
|
|
/wd4626
|
|
|
|
/wd4710
|
|
|
|
/wd4774
|
|
|
|
/wd4820
|
|
|
|
/wd5026
|
|
|
|
/wd5027
|
|
|
|
)
|
2021-04-27 19:24:47 +00:00
|
|
|
|
|
|
|
# When building with clang-cl on Windows, try to match our clang build
|
|
|
|
# options as much as possible.
|
|
|
|
if (COMPILER_IS_CLANG_CL)
|
|
|
|
target_compile_options(${TARGET} PRIVATE
|
|
|
|
${COMMON_GNU_OPTIONS}
|
|
|
|
${COMMON_CLANG_OPTIONS}
|
|
|
|
# Disable warnings that are usually disabled in downstream deps for
|
|
|
|
# gcc/clang, but aren't for clang-cl.
|
|
|
|
-Wno-global-constructors
|
|
|
|
-Wno-zero-as-null-pointer-constant
|
|
|
|
-Wno-shorten-64-to-32
|
2021-12-20 21:39:35 +00:00
|
|
|
-Wno-shadow-field-in-constructor
|
|
|
|
-Wno-reserved-id-macro
|
2022-02-04 23:24:43 +00:00
|
|
|
-Wno-language-extension-token
|
2021-04-27 19:24:47 +00:00
|
|
|
)
|
|
|
|
endif()
|
2020-03-02 20:47:43 +00:00
|
|
|
endif()
|
|
|
|
endfunction()
|
|
|
|
|
2020-02-05 17:16:05 +00:00
|
|
|
################################################################################
|
|
|
|
# Run on all subdirectories
|
|
|
|
################################################################################
|
|
|
|
|
|
|
|
add_subdirectory(third_party)
|
2022-05-22 00:41:53 +00:00
|
|
|
|
|
|
|
# TODO(crbug.com/tint/455): Tint does not currently build with CMake when
|
|
|
|
# BUILD_SHARED_LIBS=1, so always build it as static for now.
|
|
|
|
set(BUILD_SHARED_LIBS_SAVED ${BUILD_SHARED_LIBS})
|
|
|
|
set(BUILD_SHARED_LIBS 0)
|
2022-02-21 15:19:07 +00:00
|
|
|
add_subdirectory(src/tint)
|
2022-05-22 00:41:53 +00:00
|
|
|
set(BUILD_SHARED_LIBS ${BUILD_SHARED_LIBS_SAVED})
|
|
|
|
|
2020-02-05 17:16:05 +00:00
|
|
|
add_subdirectory(generator)
|
|
|
|
add_subdirectory(src/dawn)
|
2022-02-04 18:59:15 +00:00
|
|
|
|
|
|
|
################################################################################
|
|
|
|
# Samples
|
|
|
|
################################################################################
|
2020-02-05 17:16:05 +00:00
|
|
|
|
2021-08-31 18:43:36 +00:00
|
|
|
if (TINT_BUILD_SAMPLES)
|
2022-02-21 15:19:07 +00:00
|
|
|
add_subdirectory(src/tint/cmd)
|
2021-08-31 18:43:36 +00:00
|
|
|
endif()
|
2020-03-02 20:47:43 +00:00
|
|
|
|
2021-08-31 18:43:36 +00:00
|
|
|
if (TINT_BUILD_FUZZERS)
|
2022-02-21 15:19:07 +00:00
|
|
|
add_subdirectory(src/tint/fuzzers)
|
2020-03-02 20:47:43 +00:00
|
|
|
endif()
|
|
|
|
|
2020-03-19 13:03:35 +00:00
|
|
|
add_custom_target(tint-lint
|
|
|
|
COMMAND ./tools/lint
|
2021-07-08 19:35:53 +00:00
|
|
|
WORKING_DIRECTORY ${TINT_ROOT_SOURCE_DIR}
|
2020-03-19 13:03:35 +00:00
|
|
|
COMMENT "Running linter"
|
|
|
|
VERBATIM)
|
|
|
|
|
|
|
|
add_custom_target(tint-format
|
|
|
|
COMMAND ./tools/format
|
2021-07-08 19:35:53 +00:00
|
|
|
WORKING_DIRECTORY ${TINT_ROOT_SOURCE_DIR}
|
2020-03-19 13:03:35 +00:00
|
|
|
COMMENT "Running formatter"
|
|
|
|
VERBATIM)
|
2020-10-27 21:04:59 +00:00
|
|
|
|
|
|
|
|
2021-08-31 18:43:36 +00:00
|
|
|
if (TINT_EMIT_COVERAGE AND CMAKE_CXX_COMPILER_ID MATCHES "Clang")
|
2020-10-27 21:04:59 +00:00
|
|
|
# Generates a lcov.info file at the project root.
|
|
|
|
# This can be used by tools such as VSCode's Coverage Gutters extension to
|
|
|
|
# visualize code coverage in the editor.
|
|
|
|
get_filename_component(CLANG_BIN_DIR ${CMAKE_C_COMPILER} DIRECTORY)
|
|
|
|
set(PATH_WITH_CLANG "${CLANG_BIN_DIR}:$ENV{PATH}")
|
|
|
|
add_custom_target(tint-generate-coverage
|
|
|
|
COMMAND ${CMAKE_COMMAND} -E env PATH=${PATH_WITH_CLANG} ./tools/tint-generate-coverage $<TARGET_FILE:tint_unittests>
|
|
|
|
DEPENDS tint_unittests
|
2021-07-08 19:35:53 +00:00
|
|
|
WORKING_DIRECTORY ${TINT_ROOT_SOURCE_DIR}
|
2020-10-27 21:04:59 +00:00
|
|
|
COMMENT "Generating tint coverage data"
|
|
|
|
VERBATIM)
|
|
|
|
endif()
|
2021-07-08 19:35:53 +00:00
|
|
|
|
2021-08-31 18:43:36 +00:00
|
|
|
if (TINT_BUILD_REMOTE_COMPILE)
|
|
|
|
add_subdirectory(tools/src/cmd/remote-compile)
|
2021-07-08 19:35:53 +00:00
|
|
|
endif()
|