Corentin Wallez 8f4046b0b6 Remove glad and replace it with our own GL header
This completely removes the dependency on glad by generating the GL
headers from gl.xml directly.

This requires adding khrplatform.h so all Khronos dependencies are
gathered in third_party/khronos.

Also removes a stray CMakeLists.txt that was still hanging out.

BUG=dawn:165

Change-Id: Ia64bc51bc8b18c6b48613918e2f309f7405ecb3b
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/8163
Commit-Queue: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Austin Eng <enga@chromium.org>
2019-06-17 09:17:29 +00:00

349 lines
9.2 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")
import("//build_overrides/build.gni")
is_msvc = is_win && !is_clang
###############################################################################
# Third-party dependencies needed by libdawn_native
###############################################################################
# SPIRV-Cross
spirv_cross_dir = dawn_spirv_cross_dir
config("spirv_cross_public") {
include_dirs = [ "${spirv_cross_dir}/.." ]
defines = [ "SPIRV_CROSS_EXCEPTIONS_TO_ASSERTIONS" ]
}
config("spirv_cross_internal") {
if (!is_msvc) {
cflags_cc = [
"-Wno-implicit-fallthrough",
"-Wno-return-type",
"-Wno-sign-compare",
]
} else {
# Disable "not all control paths return a value" warning.
cflags_cc = [ "/wd4715" ]
}
}
static_library("spirv_cross") {
public_configs = [ ":spirv_cross_public" ]
configs += [ ":spirv_cross_internal" ]
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",
"${spirv_cross_dir}/spirv_cross_parsed_ir.cpp",
"${spirv_cross_dir}/spirv_cross_parsed_ir.hpp",
"${spirv_cross_dir}/spirv_parser.cpp",
"${spirv_cross_dir}/spirv_parser.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",
]
}
}
static_library("spirv_cross_full_for_fuzzers") {
public_configs = [ ":spirv_cross_public" ]
configs += [ ":spirv_cross_internal" ]
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",
"${spirv_cross_dir}/spirv_cross_parsed_ir.cpp",
"${spirv_cross_dir}/spirv_cross_parsed_ir.hpp",
"${spirv_cross_dir}/spirv_glsl.cpp",
"${spirv_cross_dir}/spirv_glsl.hpp",
"${spirv_cross_dir}/spirv_hlsl.cpp",
"${spirv_cross_dir}/spirv_hlsl.hpp",
"${spirv_cross_dir}/spirv_msl.cpp",
"${spirv_cross_dir}/spirv_msl.hpp",
"${spirv_cross_dir}/spirv_parser.cpp",
"${spirv_cross_dir}/spirv_parser.hpp",
]
}
# Empty targets to add the include dirs and list the sources of Khronos headers for header inclusion check.
config("khronos_headers_public") {
include_dirs = [ "khronos" ]
}
source_set("vulkan_headers") {
sources = [
"khronos/vulkan/vk_platform.h",
"khronos/vulkan/vulkan.h",
]
public_configs = [ ":khronos_headers_public" ]
}
source_set("khronos_platform") {
sources = [
"khronos/KHR/khrplatform.h",
]
public_configs = [ ":khronos_headers_public" ]
}
###############################################################################
# Gtest Gmock - Handle building inside and outside of Chromium.
###############################################################################
# When building outside of Chromium we need to define our own targets for GTest
# and GMock. However when compiling inside of Chromium we need to reuse the
# existing targets, both because Chromium has a special harness for swarming
# and because otherwise the "gn check" fails.
if (!build_with_chromium) {
# When we aren't in Chromium we define out own targets based on the location
# of the googletest repo.
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" ]
}
group("gmock_and_gtest") {
testonly = true
public_deps = [
":gmock",
":gtest",
]
}
} else {
# When we are in Chromium we reuse its targets, and also add some deps that
# are needed to launch the test in swarming mode.
group("gmock_and_gtest") {
testonly = true
public_deps = [
"//base",
"//base/test:test_support",
"//testing/gmock",
"//testing/gtest",
]
}
}
###############################################################################
# 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" ]
configs -= [ "//build/config/compiler:chromium_code" ]
configs += [ "//build/config/compiler:no_chromium_code" ]
if (is_msvc) {
# nonstandard extension, function/data pointer conversion in expression
cflags_c = [ "/wd4152" ]
} else {
cflags_c = [
"-Wno-sign-compare",
"-Wno-missing-field-initializers",
]
}
sources = [
"${glfw_dir}/include/GLFW/glfw3.h",
"${glfw_dir}/include/GLFW/glfw3native.h",
"${glfw_dir}/src/context.c",
"${glfw_dir}/src/egl_context.c",
"${glfw_dir}/src/egl_context.h",
"${glfw_dir}/src/init.c",
"${glfw_dir}/src/input.c",
"${glfw_dir}/src/internal.h",
"${glfw_dir}/src/monitor.c",
"${glfw_dir}/src/osmesa_context.c",
"${glfw_dir}/src/osmesa_context.h",
"${glfw_dir}/src/vulkan.c",
"${glfw_dir}/src/window.c",
]
libs = []
if (is_win) {
sources += [
"${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_thread.c",
"${glfw_dir}/src/win32_time.c",
"${glfw_dir}/src/win32_window.c",
]
}
if (is_linux || is_mac) {
sources += [
"${glfw_dir}/src/posix_thread.c",
"${glfw_dir}/src/posix_thread.h",
]
}
if (is_linux) {
sources += [
"${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") {
configs -= [ "//build/config/compiler:chromium_code" ]
configs += [ "//build/config/compiler:no_chromium_code" ]
public_configs = [ ":glm_public_config" ]
# GLM is header only but has too many files to list them.
}
}