diff --git a/.gn b/.gn
index dc3df25a1b..7fc44a7337 100644
--- a/.gn
+++ b/.gn
@@ -26,15 +26,6 @@ script_executable = "python3"
 # These are the list of GN files that run exec_script. This allowlist exists
 # to force additional review for new uses of exec_script, which is strongly
 # discouraged except for gypi_to_gn calls.
-exec_script_allowlist = angle_dotfile_settings.exec_script_allowlist +
-                        build_dotfile_settings.exec_script_allowlist +
-                        [
-                          "//build/config/sysroot.gni",
-                          "//build/config/win/BUILD.gn",
-                          "//build/config/win/visual_studio_version.gni",
-                          "//build/gn_helpers.py",
-                          "//build_overrides/build.gni",
-                        ]
 
 default_args = {
   clang_use_chrome_plugins = false
diff --git a/BUILD.gn b/BUILD.gn
index 957af7e194..1935b75749 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -18,7 +18,10 @@ if (angle_has_build) {
   import("//build/config/linux/pkg_config.gni")
   import("//build/config/sanitizers/sanitizers.gni")
   import("//build/config/ui.gni")
-  import("//testing/libfuzzer/fuzzer_test.gni")
+
+  if (use_fuzzing_engine) {
+    import("//testing/libfuzzer/fuzzer_test.gni")
+  }
 
   if (is_android) {
     # android/rules.gni can only be imported for Android targets
@@ -108,10 +111,11 @@ if (angle_build_all) {
       ":angle",
       ":angle_shader_translator",
       ":translator_fuzzer",
-      ":xxhash_fuzzer",
       "$angle_root/samples:angle_samples",
-      "$angle_root/src/tests:angle_tests",
     ]
+    if (use_fuzzing_engine) {
+      deps += [ ":xxhash_fuzzer" ]
+    }
     if (angle_enable_cl) {
       deps += [ "$angle_root/src/libOpenCL:angle_cl" ]
     }
@@ -339,7 +343,7 @@ config("extra_warnings") {
   }
 
   # Enable more default warnings on Windows.
-  if (is_win) {
+  if (is_msvc) {
     cflags += [
       "/we4244",  # Conversion: possible loss of data.
       "/we4312",  # Conversion: greater size.
@@ -381,6 +385,17 @@ config("extra_warnings") {
     ]
   }
 
+  if (is_mingw && !is_clang) {
+    cflags_cc = [
+      "-Wno-conversion-null",
+      "-Wno-dangling-pointer",
+      "-Wno-deprecated-copy",
+      "-Wno-sign-compare",
+      "-Wno-stringop-truncation",
+      "-Wno-unused-function",
+    ]
+  }
+
   if (is_gcc) {
     cflags_cc = [ "-Wdeprecated-copy" ]
   }
@@ -402,7 +417,7 @@ config("build_id_config") {
   ldflags = [ "-Wl,--build-id" ]
 }
 
-_use_copy_compiler_dll = angle_has_build && is_win
+_use_copy_compiler_dll = angle_has_build && is_msvc
 
 if (_use_copy_compiler_dll) {
   copy("copy_compiler_dll") {
@@ -487,7 +502,7 @@ config("angle_common_config") {
 
   if (is_win && !angle_is_winuwp && !build_with_chromium) {
     # Needed for futex support
-    libs += [ "synchronization.lib" ]
+    libs += [ "synchronization" ]
   }
 
   defines = []
@@ -517,7 +532,7 @@ angle_source_set("xxhash") {
   }
 }
 
-if (angle_has_build) {
+if (angle_has_build && use_fuzzing_engine) {
   fuzzer_test("xxhash_fuzzer") {
     sources = [ "src/common/third_party/xxhash/xxhash_fuzzer.cpp" ]
     deps = [ ":xxhash" ]
@@ -682,9 +697,9 @@ angle_static_library("angle_gpu_info_util") {
   if (is_win) {
     sources += libangle_gpu_info_util_win_sources
     if (!angle_is_winuwp) {
-      libs += [ "setupapi.lib" ]
+      libs += [ "setupapi" ]
     }
-    libs += [ "dxgi.lib" ]
+    libs += [ "dxgi" ]
   }
 
   if (is_linux || is_chromeos) {
@@ -827,7 +842,7 @@ angle_static_library("translator") {
     ":angle_version_info",
   ]
 
-  if (is_win) {
+  if (is_msvc) {
     # Necessary to suppress some system header xtree warnings in Release.
     # For some reason this warning doesn't get triggered in Chromium
     cflags = [ "/wd4718" ]
@@ -986,7 +1001,7 @@ config("libANGLE_config") {
   ldflags = []
   defines += [ "LIBANGLE_IMPLEMENTATION" ]
 
-  if (is_win) {
+  if (is_msvc) {
     cflags += [ "/wd4530" ]  # C++ exception handler used, but unwind semantics
                              # are not enabled.
   }
@@ -1087,8 +1102,8 @@ angle_source_set("libANGLE_no_vulkan") {
 
   if (is_win && !angle_is_winuwp) {
     libs += [
-      "gdi32.lib",
-      "user32.lib",
+      "gdi32",
+      "user32",
     ]
   }
 
@@ -1117,7 +1132,7 @@ angle_source_set("libANGLE_no_vulkan") {
   }
 
   if (angle_enable_d3d11) {
-    libs += [ "dxguid.lib" ]
+    libs += [ "dxguid" ]
   }
 
   if (angle_enable_metal) {
@@ -1129,7 +1144,7 @@ angle_source_set("libANGLE_no_vulkan") {
   }
 
   # Enable extra Chromium style warnings for libANGLE.
-  if (is_clang && angle_has_build && !is_nacl) {
+  if (is_clang && angle_has_build && !is_nacl && !is_mingw) {
     suppressed_configs -= [ "//build/config/clang:find_bad_constructs" ]
   }
 
@@ -1467,11 +1482,14 @@ angle_static_library("libGLESv2_thin_static") {
 
   public_configs += [ ":angle_static_config" ]
   deps = [ ":includes" ]
+  output_name = "libGLESv2_thin"
   public_deps = [ ":libANGLE" ]
 }
 
 angle_static_library("libGLESv2_static") {
   sources = libglesv2_sources
+  complete_static_lib = true
+  output_name = "libGLESv2"
   public_deps = [ ":libGLESv2_thin_static" ]
 }
 
@@ -1588,6 +1606,7 @@ if (angle_enable_vulkan) {
 }
 
 libEGL_template("libEGL_static") {
+  output_name = "libEGL"
   target_type = "angle_static_library"
   public_configs = [ ":angle_static_config" ]
   deps = [ ":libGLESv2_static" ]
diff --git a/gni/angle.gni b/gni/angle.gni
index bdefa2e04c..2d87b3927b 100644
--- a/gni/angle.gni
+++ b/gni/angle.gni
@@ -53,7 +53,6 @@ if (angle_has_build) {
   import("//build/config/ozone.gni")  # import the ozone_platform_x11 variable
   import("//build/config/sanitizers/sanitizers.gni")
   import("//build_overrides/build.gni")
-  import("//testing/test.gni")
   if (is_android) {
     import("//build/config/android/config.gni")
   }
@@ -153,7 +152,7 @@ declare_args() {
   # Windows App SDK is almost UWP but for Win32, so we want all the same things
   angle_is_winuwp = (is_win && target_os == "winuwp") || angle_is_winappsdk
 
-  angle_is_msvc = is_win && !is_clang
+  angle_is_msvc = is_win && !is_clang && !is_mingw
 
   # Default to using "_angle" suffix on Android
   if (is_android) {
@@ -212,13 +211,13 @@ declare_args() {
   # anglebug.com/42266968
   angle_enable_wgpu =
       !is_official_build && !(is_android || is_fuchsia || angle_is_winuwp) &&
-      (!is_win || is_clang) && (!is_linux || angle_use_x11) &&
+      (!is_win || is_clang) && (!is_linux || angle_use_x11) && !is_mingw &&
       defined(angle_dawn_dir)
 }
 
 declare_args() {
   # ASTC emulation is only built on standalone non-android builds
-  angle_has_astc_encoder = angle_has_build && angle_standalone && !is_android
+  angle_has_astc_encoder = angle_has_build && angle_standalone && !is_android && !is_mingw
 }
 
 declare_args() {
@@ -350,7 +349,7 @@ angle_remove_configs = []
 if (angle_has_build) {
   angle_remove_configs += [ "//build/config/compiler:default_include_dirs" ]
 
-  if (is_clang && !is_nacl) {
+  if (is_clang && !is_nacl && !is_mingw) {
     angle_remove_configs += [ "//build/config/clang:find_bad_constructs" ]
   }
 
diff --git a/src/libANGLE/renderer/d3d/BUILD.gn b/src/libANGLE/renderer/d3d/BUILD.gn
index 55227c34b3..a1a027773c 100644
--- a/src/libANGLE/renderer/d3d/BUILD.gn
+++ b/src/libANGLE/renderer/d3d/BUILD.gn
@@ -27,14 +27,16 @@ angle_source_set("angle_d3d_shared") {
 if (angle_enable_d3d9) {
   config("angle_d3d9_backend_config") {
     defines = [ "ANGLE_ENABLE_D3D9" ]
-    ldflags = [ "/DELAYLOAD:d3d9.dll" ]
+    if (is_msvc) {
+      ldflags = [ "/DELAYLOAD:d3d9.dll" ]
+    }
   }
 
   angle_source_set("angle_d3d9_backend") {
     sources = d3d9_backend_sources
     libs = [
-      "d3d9.lib",
-      "delayimp.lib",
+      "d3d9",
+      "delayimp",
     ]
     public_deps = [ ":angle_d3d_shared" ]
     public_configs = [ ":angle_d3d9_backend_config" ]
@@ -52,7 +54,7 @@ if (angle_enable_d3d11) {
   angle_source_set("angle_d3d11_backend") {
     sources = d3d11_backend_sources
 
-    libs = [ "dxguid.lib" ]
+    libs = [ "dxguid" ]
 
     public_deps = [ ":angle_d3d_shared" ]
     public_configs = [ ":angle_d3d11_backend_config" ]
diff --git a/src/tests/BUILD.gn b/src/tests/BUILD.gn
index c0dc92ae34..d10eceb320 100644
--- a/src/tests/BUILD.gn
+++ b/src/tests/BUILD.gn
@@ -2,7 +2,6 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
-import("//testing/test.gni")
 import("../../gni/angle.gni")
 import("angle_unittests.gni")
 
diff --git a/util/BUILD.gn b/util/BUILD.gn
index 6cff850678..ff8e74551d 100644
--- a/util/BUILD.gn
+++ b/util/BUILD.gn
@@ -396,7 +396,7 @@ foreach(is_shared_library,
   }
 }
 
-if (is_win && !angle_is_winuwp) {
+if (is_msvc && !angle_is_winuwp) {
   angle_source_set("angle_stack_walker") {
     sources = [
       "windows/third_party/StackWalker/src/StackWalker.cpp",
@@ -452,7 +452,7 @@ angle_source_set("angle_test_utils") {
     sources += [ "windows/test_utils_win.cpp" ]
     if (angle_is_winuwp) {
       sources += [ "windows/test_utils_winuwp.cpp" ]
-    } else {
+    } else if (is_msvc) {
       deps += [ ":angle_stack_walker" ]
       sources += [ "windows/win32/test_utils_win32.cpp" ]
     }
