Ubuntu 20.04.4 LTS
Follow the Chromium official build instruction for Linux host to get the source code. https://chromium.googlesource.com/chromium/src/+/refs/heads/main/docs/linux/build_instructions.md
Install additional build dependencies (by using the script available within the source code.)
Edit the .gclient file in //chromium top level. This is to disable gclient from syncing NaCL code base.
solutions = [
{
"name": "src",
"url": "https://chromium.googlesource.com/chromium/src.git",
"managed": False,
"custom_deps": {},
"custom_vars": { "checkout_nacl": False },
},
]
Checkout to specific commits where the patchset are based on.
$ cd ~/chromium/src
$ git checkout 99ce2ebd79dc6
Run the Chromium-specific hooks, this will download additional toolchain / binaries that we might need for the build later.
$ cd ~/chromium/src
$ gclient runhooks
Set up the build configurations in args.gn
$ mkdir -p out/riscv64
$ vim out/riscv64/args.gn
target_os="linux"
target_cpu="riscv64"
is_component_build = true
is_debug=false
symbol_level=0
v8_symbol_level=0
blink_symbol_level=0
# Disable broken features
use_gnome_keyring=false
enable_nacl=false
treat_warnings_as_errors=false
fatal_linker_warnings=false
enable_dav1d_decoder = false
enable_reading_list=false
enable_vr=false
enable_swiftshader=false
supports_subzero=false
enable_libaom=false
enable_openscreen=false
enable_jxl_decoder=false
# For clang
is_clang = true
Apply the patches from this repository.
$ cd ~/chromium/src
$ git am <patch>
Apply the patches in the untracked folder. This is due to third_party components are not tracked under the same git history.
NOTE: There is no script to help in this yet. So we have to run patch command manually in the respective folders.
TODO: Add a script to help user to patch these patches for third_party components.
$ cd third_party/<component>
$ patch -p1 < ~/riscv64-chromium-patch/third_party/XXX.patch
Setup ffmpeg.
$ cd third_party/ffmpeg
$ ./chromium/scripts/build_ffmpeg.py linux riscv64
$ ./chromium/scripts/generate_gn.py
$ ./chromium/scripts/copy_config.sh
Run the build and start resolving build issues.
$ autoninja -C out/riscv64 chrome
Generate dependency tree from GN.
$ gn desc out/risc64 chrome --tree
Launch chromium browser on headless server.
# Print screenshot and save as PDF
$ chrome --headless --disable-gpu --print-to-pdf https://www.google.com
# Capture screenshot
$ chrome --headless --disable-gpu --screenshot https://www.google.com
Note: Running with –screenshot will produce a file named screenshot.png in the current working directory.