Add delayloads config to dawn_native component
In chromium component build, dawn_native.dll statically loads user32.dll,
which can't be loaded under certain sandbox configurations, with win32k
lockdown enabled and removal of the win32k windows interceptions via
WinSboxNoFakeGdiInit chromium feature.
This change passes a delayload linker flag via public_configs to the
component when linking against user32.lib. This should load user32.dll
under the same circumstances as a non-component build.
Bug: chromium:326277735
Change-Id: Ie821503d43236b19836a2f5e5a0f1e88ceceaab4
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/186820
Reviewed-by: Brandon Jones <bajones@chromium.org>
Commit-Queue: Brandon Jones <bajones@chromium.org>
diff --git a/src/dawn/native/BUILD.gn b/src/dawn/native/BUILD.gn
index 25f5783..54c0cde 100644
--- a/src/dawn/native/BUILD.gn
+++ b/src/dawn/native/BUILD.gn
@@ -89,6 +89,13 @@
}
}
+# Config that adds delayloads when built as a shared library or component,
+# useful as we're linking user32.lib which can't always be loaded in the
+# chromium sandbox under win32k lockdown.
+config("win_delayload") {
+ ldflags = [ "/DELAYLOAD:user32.dll" ]
+}
+
# Config that adds include directory for vulkan-utility-libraries.
config("vulkan_utility_libraries_include") {
include_dirs = [ "${dawn_vulkan_utility_libraries_dir}/include" ]
@@ -413,6 +420,7 @@
# In UWP, all availiable APIs are defined in WindowsApp.lib
if (is_win && !dawn_is_winuwp) {
libs += [ "user32.lib" ]
+ public_configs = [ ":win_delayload" ]
}
if (dawn_is_winuwp && is_debug) {