356 lines
12 KiB
Bash
356 lines
12 KiB
Bash
# Template file for 'chromium'
|
|
pkgname=chromium
|
|
# See https://chromiumdash.appspot.com/releases?platform=Linux for the latest version
|
|
version=130.0.6723.69
|
|
revision=1
|
|
archs="i686* x86_64* aarch64* armv7l*"
|
|
hostmakedepends="
|
|
$(vopt_if clang "clang18 lld18 llvm18 compiler-rt")
|
|
bison git gperf hwids ninja nodejs perl pkg-config python3
|
|
libepoxy-devel libevent-devel libglib-devel rust rust-bindgen"
|
|
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 <duncaen@voidlinux.org>"
|
|
license="BSD-3-Clause"
|
|
homepage="https://www.chromium.org/"
|
|
distfiles="https://commondatastorage.googleapis.com/chromium-browser-official/${pkgname}-${version}.tar.xz"
|
|
checksum=b7e4d6a2154c61e558659bbc5b8b05c9f6f317d1420bf8624f5ffac097df565d
|
|
|
|
lib32disabled=yes
|
|
|
|
build_options="clang libcxx debug vaapi pulseaudio sndio pipewire lto drumbrake"
|
|
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"
|
|
desc_option_drumbrake="WebAssembly Interpreter"
|
|
|
|
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
|
|
rm -f third_party/node/linux/node-linux-x64/bin/node
|
|
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%%.*}\""
|
|
|
|
"use_custom_libcxx=$(vopt_if libcxx true false)" # https://github.com/llvm/llvm-project/issues/61705
|
|
|
|
'enable_rust=true'
|
|
'rust_sysroot_absolute="/usr"'
|
|
'rust_bindgen_root="/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)"
|
|
|
|
"v8_enable_drumbrake=$(vopt_if drumbrake 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
|
|
}
|