blob: 4c0004d5dc632a034acbce39ad8bac85c061cb9c [file] [log] [blame]
# Copyright 2021 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import("//build/config/python.gni")
import("//build/config/sanitizers/sanitizers.gni")
import("//build/toolchain/goma.gni")
group("locally_built") {
visibility = [ "//third_party/instrumented_libraries:deps" ]
deps = [
":atk1.0",
":brltty",
":dee",
":freetype",
":guest-oslogin",
":harfbuzz",
":libappindicator3-1",
":libasound2",
":libatk-bridge2.0-0",
":libatspi2.0-0",
":libavahi-client3",
":libcairo2",
":libcap2",
":libcredentialkit_pkcs11",
":libcups2",
":libcurl3-gnutls",
":libdbus-1-3",
":libdbus-glib-1-2",
":libdbusmenu",
":libdbusmenu-glib4",
":libexpat1",
":libffi7",
":libfontconfig1",
":libgcrypt20",
":libgdk-pixbuf2.0-0",
":libglib2.0-0",
":libgnutls30",
":libgpg-error0",
":libgtk-3-0",
":libidn11",
":libido3-0.1-0",
":libindicator3-7",
":libjpeg-turbo8",
":libldap-2.4-2",
":libnettle7",
":libnspr4",
":libp11-kit0",
":libpci3",
":libpcre3",
":libpixman-1-0",
":libpng16-16",
":librtmp1",
":libsasl2-2",
":libsecret",
":libssl1.1",
":libtasn1-6",
":libudev1",
":libunity9",
":libva2",
":libwayland-client0",
":libx11-6",
":libxau6",
":libxcb1",
":libxcomposite1",
":libxcursor1",
":libxdamage1",
":libxdmcp6",
":libxext6",
":libxfixes3",
":libxi6",
":libxinerama1",
":libxkbcommon0",
":libxrandr2",
":libxrender1",
":libxss1",
":libxtst6",
":nss",
":opensc-pkcs11",
":pango1.0",
":pulseaudio",
":zlib1g",
]
data = [ "${root_out_dir}/instrumented_libraries/lib" ]
}
template("instrumented_library") {
action(target_name) {
# Ignore "assignment had no effect" errors when there are no variables
# defined inside of the instrumented_library.
not_needed([ "invoker" ])
script = "scripts/download_build_install.py"
build_method = "destdir"
if (defined(invoker.build_method)) {
build_method = invoker.build_method
}
cc = rebase_path("//third_party/llvm-build/Release+Asserts/bin/clang")
cxx = rebase_path("//third_party/llvm-build/Release+Asserts/bin/clang++")
if (use_goma) {
cc = "${goma_dir}/gomacc ${cc}"
cxx = "${goma_dir}/gomacc ${cxx}"
}
package_cflags = [
"-O2",
"-gline-tables-only",
"-fPIC",
"-w",
"-U_FORTIFY_SOURCE",
"-fno-omit-frame-pointer",
"-fsanitize=memory",
"-fsanitize-memory-track-origins=${msan_track_origins}",
]
package_ldflags = [ "-fsanitize=memory" ]
if (defined(invoker.package_cflags)) {
package_cflags += invoker.package_cflags
}
if (defined(invoker.package_ldflags)) {
package_ldflags += invoker.package_ldflags
}
if (defined(invoker.deps)) {
deps = invoker.deps
}
env = []
if (defined(invoker.env)) {
env = invoker.env
}
product_dir = rebase_path(root_out_dir)
intermediate_dir = rebase_path(target_gen_dir)
args = [
"--build-method=${build_method}",
"--cc=${cc}",
"--cxx=${cxx}",
"--intermediate-dir=${intermediate_dir}",
"--libdir=lib",
"--package=${target_name}",
"--product-dir=${product_dir}",
"--cflags=${package_cflags}",
"--ldflags=${package_ldflags}",
"--env=${env}",
]
outputs = [ "${root_out_dir}/instrumented_libraries/${target_name}.txt" ]
inputs = []
if (defined(invoker.pre_build)) {
inputs += [ invoker.pre_build ]
args += [ "--pre-build=${invoker.pre_build}" ]
}
if (defined(invoker.patches)) {
inputs += invoker.patches
foreach(patch, invoker.patches) {
args += [ "--patch=${patch}" ]
}
}
if (defined(invoker.msan_ignorelist)) {
inputs += [ invoker.msan_ignorelist ]
args += [ "--sanitizer-ignorelist=${invoker.msan_ignorelist}" ]
}
if (defined(invoker.extra_configure_flags)) {
args += [ "--extra-configure-flags=${invoker.extra_configure_flags}" ]
}
if (defined(invoker.git_url)) {
args += [ "--git-url=${invoker.git_url}" ]
}
if (defined(invoker.git_revision)) {
args += [ "--git-revision=${invoker.git_revision}" ]
}
if (defined(invoker.make_targets)) {
args += [ "--make-targets=${invoker.make_targets}" ]
}
}
}
instrumented_library("atk1.0") {
build_method = "meson"
extra_configure_flags = [ "-Dintrospection=false" ]
}
instrumented_library("brltty") {
extra_configure_flags = [
"--disable-static",
# From debian/rules.
"--without-viavoice",
"--without-theta",
"--without-swift",
"--bindir=/sbin",
"--with-curses=ncursesw",
"--disable-stripping",
# We don't need any of those.
"--disable-java-bindings",
"--disable-lisp-bindings",
"--disable-ocaml-bindings",
"--disable-python-bindings",
"--disable-tcl-bindings",
]
}
instrumented_library("dee") {
extra_configure_flags = [
"--disable-static",
# See above.
"--disable-introspection",
]
pre_build = "scripts/pre-build/autogen.sh"
}
instrumented_library("freetype") {
extra_configure_flags = [ "--disable-static" ]
}
instrumented_library("guest-oslogin") {
git_url = "https://github.com/GoogleCloudPlatform/guest-oslogin.git"
git_revision = "f59b7f38c21b4794282ddf12fd4a6083cd99e1e4"
# Work around an issue where header files are passed to the linker.
patches = [ "patches/guest-oslogin.diff" ]
}
instrumented_library("harfbuzz") {
package_cflags = [ "-Wno-c++11-narrowing" ]
extra_configure_flags = [
"--disable-static",
# From debian/rules.
"--with-graphite2=yes",
"--with-gobject",
# See above.
"--disable-introspection",
]
}
instrumented_library("libappindicator3-1") {
extra_configure_flags = [
"--disable-static",
# See above.
"--disable-introspection",
"--with-gtk=3",
]
pre_build = "scripts/pre-build/autogen.sh"
}
instrumented_library("libasound2") {
extra_configure_flags = [ "--disable-static" ]
pre_build = "scripts/pre-build/libasound2.sh"
}
instrumented_library("libatk-bridge2.0-0") {
build_method = "meson"
}
instrumented_library("libatspi2.0-0") {
build_method = "meson"
extra_configure_flags = [ "-Dintrospection=no" ]
package_cflags = [
"-Wno-incompatible-function-pointer-types",
"-Wno-implicit-function-declaration",
]
}
instrumented_library("libavahi-client3") {
extra_configure_flags = [
"--disable-static",
"--disable-introspection",
"--disable-gtk3",
# From debian/rules.
"--enable-compat-libdns_sd",
"--disable-mono",
"--disable-monodoc",
"--disable-qt3",
"--disable-qt4",
"--with-systemdsystemunitdir=/lib/systemd/system",
]
patches = [ "patches/libavahi-client3.diff" ]
pre_build = "scripts/pre-build/autogen.sh"
}
instrumented_library("libcairo2") {
extra_configure_flags = [
"--disable-gtk-doc",
"--disable-static",
]
# Required due to aclocal version mismatch.
pre_build = "scripts/pre-build/autoreconf.sh"
}
instrumented_library("libcap2") {
extra_configure_flags = [ "--disable-static" ]
build_method = "custom_libcap"
}
instrumented_library("libcredentialkit_pkcs11") {
build_method = "stub"
}
instrumented_library("libcups2") {
extra_configure_flags = [
"--disable-static",
# All from debian/rules.
"--localedir=/usr/share/cups/locale",
"--enable-slp",
"--enable-libpaper",
"--enable-ssl",
"--enable-gnutls",
"--disable-openssl",
"--enable-threads",
"--enable-debug",
"--enable-dbus",
"--with-dbusdir=/etc/dbus-1",
"--enable-gssapi",
"--enable-avahi",
"--with-pdftops=/usr/bin/gs",
"--disable-launchd",
"--with-cups-group=lp",
"--with-system-groups=lpadmin",
"--with-printcap=/var/run/cups/printcap",
"--with-log-file-perm=0640",
"--with-local_protocols=\"CUPS dnssd\"",
"--with-remote_protocols=\"CUPS dnssd\"",
"--enable-libusb",
]
pre_build = "scripts/pre-build/libcups2.sh"
}
instrumented_library("libcurl3-gnutls") {
build_method = "custom_libcurl"
# Don't generate zsh or fish completions.
patches = [ "patches/libcurl3-gnutls.diff" ]
}
instrumented_library("libdbus-1-3") {
extra_configure_flags = [
"--disable-static",
# From debian/rules.
"--disable-libaudit",
"--enable-apparmor",
"--enable-systemd",
"--libexecdir=/lib/dbus-1.0",
"--with-systemdsystemunitdir=/lib/systemd/system",
"--disable-tests",
"--exec-prefix=/",
# From dh_auto_configure.
"--prefix=/usr",
"--localstatedir=/var",
]
}
instrumented_library("libdbus-glib-1-2") {
extra_configure_flags = [
# Use system dbus-binding-tool. The just-built one is instrumented but
# doesn't have the correct RPATH, and will crash.
"--with-dbus-binding-tool=dbus-binding-tool",
"--disable-static",
]
}
instrumented_library("libdbusmenu") {
extra_configure_flags = [
"--disable-static",
# From debian/rules.
"--disable-scrollkeeper",
"--with-gtk=2",
# See above.
"--disable-introspection",
"--disable-vala",
]
pre_build = "scripts/pre-build/autogen.sh"
}
instrumented_library("libdbusmenu-glib4") {
extra_configure_flags = [
"--disable-static",
# From debian/rules.
"--disable-scrollkeeper",
"--enable-gtk-doc",
# --enable-introspection introduces a build step that attempts to run
# a just-built binary and crashes. Vala requires introspection.
# TODO(eugenis): find a better fix.
"--disable-introspection",
"--disable-vala",
]
pre_build = "scripts/pre-build/autogen.sh"
}
instrumented_library("libexpat1") {
build_method = "debian"
patches = [
"patches/libexpat1.diff",
"patches/libexpat1.2.diff",
]
}
instrumented_library("libffi7") {
extra_configure_flags = [ "--disable-static" ]
}
instrumented_library("libfontconfig1") {
extra_configure_flags = [
"--disable-docs",
"--sysconfdir=/etc/",
"--disable-static",
# From debian/rules.
"--with-add-fonts=/usr/X11R6/lib/X11/fonts,/usr/local/share/fonts",
]
}
instrumented_library("libgcrypt20") {
package_ldflags = [ "-Wl,-z,muldefs" ]
extra_configure_flags = [
# From debian/rules.
"--enable-noexecstack",
"--enable-ld-version-script",
"--disable-static",
# http://crbug.com/344505
"--disable-asm",
]
}
instrumented_library("libgdk-pixbuf2.0-0") {
build_method = "meson"
extra_configure_flags = [
"-Dgir=false",
"-Dman=false",
"-Dx11=true",
"-Djasper=false",
"-Dinstalled_tests=false",
# Do not use loadable modules. Same as with Pango, there's no easy way
# to make gdk-pixbuf pick instrumented versions over system-installed
# ones.
"-Dbuiltin_loaders=all",
]
pre_build = "scripts/pre-build/libgdk-pixbuf2.0-0.sh"
# Ignore MSAN errors during the build. It's unclear why this only works on
# some binaries.
env = [ [
"MSAN_OPTIONS",
"halt_on_error=0 exitcode=0",
] ]
}
instrumented_library("libglib2.0-0") {
build_method = "meson"
extra_configure_flags = [
"-Dgdk_doc=false",
"-Dman=false",
]
msan_ignorelist = "ignorelists/msan/libglib2.0-0.txt"
pre_build = "scripts/pre-build/libglib2.0-0.sh"
package_cflags = [ "-Wno-int-conversion" ]
}
instrumented_library("libgnutls30") {
extra_configure_flags = [
# from debian/rules.
"--enable-ld-version-script",
"--enable-cxx",
"--without-lzo",
"--disable-guile",
"--with-libgcrypt",
"--with-packager=Debian",
"--with-included-unistring",
# MSAN is not compatible with instructions such as CPUID.
# https://github.com/google/oss-fuzz/issues/578
"--disable-hardware-acceleration",
]
patches = [
# Make sure to use the memset/memcmp provided by MSAN, not the
# gnutls-provided ones.
"patches/libgnutls30.1.diff",
# Work around several usages of uninitialized memory. The allocated
# memory is contained within libgnutls, so will not affect Chromium test
# coverage.
"patches/libgnutls30.2.diff",
]
}
instrumented_library("libgpg-error0") {
extra_configure_flags = [ "--disable-static" ]
}
instrumented_library("libgtk-3-0") {
package_cflags = [
"-Wno-implicit-function-declaration",
"-Wno-int-conversion",
"-Wno-return-type",
]
extra_configure_flags = [
"--disable-static",
"--disable-introspection",
# From debian/rules.
"--enable-test-print-backend",
"--enable-x11-backend",
]
pre_build = "scripts/pre-build/libgtk-3-0.sh"
patches = [
# MSAN does not support GL, so it must be disabled in GTK.
# https://www.chromium.org/developers/testing/memorysanitizer#TOC-Disable-OpenGL
"patches/libgtk-3-0.diff",
]
}
instrumented_library("libido3-0.1-0") {
package_cflags = [ "-Wno-return-type" ]
extra_configure_flags = [
"--disable-static",
# See above.
"--disable-introspection",
"--with-gtk=3",
]
pre_build = "scripts/pre-build/autogen.sh"
}
instrumented_library("libidn11") {
build_method = "debian"
pre_build = "scripts/pre-build/libidn.sh"
}
instrumented_library("libindicator3-7") {
extra_configure_flags = [
"--disable-static",
# See above.
"--disable-introspection",
]
pre_build = "scripts/pre-build/autogen.sh"
}
instrumented_library("libjpeg-turbo8") {
build_method = "cmake"
}
instrumented_library("libldap-2.4-2") {
extra_configure_flags = [
"--disable-slapd",
# From debian/rules.
"--enable-debug",
"--enable-dynamic",
"--enable-syslog",
"--enable-proctitle",
"--enable-ipv6",
"--enable-local",
"--with-subdir=ldap",
"--with-cyrus-sasl",
"--without-threads",
"--with-gssapi",
"--with-tls=gnutls",
"--with-odbc=unixodbc",
]
# Debian adds a custom patch that adds @VERSION_OPTION@, which must
# be substituted before building.
pre_build = "scripts/pre-build/dh_autoreconf.sh"
package_cflags = [
"-Wno-implicit-function-declaration",
"-Wno-implicit-int",
]
}
instrumented_library("libnspr4") {
extra_configure_flags = [
"--enable-64bit",
"--disable-static",
# TSan reports data races on debug variables.
"--disable-debug",
]
pre_build = "scripts/pre-build/libnspr4.sh"
}
instrumented_library("libnettle7") {
}
instrumented_library("libp11-kit0") {
extra_configure_flags = [ "--disable-static" ]
# Required due to autoconf version mismatch.
pre_build = "scripts/pre-build/autoreconf.sh"
}
instrumented_library("libpci3") {
extra_configure_flags = [ "--disable-static" ]
build_method = "custom_libpci3"
}
instrumented_library("libpcre3") {
extra_configure_flags = [
"--enable-utf8",
"--enable-unicode-properties",
"--disable-static",
]
pre_build = "scripts/pre-build/dh_autoreconf.sh"
}
instrumented_library("libpixman-1-0") {
extra_configure_flags = [
"--disable-static",
# From debian/rules.
"--disable-gtk",
"--disable-silent-rules",
# Avoid a clang issue. http://crbug.com/449183
"--disable-mmx",
]
patches = [ "patches/libpixman-1-0.diff" ]
}
instrumented_library("libpng16-16") {
extra_configure_flags = [ "--disable-static" ]
}
instrumented_library("librtmp1") {
build_method = "debian"
# Ensure we build with clang.
patches = [ "patches/librtmp1.diff" ]
}
instrumented_library("libsasl2-2") {
build_method = "debian"
pre_build = "scripts/pre-build/libsasl2-2.sh"
package_cflags = [
"-Wno-implicit-function-declaration",
"-Wno-return-type",
]
}
instrumented_library("libsecret") {
extra_configure_flags = [
"--disable-static",
# See above.
"--disable-introspection",
]
pre_build = "scripts/pre-build/autoreconf.sh"
}
instrumented_library("libssl1.1") {
build_method = "debian"
patches = [
"patches/libssl1.1.diff",
"patches/libssl1.1-2.diff",
]
}
instrumented_library("libtasn1-3") {
extra_configure_flags = [
"--disable-static",
# From debian/rules.
"--enable-ld-version-script",
]
}
instrumented_library("libtasn1-6") {
extra_configure_flags = [
"--disable-static",
# From debian/rules.
"--enable-ld-version-script",
]
}
instrumented_library("libunity9") {
extra_configure_flags = [ "--disable-static" ]
pre_build = "scripts/pre-build/autogen.sh"
package_cflags = [ "-Wno-incompatible-function-pointer-types" ]
}
instrumented_library("libva2") {
build_method = "meson"
}
instrumented_library("libwayland-client0") {
extra_configure_flags = [
"--disable-static",
"--disable-documentation",
]
# Do not use the just-built wayland_scanner because it is not runnable due
# to uninstrumented dependencies.
extra_configure_flags += [ "--with-host-scanner" ]
}
instrumented_library("libx11-6") {
extra_configure_flags = [
"--disable-specs",
"--disable-static",
]
msan_ignorelist = "ignorelists/msan/libx11-6.txt"
}
instrumented_library("libxau6") {
extra_configure_flags = [ "--disable-static" ]
}
instrumented_library("libxcb1") {
extra_configure_flags = [
"--disable-build-docs",
"--disable-static",
]
pre_build = "scripts/pre-build/autoreconf.sh"
env = [ [
"PYTHON",
"python3",
] ]
}
instrumented_library("libxcomposite1") {
extra_configure_flags = [ "--disable-static" ]
}
instrumented_library("libxcursor1") {
extra_configure_flags = [ "--disable-static" ]
}
instrumented_library("libxdamage1") {
extra_configure_flags = [ "--disable-static" ]
}
instrumented_library("libxdmcp6") {
extra_configure_flags = [
"--disable-docs",
"--disable-static",
]
}
instrumented_library("libxext6") {
extra_configure_flags = [
"--disable-specs",
"--disable-static",
]
}
instrumented_library("libxfixes3") {
extra_configure_flags = [ "--disable-static" ]
}
instrumented_library("libxi6") {
extra_configure_flags = [
"--disable-specs",
"--disable-docs",
"--disable-static",
]
patches = [ "patches/libxi6.diff" ]
}
instrumented_library("libxinerama1") {
extra_configure_flags = [ "--disable-static" ]
}
instrumented_library("libxkbcommon0") {
package_ldflags = [ "-Wl,-z,undefs" ]
build_method = "debian"
pre_build = "scripts/pre-build/xkbcommon.sh"
patches = [ "patches/libxkbcommon0.diff" ]
}
instrumented_library("libxrandr2") {
extra_configure_flags = [ "--disable-static" ]
}
instrumented_library("libxrender1") {
extra_configure_flags = [ "--disable-static" ]
}
instrumented_library("libxss1") {
extra_configure_flags = [ "--disable-static" ]
}
instrumented_library("libxtst6") {
extra_configure_flags = [
"--disable-specs",
"--disable-static",
]
}
instrumented_library("nss") {
# TODO(eugenis): get rid of this dependency
deps = [ ":libnspr4" ]
patches = [
"patches/nss.diff",
"patches/nss.2.diff",
]
build_method = "custom_nss"
}
instrumented_library("opensc-pkcs11") {
build_method = "debian"
}
instrumented_library("pango1.0") {
build_method = "meson"
extra_configure_flags = [
# Avoid https://bugs.gentoo.org/show_bug.cgi?id=425620
"-Dintrospection=false",
]
patches = [ "patches/pango1.0.diff" ]
}
instrumented_library("pulseaudio") {
# New location of libpulsecommon.
package_ldflags = [ "-Wl,-R,XORIGIN/pulseaudio/." ]
extra_configure_flags = [
"--disable-static",
# From debian/rules.
"--enable-x11",
"--disable-hal-compat",
# Disable some ARM-related code that fails compilation. No idea why
# this even impacts x86-64 builds.
"--disable-neon-opt",
# There's a build failure caused (I think) by a missing include, so skip
# building the offending file to avoid maintaining a patch.
"--disable-android-hal",
]
pre_build = "scripts/pre-build/pulseaudio.sh"
}
instrumented_library("libudev1") {
build_method = "meson"
}
instrumented_library("zlib1g") {
make_targets = [ "libz.so.1.2.11" ]
}