| # 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-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", |
| ] |
| } |
| } |