BUILD.gn: Only expose the GLFW target on platforms that support it

Due to the way GN target discovery works, glfw would get discovered in
Fuchsia / Android / ChromeOS builds when it isn't supported causing
compilation failures. This changes third_party/BUILD.gn so that glfw
targets are only created on supported platforms. It also changes
dawn_glfw in BUILD.gn to be more robust to building on all platforms.

Bug=dawn:221
BUG=chromium:1002895

Change-Id: I8f40b06f680094406d24e9a6dea44b128e59b854
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/11160
Reviewed-by: David Turner <digit@google.com>
Reviewed-by: Austin Eng <enga@chromium.org>
Commit-Queue: Corentin Wallez <cwallez@chromium.org>
This commit is contained in:
Corentin Wallez 2019-09-11 16:53:46 +00:00 committed by Commit Bot service account
parent 2a2392073b
commit fad96f6e59
2 changed files with 111 additions and 107 deletions

View File

@ -580,10 +580,17 @@ dawn_component("libdawn_wire") {
# GLFW wrapping target # GLFW wrapping target
############################################################################### ###############################################################################
# GLFW does not support Android or Fuchsia, so provide a small mock library # GLFW does not support ChromeOS, Android or Fuchsia, so provide a small mock
# that can be linked into the Dawn tests on these platforms. Otherwise, use # library that can be linked into the Dawn tests on these platforms. Otherwise,
# the real library from third_party/. # use the real library from third_party/.
if (is_fuchsia) { if (is_win || is_linux || is_mac) {
group("dawn_glfw") {
public_deps = [
"third_party:glfw",
]
}
} else if (is_fuchsia) {
# The mock implementation of GLFW on Fuchsia
config("dawn_glfw_public_config") { config("dawn_glfw_public_config") {
# Allow inclusion of <GLFW/glfw3.h> # Allow inclusion of <GLFW/glfw3.h>
configs = [ "third_party:glfw_public" ] configs = [ "third_party:glfw_public" ]
@ -610,10 +617,8 @@ if (is_fuchsia) {
] ]
} }
} else { } else {
# Just skip GLFW on other systems
group("dawn_glfw") { group("dawn_glfw") {
public_deps = [
"third_party:glfw",
]
} }
} }
@ -815,7 +820,6 @@ source_set("dawn_end2end_tests_sources") {
testonly = true testonly = true
deps = [ deps = [
":dawn_glfw",
":dawn_utils", ":dawn_utils",
":libdawn_native", ":libdawn_native",
":libdawn_wire", ":libdawn_wire",

198
third_party/BUILD.gn vendored
View File

@ -231,44 +231,44 @@ if (!build_with_chromium) {
# GLFW - good enough build targets # GLFW - good enough build targets
############################################################################### ###############################################################################
glfw_dir = dawn_glfw_dir # Only expose GLFW targets on platforms where GLFW is supported: otherwise they
# might get discovered by GN when another target in this file is referenced,
# and GLFW will bbe built as part of "all" builds, causing compilation failures.
if (is_win || is_linux || is_mac) {
glfw_dir = dawn_glfw_dir
config("glfw_public") { config("glfw_public") {
include_dirs = [ "${glfw_dir}/include" ] include_dirs = [ "${glfw_dir}/include" ]
if (is_win) { if (is_win) {
defines = [ "_GLFW_WIN32" ] defines = [ "_GLFW_WIN32" ]
}
if (is_mac) {
defines = [ "_GLFW_COCOA" ]
}
if (is_linux) {
defines = [ "_GLFW_X11" ]
}
} }
if (is_mac) { static_library("glfw") {
defines = [ "_GLFW_COCOA" ] public_configs = [ ":glfw_public" ]
}
if (is_linux) { configs -= [ "//build/config/compiler:chromium_code" ]
defines = [ "_GLFW_X11" ] configs += [ "//build/config/compiler:no_chromium_code" ]
}
}
static_library("glfw") { if (is_msvc) {
public_configs = [ ":glfw_public" ] # nonstandard extension, function/data pointer conversion in expression
cflags_c = [ "/wd4152" ]
} else {
cflags_c = [
"-Wno-sign-compare",
"-Wno-missing-field-initializers",
]
}
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",
]
}
# NOTE: For some unknown reason, this library gets build when is_fuchsia
# is true, even if absolutely nothing references it, as checked with
# `gn refs out/Fuchsia third_party/dawn/third_party:glfw --all`
if (!is_fuchsia) {
sources = [ sources = [
"${glfw_dir}/include/GLFW/glfw3.h", "${glfw_dir}/include/GLFW/glfw3.h",
"${glfw_dir}/include/GLFW/glfw3native.h", "${glfw_dir}/include/GLFW/glfw3native.h",
@ -284,79 +284,79 @@ static_library("glfw") {
"${glfw_dir}/src/vulkan.c", "${glfw_dir}/src/vulkan.c",
"${glfw_dir}/src/window.c", "${glfw_dir}/src/window.c",
] ]
} libs = []
libs = []
if (is_win) { if (is_win) {
sources += [ sources += [
"${glfw_dir}/src/wgl_context.c", "${glfw_dir}/src/wgl_context.c",
"${glfw_dir}/src/wgl_context.h", "${glfw_dir}/src/wgl_context.h",
"${glfw_dir}/src/win32_init.c", "${glfw_dir}/src/win32_init.c",
"${glfw_dir}/src/win32_joystick.c", "${glfw_dir}/src/win32_joystick.c",
"${glfw_dir}/src/win32_joystick.h", "${glfw_dir}/src/win32_joystick.h",
"${glfw_dir}/src/win32_monitor.c", "${glfw_dir}/src/win32_monitor.c",
"${glfw_dir}/src/win32_platform.h", "${glfw_dir}/src/win32_platform.h",
"${glfw_dir}/src/win32_thread.c", "${glfw_dir}/src/win32_thread.c",
"${glfw_dir}/src/win32_time.c", "${glfw_dir}/src/win32_time.c",
"${glfw_dir}/src/win32_window.c", "${glfw_dir}/src/win32_window.c",
] ]
} }
if (is_linux || is_mac) { if (is_linux || is_mac) {
sources += [ sources += [
"${glfw_dir}/src/posix_thread.c", "${glfw_dir}/src/posix_thread.c",
"${glfw_dir}/src/posix_thread.h", "${glfw_dir}/src/posix_thread.h",
] ]
} }
if (is_linux) { if (is_linux) {
sources += [ sources += [
"${glfw_dir}/src/glx_context.c", "${glfw_dir}/src/glx_context.c",
"${glfw_dir}/src/glx_context.h", "${glfw_dir}/src/glx_context.h",
"${glfw_dir}/src/linux_joystick.c", "${glfw_dir}/src/linux_joystick.c",
"${glfw_dir}/src/linux_joystick.h", "${glfw_dir}/src/linux_joystick.h",
"${glfw_dir}/src/posix_time.c", "${glfw_dir}/src/posix_time.c",
"${glfw_dir}/src/posix_time.h", "${glfw_dir}/src/posix_time.h",
"${glfw_dir}/src/x11_init.c", "${glfw_dir}/src/x11_init.c",
"${glfw_dir}/src/x11_monitor.c", "${glfw_dir}/src/x11_monitor.c",
"${glfw_dir}/src/x11_platform.h", "${glfw_dir}/src/x11_platform.h",
"${glfw_dir}/src/x11_window.c", "${glfw_dir}/src/x11_window.c",
"${glfw_dir}/src/xkb_unicode.c", "${glfw_dir}/src/xkb_unicode.c",
"${glfw_dir}/src/xkb_unicode.h", "${glfw_dir}/src/xkb_unicode.h",
] ]
libs += [ libs += [
"rt", "rt",
"dl", "dl",
"X11", "X11",
"Xcursor", "Xcursor",
"Xinerama", "Xinerama",
"Xrandr", "Xrandr",
] ]
} }
if (is_mac) { if (is_mac) {
sources += [ sources += [
"${glfw_dir}/src/cocoa_init.m", "${glfw_dir}/src/cocoa_init.m",
"${glfw_dir}/src/cocoa_joystick.h", "${glfw_dir}/src/cocoa_joystick.h",
"${glfw_dir}/src/cocoa_joystick.m", "${glfw_dir}/src/cocoa_joystick.m",
"${glfw_dir}/src/cocoa_monitor.m", "${glfw_dir}/src/cocoa_monitor.m",
"${glfw_dir}/src/cocoa_platform.h", "${glfw_dir}/src/cocoa_platform.h",
"${glfw_dir}/src/cocoa_time.c", "${glfw_dir}/src/cocoa_time.c",
"${glfw_dir}/src/cocoa_window.m", "${glfw_dir}/src/cocoa_window.m",
"${glfw_dir}/src/nsgl_context.h", "${glfw_dir}/src/nsgl_context.h",
"${glfw_dir}/src/nsgl_context.m", "${glfw_dir}/src/nsgl_context.m",
] ]
libs += [ libs += [
"Cocoa.framework", "Cocoa.framework",
"IOKit.framework", "IOKit.framework",
"CoreFoundation.framework", "CoreFoundation.framework",
"CoreVideo.framework", "CoreVideo.framework",
] ]
cflags_objc = [ cflags_objc = [
"-Wno-sign-compare", "-Wno-sign-compare",
"-Wno-unguarded-availability", "-Wno-unguarded-availability",
] ]
}
} }
} }