# Template file for 'chromium' pkgname=chromium # See https://chromiumdash.appspot.com/releases?platform=Linux for the latest version version=94.0.4606.61 revision=1 archs="i686* x86_64* aarch64* armv7l* ppc64le*" short_desc="Google's attempt at creating a safer, faster, and more stable browser" maintainer="Enno Boland " license="BSD-3-Clause" homepage="https://www.chromium.org/" distfiles="https://commondatastorage.googleapis.com/chromium-browser-official/${pkgname}-${version}.tar.xz" checksum=6446db535c02c461c7e5c8d294a0300db03abba791f97f0c70bc52255aedb9bf nocross=yes lib32disabled=yes build_options="clang debug js_optimize vaapi pulseaudio sndio pipewire" build_options_default="clang js_optimize vaapi pulseaudio pipewire" desc_option_clang="Use clang to build" desc_option_debug="Build with debug symbols" desc_option_js_optimize="Optimize the JS used for Chromium's UI" desc_option_vaapi="Enable support for VA-API" desc_option_pulseaudio="Enable support for PulseAudio" desc_option_sndio="Enable support for sndio" desc_option_pipewire="Enable support for screen sharing for WebRTC via PipeWire" hostmakedepends="$(vopt_if clang "clang lld llvm12") python pkgconf perl gperf bison ninja nodejs hwids libatomic-devel libevent-devel libglib-devel $(vopt_if js_optimize openjdk)" makedepends="libpng-devel gtk+-devel gtk+3-devel nss-devel pciutils-devel libXi-devel libgcrypt-devel libgnome-keyring-devel cups-devel elfutils-devel libXcomposite-devel speech-dispatcher-devel libXrandr-devel mit-krb5-devel libXScrnSaver-devel alsa-lib-devel snappy-devel libdrm-devel libxml2-devel libxslt-devel $(vopt_if pulseaudio pulseaudio-devel) libexif-devel libXcursor-devel libflac-devel speex-devel libmtp-devel libwebp-devel libjpeg-turbo-devel libevent-devel json-c-devel harfbuzz-devel minizip-devel jsoncpp-devel zlib-devel libcap-devel libXdamage-devel re2-devel fontconfig-devel freetype-devel opus-devel ffmpeg-devel libva-devel python-setuptools xcb-proto libcurl-devel $(vopt_if pipewire pipewire-devel) $(vopt_if sndio sndio-devel)" depends="libexif hwids desktop-file-utils hicolor-icon-theme xdg-utils" case "$XBPS_TARGET_MACHINE" in ppc64*-musl) makedepends+=" libucontext-devel" ;; esac post_patch() { if [ "$XBPS_TARGET_LIBC" = "musl" ]; then for f in "${FILESDIR}"/musl-patches/*.patch; do echo "Applying $f" patch -Np0 -i "$f" done fi case "${XBPS_TARGET_MACHINE}" in i686*) for f in "${FILESDIR}"/i686-patches/*.patch; do echo "Applying $f" patch -Np0 -i "$f" done ;; esac # Use the file at run time instead of effectively compiling it in sed 's|//third_party/usb_ids/usb.ids|/usr/share/hwdata/usb.ids|g' \ -i services/device/public/cpp/usb/BUILD.gn if [ -z "$build_option_clang" ]; then # Work around bug in blink in which GCC 6 optimizes away null pointer checks # https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=833524 # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68853#c2 sed -i '/config("compiler")/ a cflags_cc = [ "-fno-delete-null-pointer-checks" ]' \ build/config/linux/BUILD.gn fi # prevent annoying errors when regenerating gni vsed -i 's,^update_readme$,#update_readme,' \ third_party/libvpx/generate_gni.sh # allow system dependencies in "official builds" vsed -i 's/OFFICIAL_BUILD/GOOGLE_CHROME_BUILD/' \ tools/generate_shim_headers/generate_shim_headers.py } do_configure() { local system="" conf=() export -n CFLAGS CXXFLAGS LDFLAGS if [ "$build_option_clang" ]; then export CC=clang export CXX=clang++ fi export LDFLAGS="-pthread" # compile gn early, so it can be used to generate gni stuff AR="ar" CC=$CC_FOR_BUILD CXX=$CXX_FOR_BUILD LD=$CXX_FOR_BUILD \ tools/gn/bootstrap/bootstrap.py --skip-generate-buildfiles # we need to generate ppc64 stuff for libvpx as it's not shipped # this has to be done before unbundling, but after gn is built # comment out if we switch back to system libvpx again later case "$XBPS_TARGET_MACHINE" in ppc64*) pushd third_party/libvpx mkdir -p source/config/linux/ppc64 # need PATH to find gn PATH="${wrksrc}/out/Release:$PATH" ./generate_gni.sh || \ msg_error "failed to generate libvpx gni" popd ;; esac # Use system-provided libraries. # TODO: use_system_hunspell (upstream changes needed). # TODO: use_system_libsrtp. # TODO: use_system_libusb (http://crbug.com/266149). # TODO: use_system_ssl (http://crbug.com/58087). # TODO: use_system_sqlite (http://crbug.com/22208). # TODO: use_system_icu (segfaults) # XXX xtraeme: broken currently # use_system_protobuf # use_system_v8=1 # use_system_zlib=1 # bzip2 jsoncpp minizip xdg_utils speex system=" ffmpeg flac fontconfig freetype harfbuzz-ng libdrm libevent libjpeg libpng libwebp libxml libxslt opus re2 snappy " # remove build scripts for system provided dependencies - basically does the # same as the bundeled script to remove bundeled libs, but this way we don't # have to list the remaining libs for LIB in ${system} libjpeg_turbo; do find -type f -path "*third_party/$LIB/*" \ \! -path "*third_party/$LIB/chromium/*" \ \! -path "*third_party/$LIB/google/*" \ \! -path './base/third_party/icu/*' \ \! -path './third_party/pdfium/third_party/freetype/include/pstables.h' \ \! -path './third_party/harfbuzz-ng/utils/hb_scoped.h' \ \! -regex '.*\.\(gn\|gni\|isolate\|py\)' \ -delete done # switch to system provided dependencies build/linux/unbundle/replace_gn_files.py --system-libraries ${system} third_party/libaddressinput/chromium/tools/update-strings.py conf=( 'enable_nacl=false' 'enable_nacl_nonsfi=false' 'use_sysroot=false' 'custom_toolchain="//build/toolchain/linux/unbundle:default"' 'host_toolchain="//build/toolchain/linux/unbundle:default"' "is_clang=$(vopt_if clang true false)" "use_lld=$(vopt_if clang true false)" 'clang_use_chrome_plugins=false' 'clang_base_path="/usr"' "gold_path=\"${XBPS_CROSS_BASE}/usr/bin/ld.gold\"" 'use_custom_libcxx=false' 'use_gold=false' # is_debug makes the build a debug build, changes some things. # might be useful for real debugging vs just debug symbols. "is_debug=false" "blink_symbol_level=$(vopt_if debug 1 0)" "symbol_level=$(vopt_if debug 1 0)" 'icu_use_data_file=true' 'use_allocator="none"' 'use_allocator_shim=false' 'enable_widevine=true' 'enable_hangout_services_extension=true' 'use_system_harfbuzz=true' 'use_cups=true' "use_vaapi=$(vopt_if vaapi true false)" # https://chromium.googlesource.com/chromium/src/+/master/docs/closure_compilation.md "enable_js_type_check=$(vopt_if js_optimize true false)" "use_pulseaudio=$(vopt_if pulseaudio true false)" "link_pulseaudio=$(vopt_if pulseaudio true false)" "rtc_use_pipewire=$(vopt_if pipewire true false)" "use_sndio=$(vopt_if sndio true false)" # Always support proprietary codecs. # Enable H.264 support in bundled ffmpeg. 'proprietary_codecs=true' 'ffmpeg_branding="Chrome"' # Make sure that -Werror doesn't get added to CFLAGS by the build system. # Depending on GCC version the warnings are different and we don't want # the build to fail because of that. 'treat_warnings_as_errors=false' 'fatal_linker_warnings=false' # Save space by removing DLOG and DCHECK messages (about 6% reduction). # 'logging_like_official_build=true' 'disable_fieldtrial_testing_config=true' 'is_official_build=true' # segfaults with llvm-12.0.1 'is_cfi=false' 'use_thin_lto=false' 'use_cfi_icall=false' 'chrome_pgo_phase=0' ) # this does not work on ppc64 yet case "$XBPS_TARGET_MACHINE" in ppc64*) conf+=( "enable_jxl_decoder=false" );; esac case "${XBPS_TARGET_MACHINE}" in x86_64*) conf+=( 'target_cpu="x64"' ) ;; i686*) conf+=( 'target_cpu="x86"' ) ;; arm*) conf+=( 'target_cpu="arm"' ) ;; aarch64*) conf+=( 'target_cpu="arm64"' ) ;; ppc64*) conf+=( 'target_cpu="ppc64"' ) ;; esac if [ "$build_option_clang" ]; then export CC=clang export CXX=clang++ export AR=llvm-ar export NM=llvm-nm export CFLAGS="-Wno-unknown-warning-option" export CXXFLAGS="-Wno-unknown-warning-option" fi out/Release/gn gen out/Release --args="${conf[*]}" } do_build() { if [ "$build_option_clang" ]; then export CC=clang export CXX=clang++ export AR=llvm-ar export NM=llvm-nm export CFLAGS="-Wno-unknown-warning-option" export CXXFLAGS="-Wno-unknown-warning-option" fi ninja -C out/Release ${makejobs} chrome chromedriver mksnapshot chrome_crashpad_handler } do_install() { vinstall out/Release/chrome 755 usr/lib/${pkgname} ${pkgname} vinstall out/Release/chrome_crashpad_handler 755 usr/lib/${pkgname} chrome_crashpad_handler vinstall out/Release/chromedriver 755 usr/lib/${pkgname} chromedriver vinstall out/Release/libEGL.so 755 usr/lib/${pkgname} libEGL.so vinstall out/Release/libGLESv2.so 755 usr/lib/${pkgname} libGLESv2.so vcopy "out/Release/*.bin" usr/lib/chromium vcopy "out/Release/*.pak" usr/lib/chromium vmkdir usr/lib/chromium/locales vcopy "out/Release/locales/*.pak" usr/lib/chromium/locales vmkdir usr/lib/chromium/swiftshader vcopy "out/Release/swiftshader/*.so" usr/lib/chromium/swiftshader vinstall ${FILESDIR}/chromium.desktop 644 usr/share/applications vinstall out/Release/icudtl.dat 0644 usr/lib/chromium for size in 24 48 64 128 256; do vinstall "chrome/app/theme/chromium/product_logo_${size}.png" \ 644 \ usr/share/icons/hicolor/${size}x${size}/apps chromium.png done for size in 16 32; do vinstall "chrome/app/theme/default_100_percent/chromium/product_logo_${size}.png" \ 644 \ usr/share/icons/hicolor/${size}x${size}/apps chromium.png done vbin ${FILESDIR}/chromium.sh chromium vlicense LICENSE ln -sf /usr/lib/chromium/chromedriver ${DESTDIR}/usr/bin/chromedriver }