Porting/Chromium (Old)

From RCS Wiki
Revision as of 15:18, 18 September 2018 by TimothyPearson (talk | contribs)
Jump to navigation Jump to search
  • What to port to ppc
    • nacl (Not porting since it's been deprecated by Google.)

# Install Ubuntu 16 LTS ppc64le in VM with good amount of CPUs and ~16GB RAM, the more CPUs the more RAM, and around 200GB disk space

sudo apt update
sudo apt full-upgrade
sudo apt install git vim python libcups2-dev pkg-config libnss3-dev libssl-dev libglib2.0-dev libgnome-keyring-dev libpango1.0-dev libdbus-1-dev libatk1.0-dev libatk-bridge2.0-dev libgtk-3-dev libkrb5-dev libxss-dev re2c subversion curl libasound2-dev libpci-dev mesa-common-dev gperf bison uuid-dev

##begin alternate - use a xenial-chroot instead of a VM
#Create chroot
sudo debootstrap --include=software-properties-common xenial xenial-chroot http://us.ports.ubuntu.com/ubuntu-ports/ubuntu-ports/ 

#must be mapped for chroot to function properly
sudo mount -t proc none xenial-chroot/proc/
sudo mount -o bind /sys/ xenial-chroot/sys/
sudo mount -o bind /dev/shm/ xenial-chroot/dev/shm/

#enter chroot
sudo chroot xenial-chroot

#add additional apt sources
echo "deb http://us.ports.ubuntu.com/ubuntu-ports/ubuntu-ports xenial-updates main" >> /etc/apt/sources.list
echo "deb http://us.ports.ubuntu.com/ubuntu-ports/ubuntu-ports xenial universe" >> /etc/apt/sources.list
echo "deb http://us.ports.ubuntu.com/ubuntu-ports/ubuntu-ports xenial-updates universe" >> /etc/apt/sources.list

#update and add software as mentioned above
apt update
apt full-upgrade
apt install <packages listed above>

#add chroot user
useradd -m build-user -s /bin/bash
su build-user
echo 'cd' >> ~/.bashrc
cd
##end alternate - use a xenial-chroot instead of a VM


cd
git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git

echo 'export PATH="$PATH:${HOME}/ninja"' >> ~/.bashrc
echo 'export PATH="$PATH:${HOME}/depot_tools"' >> ~/.bashrc
echo 'export VPYTHON_BYPASS="manually managed python not supported by chrome operations"' >> ~/.bashrc
echo 'export GYP_DEFINES="disable_nacl=1"' >> ~/.bashrc
. ~/.bashrc

git clone git://github.com/ninja-build/ninja.git
cd ninja
git checkout release
./configure.py --bootstrap
which ninja # ensure it is right ninja bin, else figure out a way so it is the right one that comes up


cd
git clone https://gn.googlesource.com/gn

export CC=gcc
export CXX=g++
export AR=ar

cd gn
python build/gen.py --no-sysroot
cat out/build.ninja | sed s/-stdlib=libstdc++//g | tee out/build.ninja
ninja -C out

unset CXX
unset CC
unset AR

# Setup clang (HIGHLY RECOMMENDED)
# Building chromium with gcc is an uphill battle as the devs only test with clang.
# It is possible to set up a local clang compiler with the exact revision chromium expects by doing the following:

# Check out LLVM (rev 340925)
svn checkout --force https://llvm.org/svn/llvm-project/llvm/trunk@340925 llvm

# Check out Clang (rev 340925)
svn checkout --force https://llvm.org/svn/llvm-project/cfe/trunk@340925 llvm/tools/clang

# Check out compiler-rt (rev 340925)
svn checkout --force https://llvm.org/svn/llvm-project/compiler-rt/trunk@340925 llvm/compiler-rt

# Make build directory and build
mkdir llvm_build
cd llvm_build
cmake -DCMAKE_BUILD_TYPE=Release -DLLVM_TARGETS_TO_BUILD="PowerPC" -G "Unix Makefiles" ../llvm
make -j64 # Replace with no. of threads in your box


# Setup and build chromium tree
cd
mkdir chromium
cd chromium

# The following command will fail with a message "failed to resolve package version".
# Once it does, simply continue following the instructions. The subsequent patches will resolve the issue.
fetch --no-history --nohooks chromium

curl "https://wiki.raptorcs.com/w/images/4/45/Src-DEPS.patch" | patch -p1 src/DEPS # If this patchfile stops working, ignore the error, see "Patchfiles uploaded"
curl "https://wiki.raptorcs.com/w/images/1/10/Binutils-download.py-PPC.patch" | patch -p1 src/third_party/binutils/download.py

gclient sync
gclient runhooks

mv src/buildtools/linux64/gn src/buildtools/linux64/gn.old
ln -s $HOME/gn/out/gn src/buildtools/linux64/gn

cd src

# build system patches
curl "https://wiki.raptorcs.com/w/images/6/69/Buildtools-third_party-libc%2B%2B-trunk-include-thread-PPC.patch" | patch -p1 buildtools/third_party/libc++/trunk/include/thread
curl "https://wiki.raptorcs.com/w/images/5/5c/0006-build-toolchain-allow-clang-on-ppc64.patch"                  | patch -p1

# breakpad fix
cd third_party/breakpad/breakpad
curl "https://wiki.raptorcs.com/w/images/f/f7/0001-Implement-ppc64-support-on-linux.patch"                      | patch -p1
cd ../../..

# crashpad fix
cd third_party/crashpad/crashpad
curl "https://wiki.raptorcs.com/w/images/8/88/0001-Implement-support-for-PPC64-on-Linux.patch"                  | patch -p1
cd ../../..
curl "https://wiki.raptorcs.com/w/images/6/6e/0002-Include-cstddef-to-fix-build.patch"                          | patch -p1

# webrtc patches
curl "https://wiki.raptorcs.com/w/images/b/b2/Rtc_base-system-arch.h-PPC.patch" | patch -p1 third_party/webrtc/rtc_base/system/arch.h
curl "https://wiki.raptorcs.com/w/images/9/96/Modules-desktop_capture-differ_block.cc-PPC.patch" | patch -p1 third_party/webrtc/modules/desktop_capture/differ_block.cc

# sandbox patches
curl "https://wiki.raptorcs.com/w/images/a/ab/0001-sandbox-linux-bpf_dsl-Update-syscall-ranges-for-ppc6.patch" | patch -p1
curl "https://wiki.raptorcs.com/w/images/3/30/0002-sandbox-linux-bpf_dsl-Modify-seccomp_macros-to-add-s.patch" | patch -p1
curl "https://wiki.raptorcs.com/w/images/6/60/0003-sandbox-linux-system_headers-Update-linux-seccomp-he.patch" | patch -p1
curl "https://wiki.raptorcs.com/w/images/e/ec/0004-sandbox-linux-system_headers-Update-linux-signal-hea.patch" | patch -p1
curl "https://wiki.raptorcs.com/w/images/b/b3/0005-sandbox-linux-seccomp-bpf-Add-ppc64-syscall-stub.patch"     | patch -p1
curl "https://wiki.raptorcs.com/w/images/f/f5/Sandbox-linux-services-credentials.cc-PPC.patch"                 | patch -p1
curl "https://wiki.raptorcs.com/w/images/b/be/0001-sandbox-Enable-seccomp_bpf-for-ppc64.patch"                 | patch -p1
curl "https://wiki.raptorcs.com/w/images/3/38/0001-sandbox-linux-Implement-partial-support-for-ppc64-sy.patch" | patch -p1
curl "https://wiki.raptorcs.com/w/images/b/bb/0001-sandbox-linux-seccomp-bpf-helpers-Fix-TCGETS-declara.patch" | patch -p1
curl "https://wiki.raptorcs.com/w/images/e/e7/0001-sandbox-linux-seccomp-bpf-helpers-Skip-vserver-sysca.patch" | patch -p1

# service_manager patches
curl "https://wiki.raptorcs.com/w/images/c/c9/0001-services-service_manager-sandbox-linux-Fix-TCGETS-de.patch" | patch -p1

# third_party patches
curl "https://wiki.raptorcs.com/w/images/8/8a/0001-third_party-angle-Include-missing-header-cstddef-in-.patch" | patch -p1
curl "https://wiki.raptorcs.com/w/images/f/fc/0001-third_party-lss-Don-t-look-for-mmap2-on-ppc64.patch"        | patch -p1
curl "https://wiki.raptorcs.com/w/images/8/8d/0001-DONTMERGE-third_party-node-Use-system-nodejs-binary.patch"  | patch -p1
curl "https://wiki.raptorcs.com/w/images/0/0b/0002-third_party-closure_compiler-Remove-useless-JVM-flag.patch" | patch -p1
curl "https://wiki.raptorcs.com/w/images/5/5f/0001-third_party-blink-Fix-build-on-ppc64.patch"                 | patch -p1
curl "https://wiki.raptorcs.com/w/images/8/84/0001-components-update_client-Fix-building-on-ppc64.patch"       | patch -p1
curl "https://wiki.raptorcs.com/w/images/0/02/0001-Reenable-VSX-in-libpng.patch"                               | patch -p1

# page size fixes
curl "https://wiki.raptorcs.com/w/images/f/f3/0001-base-allocator-Use-64k-page-sizes-on-ppc64.patch"           | patch -p1

# libvpx fix
curl "https://wiki.raptorcs.com/w/images/8/80/0001-third_party-libvpx-Properly-generate-gni-on-ppc64.patch"    | patch -p1
cd third_party/libvpx
mkdir source/config/linux/ppc64
./generate_gni.sh
cd ../../

# ffmpeg fix (see https://docs.google.com/document/d/14bqZ9NISsyEO3948wehhJ7wc9deTIz-yHUhF1MQp7Po/edit#heading=h.t7yeo9by5dyr for info on build system)
cd third_party/ffmpeg
curl "https://wiki.raptorcs.com/w/images/7/7b/0001-Add-support-for-ppc64.patch" | patch -p1
./chromium/scripts/generate_gn.py
./chromium/scripts/build_ffmpeg.py linux ppc64
./chromium/scripts/copy_config.sh 
cd ../../

# pdfium fix
cd third_party/pdfium
curl "https://wiki.raptorcs.com/w/images/4/41/0001-Add-spin-yield-support-for-ppc64.patch"                      | patch -p1
cd ../..

### GCC ONLY! 

# quic fix https://bugs.chromium.org/p/chromium/issues/detail?id=882347&can=2&q=gcc&colspec=ID%20Pri%20M%20Stars%20ReleaseBlock%20Component%20Status%20Owner%20Summary%20OS%20Modified
git checkout 7b4f22bd25461cb32236c07699b029c7411ba494 -- net/third_party/quic/core/frames/quic_frame.h

# blink gcc fix https://bugs.chromium.org/p/chromium/issues/detail?id=882161#
curl "https://wiki.raptorcs.com/w/images/d/de/Chromium-blink-snapcontainerdata.patch" | patch -p1

### END GCC ONLY

gn args out/Default

# PASTE IN EDITOR

enable_nacl=false
treat_warnings_as_errors=false

# for clang, add the following lines:
is_clang = true
clang_base_path = "/path/to/your/llvm_build"
clang_use_chrome_plugins = false


# END PASTE Save file and it will generate build configuration

ninja -C out/Default chrome

[sharkcz@guest05 lib]$ ll *5.11.2
-rwxrwxr-x. 1 sharkcz sharkcz 262536744 Sep  7 12:03 libQt5WebEngineCore.so.5.11.2
-rwxrwxr-x. 1 sharkcz sharkcz  11645504 Sep  7 12:04 libQt5WebEngine.so.5.11.2
-rwxrwxr-x. 1 sharkcz sharkcz   7154392 Sep  7 12:05 libQt5WebEngineWidgets.so.5.11.2

[sharkcz@guest05 lib]$ file libQt5WebEngineCore.so.5.11.2
libQt5WebEngineCore.so.5.11.2: ELF 64-bit LSB shared object, 64-bit PowerPC or cisco 7500, version 1 (SYSV), dynamically linked, BuildID[sha1]=39083e3d8053ec0ffaccfee7a8634d9d6954dbde, with debug_info, not stripped, too many notes (256)