[Pkg-chromium-maint] Bug#765169: Chromium component build succeeds on i686

Mikko Rapeli mikko.rapeli at iki.fi
Wed Oct 15 19:18:51 UTC 2014

Just for completeness:

I heard from some developers that Chromium has a component build option
which creates multiple .so's from included sources instead of one big

This is documented at http://www.chromium.org/developers/how-tos/component-build

Unfortunately https://code.google.com/p/chromium/wiki/LinuxBuildInstructions
says that:

"Linker Crashes
If, during the final link stage:

  LINK(target) out/Debug/chrome
You get an error like:

collect2: ld terminated with signal 6 Aborted terminate called after throwing an instance of 'std::bad_alloc'

collect2: ld terminated with signal 11 [Segmentation fault], core dumped 
you are probably running out of memory when linking. Try one of:

Use the gold linker
Build on a 64-bit computer
Build in Release mode (debugging symbols require a lot of memory)
Build as shared libraries (note: this build is for developers only, and may have broken functionality)"

Anyway, I gave it a try. Debian packaging changes I use, also include
switch to ld.gold and ccache compiler cache to speed up rebuilds:

--- tmp/debian/chromium.install 2014-10-10 03:49:16.000000000 +0200
+++ chromium-browser-38.0.2125.101/debian/chromium.install      2014-10-15 14:33:22.060233798 +0200
@@ -2,10 +2,12 @@ out/Release/chromium usr/lib/chromium
 out/Release/chrome-sandbox usr/lib/chromium

 out/Release/*.so usr/lib/chromium
+out/Release/lib/*.so usr/lib/chromium
 out/Release/*.pak usr/lib/chromium
 out/Release/icudtl.dat usr/lib/chromium

-out/Release/resources/*.pak usr/lib/chromium/locales
+out/Release/locales/*.pak usr/lib/chromium/locales
+out/Release/pseudo_locales/*.pak usr/lib/chromium/locales

 debian/presubj usr/share/bug/chromium

iff -rup tmp/debian/rules chromium-browser-38.0.2125.101/debian/rules
--- tmp/debian/rules    2014-10-10 05:52:39.000000000 +0200
+++ chromium-browser-38.0.2125.101/debian/rules 2014-10-15 14:06:21.151701940 +0200
@@ -1,16 +1,19 @@
 #!/usr/bin/make -f

 # enable verbose build messages
-export DH_VERBOSE=1
+CC := ccache clang
+CXX := ccache clang++

 # enable all build hardening flags
-export DEB_BUILD_MAINT_OPTIONS=hardening=+all

-# linker flags to avoid memory allocation issues on i386
-export LDFLAGS+=-Wl,--no-keep-memory -Wl,--reduce-memory-overheads -Wl,--hash-size=7919
+# linker flags to avoid memory allocation issues on i386, use ld.gold instead

 # more verbose linker output
-export LDFLAGS+=-Wl,--trace -Wl,--stats
+LDFLAGS+=-Wl,--trace -Wl,--stats

 # treat all warnings as errors
@@ -41,6 +44,7 @@ defines+=enable_hidpi=1 \
          linux_link_gsettings=1 \
          linux_link_libspeechd=1 \
          linux_link_gnome_keyring=1 \
+         component=shared_library \

 # system libraries to use
 defines+=use_system_re2=1 \
@@ -100,7 +105,9 @@ flotpaths=/usr/share/javascript/jquery/*

        for file in $(flotpaths); do ln -sf $$file third_party/flot; done
+       CC="${CC}" CXX="${CXX}" LDFLAGS="${LDFLAGS}" \
        GYP_DEFINES="$(defines)" ./build/gyp_chromium $(options)
+       CC="${CC}" CXX="${CXX}" LDFLAGS="${LDFLAGS}" \

        ninja $(njobs) -C out/Release chrome chrome_sandbox chromedriver
@@ -124,6 +131,10 @@ override_dh_fixperms:
        dh_strip --dbg-package=chromium-dbg

+       # exclude the internal libs which miss proper SONAME etc
+       dh_shlibdeps -Xusr/lib/chromium/lib/ -- -ldebian/chromium/usr/lib/chromium/ -ldebian/chromium/usr/lib/chromium/lib/
        rm -rf out Makefile third_party/flot/*
        rm -rf out Makefile third_party/flot/*
        find . -name \*.mk -execdir rm -rf {} \;

With these changes chromium builds on i686 but running the binary with the
new shared objects fails:

~/src/chromium-browser-38.0.2125.101/out/Release$ LD_LIBRARY_PATH=.:./lib ./chromium 
[libprotobuf ERROR google/protobuf/descriptor_database.cc:57] File already exists in database: phonenumber.proto
[libprotobuf FATAL google/protobuf/descriptor.cc:1018] CHECK failed: generated_database_->Add(encoded_file_descriptor, size): 
terminate called after throwing an instance of 'google::protobuf::FatalException'
  what():  CHECK failed: generated_database_->Add(encoded_file_descriptor, size): 

This bug report is likely not cared by upstream or Debian packagers but maybe
someone cares about natively building chromium on 32bit archs.

My journey into chromium land ends here :)


More information about the Pkg-chromium-maint mailing list