summary refs log tree commit diff
path: root/pkgs/os-specific/linux/chromium-os
diff options
context:
space:
mode:
authorAlyssa Ross <hi@alyssa.is>2019-12-18 23:09:31 +0000
committerAlyssa Ross <hi@alyssa.is>2019-12-19 00:22:11 +0000
commita8b8108ec74c3fbc395ce7c497e6cbd55fac7172 (patch)
tree0c6da330d5a8d5ba7c7b108370fb5d1a56225840 /pkgs/os-specific/linux/chromium-os
parentee82445a6dc5e82e90eb44452fb87277f4a18dbe (diff)
downloadnixpkgs-a8b8108ec74c3fbc395ce7c497e6cbd55fac7172.tar
nixpkgs-a8b8108ec74c3fbc395ce7c497e6cbd55fac7172.tar.gz
nixpkgs-a8b8108ec74c3fbc395ce7c497e6cbd55fac7172.tar.bz2
nixpkgs-a8b8108ec74c3fbc395ce7c497e6cbd55fac7172.tar.lz
nixpkgs-a8b8108ec74c3fbc395ce7c497e6cbd55fac7172.tar.xz
nixpkgs-a8b8108ec74c3fbc395ce7c497e6cbd55fac7172.tar.zst
nixpkgs-a8b8108ec74c3fbc395ce7c497e6cbd55fac7172.zip
chromiumOSPackages: 78.12499.0.0-rc1 -> 79.12607.0.0-rc4
Diffstat (limited to 'pkgs/os-specific/linux/chromium-os')
-rw-r--r--pkgs/os-specific/linux/chromium-os/common-mk/0001-common-mk-Adjust-policy-gen-script-cmdline-args.patch109
-rw-r--r--pkgs/os-specific/linux/chromium-os/common-mk/0001-common-mk-don-t-leak-source-absolute-paths.patch (renamed from pkgs/os-specific/linux/chromium-os/common-mk/0003-common-mk-don-t-leak-source-absolute-paths.patch)4
-rw-r--r--pkgs/os-specific/linux/chromium-os/common-mk/0002-common-mk-.gn-don-t-hardcode-env-path.patch (renamed from pkgs/os-specific/linux/chromium-os/common-mk/0004-common-mk-.gn-don-t-hardcode-env-path.patch)4
-rw-r--r--pkgs/os-specific/linux/chromium-os/common-mk/0002-common-mk-Add-proto-library-and-its-dependencies-for.patch81
-rw-r--r--pkgs/os-specific/linux/chromium-os/common-mk/default.nix6
-rw-r--r--pkgs/os-specific/linux/chromium-os/libbrillo/0003-libbrillo-Use-a-unique_ptr-for-EVP_MD_CTX.patch (renamed from pkgs/os-specific/linux/chromium-os/libbrillo/0005-libbrillo-Use-a-unique_ptr-for-EVP_MD_CTX.patch)6
-rw-r--r--pkgs/os-specific/linux/chromium-os/libbrillo/0004-libbrillo-Update-for-OpenSSL-1.1.patch (renamed from pkgs/os-specific/linux/chromium-os/libbrillo/0006-libbrillo-Update-for-OpenSSL-1.1.patch)6
-rw-r--r--pkgs/os-specific/linux/chromium-os/libbrillo/0005-libbrillo-fix-build-with-relative-platform2_root.patch (renamed from pkgs/os-specific/linux/chromium-os/libbrillo/0007-libbrillo-fix-build-with-relative-platform2_root.patch)8
-rw-r--r--pkgs/os-specific/linux/chromium-os/libbrillo/0006-libbrillo-don-t-leak-source-absolute-paths.patch (renamed from pkgs/os-specific/linux/chromium-os/libbrillo/0008-libbrillo-don-t-leak-source-absolute-paths.patch)8
-rw-r--r--pkgs/os-specific/linux/chromium-os/libbrillo/0007-libbrillo-fix-build-with-no-__has_feature.patch (renamed from pkgs/os-specific/linux/chromium-os/libbrillo/0009-libbrillo-fix-build-with-no-__has_feature.patch)4
-rw-r--r--pkgs/os-specific/linux/chromium-os/libbrillo/default.nix10
-rw-r--r--pkgs/os-specific/linux/chromium-os/modp_b64/0001-modp_b64-Fix-GN-build-and-add-fuzzers.patch1127
-rw-r--r--pkgs/os-specific/linux/chromium-os/modp_b64/0002-Use-regular-archives.patch36
-rw-r--r--pkgs/os-specific/linux/chromium-os/modp_b64/default.nix7
-rw-r--r--pkgs/os-specific/linux/chromium-os/sommelier/0008-sommelier-don-t-leak-source-absolute-paths.patch (renamed from pkgs/os-specific/linux/chromium-os/sommelier/0010-sommelier-don-t-leak-source-absolute-paths.patch)4
-rw-r--r--pkgs/os-specific/linux/chromium-os/sommelier/0009-sommelier-use-stable-xdg-shell-protocol.patch (renamed from pkgs/os-specific/linux/chromium-os/sommelier/0011-sommelier-use-stable-xdg-shell-protocol.patch)119
-rw-r--r--pkgs/os-specific/linux/chromium-os/sommelier/default.nix4
-rw-r--r--pkgs/os-specific/linux/chromium-os/upstream-info.json36
18 files changed, 108 insertions, 1471 deletions
diff --git a/pkgs/os-specific/linux/chromium-os/common-mk/0001-common-mk-Adjust-policy-gen-script-cmdline-args.patch b/pkgs/os-specific/linux/chromium-os/common-mk/0001-common-mk-Adjust-policy-gen-script-cmdline-args.patch
deleted file mode 100644
index 4829d6eba70..00000000000
--- a/pkgs/os-specific/linux/chromium-os/common-mk/0001-common-mk-Adjust-policy-gen-script-cmdline-args.patch
+++ /dev/null
@@ -1,109 +0,0 @@
-From fc07988a1837ea947af231d9371a7d7b96618f52 Mon Sep 17 00:00:00 2001
-From: Pavol Marko <pmarko@google.com>
-Date: Wed, 4 Sep 2019 15:21:46 +0200
-Subject: [PATCH 01/11] common-mk: Adjust policy gen script cmdline args
-
-The cmdline args interface of the policy source generation script
-'generate_policy_source.py' has changed on the Chromium side as of
-CL:1687818. Change invocations accordingly.
-While here, remove the targets 'cloud_policy_proto_generator' /
-'user_policy-protos' of common-mk/external_dependencies.gyp as the
-usages have been migrated to gn.
-
-BUG=chromium:981128
-TEST=build_packages
-
-Cq-Depend: chromium:1786282
-Change-Id: I308465451c6cee96319ea5ec104a799f1761d3ab
-Reviewed-on: https://chromium-review.googlesource.com/1785600
-Tested-by: Pavol Marko <pmarko@chromium.org>
-Commit-Ready: ChromeOS CL Exonerator Bot <chromiumos-cl-exonerator@appspot.gserviceaccount.com>
-Legacy-Commit-Queue: Commit Bot <commit-bot@chromium.org>
-Reviewed-by: Mike Frysinger <vapier@chromium.org>
-Reviewed-by: Pavol Marko <pmarko@chromium.org>
----
- common-mk/external_dependencies.gyp      | 42 ------------------------
- common-mk/external_dependencies/BUILD.gn |  7 ++--
- 2 files changed, 3 insertions(+), 46 deletions(-)
-
-diff --git a/common-mk/external_dependencies.gyp b/common-mk/external_dependencies.gyp
-index 34eaa59ce..751f8566d 100644
---- a/common-mk/external_dependencies.gyp
-+++ b/common-mk/external_dependencies.gyp
-@@ -49,33 +49,6 @@
-       ],
-       'includes': ['xml2cpp.gypi'],
-     },
--    {
--      'target_name': 'cloud_policy_proto_generator',
--      'type': 'none',
--      'hard_dependency': 1,
--      'variables': {
--        'policy_tools_dir': '<(sysroot)/usr/share/policy_tools',
--        'policy_resources_dir': '<(sysroot)/usr/share/policy_resources',
--        'proto_out_dir': '<(SHARED_INTERMEDIATE_DIR)/proto',
--      },
--      'actions': [{
--        'action_name': 'run_generate_script',
--        'inputs': [
--          '<(policy_tools_dir)/generate_policy_source.py',
--          '<(policy_resources_dir)/policy_templates.json',
--          '<(policy_resources_dir)/VERSION',
--        ],
--        'outputs': [ '<(proto_out_dir)/cloud_policy.proto' ],
--        'action': [
--          'python', '<(policy_tools_dir)/generate_policy_source.py',
--          '--cloud-policy-protobuf=<(proto_out_dir)/cloud_policy.proto',
--          '<(policy_resources_dir)/VERSION',
--          '<(OS)',
--          '1',         # chromeos-flag
--          '<(policy_resources_dir)/policy_templates.json',
--        ],
--      }],
--    },
-     {
-       'target_name': 'policy-protos',
-       'type': 'static_library',
-@@ -95,21 +68,6 @@
-       ],
-       'includes': ['protoc.gypi'],
-     },
--    {
--      'target_name': 'user_policy-protos',
--      'type': 'static_library',
--      'variables': {
--        'proto_in_dir': '<(SHARED_INTERMEDIATE_DIR)/proto',
--        'proto_out_dir': 'include/bindings',
--      },
--      'dependencies': [
--        'cloud_policy_proto_generator',
--      ],
--      'sources': [
--        '<(proto_in_dir)/cloud_policy.proto',
--      ],
--      'includes': ['protoc.gypi'],
--    },
-     {
-       'target_name': 'install_attributes-proto',
-       'type': 'static_library',
-diff --git a/common-mk/external_dependencies/BUILD.gn b/common-mk/external_dependencies/BUILD.gn
-index 61774bf8f..4ec1665e3 100644
---- a/common-mk/external_dependencies/BUILD.gn
-+++ b/common-mk/external_dependencies/BUILD.gn
-@@ -59,10 +59,9 @@ action("cloud_policy_proto_generator") {
-   ]
-   args = [
-     "--cloud-policy-protobuf=${proto_out_dir}/cloud_policy.proto",
--    "${policy_resources_dir}/VERSION",
--    "${OS}",
--    "1",  # chromeos-flag
--    "${policy_resources_dir}/policy_templates.json",
-+    "--chrome-version-file=${policy_resources_dir}/VERSION",
-+    "--target-platform=chromeos",
-+    "--policy-templates-file=${policy_resources_dir}/policy_templates.json",
-   ]
- }
- 
--- 
-2.23.0
-
diff --git a/pkgs/os-specific/linux/chromium-os/common-mk/0003-common-mk-don-t-leak-source-absolute-paths.patch b/pkgs/os-specific/linux/chromium-os/common-mk/0001-common-mk-don-t-leak-source-absolute-paths.patch
index 764b997d303..c4e314d7988 100644
--- a/pkgs/os-specific/linux/chromium-os/common-mk/0003-common-mk-don-t-leak-source-absolute-paths.patch
+++ b/pkgs/os-specific/linux/chromium-os/common-mk/0001-common-mk-don-t-leak-source-absolute-paths.patch
@@ -1,7 +1,7 @@
-From b5ac444592d4bd837934d8a657d9ae8b600d7f95 Mon Sep 17 00:00:00 2001
+From 05622922a69bda21677a7f59b19214e3a00855c4 Mon Sep 17 00:00:00 2001
 From: Alyssa Ross <hi@alyssa.is>
 Date: Sun, 24 Nov 2019 16:56:11 +0000
-Subject: [PATCH 03/11] common-mk: don't leak source-absolute paths
+Subject: [PATCH 1/9] common-mk: don't leak source-absolute paths
 
 Source-absolute paths like //vm_tools/whatever were being leaked to
 subprocesses, which of course didn't know how to understand them.
diff --git a/pkgs/os-specific/linux/chromium-os/common-mk/0004-common-mk-.gn-don-t-hardcode-env-path.patch b/pkgs/os-specific/linux/chromium-os/common-mk/0002-common-mk-.gn-don-t-hardcode-env-path.patch
index 2ab893d04fa..d82b3d7dff8 100644
--- a/pkgs/os-specific/linux/chromium-os/common-mk/0004-common-mk-.gn-don-t-hardcode-env-path.patch
+++ b/pkgs/os-specific/linux/chromium-os/common-mk/0002-common-mk-.gn-don-t-hardcode-env-path.patch
@@ -1,7 +1,7 @@
-From 11dbc10898cef09008e4ab9d34d855a5e8c12e71 Mon Sep 17 00:00:00 2001
+From d3ea2a8f9f64e2aff9667f03a93540e2e72c0f30 Mon Sep 17 00:00:00 2001
 From: Alyssa Ross <hi@alyssa.is>
 Date: Sun, 24 Nov 2019 17:20:46 +0000
-Subject: [PATCH 04/11] common-mk: .gn: don't hardcode env path
+Subject: [PATCH 2/9] common-mk: .gn: don't hardcode env path
 
 This is needlessly non-portable.
 ---
