dawn-cmake/third_party/BUILD.gn

535 lines
16 KiB
Plaintext

# Copyright 2018 The Dawn 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.
import("../scripts/dawn_overrides_with_defaults.gni")
import("../scripts/dawn_features.gni")
is_msvc = is_win && !is_clang
###############################################################################
# Third-party dependencies needed by libdawn_native
###############################################################################
# Glad
config("glad_public") {
include_dirs = [ "glad/include" ]
}
static_library("glad") {
sources = [
"glad/include/KHR/khrplatform.h",
"glad/include/glad/glad.h",
"glad/src/glad.c",
]
public_configs = [ ":glad_public" ]
}
# SPIRV-Cross
spirv_cross_dir = dawn_spirv_cross_dir
config("spirv_cross_public") {
include_dirs = [ "." ]
defines = [ "SPIRV_CROSS_EXCEPTIONS_TO_ASSERTIONS" ]
}
static_library("spirv_cross") {
public_configs = [ ":spirv_cross_public" ]
if (!is_msvc) {
cflags_cc = [
"-Wno-implicit-fallthrough",
"-Wno-return-type",
"-Wno-sign-compare",
]
}
sources = [
"${spirv_cross_dir}/GLSL.std.450.h",
"${spirv_cross_dir}/spirv.hpp",
"${spirv_cross_dir}/spirv_cfg.cpp",
"${spirv_cross_dir}/spirv_cfg.hpp",
"${spirv_cross_dir}/spirv_common.hpp",
"${spirv_cross_dir}/spirv_cross.cpp",
"${spirv_cross_dir}/spirv_cross.hpp",
]
need_glsl_cross = dawn_enable_opengl
if (dawn_enable_d3d12) {
sources += [
"${spirv_cross_dir}/spirv_hlsl.cpp",
"${spirv_cross_dir}/spirv_hlsl.hpp",
]
need_glsl_cross = true
}
if (dawn_enable_metal) {
sources += [
"${spirv_cross_dir}/spirv_msl.cpp",
"${spirv_cross_dir}/spirv_msl.hpp",
]
need_glsl_cross = true
}
if (need_glsl_cross) {
sources += [
"${spirv_cross_dir}/spirv_glsl.cpp",
"${spirv_cross_dir}/spirv_glsl.hpp",
]
}
}
# An empty Vulkan target to add the include dirs and list the sources
# for the header inclusion check.
config("vulkan_headers_public") {
include_dirs = [ "." ]
}
source_set("vulkan_headers") {
sources = [
"vulkan/vk_platform.h",
"vulkan/vulkan.h",
]
public_configs = [ ":vulkan_headers_public" ]
}
###############################################################################
# Gtest Gmock - build targets when outside of Chrome
# TODO(cwallez@chromium.org): Adapt them to build with Chromium's harness
###############################################################################
googletest_dir = dawn_googletest_dir
config("gtest_config") {
include_dirs = [
"${googletest_dir}/googletest",
"${googletest_dir}/googletest/include",
]
}
static_library("gtest") {
testonly = true
sources = [
"${googletest_dir}/googletest/src/gtest-all.cc",
]
public_configs = [ ":gtest_config" ]
}
config("gmock_config") {
include_dirs = [
"${googletest_dir}/googlemock",
"${googletest_dir}/googlemock/include",
"${googletest_dir}/googletest/include",
]
}
static_library("gmock") {
testonly = true
sources = [
"${googletest_dir}/googlemock/src/gmock-all.cc",
]
public_configs = [ ":gmock_config" ]
}
###############################################################################
# GLSLang - good enough build targets
###############################################################################
glslang_dir = dawn_glslang_dir
spirv_tools_dir = dawn_spirv_tools_dir
config("glslang_public") {
include_dirs = [ glslang_dir ]
}
static_library("glslang_static") {
defines = []
public_configs = [ ":glslang_public" ]
sources = [
"${glslang_dir}/OGLCompilersDLL/InitializeDll.cpp",
"${glslang_dir}/OGLCompilersDLL/InitializeDll.h",
"${glslang_dir}/SPIRV/GLSL.ext.EXT.h",
"${glslang_dir}/SPIRV/GLSL.ext.KHR.h",
"${glslang_dir}/SPIRV/GLSL.std.450.h",
"${glslang_dir}/SPIRV/GlslangToSpv.cpp",
"${glslang_dir}/SPIRV/GlslangToSpv.h",
"${glslang_dir}/SPIRV/InReadableOrder.cpp",
"${glslang_dir}/SPIRV/Logger.cpp",
"${glslang_dir}/SPIRV/Logger.h",
"${glslang_dir}/SPIRV/SPVRemapper.cpp",
"${glslang_dir}/SPIRV/SPVRemapper.h",
"${glslang_dir}/SPIRV/SpvBuilder.cpp",
"${glslang_dir}/SPIRV/SpvBuilder.h",
"${glslang_dir}/SPIRV/bitutils.h",
"${glslang_dir}/SPIRV/disassemble.cpp",
"${glslang_dir}/SPIRV/disassemble.h",
"${glslang_dir}/SPIRV/doc.cpp",
"${glslang_dir}/SPIRV/doc.h",
"${glslang_dir}/SPIRV/hex_float.h",
"${glslang_dir}/SPIRV/spirv.hpp",
"${glslang_dir}/SPIRV/spvIR.h",
"${glslang_dir}/glslang/GenericCodeGen/CodeGen.cpp",
"${glslang_dir}/glslang/GenericCodeGen/Link.cpp",
"${glslang_dir}/glslang/Include/BaseTypes.h",
"${glslang_dir}/glslang/Include/Common.h",
"${glslang_dir}/glslang/Include/ConstantUnion.h",
"${glslang_dir}/glslang/Include/InfoSink.h",
"${glslang_dir}/glslang/Include/InitializeGlobals.h",
"${glslang_dir}/glslang/Include/PoolAlloc.h",
"${glslang_dir}/glslang/Include/ResourceLimits.h",
"${glslang_dir}/glslang/Include/ShHandle.h",
"${glslang_dir}/glslang/Include/Types.h",
"${glslang_dir}/glslang/Include/arrays.h",
"${glslang_dir}/glslang/Include/intermediate.h",
"${glslang_dir}/glslang/Include/revision.h",
"${glslang_dir}/glslang/MachineIndependent/Constant.cpp",
"${glslang_dir}/glslang/MachineIndependent/InfoSink.cpp",
"${glslang_dir}/glslang/MachineIndependent/Initialize.cpp",
"${glslang_dir}/glslang/MachineIndependent/Initialize.h",
"${glslang_dir}/glslang/MachineIndependent/IntermTraverse.cpp",
"${glslang_dir}/glslang/MachineIndependent/Intermediate.cpp",
"${glslang_dir}/glslang/MachineIndependent/LiveTraverser.h",
"${glslang_dir}/glslang/MachineIndependent/ParseContextBase.cpp",
"${glslang_dir}/glslang/MachineIndependent/ParseHelper.cpp",
"${glslang_dir}/glslang/MachineIndependent/ParseHelper.h",
"${glslang_dir}/glslang/MachineIndependent/PoolAlloc.cpp",
"${glslang_dir}/glslang/MachineIndependent/RemoveTree.cpp",
"${glslang_dir}/glslang/MachineIndependent/RemoveTree.h",
"${glslang_dir}/glslang/MachineIndependent/Scan.cpp",
"${glslang_dir}/glslang/MachineIndependent/Scan.h",
"${glslang_dir}/glslang/MachineIndependent/ScanContext.h",
"${glslang_dir}/glslang/MachineIndependent/ShaderLang.cpp",
"${glslang_dir}/glslang/MachineIndependent/SymbolTable.cpp",
"${glslang_dir}/glslang/MachineIndependent/SymbolTable.h",
"${glslang_dir}/glslang/MachineIndependent/Versions.cpp",
"${glslang_dir}/glslang/MachineIndependent/Versions.h",
"${glslang_dir}/glslang/MachineIndependent/attribute.cpp",
"${glslang_dir}/glslang/MachineIndependent/attribute.h",
"${glslang_dir}/glslang/MachineIndependent/gl_types.h",
"${glslang_dir}/glslang/MachineIndependent/glslang.y",
"${glslang_dir}/glslang/MachineIndependent/glslang_tab.cpp",
"${glslang_dir}/glslang/MachineIndependent/glslang_tab.cpp.h",
"${glslang_dir}/glslang/MachineIndependent/intermOut.cpp",
"${glslang_dir}/glslang/MachineIndependent/iomapper.cpp",
"${glslang_dir}/glslang/MachineIndependent/iomapper.h",
"${glslang_dir}/glslang/MachineIndependent/limits.cpp",
"${glslang_dir}/glslang/MachineIndependent/linkValidate.cpp",
"${glslang_dir}/glslang/MachineIndependent/localintermediate.h",
"${glslang_dir}/glslang/MachineIndependent/parseConst.cpp",
"${glslang_dir}/glslang/MachineIndependent/parseVersions.h",
"${glslang_dir}/glslang/MachineIndependent/preprocessor/Pp.cpp",
"${glslang_dir}/glslang/MachineIndependent/preprocessor/PpAtom.cpp",
"${glslang_dir}/glslang/MachineIndependent/preprocessor/PpContext.cpp",
"${glslang_dir}/glslang/MachineIndependent/preprocessor/PpContext.h",
"${glslang_dir}/glslang/MachineIndependent/preprocessor/PpScanner.cpp",
"${glslang_dir}/glslang/MachineIndependent/preprocessor/PpTokens.cpp",
"${glslang_dir}/glslang/MachineIndependent/preprocessor/PpTokens.h",
"${glslang_dir}/glslang/MachineIndependent/propagateNoContraction.cpp",
"${glslang_dir}/glslang/MachineIndependent/propagateNoContraction.h",
"${glslang_dir}/glslang/MachineIndependent/reflection.cpp",
"${glslang_dir}/glslang/MachineIndependent/reflection.h",
"${glslang_dir}/glslang/OSDependent/osinclude.h",
"${glslang_dir}/glslang/Public/ShaderLang.h",
]
if (is_msvc) {
cflags_cc = [
# switch statement contains 'default' but no 'case' labels
"/wd4065",
# local variable is initialized but not referenced
"/wd4189",
]
} else {
cflags_cc = [
"-Wno-implicit-fallthrough",
"-Wno-ignored-qualifiers",
"-Wno-unused-variable",
]
}
deps = [
"${spirv_tools_dir}:spvtools_opt",
]
if (is_win) {
sources += [ "${glslang_dir}/glslang/OSDependent/Windows/ossource.cpp" ]
defines += [ "GLSLANG_OSINCLUDE_WIN32" ]
} else {
sources += [ "${glslang_dir}/glslang/OSDependent/Unix/ossource.cpp" ]
defines += [ "GLSLANG_OSINCLUDE_UNIX" ]
}
}
###############################################################################
# Shaderc - good enough build targets
###############################################################################
shaderc_dir = dawn_shaderc_dir
config("shaderc_util_public") {
include_dirs = [ "${shaderc_dir}/libshaderc_util/include" ]
}
static_library("shaderc_util") {
public_configs = [ ":shaderc_util_public" ]
deps = [
":glslang_static",
"${spirv_tools_dir}:spvtools",
]
sources = [
"${shaderc_dir}/libshaderc_util/include/libshaderc_util/counting_includer.h",
"${shaderc_dir}/libshaderc_util/include/libshaderc_util/file_finder.h",
"${shaderc_dir}/libshaderc_util/include/libshaderc_util/format.h",
"${shaderc_dir}/libshaderc_util/include/libshaderc_util/io.h",
"${shaderc_dir}/libshaderc_util/include/libshaderc_util/message.h",
"${shaderc_dir}/libshaderc_util/include/libshaderc_util/mutex.h",
"${shaderc_dir}/libshaderc_util/include/libshaderc_util/resources.h",
"${shaderc_dir}/libshaderc_util/include/libshaderc_util/spirv_tools_wrapper.h",
"${shaderc_dir}/libshaderc_util/include/libshaderc_util/string_piece.h",
"${shaderc_dir}/libshaderc_util/include/libshaderc_util/universal_unistd.h",
"${shaderc_dir}/libshaderc_util/include/libshaderc_util/version_profile.h",
"${shaderc_dir}/libshaderc_util/src/compiler.cc",
"${shaderc_dir}/libshaderc_util/src/file_finder.cc",
"${shaderc_dir}/libshaderc_util/src/io.cc",
"${shaderc_dir}/libshaderc_util/src/message.cc",
"${shaderc_dir}/libshaderc_util/src/resources.cc",
"${shaderc_dir}/libshaderc_util/src/shader_stage.cc",
"${shaderc_dir}/libshaderc_util/src/spirv_tools_wrapper.cc",
"${shaderc_dir}/libshaderc_util/src/version_profile.cc",
]
}
config("shaderc_public") {
include_dirs = [ "${shaderc_dir}/libshaderc/include" ]
defines = [ "SHADERC_SHAREDLIB" ]
# Executable needs an rpath to find our shared libraries on OSX
if (is_mac) {
ldflags = [
"-rpath",
"@executable_path/",
]
}
}
shared_library("libshaderc") {
public_configs = [ ":shaderc_public" ]
deps = [
":glslang_static",
":shaderc_util",
"${spirv_tools_dir}:spvtools",
"${spirv_tools_dir}:spvtools_val",
]
defines = [ "SHADERC_IMPLEMENTATION" ]
sources = [
"${shaderc_dir}/libshaderc/include/shaderc/shaderc.h",
"${shaderc_dir}/libshaderc/include/shaderc/shaderc.hpp",
"${shaderc_dir}/libshaderc/src/shaderc.cc",
"${shaderc_dir}/libshaderc/src/shaderc_private.h",
]
# Tell dependents where to find this shared library
if (is_mac) {
ldflags = [
"-install_name",
"@rpath/${target_name}.dylib",
]
}
}
###############################################################################
# GLFW - good enough build targets
###############################################################################
glfw_dir = dawn_glfw_dir
config("glfw_public") {
include_dirs = [ "${glfw_dir}/include" ]
if (is_win) {
defines = [ "_GLFW_WIN32" ]
}
if (is_mac) {
defines = [ "_GLFW_COCOA" ]
}
if (is_linux) {
defines = [ "_GLFW_X11" ]
}
}
static_library("glfw") {
public_configs = [ ":glfw_public" ]
if (is_msvc) {
# nonstandard extension, function/data pointer conversion in expression
cflags_c = [ "/wd4152" ]
} else {
cflags_c = [ "-Wno-sign-compare" ]
}
sources = [
"${glfw_dir}/include/GLFW/glfw3.h",
"${glfw_dir}/include/GLFW/glfw3native.h",
"${glfw_dir}/src/context.c",
"${glfw_dir}/src/init.c",
"${glfw_dir}/src/input.c",
"${glfw_dir}/src/internal.h",
"${glfw_dir}/src/monitor.c",
"${glfw_dir}/src/vulkan.c",
"${glfw_dir}/src/window.c",
]
libs = []
if (is_win) {
sources += [
"${glfw_dir}/src/egl_context.c",
"${glfw_dir}/src/egl_context.h",
"${glfw_dir}/src/wgl_context.c",
"${glfw_dir}/src/wgl_context.h",
"${glfw_dir}/src/win32_init.c",
"${glfw_dir}/src/win32_joystick.c",
"${glfw_dir}/src/win32_joystick.h",
"${glfw_dir}/src/win32_monitor.c",
"${glfw_dir}/src/win32_platform.h",
"${glfw_dir}/src/win32_time.c",
"${glfw_dir}/src/win32_tls.c",
"${glfw_dir}/src/win32_window.c",
]
}
if (is_linux || is_mac) {
sources += [
"${glfw_dir}/src/posix_tls.c",
"${glfw_dir}/src/posix_tls.h",
]
}
if (is_linux) {
sources += [
"${glfw_dir}/src/egl_context.c",
"${glfw_dir}/src/egl_context.h",
"${glfw_dir}/src/glx_context.c",
"${glfw_dir}/src/glx_context.h",
"${glfw_dir}/src/linux_joystick.c",
"${glfw_dir}/src/linux_joystick.h",
"${glfw_dir}/src/posix_time.c",
"${glfw_dir}/src/posix_time.h",
"${glfw_dir}/src/x11_init.c",
"${glfw_dir}/src/x11_monitor.c",
"${glfw_dir}/src/x11_platform.h",
"${glfw_dir}/src/x11_window.c",
"${glfw_dir}/src/xkb_unicode.c",
"${glfw_dir}/src/xkb_unicode.h",
]
libs += [
"rt",
"dl",
"X11",
"Xcursor",
"Xinerama",
"Xrandr",
]
}
if (is_mac) {
sources += [
"${glfw_dir}/src/cocoa_init.m",
"${glfw_dir}/src/cocoa_joystick.h",
"${glfw_dir}/src/cocoa_joystick.m",
"${glfw_dir}/src/cocoa_monitor.m",
"${glfw_dir}/src/cocoa_platform.h",
"${glfw_dir}/src/cocoa_time.c",
"${glfw_dir}/src/cocoa_window.m",
"${glfw_dir}/src/nsgl_context.h",
"${glfw_dir}/src/nsgl_context.m",
]
libs += [
"Cocoa.framework",
"IOKit.framework",
"CoreFoundation.framework",
"CoreVideo.framework",
]
cflags_objc = [
"-Wno-sign-compare",
"-Wno-unguarded-availability",
]
}
}
###############################################################################
# Header-only dependencies for samples
###############################################################################
if (dawn_standalone) {
# GLM
config("glm_public_config") {
include_dirs = [ "glm" ]
}
source_set("glm") {
public_configs = [ ":glm_public_config" ]
# GLM is header only but has too many files to list them.
}
# STB
config("stb_public_config") {
include_dirs = [ "stb" ]
if (!is_msvc) {
cflags_cc = [ "-Wno-implicit-fallthrough" ]
}
}
source_set("stb") {
public_configs = [ ":stb_public_config" ]
sources = [
"stb/stb_image.h",
]
}
# PicoJSON
config("picojson_public_config") {
include_dirs = [ "." ]
}
source_set("picojson") {
public_configs = [ ":picojson_public_config" ]
sources = [
"picojson/picojson.h",
]
}
# Tiny glTF Loader
config("tiny_gltf_loader_public_config") {
include_dirs = [ "." ]
}
source_set("tiny_gltf_loader") {
public_configs = [ ":tiny_gltf_loader_public_config" ]
public_deps = [
":picojson",
":stb",
]
sources = [
"tinygltfloader/tiny_gltf_loader.h",
]
}
}