# Template file for 'chromium' pkgname=chromium # See https://chromiumdash.appspot.com/releases?platform=Linux for the latest version version=123.0.6312.86 revision=1 archs="i686* x86_64* aarch64* armv7l*" hostmakedepends=" $(vopt_if clang "clang17 lld17 llvm17 compiler-rt") bison git gperf hwids ninja nodejs perl pkg-config python3 libepoxy-devel libevent-devel libglib-devel rust" makedepends=" alsa-lib-devel libdav1d-devel brotli-devel cups-devel elfutils-devel fontconfig-devel freetype-devel gtk+3-devel libXScrnSaver-devel libXcomposite-devel libXcursor-devel libXdamage-devel libXi-devel libXrandr-devel libavif-devel libcap-devel libcurl-devel libdrm-devel libevent-devel libexif-devel libflac-devel libgcrypt-devel libjpeg-turbo-devel libmtp-devel libpng-devel libva-devel libwebp-devel libxml2-devel libxshmfence-devel libxslt-devel minizip-devel mit-krb5-devel nss-devel opus-devel pciutils-devel snappy-devel speech-dispatcher-devel speex-devel xcb-proto zlib-devel libaom-devel libffi-devel libevdev-devel compiler-rt $(vopt_if pipewire pipewire-devel) $(vopt_if pulseaudio pulseaudio-devel) $(vopt_if sndio sndio-devel)" depends="desktop-file-utils hicolor-icon-theme hwids xdg-utils" short_desc="Google's attempt at creating a safer, faster, and more stable browser" maintainer="Duncaen " license="BSD-3-Clause" homepage="https://www.chromium.org/" distfiles="https://commondatastorage.googleapis.com/chromium-browser-official/${pkgname}-${version}.tar.xz" checksum=f4a78c1955dac4354d57ab45e93051fcda50fc5fccd681457f8116630746dffe lib32disabled=yes build_options="clang libcxx debug vaapi pulseaudio sndio pipewire lto" build_options_default="clang libcxx vaapi pulseaudio pipewire" desc_option_clang="Use clang to build" desc_option_libcxx="Use bundled libc++" desc_option_debug="Build with debug symbols" desc_option_lto="Enable Link Time Optimization" desc_option_pipewire="Enable support for screen sharing for WebRTC via PipeWire" if [ "$XBPS_LIBC" = musl ]; then hostmakedepends+=" musl-legacy-compat" fi if [ "$XBPS_TARGET_LIBC" = "musl" ]; then makedepends+=" musl-legacy-compat" fi if [ "$CROSS_BUILD" ]; then hostmakedepends+=" libX11-devel libxcb-devel pciutils-devel libXext-devel libglvnd-devel libjpeg-turbo-devel libXi-devel nss-devel libpng-devel libwebp-devel libxml2-devel $(vopt_if pulseaudio pulseaudio-devel) libxslt-devel libxkbcommon-devel $(vopt_if pipewire pipewire-devel) opus-devel pango-devel libva-devel libcurl-devel snappy-devel libXrandr-devel libXcomposite-devel cups-devel mit-krb5-devel alsa-lib-devel libXdamage-devel libepoxy-devel libevdev-devel libavif-devel libaom-devel libdav1d-devel libflac-devel libdrm-devel libgbm-devel" fi if [ ! "$XBPS_WORDSIZE" = "$XBPS_TARGET_WORDSIZE" ]; then broken="chromium (v8) can only be cross compiled if word size matches" fi if [ "$CROSS_BUILD" ]; then case "${XBPS_TARGET_MACHINE}" in # aarch64*) ;; *) nocross="chromium can not be cross compiled for this architecture" ;; esac fi post_patch() { if [ "$XBPS_TARGET_LIBC" = "musl" ]; then for f in "${FILESDIR}"/musl-patches/*.patch; do echo "Applying $f" patch -Np1 -i "$f" done 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 mkdir -p third_party/node/linux/node-linux-x64/bin ln -s /usr/bin/node third_party/node/linux/node-linux-x64/bin/ } _setup_clang() { export CC=clang export CXX=clang++ export AR=llvm-ar export NM=llvm-nm export CFLAGS="-Wno-unknown-warning-option -fdebug-prefix-map=$wrksrc=." export CXXFLAGS="-Wno-unknown-warning-option -fdebug-prefix-map=$wrksrc=." export LDFLAGS="" export BUILD_CC=clang export BUILD_CXX=clang++ export BUILD_AR=llvm-ar export BUILD_NM=llvm-nm export BUILD_CFLAGS="-Wno-unknown-warning-option" export BUILD_CXXFLAGS="-Wno-unknown-warning-option" if [[ -n "$CROSS_BUILD" ]]; then CFLAGS+=" --sysroot=${XBPS_CROSS_BASE}" CXXFLAGS+=" --sysroot=${XBPS_CROSS_BASE}" LDFLAGS+=" --sysroot=${XBPS_CROSS_BASE}" if [[ -z "$build_option_libcxx" ]]; then local gcc_version=$(gcc -dumpversion) local clang_version=$(clang -dumpversion) CFLAGS+=" --gcc-toolchain=/usr" CFLAGS+=" -nostdinc" CFLAGS+=" -isystem ${XBPS_CROSS_BASE}/usr/include" CFLAGS+=" -isystem /usr/lib/clang/${clang_version}/include" CXXFLAGS+=" --gcc-toolchain=/usr" CXXFLAGS+=" -nostdinc++" CXXFLAGS+=" -isystem ${XBPS_CROSS_BASE}/usr/include/c++/${gcc_version%.*}" CXXFLAGS+=" -isystem ${XBPS_CROSS_BASE}/usr/include/c++/${gcc_version%.*}/${XBPS_CROSS_TRIPLET}" CXXFLAGS+=" -isystem ${XBPS_CROSS_BASE}/usr/include/c++/${gcc_version%.*}/backward" CXXFLAGS+=" -nostdinc" CXXFLAGS+=" -isystem ${XBPS_CROSS_BASE}/usr/include" CXXFLAGS+=" -isystem /usr/lib/clang/${clang_version}/include" LDFLAGS+=" --gcc-toolchain=/usr" fi fi } _setup_toolchain() { if [ "$build_option_clang" ]; then _setup_clang fi } do_configure() { local system=() conf=() # 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 \ CFLAGS=$CFLAGS_FOR_BUILD CXXFLAGS=$CXXFLAGS_FOR_BUILD LDFLAGS=$LDFLAGS_FOR_BUILD \ tools/gn/bootstrap/bootstrap.py ${makejobs} --skip-generate-buildfiles # 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) # use_system_protobuf # use_system_v8=1 # bzip2 xdg_utils speex # XXX: harfbuzz-ng use builtin one until system-wide is updated >=3.0.0 # libcxx https://github.com/llvm/llvm-project/issues/61705: # snappy # ffmpeg: system ffmpeg is too old and makes the ffmpeg update not require # rebuilding chromium system=( flac fontconfig freetype libdrm libevent libjpeg libpng libwebp libxml libxslt opus ) # 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 "third_party/$LIB" -type f \ \! -path "third_party/$LIB/chromium/*" \ \! -path "third_party/$LIB/google/*" \ \! -path './base/third_party/icu/*' \ \! -path './third_party/harfbuzz-ng/utils/hb_scoped.h' \ \! -regex '.*\.\(gn\|gni\|isolate\)' \ -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 local clang_version="$(clang -dumpversion)" conf=( 'enable_nacl=false' 'use_sysroot=false' 'host_pkg_config="/usr/bin/pkg-config"' "is_clang=$(vopt_if clang true false)" "use_lld=$(vopt_if clang true false)" 'clang_use_chrome_plugins=false' 'clang_base_path="/usr"' "clang_version=\"${clang_version%%.*}\"" "gold_path=\"${XBPS_CROSS_BASE}/usr/bin/ld.gold\"" "use_custom_libcxx=$(vopt_if libcxx true false)" # https://github.com/llvm/llvm-project/issues/61705 'use_gold=false' 'enable_rust=true' 'rust_sysroot_absolute="/usr"' "rustc_version=\"$(rustc --version)\"" # 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' 'enable_widevine=true' 'enable_hangout_services_extension=true' 'use_system_harfbuzz=false' 'use_system_libffi=true' 'use_qt=false' 'use_cups=true' "use_vaapi=$(vopt_if vaapi 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_cfi_icall=false' "use_thin_lto=$(vopt_if lto true false)" 'chrome_pgo_phase=0' ) if [ "$CROSS_BUILD" ]; then conf+=( 'custom_toolchain="//build/toolchain/linux/unbundle:default"' 'host_toolchain="//build/toolchain/linux/unbundle:host"' 'v8_snapshot_toolchain="//build/toolchain/linux/unbundle:v8_snapshot_cross"' ) else conf+=( 'custom_toolchain="//build/toolchain/linux/unbundle:default"' 'host_toolchain="//build/toolchain/linux/unbundle:default"' ) fi if [ "$XBPS_TARGET_LIBC" = "musl" ]; then conf+=( 'is_musl=true' ) fi 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"' ) ;; esac if [ "$CROSS_BUILD" ]; then case "${XBPS_MACHINE}" in x86_64*) conf+=( 'host_cpu="x64"' ) ;; i686*) conf+=( 'host_cpu="x86"' ) ;; arm*) conf+=( 'host_cpu="arm"' ) ;; aarch64*) conf+=( 'host_cpu="arm64"' ) ;; esac fi _setup_toolchain out/Release/gn gen out/Release --args="${conf[*]}" } do_build() { # XXX: need for error: the option `Z` is only accepted on the nightly compiler export RUSTC_BOOTSTRAP=1 _setup_toolchain CCACHE_SLOPPINESS=include_file_mtime ninja -C out/Release ${makejobs} chrome chromedriver.unstripped 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.unstripped 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 vinstall out/Release/libvk_swiftshader.so 755 usr/lib/${pkgname} libvk_swiftshader.so vinstall out/Release/vk_swiftshader_icd.json 755 usr/lib/${pkgname} vk_swiftshader_icd.json 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 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 vinstall chrome/installer/linux/common/desktop.template 644 usr/share/applications chromium.desktop vman chrome/app/resources/manpage.1.in chromium.1 sed -i \ -e 's/@@MENUNAME@@/Chromium/g' \ -e 's/@@PACKAGE@@/chromium/g' \ -e 's/@@USR_BIN_SYMLINK_NAME@@/chromium/g' \ ${DESTDIR}/usr/share/man/man1/chromium.1 \ ${DESTDIR}/usr/share/applications/chromium.desktop }