summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--gnu/packages/chromium.scm49
1 files changed, 41 insertions, 8 deletions
diff --git a/gnu/packages/chromium.scm b/gnu/packages/chromium.scm
index e4d6503dbb..7955981261 100644
--- a/gnu/packages/chromium.scm
+++ b/gnu/packages/chromium.scm
@@ -385,6 +385,13 @@ chromium-fix-vaapi-on-intel.patch?h=packages/chromium\
 
           (format #t "Replacing GN files...~%")
           (force-output)
+          (substitute* "tools/generate_shim_headers/generate_shim_headers.py"
+            ;; The "is_official_build" configure option enables certain
+            ;; release optimizations like those used in the commercial
+            ;; Chrome browser.  Unfortunately it also requires using the
+            ;; bundled libraries: lose that restriction.
+            (("#if defined\\(OFFICIAL_BUILD\\)")
+             "#if 0"))
           (invoke "python" "build/linux/unbundle/replace_gn_files.py"
                   "--system-libraries" "ffmpeg" "flac" "fontconfig"
                   "freetype" "harfbuzz-ng" "icu" "libdrm" "libevent"
@@ -414,6 +421,31 @@ chromium-fix-vaapi-on-intel.patch?h=packages/chromium\
     `(("pkg-config" ,pkg-config)
       ("python" ,python-2)))))
 
+;; 'make-ld-wrapper' can only work with an 'ld' executable, so we need
+;; this trick to make it wrap 'lld'.
+(define lld-as-ld
+  (computed-file "lld-ld"
+                 #~(begin
+                     (mkdir #$output)
+                     (mkdir (string-append #$output "/bin"))
+                     (symlink #$(file-append lld "/bin/lld")
+                              (string-append #$output "/bin/ld")))))
+
+;; Create a wrapper for LLD that inserts appropriate -rpath entries.
+(define lld-wrapper
+  (make-ld-wrapper "lld-wrapper"
+                   #:binutils lld-as-ld))
+
+;; Clang looks for an 'ld.lld' executable, so we need to symlink it back.
+(define lld/wrapped
+  (computed-file "lld-wrapped"
+                 #~(begin
+                     (mkdir #$output)
+                     (mkdir (string-append #$output "/bin"))
+                     (symlink #$(file-append lld-wrapper "/bin/ld")
+                              (string-append #$output "/bin/lld"))
+                     (symlink "lld" (string-append #$output "/bin/ld.lld")))))
+
 (define-public ungoogled-chromium
   (package
     (name "ungoogled-chromium")
@@ -447,16 +479,14 @@ chromium-fix-vaapi-on-intel.patch?h=packages/chromium\
        ;; directory for an exhaustive list of supported flags.
        ;; (Note: The 'configure' phase will do that for you.)
        (list "is_debug=false"
-             "is_unsafe_developer_build=false"
-             "use_gold=false"
-             "use_lld=false"
+             ;; Use the "official" release optimizations, as opposed to
+             ;; a developer build.
+             "is_official_build=true"
              (string-append "max_jobs_per_link="
                             (number->string (parallel-job-count)))
-             "exclude_unwind_tables=true"
              "clang_use_chrome_plugins=false"
              "use_custom_libcxx=false"
              "use_sysroot=false"
-             "enable_precompiled_headers=false"
              "goma_dir=\"\""
              "enable_nacl=false"
              "enable_nacl_nonsfi=false"
@@ -499,7 +529,10 @@ chromium-fix-vaapi-on-intel.patch?h=packages/chromium\
              "use_pulseaudio=true"
              "link_pulseaudio=true"
              "icu_use_data_file=false"
-             "perfetto_use_system_protobuf=true"
+
+             ;; FIXME: Using system protobuf with "is_official_build" causes an
+             ;; invalid opcode and "protoc-gen-plugin: Plugin killed by signal 4".
+             ;;"perfetto_use_system_protobuf=true"
 
              ;; VA-API acceleration is currently only supported on x86_64-linux.
              ,@(if (string-prefix? "x86_64" (or (%current-target-system)
@@ -628,7 +661,7 @@ chromium-fix-vaapi-on-intel.patch?h=packages/chromium\
            (lambda* (#:key inputs #:allow-other-keys)
 
              ;; Make sure the right build tools are used.
-             (setenv "AR" "ar") (setenv "NM" "nm")
+             (setenv "AR" "llvm-ar") (setenv "NM" "llvm-nm")
              (setenv "CC" "clang") (setenv "CXX" "clang++")
 
              (setenv "CXXFLAGS"
@@ -755,6 +788,7 @@ chromium-fix-vaapi-on-intel.patch?h=packages/chromium\
        ("clang" ,clang-10)
        ("gn" ,gn)
        ("gperf" ,gperf)
+       ("ld-wrapper" ,lld/wrapped)
        ("ninja" ,ninja)
        ("node" ,node)
        ("pkg-config" ,pkg-config)
@@ -816,7 +850,6 @@ chromium-fix-vaapi-on-intel.patch?h=packages/chromium\
        ("opus" ,opus+custom)
        ("pango" ,pango)
        ("pciutils" ,pciutils)
-       ("protobuf" ,protobuf)
        ("pulseaudio" ,pulseaudio)
        ("re2" ,re2)
        ("snappy" ,snappy)