diff --git a/pkgs/os-specific/linux/chromium-os/common-mk/0002-common-mk-Add-proto-library-and-its-dependencies-for.patch b/pkgs/os-specific/linux/chromium-os/common-mk/0002-common-mk-Add-proto-library-and-its-dependencies-for.patch
deleted file mode 100644
index a8430e1e326..00000000000
--- a/pkgs/os-specific/linux/chromium-os/common-mk/0002-common-mk-Add-proto-library-and-its-dependencies-for.patch
+++ /dev/null
@@ -1,81 +0,0 @@
-From e0ed9db1d24ad7df27146f37895563f8ebc4d613 Mon Sep 17 00:00:00 2001
-From: Amr Aboelkher <amraboelkher@google.com>
-Date: Wed, 2 Oct 2019 18:08:08 +0200
-Subject: [PATCH 02/11] common-mk: Add proto library and its dependencies for
- policy common definitions
-
-BUG=chromium:1009436,chromium:1006077,chromium:552439
-TEST=precq passes
-
-Cq-Depend: chromium:1833618
-Change-Id: I12e2f15afba615cd4395eb5818f6ff370d187c73
-Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform2/+/1835953
-Tested-by: Amr Aboelkher <amraboelkher@google.com>
-Legacy-Commit-Queue: Commit Bot <commit-bot@chromium.org>
-Reviewed-by: Mike Frysinger <vapier@chromium.org>
----
- common-mk/external_dependencies/BUILD.gn | 21 +++++++++++++++++++++
- 1 file changed, 21 insertions(+)
-
-diff --git a/common-mk/external_dependencies/BUILD.gn b/common-mk/external_dependencies/BUILD.gn
-index 4ec1665e3..61f571b38 100644
---- a/common-mk/external_dependencies/BUILD.gn
-+++ b/common-mk/external_dependencies/BUILD.gn
-@@ -65,14 +65,30 @@ action("cloud_policy_proto_generator") {
-   ]
- }
- 
-+proto_library("policy_common_definitions-protos") {
-+  proto_in_dir = "${sysroot}/usr/share/protofiles"
-+  proto_out_dir = "include/bindings"
-+  sources = [
-+    "${proto_in_dir}/policy_common_definitions.proto",
-+  ]
-+
-+  # policy-protos.a is used by a shared_libary object: https://crbug.com/715795
-+  # Build it with '-fPIC' instead of '-fPIE'.
-+  configs = [ "//common-mk:pic" ]
-+}
-+
- proto_library("policy-protos") {
-   proto_in_dir = "${sysroot}/usr/share/protofiles"
-   proto_out_dir = "include/bindings"
-+  proto_lib_dirs = [ "${sysroot}/usr/share/protofiles" ]
-   sources = [
-     "${proto_in_dir}/chrome_device_policy.proto",
-     "${proto_in_dir}/chrome_extension_policy.proto",
-     "${proto_in_dir}/device_management_backend.proto",
-   ]
-+  public_deps = [
-+    ":policy_common_definitions-protos",
-+  ]
- 
-   # policy-protos.a is used by a shared_libary object: https://crbug.com/715795
-   # Build it with '-fPIC' instead of '-fPIE'.
-@@ -88,18 +104,23 @@ goproto_library("policy-goprotos") {
-     "${proto_in_dir}/chrome_device_policy.proto",
-     "${proto_in_dir}/chrome_extension_policy.proto",
-     "${proto_in_dir}/device_management_backend.proto",
-+    "${proto_in_dir}/policy_common_definitions.proto",
-   ]
- }
- 
- proto_library("user_policy-protos") {
-   proto_in_dir = "${target_gen_dir}/proto"
-   proto_out_dir = "include/bindings"
-+  proto_lib_dirs = [ "${sysroot}/usr/share/protofiles" ]
-   sources = [
-     "${proto_in_dir}/cloud_policy.proto",
-   ]
-   deps = [
-     ":cloud_policy_proto_generator",
-   ]
-+  public_deps = [
-+    ":policy_common_definitions-protos",
-+  ]
- }
- 
- proto_library("install_attributes-proto") {
--- 
-2.23.0
-
diff --git a/pkgs/os-specific/linux/chromium-os/common-mk/default.nix b/pkgs/os-specific/linux/chromium-os/common-mk/default.nix
index 1ebfbfaac70..aad997b882c 100644
--- a/pkgs/os-specific/linux/chromium-os/common-mk/default.nix
+++ b/pkgs/os-specific/linux/chromium-os/common-mk/default.nix
@@ -57,10 +57,8 @@ stdenv.mkDerivation ({
       echo applying patch ${patch}
       patch -p1 < ${patch} 
     '') ([
-      ./0001-common-mk-Adjust-policy-gen-script-cmdline-args.patch
-      ./0002-common-mk-Add-proto-library-and-its-dependencies-for.patch
-      ./0003-common-mk-don-t-leak-source-absolute-paths.patch
-      ./0004-common-mk-.gn-don-t-hardcode-env-path.patch
+      ./0001-common-mk-don-t-leak-source-absolute-paths.patch
+      ./0002-common-mk-.gn-don-t-hardcode-env-path.patch
     ] ++ platform2Patches)}
 
     patchShebangs common-mk
diff --git a/pkgs/os-specific/linux/chromium-os/libbrillo/0005-libbrillo-Use-a-unique_ptr-for-EVP_MD_CTX.patch b/pkgs/os-specific/linux/chromium-os/libbrillo/0003-libbrillo-Use-a-unique_ptr-for-EVP_MD_CTX.patch
index eebe6015546..ceb9b8746d2 100644
--- a/pkgs/os-specific/linux/chromium-os/libbrillo/0005-libbrillo-Use-a-unique_ptr-for-EVP_MD_CTX.patch
+++ b/pkgs/os-specific/linux/chromium-os/libbrillo/0003-libbrillo-Use-a-unique_ptr-for-EVP_MD_CTX.patch
@@ -1,7 +1,7 @@
-From ed2920bc6864e044ffa5beb8a2508f4e5f5b4ce4 Mon Sep 17 00:00:00 2001
+From d79343f36918fd99861426f658fdfb53237661f0 Mon Sep 17 00:00:00 2001
 From: Daniel Kurtz <djkurtz@chromium.org>
 Date: Thu, 17 Oct 2019 20:45:53 +1100
-Subject: [PATCH 05/11] libbrillo: Use a unique_ptr for EVP_MD_CTX
+Subject: [PATCH 3/9] libbrillo: Use a unique_ptr for EVP_MD_CTX
 
 In OpenSSL 1.1, the EVP_MD_CTX struct will become opaque, and therefore
 it will not be possible to allocate on the stack.
@@ -33,7 +33,7 @@ Reviewed-by: Nick Crews <ncrews@chromium.org>
  1 file changed, 8 insertions(+), 10 deletions(-)
 
 diff --git a/libbrillo/policy/device_policy_impl.cc b/libbrillo/policy/device_policy_impl.cc
-index 6ba297406..e3c12f9d6 100644
+index 958b7ebb7..eaf90c96a 100644
 --- a/libbrillo/policy/device_policy_impl.cc
 +++ b/libbrillo/policy/device_policy_impl.cc
 @@ -55,36 +55,34 @@ bool ReadPublicKeyFromFile(const base::FilePath& key_file,
diff --git a/pkgs/os-specific/linux/chromium-os/libbrillo/0006-libbrillo-Update-for-OpenSSL-1.1.patch b/pkgs/os-specific/linux/chromium-os/libbrillo/0004-libbrillo-Update-for-OpenSSL-1.1.patch
index bc49b8fa4fd..6bdb61c4997 100644
--- a/pkgs/os-specific/linux/chromium-os/libbrillo/0006-libbrillo-Update-for-OpenSSL-1.1.patch
+++ b/pkgs/os-specific/linux/chromium-os/libbrillo/0004-libbrillo-Update-for-OpenSSL-1.1.patch
@@ -1,7 +1,7 @@
-From 1c81e92e7a983c2f9fff7bd56ce769f2edb59a59 Mon Sep 17 00:00:00 2001
+From ad7338d648cfeffbd595e9a7681f746ce834d59e Mon Sep 17 00:00:00 2001
 From: Daniel Kurtz <djkurtz@chromium.org>
 Date: Mon, 3 Jun 2019 16:46:17 -0600
-Subject: [PATCH 06/11] libbrillo: Update for OpenSSL 1.1
+Subject: [PATCH 4/9] libbrillo: Update for OpenSSL 1.1
 
 OpenSSL 1.1 has made significant non-backwards compatible changes to its
 API as outlined in:
@@ -186,7 +186,7 @@ index 603bd1d54..cc63258db 100644
      return ReportError(error, FROM_HERE, "Cannot create SSL_CTX");
  
 diff --git a/libbrillo/policy/device_policy_impl.cc b/libbrillo/policy/device_policy_impl.cc
-index e3c12f9d6..0c112a1b9 100644
+index eaf90c96a..3f96d12ee 100644
 --- a/libbrillo/policy/device_policy_impl.cc
 +++ b/libbrillo/policy/device_policy_impl.cc
 @@ -30,6 +30,12 @@ namespace em = enterprise_management;
diff --git a/pkgs/os-specific/linux/chromium-os/libbrillo/0007-libbrillo-fix-build-with-relative-platform2_root.patch b/pkgs/os-specific/linux/chromium-os/libbrillo/0005-libbrillo-fix-build-with-relative-platform2_root.patch
index d3a4976286d..64f09279bae 100644
--- a/pkgs/os-specific/linux/chromium-os/libbrillo/0007-libbrillo-fix-build-with-relative-platform2_root.patch
+++ b/pkgs/os-specific/linux/chromium-os/libbrillo/0005-libbrillo-fix-build-with-relative-platform2_root.patch
@@ -1,17 +1,17 @@
-From 16960cbb59804aebc4b7dd5f746d2452c8a1edd0 Mon Sep 17 00:00:00 2001
+From ee36a284641d9ac2b412bba3738729fd5b969f42 Mon Sep 17 00:00:00 2001
 From: Alyssa Ross <hi@alyssa.is>
 Date: Sun, 1 Dec 2019 22:11:39 +0000
-Subject: [PATCH 07/11] libbrillo: fix build with relative platform2_root
+Subject: [PATCH 5/9] libbrillo: fix build with relative platform2_root
 
 ---
  libbrillo/BUILD.gn | 3 ++-
  1 file changed, 2 insertions(+), 1 deletion(-)
 
 diff --git a/libbrillo/BUILD.gn b/libbrillo/BUILD.gn
-index e475692ab..c3ca0054b 100644
+index 6739def9c..75b6da6f2 100644
 --- a/libbrillo/BUILD.gn
 +++ b/libbrillo/BUILD.gn
-@@ -355,7 +355,8 @@ shared_library("libpolicy-${libbase_ver}") {
+@@ -360,7 +360,8 @@ shared_library("libpolicy-${libbase_ver}") {
      "openssl",
      "protobuf-lite",
    ]
diff --git a/pkgs/os-specific/linux/chromium-os/libbrillo/0008-libbrillo-don-t-leak-source-absolute-paths.patch b/pkgs/os-specific/linux/chromium-os/libbrillo/0006-libbrillo-don-t-leak-source-absolute-paths.patch
index 523a2359bdd..59c31ec4af9 100644
--- a/pkgs/os-specific/linux/chromium-os/libbrillo/0008-libbrillo-don-t-leak-source-absolute-paths.patch
+++ b/pkgs/os-specific/linux/chromium-os/libbrillo/0006-libbrillo-don-t-leak-source-absolute-paths.patch
@@ -1,17 +1,17 @@
-From 308678664652685d48dccc4ea6d55195a307e36d Mon Sep 17 00:00:00 2001
+From 5c95aae10ef7968ab2d9cbdf1456798dc8f94890 Mon Sep 17 00:00:00 2001
 From: Alyssa Ross <hi@alyssa.is>
 Date: Sun, 1 Dec 2019 14:55:21 +0000
-Subject: [PATCH 08/11] libbrillo: don't leak source-absolute paths
+Subject: [PATCH 6/9] libbrillo: don't leak source-absolute paths
 
 ---
  libbrillo/BUILD.gn | 7 +++----
  1 file changed, 3 insertions(+), 4 deletions(-)
 
 diff --git a/libbrillo/BUILD.gn b/libbrillo/BUILD.gn
-index c3ca0054b..4ae5aced0 100644
+index 75b6da6f2..a3a25865b 100644
 --- a/libbrillo/BUILD.gn
 +++ b/libbrillo/BUILD.gn
-@@ -260,10 +260,9 @@ action("libbrillo-${libbase_ver}") {
+@@ -265,10 +265,9 @@ action("libbrillo-${libbase_ver}") {
      deps += [ ":lib" + sublib.library_name ]
    }
    script = "//common-mk/write_args.py"
diff --git a/pkgs/os-specific/linux/chromium-os/libbrillo/0009-libbrillo-fix-build-with-no-__has_feature.patch b/pkgs/os-specific/linux/chromium-os/libbrillo/0007-libbrillo-fix-build-with-no-__has_feature.patch
index f56439145b4..1ac8e0bb4d7 100644
--- a/pkgs/os-specific/linux/chromium-os/libbrillo/0009-libbrillo-fix-build-with-no-__has_feature.patch
+++ b/pkgs/os-specific/linux/chromium-os/libbrillo/0007-libbrillo-fix-build-with-no-__has_feature.patch
@@ -1,7 +1,7 @@
-From dce65ab2cb0bac44cf5a133aface2acf9f0b2367 Mon Sep 17 00:00:00 2001
+From 268494087143b570af36bf7c4fe891108ea839db Mon Sep 17 00:00:00 2001
 From: Alyssa Ross <hi@alyssa.is>
 Date: Sun, 1 Dec 2019 14:57:01 +0000
-Subject: [PATCH 09/11] libbrillo: fix build with no __has_feature
+Subject: [PATCH 7/9] libbrillo: fix build with no __has_feature
 
 ---
  libbrillo/brillo/asan.h | 8 ++++++--
diff --git a/pkgs/os-specific/linux/chromium-os/libbrillo/default.nix b/pkgs/os-specific/linux/chromium-os/libbrillo/default.nix
index c5bb961d0cd..511597eea93 100644
--- a/pkgs/os-specific/linux/chromium-os/libbrillo/default.nix
+++ b/pkgs/os-specific/linux/chromium-os/libbrillo/default.nix
@@ -7,11 +7,11 @@ common-mk {
   platformSubdir = "libbrillo";
 
   platform2Patches = [
-    ./0005-libbrillo-Use-a-unique_ptr-for-EVP_MD_CTX.patch
-    ./0006-libbrillo-Update-for-OpenSSL-1.1.patch
-    ./0007-libbrillo-fix-build-with-relative-platform2_root.patch
-    ./0008-libbrillo-don-t-leak-source-absolute-paths.patch
-    ./0009-libbrillo-fix-build-with-no-__has_feature.patch
+    ./0003-libbrillo-Use-a-unique_ptr-for-EVP_MD_CTX.patch
+    ./0004-libbrillo-Update-for-OpenSSL-1.1.patch
+    ./0005-libbrillo-fix-build-with-relative-platform2_root.patch
+    ./0006-libbrillo-don-t-leak-source-absolute-paths.patch
+    ./0007-libbrillo-fix-build-with-no-__has_feature.patch
   ];
 
   nativeBuildInputs = [ dbus_cplusplus go-protobuf ];
diff --git a/pkgs/os-specific/linux/chromium-os/modp_b64/0001-modp_b64-Fix-GN-build-and-add-fuzzers.patch b/pkgs/os-specific/linux/chromium-os/modp_b64/0001-modp_b64-Fix-GN-build-and-add-fuzzers.patch
deleted file mode 100644
index b5321c9a48c..00000000000
--- a/pkgs/os-specific/linux/chromium-os/modp_b64/0001-modp_b64-Fix-GN-build-and-add-fuzzers.patch
+++ /dev/null
@@ -1,1127 +0,0 @@
-From 832ee65ffff7353e88bf622e2d14e22e991ce698 Mon Sep 17 00:00:00 2001
-From: Manoj Gupta <manojgupta@google.com>
-Date: Wed, 9 Oct 2019 12:40:18 -0700
-Subject: [PATCH 1/2] modp_b64: Fix GN build and add fuzzers.
-
-modp_b64 is currently build with Makefile.
-Fix the BUILD.gn so that it can be used and remove
-Makefile usage.
-Also add two fuzzers for encode and decode routines.
-
-BUG=chromium:1012803
-TEST=GN build work with modified ebuild.
-
-Cq-Depend: chromium:1850664
-Change-Id: I1756237d91630ea7e18e7c3ed055d2b3b532de0d
----
- BUILD.gn                          |  53 +-
- Makefile                          |  20 -
- OWNERS.fuzzer                     |   1 +
- common.mk                         | 941 ------------------------------
- fuzzers/modp_b64_decode_fuzzer.cc |  17 +
- fuzzers/modp_b64_encode_fuzzer.cc |  17 +
- 6 files changed, 84 insertions(+), 965 deletions(-)
- delete mode 100644 Makefile
- create mode 100644 OWNERS.fuzzer
- delete mode 100644 common.mk
- create mode 100644 fuzzers/modp_b64_decode_fuzzer.cc
- create mode 100644 fuzzers/modp_b64_encode_fuzzer.cc
-
-diff --git a/BUILD.gn b/BUILD.gn
-index cd322ac..b2fe97d 100644
---- a/BUILD.gn
-+++ b/BUILD.gn
-@@ -1,15 +1,60 @@
--# Copyright (c) 2013 The Chromium Authors. All rights reserved.
-+# Copyright 2013 The Chromium Authors. All rights reserved.
- # Use of this source code is governed by a BSD-style license that can be
- # found in the LICENSE file.
- 
--source_set("modp_b64") {
-+group("all") {
-+  deps = [
-+    ":modp_b64",
-+  ]
-+
-+  if (use.fuzzer) {
-+    deps += [
-+      ":modp_b64_decode_fuzzer",
-+      ":modp_b64_encode_fuzzer",
-+    ]
-+  }
-+}
-+
-+static_library("modp_b64") {
-   sources = [
-     "modp_b64.cc",
-     "modp_b64.h",
-     "modp_b64_data.h",
-   ]
--
-   include_dirs = [
--    "./modp_b64",
-+    "modp_b64",
-   ]
- }
-+
-+# Fuzzers.
-+if (use.fuzzer) {
-+  executable("modp_b64_decode_fuzzer") {
-+    configs += [
-+      "//common-mk/common_fuzzer",
-+    ]
-+    deps = [
-+      ":modp_b64",
-+    ]
-+    sources = [
-+      "fuzzers/modp_b64_decode_fuzzer.cc",
-+    ]
-+    include_dirs = [
-+      "modp_b64",
-+    ]
-+  }
-+
-+  executable("modp_b64_encode_fuzzer") {
-+    configs += [
-+      "//common-mk/common_fuzzer",
-+    ]
-+    deps = [
-+      ":modp_b64",
-+    ]
-+    sources = [
-+      "fuzzers/modp_b64_encode_fuzzer.cc",
-+    ]
-+    include_dirs = [
-+      "modp_b64",
-+    ]
-+  }
-+}
-diff --git a/Makefile b/Makefile
-deleted file mode 100644
-index c33ff75..0000000
---- a/Makefile
-+++ /dev/null
-@@ -1,20 +0,0 @@
--# Copyright (C) 2015 The Android Open Source Project
--#
--# 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.
--
--include common.mk
--
--CXXFLAGS += -I$(SRC)/modp_b64/
--CXX_STATIC_LIBRARY(libmodpb64.pie.a): $(CXX_OBJECTS)
--
--all: CXX_STATIC_LIBRARY(libmodpb64.pie.a)
-diff --git a/OWNERS.fuzzer b/OWNERS.fuzzer
-new file mode 100644
-index 0000000..62800d6
---- /dev/null
-+++ b/OWNERS.fuzzer
-@@ -0,0 +1 @@
-+manojgupta@chromium.org
-diff --git a/common.mk b/common.mk
-deleted file mode 100644
-index 51ead56..0000000
---- a/common.mk
-+++ /dev/null
-@@ -1,941 +0,0 @@
--# copyright (c) 2012 the chromium os authors. all rights reserved.
--# use of this source code is governed by a bsd-style license that can be
--# found in the license file.
--#
--# If this file is part of another source distribution, it's license may be
--# stored in LICENSE.makefile or LICENSE.common.mk.
--#
--# NOTE NOTE NOTE
--#  The authoritative common.mk is located in:
--#    https://chromium.googlesource.com/chromiumos/platform2/+/master/common-mk
--#  Please make all changes there, then copy into place in other repos.
--# NOTE NOTE NOTE
--#
--# This file provides a common architecture for building C/C++ source trees.
--# It uses recursive makefile inclusion to create a single make process which
--# can be built in the source tree or with the build artifacts placed elsewhere.
--#
--# It is fully parallelizable for all targets, including static archives.
--#
--# To use:
--# 1. Place common.mk in your top source level
--# 2. In your top-level Makefile, place "include common.mk" at the top
--# 3. In all subdirectories, create a 'module.mk' file that starts with:
--#      include common.mk
--#    And then contains the remainder of your targets.
--# 4. All build targets should look like:
--#    relative/path/target: relative/path/obj.o
--#
--# See existing makefiles for rule examples.
--#
--# Exported macros:
--#   - cc_binary, cxx_binary provide standard compilation steps for binaries
--#   - cxx_library, cc_library provide standard compilation steps for
--#     shared objects.
--#   All of the above optionally take an argument for extra flags.
--#   - update_archive creates/updates a given .a target
--#
--# Instead of using the build macros, most users can just use wrapped targets:
--#   - CXX_BINARY, CC_BINARY, CC_STATIC_BINARY, CXX_STATIC_BINARY
--#   - CXX_LIBRARY, CC_LIBRARY, CC_STATIC_LIBRARY, CXX_STATIC_LIBRARY
--#   - E.g., CXX_BINARY(mahbinary): foo.o
--#   - object.depends targets may be used when a prerequisite is required for an
--#     object file. Because object files result in multiple build artifacts to
--#     handle PIC and PIE weirdness. E.g.
--#       foo.o.depends: generated/dbus.h
--#   - TEST(binary) or TEST(CXX_BINARY(binary)) may be used as a prerequisite
--#     for the tests target to trigger an automated test run.
--#   - CLEAN(file_or_dir) dependency can be added to 'clean'.
--#
--# If source code is being generated, rules will need to be registered for
--# compiling the objects.  This can be done by adding one of the following
--# to the Makefile:
--#   - For C source files
--#   $(eval $(call add_object_rules,sub/dir/gen_a.o sub/dir/b.o,CC,c,CFLAGS))
--#   - For C++ source files
--#   $(eval $(call add_object_rules,sub/dir/gen_a.o sub/dir/b.o,CXX,cc,CXXFLAGS))
--#
--# Exported targets meant to have prerequisites added to:
--#  - all - Your desired targets should be given
--#  - tests - Any TEST(test_binary) targets should be given
--#  - FORCE - force the given target to run regardless of changes
--#            In most cases, using .PHONY is preferred.
--#
--# Possible command line variables:
--#   - COLOR=[0|1] to set ANSI color output (default: 1)
--#   - VERBOSE=[0|1] to hide/show commands (default: 0)
--#   - MODE=[opt|dbg|profiling] (default: opt)
--#          opt - Enable optimizations for release builds
--#          dbg - Turn down optimization for debugging
--#          profiling - Turn off optimization and turn on profiling/coverage
--#                      support.
--#   - ARCH=[x86|arm|supported qemu name] (default: from portage or uname -m)
--#   - SPLITDEBUG=[0|1] splits debug info in target.debug (default: 0)
--#        If NOSTRIP=1, SPLITDEBUG will never strip the final emitted objects.
--#   - NOSTRIP=[0|1] determines if binaries are stripped. (default: 1)
--#        NOSTRIP=0 and MODE=opt will also drop -g from the CFLAGS.
--#   - VALGRIND=[0|1] runs tests under valgrind (default: 0)
--#   - OUT=/path/to/builddir puts all output in given path (default: $PWD)
--#   - VALGRIND_ARGS="" supplies extra memcheck arguments
--#
--# Per-target(-ish) variable:
--#   - NEEDS_ROOT=[0|1] allows a TEST() target to run with root.
--#     Default is 0 unless it is running under QEmu.
--#   - NEEDS_MOUNTS=[0|1] allows a TEST() target running on QEmu to get
--#     setup mounts in the $(SYSROOT)
--#
--# Caveats:
--# - Directories or files with spaces in them DO NOT get along with GNU Make.
--#   If you need them, all uses of dir/notdir/etc will need to have magic
--#   wrappers.  Proceed at risk to your own sanity.
--# - External CXXFLAGS and CFLAGS should be passed via the environment since
--#   this file does not use 'override' to control them.
--# - Our version of GNU Make doesn't seem to support the 'private' variable
--#   annotation, so you can't tag a variable private on a wrapping target.
--
--# Behavior configuration variables
--SPLITDEBUG ?= 0
--NOSTRIP ?= 1
--VALGRIND ?= 0
--COLOR ?= 1
--VERBOSE ?= 0
--MODE ?= opt
--CXXEXCEPTIONS ?= 0
--ARCH ?= $(shell uname -m)
--
--# Put objects in a separate tree based on makefile locations
--# This means you can build a tree without touching it:
--#   make -C $SRCDIR  # will create ./build-$(MODE)
--# Or
--#   make -C $SRCDIR OUT=$PWD
--# This variable is extended on subdir calls and doesn't need to be re-called.
--OUT ?= $(PWD)/
--
--# Make OUT now so we can use realpath.
--$(shell mkdir -p "$(OUT)")
--
--# TODO(wad) Relative paths are resolved against SRC and not the calling dir.
--# Ensure a command-line supplied OUT has a slash
--override OUT := $(realpath $(OUT))/
--
--# SRC is not meant to be set by the end user, but during make call relocation.
--# $(PWD) != $(CURDIR) all the time.
--export SRC ?= $(CURDIR)
--
--# If BASE_VER is not set, read the libchrome revision number from
--# common-mk/BASE_VER file.
--ifeq ($(strip $(BASE_VER)),)
--BASE_VER := $(shell cat $(SRC)/../common-mk/BASE_VER)
--endif
--$(info Using BASE_VER=$(BASE_VER))
--
--# Re-start in the $(OUT) directory if we're not there.
--# We may be invoked using -C or bare and we need to ensure behavior
--# is consistent so we check both PWD vs OUT and PWD vs CURDIR.
--override RELOCATE_BUILD := 0
--ifneq (${PWD}/,${OUT})
--override RELOCATE_BUILD := 1
--endif
--# Make sure we're running with no builtin targets. They cause
--# leakage and mayhem!
--ifneq (${PWD},${CURDIR})
--override RELOCATE_BUILD := 1
--# If we're run from the build dir, don't let it get cleaned up later.
--ifeq (${PWD}/,${OUT})
--$(shell touch "$(PWD)/.dont_delete_on_clean")
--endif
--endif  # ifneq (${PWD},${CURDIR}
--
--# "Relocate" if we need to restart without implicit rules.
--ifeq ($(subst r,,$(MAKEFLAGS)),$(MAKEFLAGS))
--override RELOCATE_BUILD := 1
--endif
--
--ifeq (${RELOCATE_BUILD},1)
--# By default, silence build output. Reused below as well.
--QUIET = @
--ifeq ($(VERBOSE),1)
--  QUIET=
--endif
--
--# This target will override all targets, including prerequisites. To avoid
--# calling $(MAKE) once per prereq on the given CMDGOAL, we guard it with a local
--# variable.
--RUN_ONCE := 0
--MAKECMDGOALS ?= all
--# Keep the rules split as newer make does not allow them to be declared
--# on the same line.  But the way :: rules work, the _all here will also
--# invoke the %:: rule while retaining "_all" as the default.
--_all::
--%::
--	$(if $(filter 0,$(RUN_ONCE)), \
--	  cd "$(OUT)" && \
--	  $(MAKE) -r -I "$(SRC)" -f "$(CURDIR)/Makefile" \
--	    SRC="$(CURDIR)" OUT="$(OUT)" $(foreach g,$(MAKECMDGOALS),"$(g)"),)
--	$(eval RUN_ONCE := 1)
--pass-to-subcall := 1
--endif
--
--ifeq ($(pass-to-subcall),)
--
--# Only call MODULE if we're in a submodule
--MODULES_LIST := $(filter-out Makefile %.d,$(MAKEFILE_LIST))
--ifeq ($(words $(filter-out Makefile common.mk %.d $(SRC)/Makefile \
--                           $(SRC)/common.mk,$(MAKEFILE_LIST))),0)
--
--# All the top-level defines outside of module.mk.
--
--#
--# Helper macros
--#
--
--# Create the directory if it doesn't yet exist.
--define auto_mkdir
--  $(if $(wildcard $(dir $1)),$2,$(QUIET)mkdir -p "$(dir $1)")
--endef
--
--# Creates the actual archive with an index.
--# The target $@ must end with .pic.a or .pie.a.
--define update_archive
--  $(call auto_mkdir,$(TARGET_OR_MEMBER))
--  $(QUIET)# Create the archive in one step to avoid parallel use accessing it
--  $(QUIET)# before all the symbols are present.
--  @$(ECHO) "AR		$(subst \
--$(SRC)/,,$(^:.o=$(suffix $(basename $(TARGET_OR_MEMBER))).o)) \
---> $(subst $(SRC)/,,$(TARGET_OR_MEMBER))"
--  $(QUIET)$(AR) rcs $(TARGET_OR_MEMBER) \
--          $(subst $(SRC)/,,$(^:.o=$(suffix $(basename $(TARGET_OR_MEMBER))).o))
--endef
--
--# Default compile from objects using pre-requisites but filters out
--# subdirs and .d files.
--define cc_binary
--  $(call COMPILE_BINARY_implementation,CC,$(CFLAGS) $(1),$(EXTRA_FLAGS))
--endef
--
--define cxx_binary
--  $(call COMPILE_BINARY_implementation,CXX,$(CXXFLAGS) $(1),$(EXTRA_FLAGS))
--endef
--
--# Default compile from objects using pre-requisites but filters out
--# subdirs and .d files.
--define cc_library
--  $(call COMPILE_LIBRARY_implementation,CC,$(CFLAGS) $(1),$(EXTRA_FLAGS))
--endef
--define cxx_library
--  $(call COMPILE_LIBRARY_implementation,CXX,$(CXXFLAGS) $(1),$(EXTRA_FLAGS))
--endef
--
--# Deletes files silently if they exist. Meant for use in any local
--# clean targets.
--define silent_rm
--  $(if $(wildcard $(1)),
--  $(QUIET)($(ECHO) -n '$(COLOR_RED)CLEANFILE$(COLOR_RESET)		' && \
--    $(ECHO) '$(subst $(OUT)/,,$(wildcard $(1)))' && \
--    $(RM) $(1) 2>/dev/null) || true,)
--endef
--define silent_rmdir
--  $(if $(wildcard $(1)),
--    $(if $(wildcard $(1)/*),
--  $(QUIET)# $(1) not empty [$(wildcard $(1)/*)]. Not deleting.,
--  $(QUIET)($(ECHO) -n '$(COLOR_RED)CLEANDIR$(COLOR_RESET)		' && \
--    $(ECHO) '$(subst $(OUT)/,,$(wildcard $(1)))' && \
--    $(RMDIR) $(1) 2>/dev/null) || true),)
--endef
--
--#
--# Default variable values
--#
--
--# Only override toolchain vars if they are from make.
--CROSS_COMPILE ?=
--define override_var
--ifneq ($(filter undefined default,$(origin $1)),)
--$1 = $(CROSS_COMPILE)$2
--endif
--endef
--$(eval $(call override_var,AR,ar))
--$(eval $(call override_var,CC,gcc))
--$(eval $(call override_var,CXX,g++))
--$(eval $(call override_var,OBJCOPY,objcopy))
--$(eval $(call override_var,PKG_CONFIG,pkg-config))
--$(eval $(call override_var,RANLIB,ranlib))
--$(eval $(call override_var,STRIP,strip))
--
--RMDIR ?= rmdir
--ECHO = /bin/echo -e
--
--ifeq ($(lastword $(subst /, ,$(CC))),clang)
--CDRIVER = clang
--else
--CDRIVER = gcc
--endif
--
--ifeq ($(lastword $(subst /, ,$(CXX))),clang++)
--CXXDRIVER = clang
--else
--CXXDRIVER = gcc
--endif
--
--# Internal macro to support check_XXX macros below.
--# Usage: $(call check_compile, [code], [compiler], [code_type], [c_flags],
--#               [extra_c_flags], [library_flags], [success_ret], [fail_ret])
--# Return: [success_ret] if compile succeeded, otherwise [fail_ret]
--check_compile = $(shell printf '%b\n' $(1) | \
--  $($(2)) $($(4)) -x $(3) $(LDFLAGS) $(5) - $(6) -o /dev/null > /dev/null 2>&1 \
--  && echo "$(7)" || echo "$(8)")
--
--# Helper macro to check whether a test program will compile with the specified
--# compiler flags.
--# Usage: $(call check_compile_cc, [code], [flags], [alternate_flags])
--# Return: [flags] if compile succeeded, otherwise [alternate_flags]
--check_compile_cc = $(call check_compile,$(1),CC,c,CFLAGS,$(2),,$(2),$(3))
--check_compile_cxx = $(call check_compile,$(1),CXX,c++,CXXFLAGS,$(2),,$(2),$(3))
--
--# Helper macro to check whether a test program will compile with the specified
--# libraries.
--# Usage: $(call check_compile_cc, [code], [library_flags], [alternate_flags])
--# Return: [library_flags] if compile succeeded, otherwise [alternate_flags]
--check_libs_cc = $(call check_compile,$(1),CC,c,CFLAGS,,$(2),$(2),$(3))
--check_libs_cxx = $(call check_compile,$(1),CXX,c++,CXXFLAGS,,$(2),$(2),$(3))
--
--# Helper macro to check whether the compiler accepts the specified flags.
--# Usage: $(call check_compile_cc, [flags], [alternate_flags])
--# Return: [flags] if compile succeeded, otherwise [alternate_flags]
--check_cc = $(call check_compile_cc,'int main() { return 0; }',$(1),$(2))
--check_cxx = $(call check_compile_cxx,'int main() { return 0; }',$(1),$(2))
--
--# Choose the stack protector flags based on whats supported by the compiler.
--SSP_CFLAGS := $(call check_cc,-fstack-protector-strong)
--ifeq ($(SSP_CFLAGS),)
-- SSP_CFLAGS := $(call check_cc,-fstack-protector-all)
--endif
--
--# To update these from an including Makefile:
--#  CXXFLAGS += -mahflag  # Append to the list
--#  CXXFLAGS := -mahflag $(CXXFLAGS) # Prepend to the list
--#  CXXFLAGS := $(filter-out badflag,$(CXXFLAGS)) # Filter out a value
--# The same goes for CFLAGS.
--COMMON_CFLAGS-gcc := -fvisibility=internal -ggdb3 -Wa,--noexecstack
--COMMON_CFLAGS-clang := -fvisibility=hidden -ggdb
--COMMON_CFLAGS := -Wall -Werror -fno-strict-aliasing $(SSP_CFLAGS) -O1 -Wformat=2
--CXXFLAGS += $(COMMON_CFLAGS) $(COMMON_CFLAGS-$(CXXDRIVER))
--CFLAGS += $(COMMON_CFLAGS) $(COMMON_CFLAGS-$(CDRIVER))
--CPPFLAGS += -D_FORTIFY_SOURCE=2
--
--# Enable large file support.
--CPPFLAGS += -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE
--
--# Disable exceptions based on the CXXEXCEPTIONS setting.
--ifeq ($(CXXEXCEPTIONS),0)
--  CXXFLAGS := $(CXXFLAGS) -fno-exceptions -fno-unwind-tables \
--    -fno-asynchronous-unwind-tables
--endif
--
--ifeq ($(MODE),opt)
--  # Up the optimizations.
--  CFLAGS := $(filter-out -O1,$(CFLAGS)) -O2
--  CXXFLAGS := $(filter-out -O1,$(CXXFLAGS)) -O2
--  # Only drop -g* if symbols aren't desired.
--  ifeq ($(NOSTRIP),0)
--    # TODO: do we want -fomit-frame-pointer on x86?
--    CFLAGS := $(filter-out -ggdb3,$(CFLAGS))
--    CXXFLAGS := $(filter-out -ggdb3,$(CXXFLAGS))
--  endif
--endif
--
--ifeq ($(MODE),profiling)
--  CFLAGS := $(CFLAGS) -O0 -g  --coverage
--  CXXFLAGS := $(CXXFLAGS) -O0 -g  --coverage
--  LDFLAGS := $(LDFLAGS) --coverage
--endif
--
--LDFLAGS := $(LDFLAGS) -Wl,-z,relro -Wl,-z,noexecstack -Wl,-z,now
--
--# Fancy helpers for color if a prompt is defined
--ifeq ($(COLOR),1)
--COLOR_RESET = \x1b[0m
--COLOR_GREEN = \x1b[32;01m
--COLOR_RED = \x1b[31;01m
--COLOR_YELLOW = \x1b[33;01m
--endif
--
--# By default, silence build output.
--QUIET = @
--ifeq ($(VERBOSE),1)
--  QUIET=
--endif
--
--#
--# Implementation macros for compile helpers above
--#
--
--# Useful for dealing with pie-broken toolchains.
--# Call make with PIE=0 to disable default PIE use.
--OBJ_PIE_FLAG = -fPIE
--COMPILE_PIE_FLAG = -pie
--ifeq ($(PIE),0)
--  OBJ_PIE_FLAG =
--  COMPILE_PIE_FLAG =
--endif
--
--# Favor member targets first for CXX_BINARY(%) magic.
--# And strip out nested members if possible.
--LP := (
--RP := )
--TARGET_OR_MEMBER = $(lastword $(subst $(LP), ,$(subst $(RP),,$(or $%,$@))))
--
--# Default compile from objects using pre-requisites but filters out
--# all non-.o files.
--define COMPILE_BINARY_implementation
--  @$(ECHO) "LD$(1)		$(subst $(PWD)/,,$(TARGET_OR_MEMBER))"
--  $(call auto_mkdir,$(TARGET_OR_MEMBER))
--  $(QUIET)$($(1)) $(COMPILE_PIE_FLAGS) -o $(TARGET_OR_MEMBER) \
--    $(2) $(LDFLAGS) \
--    $(filter %.o %.a,$(^:.o=.pie.o)) \
--    $(foreach so,$(filter %.so,$^),-L$(dir $(so)) \
--                            -l$(patsubst lib%,%,$(basename $(notdir $(so))))) \
--    $(LDLIBS)
--  $(call conditional_strip)
--  @$(ECHO) -n "BIN		"
--  @$(ECHO) "$(COLOR_GREEN)$(subst $(PWD)/,,$(TARGET_OR_MEMBER))$(COLOR_RESET)"
--  @$(ECHO) "	$(COLOR_YELLOW)-----$(COLOR_RESET)"
--endef
--
--# TODO: add version support extracted from PV environment variable
--#ifeq ($(PV),9999)
--#$(warning PV=$(PV). If shared object versions matter, please force PV=.)
--#endif
--# Then add -Wl,-soname,$@.$(PV) ?
--
--# Default compile from objects using pre-requisites but filters out
--# all non-.o values. (Remember to add -L$(OUT) -llib)
--COMMA := ,
--define COMPILE_LIBRARY_implementation
--  @$(ECHO) "SHARED$(1)	$(subst $(PWD)/,,$(TARGET_OR_MEMBER))"
--  $(call auto_mkdir,$(TARGET_OR_MEMBER))
--  $(QUIET)$($(1)) -shared -Wl,-E -o $(TARGET_OR_MEMBER) \
--    $(2) $(LDFLAGS) \
--    $(if $(filter %.a,$^),-Wl$(COMMA)--whole-archive,) \
--    $(filter %.o ,$(^:.o=.pic.o)) \
--    $(foreach a,$(filter %.a,$^),-L$(dir $(a)) \
--                            -l$(patsubst lib%,%,$(basename $(notdir $(a))))) \
--    $(foreach so,$(filter %.so,$^),-L$(dir $(so)) \
--                            -l$(patsubst lib%,%,$(basename $(notdir $(so))))) \
--    $(LDLIBS)
--  $(call conditional_strip)
--  @$(ECHO) -n "LIB		$(COLOR_GREEN)"
--  @$(ECHO) "$(subst $(PWD)/,,$(TARGET_OR_MEMBER))$(COLOR_RESET)"
--  @$(ECHO) "	$(COLOR_YELLOW)-----$(COLOR_RESET)"
--endef
--
--define conditional_strip
--  $(if $(filter 0,$(NOSTRIP)),$(call strip_artifact))
--endef
--
--define strip_artifact
--  @$(ECHO) "STRIP		$(subst $(OUT)/,,$(TARGET_OR_MEMBER))"
--  $(if $(filter 1,$(SPLITDEBUG)), @$(ECHO) -n "DEBUG	"; \
--    $(ECHO) "$(COLOR_YELLOW)\
--$(subst $(OUT)/,,$(TARGET_OR_MEMBER)).debug$(COLOR_RESET)")
--  $(if $(filter 1,$(SPLITDEBUG)), \
--    $(QUIET)$(OBJCOPY) --only-keep-debug "$(TARGET_OR_MEMBER)" \
--      "$(TARGET_OR_MEMBER).debug")
--  $(if $(filter-out dbg,$(MODE)),$(QUIET)$(STRIP) --strip-unneeded \
--    "$(TARGET_OR_MEMBER)",)
--endef
--
--#
--# Global pattern rules
--#
--
--# Below, the archive member syntax is abused to create fancier
--# syntactic sugar for recipe authors that avoids needed to know
--# subcall options.  The downside is that make attempts to look
--# into the phony archives for timestamps. This will cause the final
--# target to be rebuilt/linked on _every_ call to make even when nothing
--# has changed.  Until a better way presents itself, we have helpers that
--# do the stat check on make's behalf.  Dodgy but simple.
--define old_or_no_timestamp
--  $(if $(realpath $%),,$(1))
--  $(if $(shell find $^ -cnewer "$%" 2>/dev/null),$(1))
--endef
--
--define check_deps
--  $(if $(filter 0,$(words $^)),\
--    $(error Missing dependencies or declaration of $@($%)),)
--endef
--
--# Build a cxx target magically
--CXX_BINARY(%):
--	$(call check_deps)
--	$(call old_or_no_timestamp,$(call cxx_binary))
--clean: CLEAN(CXX_BINARY*)
--
--CC_BINARY(%):
--	$(call check_deps)
--	$(call old_or_no_timestamp,$(call cc_binary))
--clean: CLEAN(CC_BINARY*)
--
--CXX_STATIC_BINARY(%):
--	$(call check_deps)
--	$(call old_or_no_timestamp,$(call cxx_binary,-static))
--clean: CLEAN(CXX_STATIC_BINARY*)
--
--CC_STATIC_BINARY(%):
--	$(call check_deps)
--	$(call old_or_no_timestamp,$(call cc_binary,-static))
--clean: CLEAN(CC_STATIC_BINARY*)
--
--CXX_LIBRARY(%):
--	$(call check_deps)
--	$(call old_or_no_timestamp,$(call cxx_library))
--clean: CLEAN(CXX_LIBRARY*)
--
--CXX_LIBARY(%):
--	$(error Typo alert! LIBARY != LIBRARY)
--
--CC_LIBRARY(%):
--	$(call check_deps)
--	$(call old_or_no_timestamp,$(call cc_library))
--clean: CLEAN(CC_LIBRARY*)
--
--CC_LIBARY(%):
--	$(error Typo alert! LIBARY != LIBRARY)
--
--CXX_STATIC_LIBRARY(%):
--	$(call check_deps)
--	$(call old_or_no_timestamp,$(call update_archive))
--clean: CLEAN(CXX_STATIC_LIBRARY*)
--
--CXX_STATIC_LIBARY(%):
--	$(error Typo alert! LIBARY != LIBRARY)
--
--CC_STATIC_LIBRARY(%):
--	$(call check_deps)
--	$(call old_or_no_timestamp,$(call update_archive))
--clean: CLEAN(CC_STATIC_LIBRARY*)
--
--CC_STATIC_LIBARY(%):
--	$(error Typo alert! LIBARY != LIBRARY)
--
--
--TEST(%): % qemu_chroot_install
--	$(call TEST_implementation)
--.PHONY: TEST
--
--# multiple targets with a wildcard need to share an directory.
--# Don't use this directly it just makes sure the directory is removed _after_
--# the files are.
--CLEANFILE(%):
--	$(call silent_rm,$(TARGET_OR_MEMBER))
--.PHONY: CLEANFILE
--
--CLEAN(%): CLEANFILE(%)
--	$(QUIET)# CLEAN($%) meta-target called
--	$(if $(filter-out $(PWD)/,$(dir $(abspath $(TARGET_OR_MEMBER)))), \
--	  $(call silent_rmdir,$(dir $(abspath $(TARGET_OR_MEMBER)))),\
--	  $(QUIET)# Not deleting $(dir $(abspath $(TARGET_OR_MEMBER))) yet.)
--.PHONY: CLEAN
--
--#
--# Top-level objects and pattern rules
--#
--
--# All objects for .c files at the top level
--C_OBJECTS = $(patsubst $(SRC)/%.c,%.o,$(wildcard $(SRC)/*.c))
--
--
--# All objects for .cxx files at the top level
--CXX_OBJECTS = $(patsubst $(SRC)/%.cc,%.o,$(wildcard $(SRC)/*.cc))
--
--# Note, the catch-all pattern rules don't work in subdirectories because
--# we're building from the $(OUT) directory. At the top-level (here) they will
--# work, but we go ahead and match using the module form.  Then we can place a
--# generic pattern rule to capture leakage from the main Makefile. (Later in the
--# file.)
--#
--# The reason target specific pattern rules work well for modules,
--# MODULE_C_OBJECTS, is because it scopes the behavior to the given target which
--# ensures we get a relative directory offset from $(OUT) which otherwise would
--# not match without further magic on a per-subdirectory basis.
--
--# Creates object file rules. Call with eval.
--# $(1) list of .o files
--# $(2) source type (CC or CXX)
--# $(3) source suffix (cc or c)
--# $(4) compiler flag name (CFLAGS or CXXFLAGS)
--# $(5) source dir: _only_ if $(SRC). Leave blank for obj tree.
--define add_object_rules
--$(patsubst %.o,%.pie.o,$(1)): %.pie.o: $(5)%.$(3) %.o.depends
--	$$(call auto_mkdir,$$@)
--	$$(call OBJECT_PATTERN_implementation,$(2),\
--          $$(basename $$@),$$($(4)) $$(CPPFLAGS) $$(OBJ_PIE_FLAG))
--
--$(patsubst %.o,%.pic.o,$(1)): %.pic.o: $(5)%.$(3) %.o.depends
--	$$(call auto_mkdir,$$@)
--	$$(call OBJECT_PATTERN_implementation,$(2),\
--          $$(basename $$@),$$($(4)) $$(CPPFLAGS) -fPIC)
--
--# Placeholder for depends
--$(patsubst %.o,%.o.depends,$(1)):
--	$$(call auto_mkdir,$$@)
--	$$(QUIET)touch "$$@"
--
--$(1): %.o: %.pic.o %.pie.o
--	$$(call auto_mkdir,$$@)
--	$$(QUIET)touch "$$@"
--endef
--
--define OBJECT_PATTERN_implementation
--  @$(ECHO) "$(1)		$(subst $(SRC)/,,$<) -> $(2).o"
--  $(call auto_mkdir,$@)
--  $(QUIET)$($(1)) -c -MD -MF $(2).d $(3) -o $(2).o $<
--  $(QUIET)# Wrap all the deps in $$(wildcard) so a missing header
--  $(QUIET)# won't cause weirdness.  First we remove newlines and \,
--  $(QUIET)# then wrap it.
--  $(QUIET)sed -i -e :j -e '$$!N;s|\\\s*\n| |;tj' \
--    -e 's|^\(.*\s*:\s*\)\(.*\)$$|\1 $$\(wildcard \2\)|' $(2).d
--endef
--
--# Now actually register handlers for C(XX)_OBJECTS.
--$(eval $(call add_object_rules,$(C_OBJECTS),CC,c,CFLAGS,$(SRC)/))
--$(eval $(call add_object_rules,$(CXX_OBJECTS),CXX,cc,CXXFLAGS,$(SRC)/))
--
--# Disable default pattern rules to help avoid leakage.
--# These may already be handled by '-r', but let's keep it to be safe.
--%: %.o ;
--%.a: %.o ;
--%.o: %.c ;
--%.o: %.cc ;
--
--# NOTE: A specific rule for archive objects is avoided because parallel
--#       update of the archive causes build flakiness.
--# Instead, just make the objects the prerequisites and use update_archive
--# To use the foo.a(obj.o) functionality, targets would need to specify the
--# explicit object they expect on the prerequisite line.
--
--#
--# Architecture detection and QEMU wrapping
--#
--
--HOST_ARCH ?= $(shell uname -m)
--override ARCH := $(strip $(ARCH))
--override HOST_ARCH := $(strip $(HOST_ARCH))
--# emake will supply "x86" or "arm" for ARCH, but
--# if uname -m runs and you get x86_64, then this subst
--# will break.
--ifeq ($(subst x86,i386,$(ARCH)),i386)
--  QEMU_ARCH := $(subst x86,i386,$(ARCH))  # x86 -> i386
--else ifeq ($(subst amd64,x86_64,$(ARCH)),x86_64)
--  QEMU_ARCH := $(subst amd64,x86_64,$(ARCH))  # amd64 -> x86_64
--else
--  QEMU_ARCH = $(ARCH)
--endif
--override QEMU_ARCH := $(strip $(QEMU_ARCH))
--
--# If we're cross-compiling, try to use qemu for running the tests.
--ifneq ($(QEMU_ARCH),$(HOST_ARCH))
--  ifeq ($(SYSROOT),)
--    $(info SYSROOT not defined. qemu-based testing disabled)
--  else
--    # A SYSROOT is assumed for QEmu use.
--    USE_QEMU ?= 1
--
--    # Allow 64-bit hosts to run 32-bit without qemu.
--    ifeq ($(HOST_ARCH),x86_64)
--      ifeq ($(QEMU_ARCH),i386)
--        USE_QEMU = 0
--      endif
--    endif
--  endif
--else
--  USE_QEMU ?= 0
--endif
--
--# Normally we don't need to run as root or do bind mounts, so only
--# enable it by default when we're using QEMU.
--NEEDS_ROOT ?= $(USE_QEMU)
--NEEDS_MOUNTS ?= $(USE_QEMU)
--
--SYSROOT_OUT = $(OUT)
--ifneq ($(SYSROOT),)
--  SYSROOT_OUT = $(subst $(SYSROOT),,$(OUT))
--else
--  # Default to / when all the empty-sysroot logic is done.
--  SYSROOT = /
--endif
--
--QEMU_NAME = qemu-$(QEMU_ARCH)
--QEMU_PATH = /build/bin/$(QEMU_NAME)
--QEMU_SYSROOT_PATH = $(SYSROOT)$(QEMU_PATH)
--QEMU_SRC_PATH = /usr/bin/$(QEMU_NAME)
--QEMU_BINFMT_PATH = /proc/sys/fs/binfmt_misc/$(QEMU_NAME)
--QEMU_REGISTER_PATH = /proc/sys/fs/binfmt_misc/register
--
--QEMU_MAGIC_arm = ":$(QEMU_NAME):M::\x7fELF\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x28\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/build/bin/qemu-arm:"
--
--
--#
--# Output full configuration at top level
--#
--
--# Don't show on clean
--ifneq ($(MAKECMDGOALS),clean)
--  $(info build configuration:)
--  $(info - OUT=$(OUT))
--  $(info - SRC=$(SRC))
--  $(info - MODE=$(MODE))
--  $(info - SPLITDEBUG=$(SPLITDEBUG))
--  $(info - NOSTRIP=$(NOSTRIP))
--  $(info - VALGRIND=$(VALGRIND))
--  $(info - COLOR=$(COLOR))
--  $(info - CXXEXCEPTIONS=$(CXXEXCEPTIONS))
--  $(info - ARCH=$(ARCH))
--  $(info - QEMU_ARCH=$(QEMU_ARCH))
--  $(info - USE_QEMU=$(USE_QEMU))
--  $(info - NEEDS_ROOT=$(NEEDS_ROOT))
--  $(info - NEEDS_MOUNTS=$(NEEDS_MOUNTS))
--  $(info - SYSROOT=$(SYSROOT))
--  $(info )
--endif
--
--#
--# Standard targets with detection for when they are improperly configured.
--#
--
--# all does not include tests by default
--all:
--	$(QUIET)(test -z "$^" && \
--	$(ECHO) "You must add your targets as 'all' prerequisites") || true
--	$(QUIET)test -n "$^"
--
--# Builds and runs tests for the target arch
--# Run them in parallel
--# After the test have completed, if profiling, run coverage analysis
--tests:
--ifeq ($(MODE),profiling)
--	@$(ECHO) "COVERAGE [$(COLOR_YELLOW)STARTED$(COLOR_RESET)]"
--	$(QUIET)FILES="";						\
--		for GCNO in `find . -name "*.gcno"`; do			\
--			GCDA="$${GCNO%.gcno}.gcda";			\
--			if [ -e $${GCDA} ]; then			\
--				FILES="$${FILES} $${GCDA}";		\
--			fi						\
--		done;							\
--		if [ -n "$${FILES}" ]; then				\
--			gcov -l $${FILES};				\
--			lcov --capture --directory .			\
--				--output-file=lcov-coverage.info;	\
--			genhtml lcov-coverage.info			\
--				--output-directory lcov-html;		\
--		fi
--	@$(ECHO) "COVERAGE [$(COLOR_YELLOW)FINISHED$(COLOR_RESET)]"
--endif
--.PHONY: tests
--
--qemu_chroot_install:
--ifeq ($(USE_QEMU),1)
--	$(QUIET)$(ECHO) "QEMU   Preparing $(QEMU_NAME)"
--	@# Copying strategy
--	@# Compare /usr/bin/qemu inode to /build/$board/build/bin/qemu, if different
--	@# hard link to a temporary file, then rename temp to target. This should
--	@# ensure that once $QEMU_SYSROOT_PATH exists it will always exist, regardless
--	@# of simultaneous test setups.
--	$(QUIET)if [[ ! -e $(QEMU_SYSROOT_PATH) || \
--	    `stat -c %i $(QEMU_SRC_PATH)` != `stat -c %i $(QEMU_SYSROOT_PATH)` \
--	    ]]; then \
--	  $(ROOT_CMD) ln -Tf $(QEMU_SRC_PATH) $(QEMU_SYSROOT_PATH).$$$$; \
--	  $(ROOT_CMD) mv -Tf $(QEMU_SYSROOT_PATH).$$$$ $(QEMU_SYSROOT_PATH); \
--	fi
--
--	@# Prep the binfmt handler. First mount if needed, then unregister any bad
--	@# mappings and then register our mapping.
--	@# There may still be some race conditions here where one script de-registers
--	@# and another script starts executing before it gets re-registered, however
--	@# it should be rare.
--	-$(QUIET)[[ -e $(QEMU_REGISTER_PATH) ]] || \
--	  $(ROOT_CMD) mount binfmt_misc -t binfmt_misc \
--	    /proc/sys/fs/binfmt_misc
--
--	-$(QUIET)if [[ -e $(QEMU_BINFMT_PATH) && \
--	      `awk '$$1 == "interpreter" {print $$NF}' $(QEMU_BINFMT_PATH)` != \
--	      "$(QEMU_PATH)" ]]; then \
--	  echo -1 | $(ROOT_CMD) tee $(QEMU_BINFMT_PATH) >/dev/null; \
--	fi
--
--	-$(if $(QEMU_MAGIC_$(ARCH)),$(QUIET)[[ -e $(QEMU_BINFMT_PATH) ]] || \
--	  echo $(QEMU_MAGIC_$(ARCH)) | $(ROOT_CMD) tee $(QEMU_REGISTER_PATH) \
--	    >/dev/null)
--endif
--.PHONY: qemu_clean qemu_chroot_install
--
--# TODO(wad) Move to -L $(SYSROOT) and fakechroot when qemu-user
--#           doesn't hang traversing /proc from SYSROOT.
--SUDO_CMD = sudo
--UNSHARE_CMD = unshare
--QEMU_CMD =
--ROOT_CMD = $(if $(filter 1,$(NEEDS_ROOT)),$(SUDO_CMD) , )
--MOUNT_CMD = $(if $(filter 1,$(NEEDS_MOUNTS)),$(ROOT_CMD) mount, \#)
--UMOUNT_CMD = $(if $(filter 1,$(NEEDS_MOUNTS)),$(ROOT_CMD) umount, \#)
--QEMU_LDPATH = $(SYSROOT_LDPATH):/lib64:/lib:/usr/lib64:/usr/lib
--ROOT_CMD_LDPATH = $(SYSROOT_LDPATH):$(SYSROOT)/lib64:
--ROOT_CMD_LDPATH := $(ROOT_CMD_LDPATH):$(SYSROOT)/lib:$(SYSROOT)/usr/lib64:
--ROOT_CMD_LDPATH := $(ROOT_CMD_LDPATH):$(SYSROOT)/usr/lib
--ifeq ($(USE_QEMU),1)
--  export QEMU_CMD = \
--   $(SUDO_CMD) chroot $(SYSROOT) $(QEMU_PATH) \
--   -drop-ld-preload \
--   -E LD_LIBRARY_PATH="$(QEMU_LDPATH):$(patsubst $(OUT),,$(LD_DIRS))" \
--   -E HOME="$(HOME)" -E SRC="$(SRC)" --
--  # USE_QEMU conditional function
--  define if_qemu
--    $(1)
--  endef
--else
--  ROOT_CMD = $(if $(filter 1,$(NEEDS_ROOT)),sudo, ) \
--    LD_LIBRARY_PATH="$(ROOT_CMD_LDPATH):$(LD_DIRS)"
--  define if_qemu
--    $(2)
--  endef
--endif
--
--VALGRIND_CMD =
--ifeq ($(VALGRIND),1)
--  VALGRIND_CMD = /usr/bin/valgrind --tool=memcheck $(VALGRIND_ARGS) --
--endif
--
--define TEST_implementation
--  $(QUIET)$(call TEST_setup)
--  $(QUIET)$(call TEST_run)
--  $(QUIET)$(call TEST_teardown)
--  $(QUIET)exit $$(cat $(OUT)$(TARGET_OR_MEMBER).status.test)
--endef
--
--define TEST_setup
--  @$(ECHO) -n "TEST		$(TARGET_OR_MEMBER) "
--  @$(ECHO) "[$(COLOR_YELLOW)SETUP$(COLOR_RESET)]"
--  $(QUIET)# Setup a target-specific results file
--  $(QUIET)(echo > $(OUT)$(TARGET_OR_MEMBER).setup.test)
--  $(QUIET)(echo 1 > $(OUT)$(TARGET_OR_MEMBER).status.test)
--  $(QUIET)(echo > $(OUT)$(TARGET_OR_MEMBER).cleanup.test)
--  $(QUIET)# No setup if we are not using QEMU
--  $(QUIET)# TODO(wad) this is racy until we use a vfs namespace
--  $(call if_qemu,\
--    $(QUIET)(echo "mkdir -p '$(SYSROOT)/proc' '$(SYSROOT)/dev' \
--                            '$(SYSROOT)/mnt/host/source'" \
--             >> "$(OUT)$(TARGET_OR_MEMBER).setup.test"))
--  $(call if_qemu,\
--    $(QUIET)(echo "$(MOUNT_CMD) --bind /mnt/host/source \
--             '$(SYSROOT)/mnt/host/source'" \
--             >> "$(OUT)$(TARGET_OR_MEMBER).setup.test"))
--  $(call if_qemu,\
--    $(QUIET)(echo "$(MOUNT_CMD) --bind /proc '$(SYSROOT)/proc'" \
--             >> "$(OUT)$(TARGET_OR_MEMBER).setup.test"))
--  $(call if_qemu,\
--    $(QUIET)(echo "$(MOUNT_CMD) --bind /dev '$(SYSROOT)/dev'" \
--             >> "$(OUT)$(TARGET_OR_MEMBER).setup.test"))
--endef
--
--define TEST_teardown
--  @$(ECHO) -n "TEST		$(TARGET_OR_MEMBER) "
--  @$(ECHO) "[$(COLOR_YELLOW)TEARDOWN$(COLOR_RESET)]"
--  $(call if_qemu, $(QUIET)$(SHELL) "$(OUT)$(TARGET_OR_MEMBER).cleanup.test")
--endef
--
--# Use GTEST_ARGS.[arch] if defined.
--override GTEST_ARGS.real = \
-- $(call if_qemu,$(GTEST_ARGS.qemu.$(QEMU_ARCH)),$(GTEST_ARGS.host.$(HOST_ARCH)))
--
--define TEST_run
--  @$(ECHO) -n "TEST		$(TARGET_OR_MEMBER) "
--  @$(ECHO) "[$(COLOR_GREEN)RUN$(COLOR_RESET)]"
--  $(QUIET)(echo 1 > "$(OUT)$(TARGET_OR_MEMBER).status.test")
--  $(QUIET)(echo $(ROOT_CMD) SRC="$(SRC)" $(QEMU_CMD) $(VALGRIND_CMD) \
--    "$(strip $(call if_qemu, $(SYSROOT_OUT),$(OUT))$(TARGET_OR_MEMBER))" \
--      $(if $(filter-out 0,$(words $(GTEST_ARGS.real))),$(GTEST_ARGS.real),\
--           $(GTEST_ARGS)) >> "$(OUT)$(TARGET_OR_MEMBER).setup.test")
--  -$(QUIET)$(call if_qemu,$(SUDO_CMD) $(UNSHARE_CMD) -m) $(SHELL) \
--      $(OUT)$(TARGET_OR_MEMBER).setup.test \
--  && echo 0 > "$(OUT)$(TARGET_OR_MEMBER).status.test"
--endef
--
--# Recursive list reversal so that we get RMDIR_ON_CLEAN in reverse order.
--define reverse
--$(if $(1),$(call reverse,$(wordlist 2,$(words $(1)),$(1)))) $(firstword $(1))
--endef
--
--clean: qemu_clean
--clean: CLEAN($(OUT)*.d) CLEAN($(OUT)*.o) CLEAN($(OUT)*.debug)
--clean: CLEAN($(OUT)*.test) CLEAN($(OUT)*.depends)
--clean: CLEAN($(OUT)*.gcno) CLEAN($(OUT)*.gcda) CLEAN($(OUT)*.gcov)
--clean: CLEAN($(OUT)lcov-coverage.info) CLEAN($(OUT)lcov-html)
--
--clean:
--	$(QUIET)# Always delete the containing directory last.
--	$(call silent_rmdir,$(OUT))
--
--FORCE: ;
--# Empty rule for use when no special targets are needed, like large_tests
--NONE:
--
--.PHONY: clean NONE valgrind NONE
--.DEFAULT_GOAL  :=  all
--# Don't let make blow away "intermediates"
--.PRECIOUS: %.pic.o %.pie.o %.a %.pic.a %.pie.a %.test
--
--# Start accruing build info
--OUT_DIRS = $(OUT)
--LD_DIRS = $(OUT)
--SRC_DIRS = $(SRC)
--
--include $(wildcard $(OUT)*.d)
--SUBMODULE_DIRS = $(wildcard $(SRC)/*/module.mk)
--include $(SUBMODULE_DIRS)
--
--
--else  ## In duplicate inclusions of common.mk
--
--# Get the current inclusion directory without a trailing slash
--MODULE := $(patsubst %/,%, \
--           $(dir $(lastword $(filter-out %common.mk,$(MAKEFILE_LIST)))))
--MODULE := $(subst $(SRC)/,,$(MODULE))
--MODULE_NAME := $(subst /,_,$(MODULE))
--#VPATH := $(MODULE):$(VPATH)
--
--
--# Depth first
--$(eval OUT_DIRS += $(OUT)$(MODULE))
--$(eval SRC_DIRS += $(OUT)$(MODULE))
--$(eval LD_DIRS := $(LD_DIRS):$(OUT)$(MODULE))
--
--# Add the defaults from this dir to rm_clean
--clean: CLEAN($(OUT)$(MODULE)/*.d) CLEAN($(OUT)$(MODULE)/*.o)
--clean: CLEAN($(OUT)$(MODULE)/*.debug) CLEAN($(OUT)$(MODULE)/*.test)
--clean: CLEAN($(OUT)$(MODULE)/*.depends)
--clean: CLEAN($(OUT)$(MODULE)/*.gcno) CLEAN($(OUT)$(MODULE)/*.gcda)
--clean: CLEAN($(OUT)$(MODULE)/*.gcov) CLEAN($(OUT)lcov-coverage.info)
--clean: CLEAN($(OUT)lcov-html)
--
--$(info + submodule: $(MODULE_NAME))
--# We must eval otherwise they may be dropped.
--MODULE_C_OBJECTS = $(patsubst $(SRC)/$(MODULE)/%.c,$(MODULE)/%.o,\
--  $(wildcard $(SRC)/$(MODULE)/*.c))
--$(eval $(MODULE_NAME)_C_OBJECTS ?= $(MODULE_C_OBJECTS))
--MODULE_CXX_OBJECTS = $(patsubst $(SRC)/$(MODULE)/%.cc,$(MODULE)/%.o,\
--  $(wildcard $(SRC)/$(MODULE)/*.cc))
--$(eval $(MODULE_NAME)_CXX_OBJECTS ?= $(MODULE_CXX_OBJECTS))
--
--# Note, $(MODULE) is implicit in the path to the %.c.
--# See $(C_OBJECTS) for more details.
--# Register rules for the module objects.
--$(eval $(call add_object_rules,$(MODULE_C_OBJECTS),CC,c,CFLAGS,$(SRC)/))
--$(eval $(call add_object_rules,$(MODULE_CXX_OBJECTS),CXX,cc,CXXFLAGS,$(SRC)/))
--
--# Continue recursive inclusion of module.mk files
--SUBMODULE_DIRS = $(wildcard $(SRC)/$(MODULE)/*/module.mk)
--include $(wildcard $(OUT)$(MODULE)/*.d)
--include $(SUBMODULE_DIRS)
--
--endif
--endif  ## pass-to-subcall wrapper for relocating the call directory
-diff --git a/fuzzers/modp_b64_decode_fuzzer.cc b/fuzzers/modp_b64_decode_fuzzer.cc
-new file mode 100644
-index 0000000..176ebc3
---- /dev/null
-+++ b/fuzzers/modp_b64_decode_fuzzer.cc
-@@ -0,0 +1,17 @@
-+// Copyright 2019 The Chromium OS Authors. All rights reserved.
-+// Use of this source code is governed by a BSD-style license that can be
-+// found in the LICENSE file.
-+
-+#include <string>
-+#include <cstddef>
-+#include <cstdint>
-+
-+#include "modp_b64.h"
-+
-+extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
-+  // Create a buffer to store the output.
-+  std::string buffer;
-+  buffer.resize(modp_b64_decode_len(size));
-+  modp_b64_decode(&(buffer[0]), (const char *) data, size);
-+  return 0;
-+}
-diff --git a/fuzzers/modp_b64_encode_fuzzer.cc b/fuzzers/modp_b64_encode_fuzzer.cc
-new file mode 100644
-index 0000000..0f61575
---- /dev/null
-+++ b/fuzzers/modp_b64_encode_fuzzer.cc
-@@ -0,0 +1,17 @@
-+// Copyright 2019 The Chromium OS Authors. All rights reserved.
-+// Use of this source code is governed by a BSD-style license that can be
-+// found in the LICENSE file.
-+
-+#include <string>
-+#include <cstddef>
-+#include <cstdint>
-+
-+#include "modp_b64.h"
-+
-+extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
-+  // Create a buffer to store the output.
-+  std::string buffer;
-+  buffer.resize(modp_b64_encode_len(size));
-+  modp_b64_encode(&buffer[0], (const char *)data, size);
-+  return 0;
-+}
--- 
-2.23.0
-
diff --git a/pkgs/os-specific/linux/chromium-os/modp_b64/0002-Use-regular-archives.patch b/pkgs/os-specific/linux/chromium-os/modp_b64/0002-Use-regular-archives.patch
deleted file mode 100644
index 57f087d5b16..00000000000
--- a/pkgs/os-specific/linux/chromium-os/modp_b64/0002-Use-regular-archives.patch
+++ /dev/null
@@ -1,36 +0,0 @@
-From 11a6fc258c6765a43b973b15e86fb4bce7675202 Mon Sep 17 00:00:00 2001
-From: Manoj Gupta <manojgupta@google.com>
-Date: Mon, 14 Oct 2019 11:37:20 -0700
-Subject: [PATCH 2/2] Use regular archives.
-
-libmodp_b64 needs to be linked by libchrome later so
-use regular archives.
-
-BUG=chromium:1012803
-TEST=libchrome can link with libmodp_b64.
-
-Change-Id: Ie0bbcc8a54051d4136463c95762ba8343e487862
----
- BUILD.gn | 6 ++++++
- 1 file changed, 6 insertions(+)
-
-diff --git a/BUILD.gn b/BUILD.gn
-index b2fe97d..9107609 100644
---- a/BUILD.gn
-+++ b/BUILD.gn
-@@ -16,6 +16,12 @@ group("all") {
- }
- 
- static_library("modp_b64") {
-+  configs -= [
-+    "//common-mk:use_thin_archive",
-+  ]
-+  configs += [
-+    "//common-mk:nouse_thin_archive",
-+  ]
-   sources = [
-     "modp_b64.cc",
-     "modp_b64.h",
--- 
-2.23.0
-
diff --git a/pkgs/os-specific/linux/chromium-os/modp_b64/default.nix b/pkgs/os-specific/linux/chromium-os/modp_b64/default.nix
index 4908443f9b7..50d91479193 100644
--- a/pkgs/os-specific/linux/chromium-os/modp_b64/default.nix
+++ b/pkgs/os-specific/linux/chromium-os/modp_b64/default.nix
@@ -5,13 +5,6 @@ common-mk {
 
   src = fetchFromGitiles upstreamInfo.components."aosp/platform/external/modp_b64";
 
-  patches = [
-    # We could just use the Makefile, but it's going to be removed in
-    # the next release anyway so let's just get on the GN train early.
-    ./0001-modp_b64-Fix-GN-build-and-add-fuzzers.patch
-    ./0002-Use-regular-archives.patch
-  ];
-
   installPhase = ''
     mkdir -p $out/lib
     install -m 0644 libmodp_b64.a $out/lib
diff --git a/pkgs/os-specific/linux/chromium-os/sommelier/0010-sommelier-don-t-leak-source-absolute-paths.patch b/pkgs/os-specific/linux/chromium-os/sommelier/0008-sommelier-don-t-leak-source-absolute-paths.patch
index a9f2df3b73e..aafd443e3e0 100644
--- a/pkgs/os-specific/linux/chromium-os/sommelier/0010-sommelier-don-t-leak-source-absolute-paths.patch
+++ b/pkgs/os-specific/linux/chromium-os/sommelier/0008-sommelier-don-t-leak-source-absolute-paths.patch
@@ -1,7 +1,7 @@
-From b1a89637c458ea70ea0d280f1c2c469e177bfc6f Mon Sep 17 00:00:00 2001
+From 1f414ce4e36d424e4c4c9124f60e784d364af282 Mon Sep 17 00:00:00 2001
 From: Alyssa Ross <hi@alyssa.is>
 Date: Sun, 1 Dec 2019 17:04:04 +0000
-Subject: [PATCH 10/11] sommelier: don't leak source-absolute paths
+Subject: [PATCH 8/9] sommelier: don't leak source-absolute paths
 
 ---
  vm_tools/sommelier/wayland_protocol.gni | 2 +-
diff --git a/pkgs/os-specific/linux/chromium-os/sommelier/0011-sommelier-use-stable-xdg-shell-protocol.patch b/pkgs/os-specific/linux/chromium-os/sommelier/0009-sommelier-use-stable-xdg-shell-protocol.patch
index b72d5c7c588..3c1b49adcea 100644
--- a/pkgs/os-specific/linux/chromium-os/sommelier/0011-sommelier-use-stable-xdg-shell-protocol.patch
+++ b/pkgs/os-specific/linux/chromium-os/sommelier/0009-sommelier-use-stable-xdg-shell-protocol.patch
@@ -1,7 +1,7 @@
-From f2655b38379414312efda57d6c0fdb73492fcab6 Mon Sep 17 00:00:00 2001
+From ab753b1f376a9a348a0d3a6cc106d097bb4160c3 Mon Sep 17 00:00:00 2001
 From: Puck Meerburg <puck@puckipedia.com>
 Date: Tue, 3 Dec 2019 18:06:14 +0000
-Subject: [PATCH 11/11] sommelier: use stable xdg-shell protocol
+Subject: [PATCH 9/9] sommelier: use stable xdg-shell protocol
 
 From https://github.com/wayland-project/weston/commit/d8d9f5e6e16c8f6a3c06763d5f56c27dc9a6e52e:
 
@@ -12,17 +12,17 @@ From https://github.com/wayland-project/weston/commit/d8d9f5e6e16c8f6a3c06763d5f
 ---
  vm_tools/sommelier/BUILD.gn                   |   2 +-
  ...dg-shell-unstable-v6.xml => xdg-shell.xml} | 319 ++++++++++++------
- vm_tools/sommelier/sommelier-xdg-shell.c      | 242 ++++++-------
- vm_tools/sommelier/sommelier.c                | 209 ++++++------
+ vm_tools/sommelier/sommelier-xdg-shell.c      | 233 ++++++-------
+ vm_tools/sommelier/sommelier.c                | 211 ++++++------
  vm_tools/sommelier/sommelier.h                |  17 +-
- 5 files changed, 450 insertions(+), 339 deletions(-)
+ 5 files changed, 447 insertions(+), 335 deletions(-)
  rename vm_tools/sommelier/protocol/{xdg-shell-unstable-v6.xml => xdg-shell.xml} (79%)
 
 diff --git a/vm_tools/sommelier/BUILD.gn b/vm_tools/sommelier/BUILD.gn
-index 72d5c1647..f01655010 100644
+index 871c142bc..498a0ccab 100644
 --- a/vm_tools/sommelier/BUILD.gn
 +++ b/vm_tools/sommelier/BUILD.gn
-@@ -67,7 +67,7 @@ wayland_protocol_library("sommelier-protocol") {
+@@ -68,7 +68,7 @@ wayland_protocol_library("sommelier-protocol") {
      "protocol/relative-pointer-unstable-v1.xml",
      "protocol/text-input-unstable-v1.xml",
      "protocol/viewporter.xml",
@@ -618,7 +618,7 @@ index 1c0f92452..3a87a9ed6 100644
        xdg_popup surfaces associated with the same xdg_toplevel.
  
 diff --git a/vm_tools/sommelier/sommelier-xdg-shell.c b/vm_tools/sommelier/sommelier-xdg-shell.c
-index a5551b25e..0c11b8de9 100644
+index ecd0fc647..a3ba0d6e1 100644
 --- a/vm_tools/sommelier/sommelier-xdg-shell.c
 +++ b/vm_tools/sommelier/sommelier-xdg-shell.c
 @@ -7,37 +7,37 @@
@@ -886,7 +886,7 @@ index a5551b25e..0c11b8de9 100644
  static void sl_xdg_toplevel_set_fullscreen(
 @@ -292,25 +292,25 @@ static void sl_xdg_toplevel_set_fullscreen(
    struct sl_host_output* host_output =
-       output_resource ? wl_resource_get_user_data(resource) : NULL;
+       output_resource ? wl_resource_get_user_data(output_resource) : NULL;
  
 -  zxdg_toplevel_v6_set_fullscreen(host->proxy,
 -                                  host_output ? host_output->proxy : NULL);
@@ -1091,7 +1091,7 @@ index a5551b25e..0c11b8de9 100644
    struct sl_host_surface* host_surface =
        wl_resource_get_user_data(surface_resource);
    struct sl_host_xdg_surface* host_xdg_surface;
-@@ -493,71 +496,74 @@ static void sl_xdg_shell_get_xdg_surface(struct wl_client* client,
+@@ -493,71 +496,75 @@ static void sl_xdg_shell_get_xdg_surface(struct wl_client* client,
    assert(host_xdg_surface);
  
    host_xdg_surface->ctx = host->ctx;
@@ -1176,39 +1176,34 @@ index a5551b25e..0c11b8de9 100644
 -  host->resource = wl_resource_create(client, &zxdg_shell_v6_interface, 1, id);
 -  wl_resource_set_implementation(host->resource, &sl_xdg_shell_implementation,
 -                                 host, sl_destroy_host_xdg_shell);
--  host->proxy =
--      wl_registry_bind(wl_display_get_registry(ctx->display),
++  host->resource = wl_resource_create(client, &xdg_wm_base_interface,
++				      ctx->xdg_wm_base->id, id);
++  wl_resource_set_implementation(host->resource, &sl_xdg_wm_base_implementation,
++                                 host, sl_destroy_host_xdg_wm_base);
+   host->proxy =
+       wl_registry_bind(wl_display_get_registry(ctx->display),
 -                       ctx->xdg_shell->id, &zxdg_shell_v6_interface, 1);
 -  zxdg_shell_v6_set_user_data(host->proxy, host);
 -  zxdg_shell_v6_add_listener(host->proxy, &sl_xdg_shell_listener, host);
--}
--
++                       ctx->xdg_wm_base->id, &xdg_wm_base_interface,
++                       ctx->xdg_wm_base->version);
++  xdg_wm_base_set_user_data(host->proxy, host);
++  xdg_wm_base_add_listener(host->proxy, &sl_xdg_wm_base_listener, host);
+ }
+ 
 -struct sl_global* sl_xdg_shell_global_create(struct sl_context* ctx) {
 -  return sl_global_create(ctx, &zxdg_shell_v6_interface, 1, ctx,
 -                          sl_bind_host_xdg_shell);
--}
-\ No newline at end of file
-+  host->resource = wl_resource_create(client, &xdg_wm_base_interface,
-+                                      MIN(version, ctx->xdg_wm_base->version), id);
-+  wl_resource_set_implementation(host->resource, &sl_xdg_wm_base_implementation,
-+                                 host, sl_destroy_host_xdg_wm_base);
-+  host->proxy = wl_registry_bind(
-+      wl_display_get_registry(ctx->display), ctx->xdg_wm_base->id,
-+      &xdg_wm_base_interface, ctx->xdg_wm_base->version);
-+  xdg_wm_base_set_user_data(host->proxy, host);
-+  xdg_wm_base_add_listener(host->proxy, &sl_xdg_wm_base_listener, host);
-+}
-+
 +struct sl_global* sl_xdg_wm_base_global_create(struct sl_context* ctx) {
-+  return sl_global_create(ctx, &xdg_wm_base_interface, 
++  return sl_global_create(ctx, &xdg_wm_base_interface,
 +                          ctx->xdg_wm_base->version, ctx,
 +                          sl_bind_host_xdg_wm_base);
-+}
+ }
 diff --git a/vm_tools/sommelier/sommelier.c b/vm_tools/sommelier/sommelier.c
-index ff066e1f3..3fbcde473 100644
+index 3637385a5..fba0d1277 100644
 --- a/vm_tools/sommelier/sommelier.c
 +++ b/vm_tools/sommelier/sommelier.c
-@@ -33,7 +33,7 @@
+@@ -35,7 +35,7 @@
  #include "relative-pointer-unstable-v1-client-protocol.h"
  #include "text-input-unstable-v1-client-protocol.h"
  #include "viewporter-client-protocol.h"
@@ -1217,7 +1212,7 @@ index ff066e1f3..3fbcde473 100644
  
  // Check that required macro definitions exist.
  #ifndef XWAYLAND_PATH
-@@ -245,14 +245,14 @@ void sl_sync_point_destroy(struct sl_sync_point* sync_point) {
+@@ -272,14 +272,14 @@ void sl_sync_point_destroy(struct sl_sync_point* sync_point) {
    free(sync_point);
  }
  
@@ -1237,7 +1232,7 @@ index ff066e1f3..3fbcde473 100644
  
  static void sl_send_configure_notify(struct sl_window* window) {
    xcb_configure_notify_event_t event = {
-@@ -415,8 +415,8 @@ int sl_process_pending_configure_acks(struct sl_window* window,
+@@ -442,8 +442,8 @@ int sl_process_pending_configure_acks(struct sl_window* window,
    }
  
    if (window->xdg_surface) {
@@ -1248,7 +1243,7 @@ index ff066e1f3..3fbcde473 100644
    }
    window->pending_config.serial = 0;
  
-@@ -427,8 +427,8 @@ int sl_process_pending_configure_acks(struct sl_window* window,
+@@ -454,8 +454,8 @@ int sl_process_pending_configure_acks(struct sl_window* window,
  }
  
  static void sl_internal_xdg_surface_configure(
@@ -1259,7 +1254,7 @@ index ff066e1f3..3fbcde473 100644
  
    window->next_config.serial = serial;
    if (!window->pending_config.serial) {
-@@ -449,16 +449,16 @@ static void sl_internal_xdg_surface_configure(
+@@ -476,16 +476,16 @@ static void sl_internal_xdg_surface_configure(
    }
  }
  
@@ -1279,7 +1274,7 @@ index ff066e1f3..3fbcde473 100644
    int activated = 0;
    uint32_t* state;
    int i = 0;
-@@ -488,21 +488,21 @@ static void sl_internal_xdg_toplevel_configure(
+@@ -515,21 +515,21 @@ static void sl_internal_xdg_toplevel_configure(
  
    window->allow_resize = 1;
    wl_array_for_each(state, states) {
@@ -1305,7 +1300,7 @@ index ff066e1f3..3fbcde473 100644
        window->allow_resize = 0;
    }
  
-@@ -518,8 +518,8 @@ static void sl_internal_xdg_toplevel_configure(
+@@ -545,8 +545,8 @@ static void sl_internal_xdg_toplevel_configure(
  }
  
  static void sl_internal_xdg_toplevel_close(
@@ -1316,7 +1311,7 @@ index ff066e1f3..3fbcde473 100644
    xcb_client_message_event_t event = {
        .response_type = XCB_CLIENT_MESSAGE,
        .format = 32,
-@@ -536,21 +536,21 @@ static void sl_internal_xdg_toplevel_close(
+@@ -563,21 +563,21 @@ static void sl_internal_xdg_toplevel_close(
                   XCB_EVENT_MASK_NO_EVENT, (const char*)&event);
  }
  
@@ -1342,7 +1337,7 @@ index ff066e1f3..3fbcde473 100644
      sl_internal_xdg_popup_configure, sl_internal_xdg_popup_done};
  
  static void sl_window_set_wm_state(struct sl_window* window, int state) {
-@@ -590,15 +590,15 @@ void sl_window_update(struct sl_window* window) {
+@@ -645,15 +645,15 @@ void sl_window_update(struct sl_window* window) {
        window->aura_surface = NULL;
      }
      if (window->xdg_toplevel) {
@@ -1361,7 +1356,7 @@ index ff066e1f3..3fbcde473 100644
        window->xdg_surface = NULL;
      }
      window->realized = 0;
-@@ -609,8 +609,8 @@ void sl_window_update(struct sl_window* window) {
+@@ -664,8 +664,8 @@ void sl_window_update(struct sl_window* window) {
    assert(host_surface);
    assert(!host_surface->has_role);
  
@@ -1372,7 +1367,7 @@ index ff066e1f3..3fbcde473 100644
  
    if (window->managed) {
      if (window->transient_for != XCB_WINDOW_NONE) {
-@@ -672,11 +672,11 @@ void sl_window_update(struct sl_window* window) {
+@@ -727,11 +727,11 @@ void sl_window_update(struct sl_window* window) {
    }
  
    if (!window->xdg_surface) {
@@ -1389,7 +1384,7 @@ index ff066e1f3..3fbcde473 100644
    }
  
    if (ctx->aura_shell) {
-@@ -730,47 +730,47 @@ void sl_window_update(struct sl_window* window) {
+@@ -761,50 +761,50 @@ void sl_window_update(struct sl_window* window) {
    // window is closed.
    if (ctx->xwayland || !parent) {
      if (!window->xdg_toplevel) {
@@ -1419,6 +1414,10 @@ index ff066e1f3..3fbcde473 100644
                                      window->max_width / ctx->scale,
                                      window->max_height / ctx->scale);
      }
+     if (window->maximized) {
+-      zxdg_toplevel_v6_set_maximized(window->xdg_toplevel);
++      xdg_toplevel_set_maximized(window->xdg_toplevel);
+     }
    } else if (!window->xdg_popup) {
 -    struct zxdg_positioner_v6* positioner;
 +    struct xdg_positioner* positioner;
@@ -1455,7 +1454,7 @@ index ff066e1f3..3fbcde473 100644
    }
  
    if ((window->size_flags & (US_POSITION | P_POSITION)) && parent &&
-@@ -1122,22 +1122,23 @@ static void sl_registry_handler(void* data,
+@@ -1168,22 +1168,23 @@ static void sl_registry_handler(void* data,
        data_device_manager->host_global =
            sl_data_device_manager_global_create(ctx);
      }
@@ -1493,7 +1492,7 @@ index ff066e1f3..3fbcde473 100644
      }
    } else if (strcmp(interface, "zaura_shell") == 0) {
      if (version >= MIN_AURA_SHELL_VERSION) {
-@@ -1244,13 +1245,13 @@ static void sl_registry_remover(void* data,
+@@ -1290,13 +1291,13 @@ static void sl_registry_remover(void* data,
      ctx->data_device_manager = NULL;
      return;
    }
@@ -1514,7 +1513,7 @@ index ff066e1f3..3fbcde473 100644
      return;
    }
    if (ctx->aura_shell && ctx->aura_shell->id == id) {
-@@ -1405,11 +1406,11 @@ static void sl_destroy_window(struct sl_window* window) {
+@@ -1458,11 +1459,11 @@ static void sl_destroy_window(struct sl_window* window) {
    }
  
    if (window->xdg_popup)
@@ -1529,7 +1528,7 @@ index ff066e1f3..3fbcde473 100644
    if (window->aura_surface)
      zaura_surface_destroy(window->aura_surface);
  
-@@ -1827,15 +1828,15 @@ static void sl_handle_configure_request(struct sl_context* ctx,
+@@ -1906,15 +1907,15 @@ static void sl_handle_configure_request(struct sl_context* ctx,
    // that matching contents will arrive.
    if (window->xdg_toplevel) {
      if (window->pending_config.serial) {
@@ -1549,7 +1548,7 @@ index ff066e1f3..3fbcde473 100644
        window->next_config.serial = 0;
        window->next_config.mask = 0;
        window->next_config.states_length = 0;
-@@ -1956,23 +1957,23 @@ static void sl_handle_configure_notify(struct sl_context* ctx,
+@@ -2035,23 +2036,23 @@ static void sl_handle_configure_notify(struct sl_context* ctx,
  static uint32_t sl_resize_edge(int net_wm_moveresize_size) {
    switch (net_wm_moveresize_size) {
      case NET_WM_MOVERESIZE_SIZE_TOPLEFT:
@@ -1582,7 +1581,7 @@ index ff066e1f3..3fbcde473 100644
    }
  }
  
-@@ -2002,15 +2003,15 @@ static void sl_handle_client_message(struct sl_context* ctx,
+@@ -2098,15 +2099,15 @@ static void sl_handle_client_message(struct sl_context* ctx,
          return;
  
        if (event->data.data32[2] == NET_WM_MOVERESIZE_MOVE) {
@@ -1601,7 +1600,7 @@ index ff066e1f3..3fbcde473 100644
                                  seat->seat->last_serial, edge);
        }
      }
-@@ -2029,24 +2030,24 @@ static void sl_handle_client_message(struct sl_context* ctx,
+@@ -2125,24 +2126,24 @@ static void sl_handle_client_message(struct sl_context* ctx,
  
        if (changed[ATOM_NET_WM_STATE_FULLSCREEN]) {
          if (action == NET_WM_STATE_ADD)
@@ -1631,7 +1630,7 @@ index ff066e1f3..3fbcde473 100644
      }
    }
  }
-@@ -2059,7 +2060,7 @@ static void sl_handle_focus_in(struct sl_context* ctx,
+@@ -2155,7 +2156,7 @@ static void sl_handle_focus_in(struct sl_context* ctx,
      // window was realized.
      struct sl_window* parent = sl_lookup_window(ctx, window->transient_for);
      if (parent && parent->xdg_toplevel && window->xdg_toplevel)
@@ -1640,7 +1639,7 @@ index ff066e1f3..3fbcde473 100644
    }
  }
  
-@@ -2277,9 +2278,9 @@ static void sl_handle_property_notify(struct sl_context* ctx,
+@@ -2373,9 +2374,9 @@ static void sl_handle_property_notify(struct sl_context* ctx,
        return;
  
      if (window->name) {
@@ -1650,9 +1649,9 @@ index ff066e1f3..3fbcde473 100644
 -      zxdg_toplevel_v6_set_title(window->xdg_toplevel, "");
 +      xdg_toplevel_set_title(window->xdg_toplevel, "");
      }
-   } else if (event->atom == XCB_ATOM_WM_NORMAL_HINTS) {
+   } else if (event->atom == XCB_ATOM_WM_CLASS) {
      struct sl_window* window = sl_lookup_window(ctx, event->window);
-@@ -2316,19 +2317,19 @@ static void sl_handle_property_notify(struct sl_context* ctx,
+@@ -2427,19 +2428,19 @@ static void sl_handle_property_notify(struct sl_context* ctx,
        return;
  
      if (window->size_flags & P_MIN_SIZE) {
@@ -1674,9 +1673,9 @@ index ff066e1f3..3fbcde473 100644
 -      zxdg_toplevel_v6_set_max_size(window->xdg_toplevel, 0, 0);
 +      xdg_toplevel_set_max_size(window->xdg_toplevel, 0, 0);
      }
-   } else if (event->atom == ctx->atoms[ATOM_MOTIF_WM_HINTS].value) {
+   } else if (event->atom == XCB_ATOM_WM_HINTS) {
      struct sl_window* window = sl_lookup_window(ctx, event->window);
-@@ -3377,7 +3378,7 @@ int main(int argc, char** argv) {
+@@ -3530,7 +3531,7 @@ int main(int argc, char** argv) {
        .shm = NULL,
        .shell = NULL,
        .data_device_manager = NULL,
@@ -1686,7 +1685,7 @@ index ff066e1f3..3fbcde473 100644
        .viewporter = NULL,
        .linux_dmabuf = NULL,
 diff --git a/vm_tools/sommelier/sommelier.h b/vm_tools/sommelier/sommelier.h
-index 40feb52c0..16aab1818 100644
+index b851b5c8d..7e6daf773 100644
 --- a/vm_tools/sommelier/sommelier.h
 +++ b/vm_tools/sommelier/sommelier.h
 @@ -31,7 +31,7 @@ struct sl_shell;
@@ -1698,7 +1697,7 @@ index 40feb52c0..16aab1818 100644
  struct sl_subcompositor;
  struct sl_aura_shell;
  struct sl_viewporter;
-@@ -96,7 +96,7 @@ struct sl_context {
+@@ -99,7 +99,7 @@ struct sl_context {
    struct sl_shm* shm;
    struct sl_shell* shell;
    struct sl_data_device_manager* data_device_manager;
@@ -1707,7 +1706,7 @@ index 40feb52c0..16aab1818 100644
    struct sl_aura_shell* aura_shell;
    struct sl_viewporter* viewporter;
    struct sl_linux_dmabuf* linux_dmabuf;
-@@ -356,11 +356,12 @@ struct sl_viewporter {
+@@ -373,11 +373,12 @@ struct sl_viewporter {
    struct wp_viewporter* internal;
  };
  
@@ -1722,7 +1721,7 @@ index 40feb52c0..16aab1818 100644
  };
  
  struct sl_aura_shell {
-@@ -458,9 +459,9 @@ struct sl_window {
+@@ -476,9 +477,9 @@ struct sl_window {
    int max_height;
    struct sl_config next_config;
    struct sl_config pending_config;
@@ -1735,7 +1734,7 @@ index 40feb52c0..16aab1818 100644
    struct zaura_surface* aura_surface;
    struct wl_list link;
  };
-@@ -504,7 +505,7 @@ struct sl_global* sl_data_device_manager_global_create(struct sl_context* ctx);
+@@ -522,7 +523,7 @@ struct sl_global* sl_data_device_manager_global_create(struct sl_context* ctx);
  
  struct sl_global* sl_viewporter_global_create(struct sl_context* ctx);
  
diff --git a/pkgs/os-specific/linux/chromium-os/sommelier/default.nix b/pkgs/os-specific/linux/chromium-os/sommelier/default.nix
index 400671d866a..635d07634c9 100644
--- a/pkgs/os-specific/linux/chromium-os/sommelier/default.nix
+++ b/pkgs/os-specific/linux/chromium-os/sommelier/default.nix
@@ -7,8 +7,8 @@ common-mk {
   platformSubdir = "vm_tools/sommelier";
 
   platform2Patches = [
-    ./0010-sommelier-don-t-leak-source-absolute-paths.patch
-    ./0011-sommelier-use-stable-xdg-shell-protocol.patch
+    ./0008-sommelier-don-t-leak-source-absolute-paths.patch
+    ./0009-sommelier-use-stable-xdg-shell-protocol.patch
   ];
 
   buildInputs = [
diff --git a/pkgs/os-specific/linux/chromium-os/upstream-info.json b/pkgs/os-specific/linux/chromium-os/upstream-info.json
index 50520c4881c..c4103d6f4c3 100644
--- a/pkgs/os-specific/linux/chromium-os/upstream-info.json
+++ b/pkgs/os-specific/linux/chromium-os/upstream-info.json
@@ -1,55 +1,55 @@
 {
-  "version": "78.12499.0.0-rc1",
+  "version": "79.12607.0.0-rc4",
   "components": {
     "aosp/platform/external/libchrome": {
       "name": "libchrome",
       "url": "https://chromium.googlesource.com/aosp/platform/external/libchrome",
-      "rev": "f4736afd702d3f9ac65a2810a1fc472d964941b7",
-      "sha256": "1wry24ma855rbjnawkjqyjjp4p4rsv6fa8i63mlg3pp5j7bflzip",
+      "rev": "78e77b7f04d2d1be4868a9696c30e38be73b37cc",
+      "sha256": "0fq394hwdfi7zfiakcr4nqr40v6lajznq7ix6pgngd8fa8wrjmkr",
       "version": "462023"
     },
     "aosp/platform/external/modp_b64": {
       "name": "modp_b64",
       "url": "https://chromium.googlesource.com/aosp/platform/external/modp_b64",
-      "rev": "afc3e28a3de4a627e3afaf73b4c55ed85c992470",
-      "sha256": "0cyvbdvnfcm958dglm0ci36v4np2fskkjxr8kzncgmhxpxdhkmwj"
+      "rev": "11a6fc258c6765a43b973b15e86fb4bce7675202",
+      "sha256": "06wjrqm7j6vkzlms1mj1czbdhsd8sxpyii43vqr456c2mzvrzr0n"
     },
     "chromiumos/overlays/chromiumos-overlay": {
       "name": "chromiumos-overlay",
       "url": "https://chromium.googlesource.com/chromiumos/overlays/chromiumos-overlay",
-      "rev": "63153be50fe6cbcd7126f9eed6b5bdda28526dae",
-      "sha256": "0v5b2mfrg8c927m073xhjcmgbn077s1gs36kvc7m23194y5wa75i"
+      "rev": "a02872323ae57e95572106a76255ac28a24dd34f",
+      "sha256": "07j5scnmcx95mp4wy1wnx20kawlhydc90cnp8andbvn7rjkz1fbk"
     },
     "chromiumos/platform/crosvm": {
       "name": "crosvm",
       "url": "https://chromium.googlesource.com/chromiumos/platform/crosvm",
-      "rev": "0b86007d3e1ee400c6201c00b7dea323d661b50f",
-      "sha256": "1i3wf7f5ikly404ail161llghzw07wsalpdfdfpr5bs321yfkpsp"
+      "rev": "cfb7db44eb9e5a0bca9a22bfb985252ef74ab251",
+      "sha256": "0gm1ggyzh9qfizm36jmh71c3anygxj1840cm94h71kzg9kiw0330"
     },
     "chromiumos/platform2": {
       "name": "platform2",
       "url": "https://chromium.googlesource.com/chromiumos/platform2",
-      "rev": "1a01bbebf957f4750021c6689eb65b9fc026338b",
-      "sha256": "1fyasgg2azixddnnsgfccnbjkpm2qbzjkvv22f298hv8qxhp32nr"
+      "rev": "dfa3da3447127dc941aacfee56617dd6ec7ae1c1",
+      "sha256": "1vgvapn0cn0g8n7h7l0f4n1jqnzb6hkcbkymr5dn0v2zb5s04inn"
     },
     "chromiumos/third_party/adhd": {
       "name": "adhd",
       "url": "https://chromium.googlesource.com/chromiumos/third_party/adhd",
-      "rev": "72bf5919510c200fdd9a44ed223fd3a871908b49",
-      "sha256": "0fva5pfa8907qczf2lrinwbw60vvwfc9jv536p2lv86pb36q2vly"
+      "rev": "a8df1c52bde3bfd2aebc1d7adcd6f195eb212cb1",
+      "sha256": "1hyvnvwr5ka9zw4h7hhl6fpsfl2acp3zy4wr5qrw8s1cn8ljr9vy"
     },
     "chromiumos/third_party/kernel": {
       "name": "kernel",
       "url": "https://chromium.googlesource.com/chromiumos/third_party/kernel",
-      "rev": "673c07c063fb4fc7d50078ba337e5acd7efca18c",
-      "sha256": "01qww3db1r5aw2r75xfv11qa8ysvwhcdw5sfmdwx1cc3l8j45m7g",
-      "version": "4.19.66"
+      "rev": "96bfeffb29ca01693d3b444c4e01eefaf5514055",
+      "sha256": "11svqzq01xv6p82dz8440kknz0bn1v2g3jhh00g73g4kyxr8lq62",
+      "version": "4.19.79"
     },
     "chromiumos/third_party/modemmanager-next": {
       "name": "modemmanager-next",
       "url": "https://chromium.googlesource.com/chromiumos/third_party/modemmanager-next",
-      "rev": "5b752047977b69618f1b31bd08fd38de6f4f5ba3",
-      "sha256": "0369khzax3r3nxf7jx7d2ryv14xi5s5dz60f4ml4cxidcca20xcj"
+      "rev": "8eb16ade574b2292497e76c07b1ab0ee6e3dd44e",
+      "sha256": "0ss26bh3f8gzbrxxg6mkif6p9jf2l6m5kazvpr0qdzd8gqh9pca3"
     }
   }
 }