|
| 1 | +TERMUX_PKG_HOMEPAGE=https://www.chromium.org/Home |
| 2 | +TERMUX_PKG_DESCRIPTION="Chromium web browser" |
| 3 | +TERMUX_PKG_LICENSE="BSD 3-Clause" |
| 4 | +TERMUX_PKG_MAINTAINER= "Chongyun Lee <[email protected]>" |
| 5 | +_CHROMIUM_VERSION=108.0.5359.124 |
| 6 | +TERMUX_PKG_VERSION=$_CHROMIUM_VERSION |
| 7 | +TERMUX_PKG_SRCURL=(https://commondatastorage.googleapis.com/chromium-browser-official/chromium-$_CHROMIUM_VERSION.tar.xz) |
| 8 | +TERMUX_PKG_SHA256=(d48dfac2a61b14a5d7d2f460b09b70ef3ab88e27b82e3173938cb54eaa612a75) |
| 9 | +TERMUX_PKG_DEPENDS="atk, cups, dbus, gtk3, krb5, libc++, libevdev, libxkbcommon, libminizip, libnss, libwayland, libx11, mesa, openssl, pango, pulseaudio, libdrm, libjpeg-turbo, libpng, libwebp, libflac, fontconfig, freetype, zlib, libxml2, libxslt, libopus, libsnappy" |
| 10 | +# TODO: Split chromium-common and chromium-headless |
| 11 | +# TERMUX_PKG_DEPENDS+=", chromium-common" |
| 12 | +# TERMUX_PKG_SUGGESTS="chromium-headless, chromium-driver" |
| 13 | +TERMUX_PKG_SUGGESTS="qt5-qtbase" |
| 14 | +TERMUX_PKG_BUILD_DEPENDS="qt5-qtbase, qt5-qtbase-cross-tools" |
| 15 | +# Chromium doesn't support i686 on Linux. |
| 16 | +TERMUX_PKG_BLACKLISTED_ARCHES="i686" |
| 17 | + |
| 18 | +SYSTEM_LIBRARIES=" libdrm fontconfig" |
| 19 | +# TERMUX_PKG_DEPENDS="libdrm, fontconfig" |
| 20 | + |
| 21 | +termux_step_post_get_source() { |
| 22 | + python $TERMUX_SCRIPTDIR/common-files/apply-chromium-patches.py -v $_CHROMIUM_VERSION |
| 23 | + |
| 24 | + python3 build/linux/unbundle/replace_gn_files.py --system-libraries \ |
| 25 | + $SYSTEM_LIBRARIES |
| 26 | + python3 third_party/libaddressinput/chromium/tools/update-strings.py |
| 27 | +} |
| 28 | + |
| 29 | +termux_step_configure() { |
| 30 | + cd $TERMUX_PKG_SRCDIR |
| 31 | + termux_setup_ninja |
| 32 | + termux_setup_nodejs |
| 33 | + |
| 34 | + # Fetch depot_tools |
| 35 | + export DEPOT_TOOLS_UPDATE=0 |
| 36 | + if [ ! -f "$TERMUX_PKG_CACHEDIR/.depot_tools-fetched" ];then |
| 37 | + git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git $TERMUX_PKG_CACHEDIR/depot_tools |
| 38 | + touch "$TERMUX_PKG_CACHEDIR/.depot_tools-fetched" |
| 39 | + fi |
| 40 | + export PATH="$TERMUX_PKG_CACHEDIR/depot_tools:$PATH" |
| 41 | + |
| 42 | + ################################################################ |
| 43 | + # Please dont use these keys outside of Termux User Repository # |
| 44 | + # You can create your own at: # |
| 45 | + # http://www.chromium.org/developers/how-tos/api-keys # |
| 46 | + ################################################################ |
| 47 | + local _google_api_key _google_default_client_id _google_default_client_secret |
| 48 | + eval "$(base64 -d < $TERMUX_PKG_BUILDER_DIR/google-api-keys.base64enc)" |
| 49 | + |
| 50 | + # Remove termux's dummy pkg-config |
| 51 | + local _target_pkg_config=$(command -v pkg-config) |
| 52 | + local _host_pkg_config="$(cat $_target_pkg_config | grep exec | awk '{print $2}')" |
| 53 | + rm -rf $TERMUX_PKG_TMPDIR/host-pkg-config-bin |
| 54 | + mkdir -p $TERMUX_PKG_TMPDIR/host-pkg-config-bin |
| 55 | + ln -s $_host_pkg_config $TERMUX_PKG_TMPDIR/host-pkg-config-bin/pkg-config |
| 56 | + export PATH="$TERMUX_PKG_TMPDIR/host-pkg-config-bin:$PATH" |
| 57 | + |
| 58 | + # For qt build |
| 59 | + export PATH="$TERMUX_PREFIX/opt/qt/cross/bin:$PATH" |
| 60 | + |
| 61 | + # Install amd64 rootfs and deps |
| 62 | + env -i PATH="$PATH" sudo apt update |
| 63 | + env -i PATH="$PATH" sudo apt install lsb-release -yq |
| 64 | + env -i PATH="$PATH" sudo apt install libfontconfig1 libffi7 -yq |
| 65 | + env -i PATH="$PATH" sudo ./build/install-build-deps.sh --no-syms --no-arm --no-chromeos-fonts --no-nacl --no-prompt --unsupported |
| 66 | + build/linux/sysroot_scripts/install-sysroot.py --arch=amd64 |
| 67 | + local _amd64_sysroot_path="$(pwd)/build/linux/$(ls build/linux | grep 'amd64-sysroot')" |
| 68 | + |
| 69 | + # Link to system tools required by the build |
| 70 | + mkdir -p third_party/node/linux/node-linux-x64/bin |
| 71 | + ln -sf $(command -v node) third_party/node/linux/node-linux-x64/bin/ |
| 72 | + ln -sf $(command -v java) third_party/jdk/current/bin/ |
| 73 | + |
| 74 | + # Dummy librt.so |
| 75 | + # Why not dummy a librt.a? Some of the binaries reference symbols only exists in Android |
| 76 | + # for some reason, such as the `chrome_crashpad_handler`, which needs to link with |
| 77 | + # libprotobuf_lite.a, but it is hard to remove the usage of `android/log.h` in protobuf. |
| 78 | + echo "INPUT(-llog -liconv -landroid-shmem)" > "$TERMUX_PREFIX/lib/librt.so" |
| 79 | + |
| 80 | + # Dummy libpthread.a and libresolv.a |
| 81 | + echo '!<arch>' > "$TERMUX_PREFIX/lib/libpthread.a" |
| 82 | + echo '!<arch>' > "$TERMUX_PREFIX/lib/libresolv.a" |
| 83 | + |
| 84 | + # Symlink libffi.a to libffi_pic.a |
| 85 | + ln -sfr $TERMUX_PREFIX/lib/libffi.a $TERMUX_PREFIX/lib/libffi_pic.a |
| 86 | + |
| 87 | + # Merge sysroots |
| 88 | + rm -rf $TERMUX_PKG_TMPDIR/sysroot |
| 89 | + mkdir -p $TERMUX_PKG_TMPDIR/sysroot |
| 90 | + pushd $TERMUX_PKG_TMPDIR/sysroot |
| 91 | + mkdir -p usr/include usr/lib usr/bin |
| 92 | + cp -R $TERMUX_STANDALONE_TOOLCHAIN/sysroot/usr/include/* usr/include |
| 93 | + cp -R $TERMUX_STANDALONE_TOOLCHAIN/sysroot/usr/include/$TERMUX_HOST_PLATFORM/* usr/include |
| 94 | + cp -R $TERMUX_STANDALONE_TOOLCHAIN/sysroot/usr/lib/$TERMUX_HOST_PLATFORM/$TERMUX_PKG_API_LEVEL/* usr/lib/ |
| 95 | + cp "$TERMUX_STANDALONE_TOOLCHAIN/sysroot/usr/lib/$TERMUX_HOST_PLATFORM/libc++_shared.so" usr/lib/ |
| 96 | + cp "$TERMUX_STANDALONE_TOOLCHAIN/sysroot/usr/lib/$TERMUX_HOST_PLATFORM/libc++_static.a" usr/lib/ |
| 97 | + cp "$TERMUX_STANDALONE_TOOLCHAIN/sysroot/usr/lib/$TERMUX_HOST_PLATFORM/libc++abi.a" usr/lib/ |
| 98 | + cp -Rf $TERMUX_PREFIX/include/* usr/include |
| 99 | + cp -Rf $TERMUX_PREFIX/lib/* usr/lib |
| 100 | + ln -sf /data ./data |
| 101 | + # This is needed to build crashpad |
| 102 | + rm -rf $TERMUX_PREFIX/include/spawn.h |
| 103 | + # This is needed to build cups |
| 104 | + cp -Rf $TERMUX_PREFIX/bin/cups-config usr/bin/ |
| 105 | + chmod +x usr/bin/cups-config |
| 106 | + popd |
| 107 | + |
| 108 | + # Construct args |
| 109 | + local _clang_base_path="/usr/lib/llvm-16" |
| 110 | + local _host_cc="$_clang_base_path/bin/clang" |
| 111 | + local _host_cxx="$_clang_base_path/bin/clang++" |
| 112 | + local _target_cpu _target_sysroot="$TERMUX_PKG_TMPDIR/sysroot" |
| 113 | + local _v8_toolchain_name _v8_current_cpu _v8_sysroot_path |
| 114 | + if [ "$TERMUX_ARCH" = "aarch64" ]; then |
| 115 | + _target_cpu="arm64" |
| 116 | + _v8_current_cpu="x64" |
| 117 | + _v8_sysroot_path="$_amd64_sysroot_path" |
| 118 | + _v8_toolchain_name="clang_x64_v8_arm64" |
| 119 | + elif [ "$TERMUX_ARCH" = "arm" ]; then |
| 120 | + # Install i386 rootfs and deps |
| 121 | + env -i PATH="$PATH" sudo apt install libfontconfig1:i386 libffi7:i386 -yq |
| 122 | + env -i PATH="$PATH" sudo ./build/install-build-deps.sh --lib32 --no-syms --no-arm --no-chromeos-fonts --no-nacl --no-prompt --unsupported |
| 123 | + build/linux/sysroot_scripts/install-sysroot.py --arch=i386 |
| 124 | + local _i386_sysroot_path="$(pwd)/build/linux/$(ls build/linux | grep 'i386-sysroot')" |
| 125 | + _target_cpu="arm" |
| 126 | + _v8_current_cpu="x86" |
| 127 | + _v8_sysroot_path="$_i386_sysroot_path" |
| 128 | + _v8_toolchain_name="clang_x86_v8_arm" |
| 129 | + elif [ "$TERMUX_ARCH" = "x86_64" ]; then |
| 130 | + _target_cpu="x64" |
| 131 | + _v8_current_cpu="x64" |
| 132 | + _v8_sysroot_path="$_amd64_sysroot_path" |
| 133 | + _v8_toolchain_name="clang_x64" |
| 134 | + fi |
| 135 | + |
| 136 | + local _common_args_file=$TERMUX_PKG_TMPDIR/common-args-file |
| 137 | + rm -f $_common_args_file |
| 138 | + touch $_common_args_file |
| 139 | + |
| 140 | + echo " |
| 141 | +# Set google key to disable the warning slogan |
| 142 | +# Please DO NOT USE THIS KEY OUTSIDE OF TUR! |
| 143 | +google_api_key = \"$_google_api_key\" |
| 144 | +google_default_client_id = \"$_google_default_client_id\" |
| 145 | +google_default_client_secret = \"$_google_default_client_secret\" |
| 146 | +# Do official build to decrease file size |
| 147 | +is_official_build = true |
| 148 | +is_debug = false |
| 149 | +symbol_level = 0 |
| 150 | +# Use our custom toolchain |
| 151 | +use_sysroot = false |
| 152 | +target_cpu = \"$_target_cpu\" |
| 153 | +target_rpath = \"$TERMUX_PREFIX/lib\" |
| 154 | +target_sysroot = \"$_target_sysroot\" |
| 155 | +clang_base_path = \"$_clang_base_path\" |
| 156 | +custom_toolchain = \"//build/toolchain/linux/unbundle:default\" |
| 157 | +host_toolchain = \"$TERMUX_PKG_CACHEDIR/custom-toolchain:host\" |
| 158 | +v8_snapshot_toolchain = \"$TERMUX_PKG_CACHEDIR/custom-toolchain:$_v8_toolchain_name\" |
| 159 | +clang_use_chrome_plugins = false |
| 160 | +dcheck_always_on = false |
| 161 | +chrome_pgo_phase = 0 |
| 162 | +treat_warnings_as_errors = false |
| 163 | +# Use system libraries as little as possible |
| 164 | +use_system_freetype = false |
| 165 | +use_system_libdrm = true |
| 166 | +use_system_libffi = true |
| 167 | +use_custom_libcxx = false |
| 168 | +use_allocator_shim = false |
| 169 | +use_allocator = \"none\" |
| 170 | +use_nss_certs = true |
| 171 | +use_nss_certs = true |
| 172 | +use_udev = false |
| 173 | +use_ozone = true |
| 174 | +ozone_auto_platforms = false |
| 175 | +ozone_platform = \"x11\" |
| 176 | +ozone_platform_x11 = true |
| 177 | +ozone_platform_wayland = true |
| 178 | +ozone_platform_headless = true |
| 179 | +angle_enable_vulkan = true |
| 180 | +angle_enable_swiftshader = true |
| 181 | +angle_enable_abseil = false |
| 182 | +# Use Chrome-branded ffmpeg for more codecs |
| 183 | +is_component_ffmpeg = true |
| 184 | +ffmpeg_branding = \"Chrome\" |
| 185 | +proprietary_codecs = true |
| 186 | +use_gnome_keyring = false |
| 187 | +use_qt = true |
| 188 | +use_libpci = false |
| 189 | +use_alsa = false |
| 190 | +use_pulseaudio = true |
| 191 | +rtc_use_pipewire = false |
| 192 | +use_vaapi_x11 = false |
| 193 | +# See comments below |
| 194 | +enable_nacl = false |
| 195 | +# Host compiler (clang-13) doesn't support LTO well |
| 196 | +is_cfi = false |
| 197 | +use_cfi_icall = false |
| 198 | +use_thin_lto = false |
| 199 | +" > $_common_args_file |
| 200 | + |
| 201 | + if [ "$TERMUX_ARCH" = "arm" ]; then |
| 202 | + echo "arm_arch = \"armv7-a\"" >> $_common_args_file |
| 203 | + echo "arm_float_abi = \"softfp\"" >> $_common_args_file |
| 204 | + fi |
| 205 | + |
| 206 | + # Use custom toolchain |
| 207 | + mkdir -p $TERMUX_PKG_CACHEDIR/custom-toolchain |
| 208 | + cp -f $TERMUX_PKG_BUILDER_DIR/toolchain.gn.in $TERMUX_PKG_CACHEDIR/custom-toolchain/BUILD.gn |
| 209 | + sed -i "s|@HOST_CC@|$_host_cc|g |
| 210 | + s|@HOST_CXX@|$_host_cxx|g |
| 211 | + s|@HOST_LD@|$_host_cxx|g |
| 212 | + s|@HOST_AR@|$(command -v llvm-ar)|g |
| 213 | + s|@HOST_NM@|$(command -v llvm-nm)|g |
| 214 | + s|@HOST_IS_CLANG@|true|g |
| 215 | + s|@HOST_USE_GOLD@|false|g |
| 216 | + s|@HOST_SYSROOT@|$_amd64_sysroot_path|g |
| 217 | + " $TERMUX_PKG_CACHEDIR/custom-toolchain/BUILD.gn |
| 218 | + sed -i "s|@V8_CC@|$_host_cc|g |
| 219 | + s|@V8_CXX@|$_host_cxx|g |
| 220 | + s|@V8_LD@|$_host_cxx|g |
| 221 | + s|@V8_AR@|$(command -v llvm-ar)|g |
| 222 | + s|@V8_NM@|$(command -v llvm-nm)|g |
| 223 | + s|@V8_TOOLCHAIN_NAME@|$_v8_toolchain_name|g |
| 224 | + s|@V8_CURRENT_CPU@|$_v8_current_cpu|g |
| 225 | + s|@V8_V8_CURRENT_CPU@|$_target_cpu|g |
| 226 | + s|@V8_IS_CLANG@|true|g |
| 227 | + s|@V8_USE_GOLD@|false|g |
| 228 | + s|@V8_SYSROOT@|$_v8_sysroot_path|g |
| 229 | + " $TERMUX_PKG_CACHEDIR/custom-toolchain/BUILD.gn |
| 230 | + |
| 231 | + mkdir -p $TERMUX_PKG_BUILDDIR/out/Release |
| 232 | + cat $_common_args_file > $TERMUX_PKG_BUILDDIR/out/Release/args.gn |
| 233 | + gn gen $TERMUX_PKG_BUILDDIR/out/Release --export-compile-commands |
| 234 | +} |
| 235 | + |
| 236 | +termux_step_make() { |
| 237 | + cd $TERMUX_PKG_BUILDDIR |
| 238 | + ninja -C out/Release chromedriver chrome chrome_crashpad_handler headless_shell -k 0 || bash |
| 239 | +} |
| 240 | + |
| 241 | +termux_step_make_install() { |
| 242 | + cd $TERMUX_PKG_BUILDDIR |
| 243 | + mkdir -p $TERMUX_PREFIX/opt/$TERMUX_PKG_NAME |
| 244 | + |
| 245 | + local normal_files=( |
| 246 | + # Binary files |
| 247 | + chrome |
| 248 | + chrome_crashpad_handler |
| 249 | + headless_shell |
| 250 | + chromedriver |
| 251 | + generate_colors_info |
| 252 | + |
| 253 | + # Resource files |
| 254 | + chrome_100_percent.pak |
| 255 | + chrome_200_percent.pak |
| 256 | + headless_lib_data.pak |
| 257 | + headless_lib_strings.pak |
| 258 | + resources.pak |
| 259 | + |
| 260 | + # V8 Snapshot data |
| 261 | + snapshot_blob.bin |
| 262 | + v8_context_snapshot.bin |
| 263 | + |
| 264 | + # ICU Data |
| 265 | + icudtl.dat |
| 266 | + |
| 267 | + # Logo |
| 268 | + product_logo_48.png |
| 269 | + |
| 270 | + # Scripts |
| 271 | + chrome-wrapper |
| 272 | + xdg-mime |
| 273 | + xdg-settings |
| 274 | + |
| 275 | + # Angle |
| 276 | + libEGL.so |
| 277 | + libGLESv2.so |
| 278 | + |
| 279 | + # Vulkan |
| 280 | + libvulkan.so.1 |
| 281 | + libVkICD_mock_icd.so |
| 282 | + libvk_swiftshader.so |
| 283 | + libVkLayer_khronos_validation.so |
| 284 | + vk_swiftshader_icd.json |
| 285 | + |
| 286 | + # FFmpeg |
| 287 | + libffmpeg.so |
| 288 | + |
| 289 | + # Qt |
| 290 | + libqt5_shim.so |
| 291 | + ) |
| 292 | + |
| 293 | + cp "${normal_files[@]/#/out/Release/}" "$TERMUX_PREFIX/opt/$TERMUX_PKG_NAME/" |
| 294 | + |
| 295 | + cp -Rf out/Release/angledata $TERMUX_PREFIX/opt/$TERMUX_PKG_NAME/ |
| 296 | + cp -Rf out/Release/locales $TERMUX_PREFIX/opt/$TERMUX_PKG_NAME/ |
| 297 | + cp -Rf out/Release/MEIPreload $TERMUX_PREFIX/opt/$TERMUX_PKG_NAME/ |
| 298 | + cp -Rf out/Release/resources $TERMUX_PREFIX/opt/$TERMUX_PKG_NAME/ |
| 299 | + |
| 300 | + sed "s|@TERMUX_PREFIX@|$TERMUX_PREFIX|g" \ |
| 301 | + $TERMUX_PKG_BUILDER_DIR/chromium-launcher.sh.in > $TERMUX_PREFIX/opt/$TERMUX_PKG_NAME/chromium-launcher.sh |
| 302 | + chmod +x $TERMUX_PREFIX/opt/$TERMUX_PKG_NAME/chromium-launcher.sh |
| 303 | +} |
| 304 | + |
| 305 | +termux_step_post_make_install() { |
| 306 | + # Remove the dummy files |
| 307 | + rm $TERMUX_PREFIX/lib/lib{{pthread,resolv,ffi_pic}.a,rt.so} |
| 308 | +} |
| 309 | + |
| 310 | +termux_step_post_massage() { |
| 311 | + # Except the deb file, we also create a zip file like chromium release |
| 312 | + mkdir -p $TERMUX_SCRIPTDIR/output-chromium |
| 313 | + |
| 314 | + pushd $TERMUX_PKG_MASSAGEDIR/$TERMUX_PREFIX/opt/$TERMUX_PKG_NAME |
| 315 | + zip -r $TERMUX_SCRIPTDIR/output-chromium/chromium-v$TERMUX_PKG_VERSION-linux-$TERMUX_ARCH.zip ./* |
| 316 | + popd |
| 317 | +} |
| 318 | +# TODO: |
| 319 | +# (2) Split packages |
| 320 | + |
| 321 | +# ######################### About system libraries ############################ |
| 322 | +# We only pick up a few libraries to let chromium link against. Others may |
| 323 | +# contain linking error due to the version mismatch between Google-provided |
| 324 | +# sysroot and Termux. |
| 325 | +# Name in Chromium | libdrm fontconfig |
| 326 | +# Name in Termux | libdrm fontconfig |
| 327 | +# |
| 328 | +# ############################################################################# |
| 329 | + |
| 330 | +# ######################### About Native Client ############################### |
| 331 | +# When set `enable_nacl = true`, the following error occurs. |
| 332 | +# ninja: error: 'native_client/toolchain/linux_x86/pnacl_newlib/bin/arm-nacl-objcopy', needed by 'nacl_irt_arm.nexe', missing and no known rule to make it. |
| 333 | +# If we want to enable NaCi, maybe we should build the toolchain of NaCl too. |
| 334 | +# But I don't think this is necessary. NaCl existing or not will take little |
| 335 | +# influence on Chromium. So I'd like to disable NaCl. |
| 336 | +# ############################################################################# |
| 337 | + |
| 338 | +# ############################ About Sandbox ################################## |
| 339 | +# First, setuid-sandbox is never usable on Termux, beacuse setuid syscall is |
| 340 | +# disabled by Android's SELinux. Second, lots of patches are needed to let |
| 341 | +# seccomp-bpf sandbox work properly on Android. I've tried many times but I |
| 342 | +# can't make it. If your are willing to work on this, feel free to submit a PR. |
| 343 | +# ############################################################################# |
0 commit comments