Chromium - сборка и модификация
Модератор: Olej
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Chromium - сборка и модификация
Если бы не некоторые особенности (неприятности) проекта Chromium, то и не создавал бы здесь темы ... а поскольку стоит задача ещё и модификации кода, то относим тему к разделу "Программирование". И фиксируем здесь все странности сборки Chromium ... может ещё пригодится.
P.S. Задачка на тему: сделай свой браузер ... а то их мало наделали
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: Chromium - сборка и модификация
Неприятность сборки Chromium выражается в том, что они замахнулись сборку под чем угодно: Windows, Linux, MacOS ... мобильной версии iOS (from Mac) and Android (from Linux).Olej писал(а):фиксируем здесь все странности сборки Chromium
Как всегда: платой за универсализм является а). громоздкость и б). не тщательность выверки каждого варианта ... тем более, что в данном случае основное внимание уделено Windows, а остальные кое-как...
Но (примечание для любителей собирать из исходников), что чем дальше, тем чаще такая ситуация будет повторяться для разных пакетов ... особенно с появлением мобильных версий.
Сборка Chromium описана здесь: Get the Code: Checkout, Build, Run & Submit.
Получение depot_tools описано здесь: depot_tools_tutorial(7) Manual Page.There are two main components to your build environment:
1. depot_tools - this is our bootstrapped collection of utils that will help you checkout, compile, run and submit changes to the code
2. src - a git repo; your local git copy of the chromium code. This will need to be updated regularly as other users submit changes.
Код: Выделить всё
olej@nvidia ~/Chromium $ git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
Cloning into 'depot_tools'...
remote: Sending approximately 16.84 MiB ...
remote: Total 13003 (delta 8182), reused 13003 (delta 8182)
Receiving objects: 100% (13003/13003), 16.84 MiB | 1.15 MiB/s, done.
Resolving deltas: 100% (8184/8184), done.
Checking connectivity... готово.
olej@nvidia ~/Chromium/depot_tools $ pwd
/home/olej/Chromium/depot_tools
olej@nvidia ~/Chromium/depot_tools $ du -hs
31M .
Код: Выделить всё
olej@nvidia ~ $ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/home/olej/Chromium/depot_tools
Код: Выделить всё
olej@nvidia ~/2015_WORK/in.WORK $ fetch
Error: Must specify a recipe.
usage: fetch.py [options] <recipe> [--property=value [--property2=value2 ...]]
This script can be used to download the Chromium sources. See
http://www.chromium.org/developers/how-tos/get-the-code
for full usage instructions.
Valid options:
-h, --help, help Print this message.
--nohooks Don't run hooks after checkout.
-n, --dry-run Don't run commands, only print them.
--no-history Perform shallow clones, don't fetch the full git history.
Valid fetch recipes:
depot_tools
nacl
chromium
webrtc_ios
v8
recipe_util
pdfium
dartium
skia
blink
webrtc_android
infra_internal
webrtc
breakpad
android
dart
naclports
mojo
skia_buildbot
gyp
infra
ios
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: Chromium - сборка и модификация
Далее получаем исходники Chromium:Olej писал(а): И получаем в своё распоряжение команду fetch (может и ряд других), которыми они (Chromium) делают все свои обновления из репозитария и т.д.
Код: Выделить всё
olej@nvidia ~/Chromium $ pwd
/home/olej/Chromium
olej@nvidia ~/Chromium $ mkdir ~/chromium && cd $_
olej@nvidia ~/chromium $ pwd
/home/olej/chromium
Код: Выделить всё
olej@nvidia ~/chromium $ fetch --nohooks --no-history chromium
Running: gclient root
Running: gclient config --spec 'solutions = [
{
"managed": False,
"name": "src",
"url": "https://chromium.googlesource.com/chromium/src.git",
"custom_deps": {},
"deps_file": ".DEPS.git",
"safesync_url": "",
},
]
'
Running: gclient sync --nohooks --no-history
Running: git submodule foreach 'git config -f $toplevel/.git/config submodule.$name.ignore all'
Running: git config --add remote.origin.fetch '+refs/tags/*:refs/tags/*'
Running: git config diff.ignoreSubmodules all
Код: Выделить всё
olej@nvidia ~/chromium $ du -hs
6,5G .
P.S. Здесь у них можно скачать 2 цели:
Соответственно:You can fetch one of two targets: chromium or blink. Either choice will clone both the Chromium and Blink repos, but there's a small difference.
- fetch chromium will use the Blink version that's rolled into Chromium via DEPS (usually a few hours old). This choice is easier if working only on Chromium.
- fetch blink will always retrieve the latest Blink (ToT) version, and is useful if working on Blink.
Код: Выделить всё
olej@nvidia ~/chromium $ fetch --nohooks --no-history chromium
...
Код: Выделить всё
olej@nvidia ~/chromium $ fetch --nohooks --no-history blink
...
Если возникнет необходимость - выясню и отпишу сюда в тему.
А может кто знает?
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: Chromium - сборка и модификация
Я не понимаю и ничего не могу сказать о том, зачем они выбрали такой путь "через задницу" для простой работы с GIT-репозитарием:Olej писал(а): Далее получаем исходники Chromium:
- сделали утилиту (скрипт) fetch ...
- который вызывает ими же сделанный скрипт:
Код: Выделить всё
olej@nvidia ~ $ gclient --help
Usage: gclient.py <command> [options]
Meta checkout manager supporting both Subversion and GIT.
Commands are:
cleanup cleans up all working copies
config creates a .gclient file in the current directory
diff displays local diff for every dependencies
fetch fetches upstream commits for all modules
grep greps through git repos managed by gclient
help prints list of commands or help for a specific command
hookinfo outputs the hooks that would be run by `gclient runhooks`
pack generates a patch which can be applied at the root of the tree
recurse operates [command args ...] on all the dependencies
revert reverts all modifications in every dependencies
revinfo outputs revision info mapping for the client and its dependencies
root outputs the solution root (or current dir if there isn't one)
runhooks runs hooks for files that have been modified in the local working copy
status shows modification status for every dependencies
sync checkout/update all modules
verify verifies the DEPS file deps are only from allowed_hosts
Options:
--version show program's version number and exit
-h, --help show this help message and exit
-j JOBS, --jobs=JOBS Specify how many SCM commands can run in parallel;
defaults to 8 on this machine
-v, --verbose Produces additional output for diagnostics. Can be
used up to three times for more logging info.
--gclientfile=CONFIG_FILENAME
Specify an alternate .gclient file
--spec=SPEC create a gclient file containing the provided string.
Due to Cygwin/Python brokenness, it can't contain any
newlines.
--no-nag-max Ignored for backwards compatibility.
Код: Выделить всё
olej@nvidia ~/Chromium/depot_tools $ pwd
/home/olej/Chromium/depot_tools
olej@nvidia ~/Chromium/depot_tools $ ls git*
git-auto-svn git-cl-upload-hook git_freezer.py git_mark_merge_base.py git-rebase-update git-runhooks
git_auto_svn.py git_common.py git-gs git-nav-downstream git_rebase_update.py git-squash-branch
git-cache git-crrev-parse git-lkgr git_nav_downstream.py git-rename-branch git_squash_branch.py
git_cache.py git-crsync git-map git-nav-upstream git_rename_branch.py git-thaw
git-cherry-pick-upload git-crup git-map-branches git-new-branch git-reparent-branch git-try
git_cherry_pick_upload.py git-footers git_map_branches.py git_new_branch.py git_reparent_branch.py git_try.py
git-cl git_footers.py git_map.py git-number git-retry git-upstream-diff
git_cl.py git-freeze git-mark-merge-base git_number.py git_retry.py git_upstream_diff.py
git-templates:
description hooks info
git_utils:
git-tree-prune
Или желание позашивать URL-ссылки внутрь скриптов, чтобы их не набирать...
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: Chromium - сборка и модификация
Далее переходим в подкаталог ./src полученного исходника (о чем в инструкции не сказано)...Olej писал(а): Далее получаем исходники Chromium:
Код: Выделить всё
olej@nvidia ~/chromium/src $ pwd
/home/olej/chromium/src
Код: Выделить всё
olej@nvidia ~/chromium/src $ ./build/install-build-deps.sh
ERROR: Only Ubuntu 12.04 (precise), 14.04 (trusty), 14.10 (utopic) and 15.04 (vivid) are currently supported
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: Chromium - сборка и модификация
Mint 17.1, для которого пакетной базой является Ubuntu 14.04 - им не подходит!Olej писал(а): И тут нас ожидает 1-й сюрприз:
Хотя в инструкции они расписывают:
Интересно, что должны думать ... пользователи RedHat ... GentooIf you're on Linux:
Т.е., они абсолютно отождествялют Linux с Ubuntu !
Нет, ребята, с такими подходами ... в жопу.
Очень странен уровень сборщиков исходников Chromium, когда они зашивают в скрипты конкретный дистрибутив и даже версии!!!
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: Chromium - сборка и модификация
Нахожу ./build/install-build-deps.sh и тупо правлю (некогда мне разбираться), стр.77:Olej писал(а): Далее переходим в подкаталог ./src полученного исходника (о чем в инструкции не сказано)...
Код: Выделить всё
ubuntu_codenames="(precise|trusty|utopic|vivid|rebecca)"
Код: Выделить всё
olej@nvidia ~/chromium/src $ ./build/install-build-deps.sh
Running as non-root user.
You might have to enter your password one or more times for 'sudo'.
This script installs all tools and libraries needed to build Chromium.
...
Код: Выделить всё
...
It produces the following output:
Чтение списков пакетов… Готово
Построение дерева зависимостей
Чтение информации о состоянии… Готово
E: Не удалось найти пакет lib32ncurses5-dev
E: Не удалось найти пакет lib32z1-dev
E: Не удалось найти пакет libstdc++6-4.9-dbg
E: Не удалось найти пакет по регулярному выражению «libstdc++6-4.9-dbg»
You will have to install the above packages yourself.
Или просто мозгами двинулись ...
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: Chromium - сборка и модификация
По идее, это настройка инсталляции на окружение, то что в autoconf делается ./configure ...Run post-sync hooks
Finally, runhooks to run any post-sync scriptsКод: Выделить всё
$ gclient runhooks
Все пакеты установлены, и делаем привязку к ним...
Код: Выделить всё
olej@nvidia ~/chromium/src $ gclient runhooks
________ running '/usr/bin/python src/build/landmines.py' in '/home/olej/chromium'
________ running '/usr/bin/python src/build/download_nacl_toolchains.py --mode nacl_core_sdk sync --extract' in '/home/olej/chromium'
INFO: --Syncing arm_trusted to revision 9f62c3ead52424e10ebd520213a8f36e02b84377--
...
________ running '/usr/bin/python src/build/gyp_chromium' in '/home/olej/chromium'
Updating projects from gyp files...
/bin/sh: 1: cups-config: not found
gyp: Call to 'cups-config --api-version' returned exit status 127 while in /home/olej/chromium/src/printing/printing.gyp.
Package libpulse was not found in the pkg-config search path.
Perhaps you should add the directory containing `libpulse.pc'
to the PKG_CONFIG_PATH environment variable
No package 'libpulse' found
gyp: Call to 'pkg-config --cflags libpulse' returned exit status 1 while in /home/olej/chromium/src/media/media.gyp.
Package xtst was not found in the pkg-config search path.
Perhaps you should add the directory containing `xtst.pc'
to the PKG_CONFIG_PATH environment variable
No package 'xtst' found
gyp: Call to 'pkg-config --cflags xtst' returned exit status 1 while in /home/olej/chromium/src/build/linux/system.gyp.
Error: Command '/usr/bin/python src/build/gyp_chromium' returned non-zero exit status 1 in /home/olej/chromium
Hook '/usr/bin/python src/build/gyp_chromium' took 32.27 secs
Как бы там ни было, понятно из сообщений, что не установлены 3 пакета ... с ними легко разобраться:
Код: Выделить всё
olej@nvidia ~/VirtualBox VMs $ apt-file search cups-config
cups-server-common: /usr/share/cups/doc-root/help/man-cups-config.html
fvwm-crystal: /usr/share/fvwm-crystal/fvwm/Applications/Settings/Printing/~cups-config~Cups-Config
libcups2-dev: /usr/bin/cups-config
libcups2-dev: /usr/share/man/man1/cups-config.1.gz
olej@nvidia ~/VirtualBox VMs $ apt install libcups2-dev
...
Processing triggers for libc-bin (2.19-0ubuntu6.6) ...
olej@nvidia ~/VirtualBox VMs $ cups-config --api-version
1.6
Код: Выделить всё
olej@nvidia ~/VirtualBox VMs $ apt search libpulse
p libpulse-dev - PulseAudio client development headers and
i libpulse-mainloop-glib0 - PulseAudio client libraries (glib support)
p libpulse-mainloop-glib0-dbg - PulseAudio client libraries (glib support)
p libpulse-ocaml - OCaml interface to the PulseAudio sound se
v libpulse-ocaml-23zn2 -
p libpulse-ocaml-dev - OCaml interface to the pulseaudio library
v libpulse-ocaml-dev-23zn2 -
i libpulse0 - PulseAudio client libraries
p libpulse0-dbg - PulseAudio client libraries (debugging sym
i libpulsedsp - PulseAudio OSS pre-load library
p libpulsedsp-dbg - PulseAudio OSS pre-load library (debugging
olej@nvidia ~/VirtualBox VMs $ apt install libpulse-dev
...
Настраивается пакет libpulse-dev:i386 (1:4.0-0ubuntu11.1) …
olej@nvidia ~/Chromium $ pkg-config --cflags libpulse
-D_REENTRANT
Код: Выделить всё
olej@nvidia ~/VirtualBox VMs $ apt search xtst
p libxtst-dev - X11 Record extension library (development
p libxtst-doc - X11 Record extension library (documentatio
i libxtst6 - X11 Testing -- Record extension library
p libxtst6-dbg - X11 Record extension library (debug packag
olej@nvidia ~/VirtualBox VMs $ apt install libxtst-dev
...
Настраивается пакет libxtst-dev:i386 (2:1.2.2-1) …
olej@nvidia ~/VirtualBox VMs $ pkg-config --cflags xtst
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: Chromium - сборка и модификация
Таким же путём последовательных приближений, выясняем по 2-3 недостающих пакета при очередном запуске:Olej писал(а):Для поиск нужных пакетов приходится проявлять определённую изобретательность...
Код: Выделить всё
olej@nvidia ~/chromium/src $ gclient runhooks
...
Код: Выделить всё
olej@nvidia ~/VirtualBox VMs $ apt search libpci
p libpci-dev - Linux PCI Utilities (development files)
v libpci2 -
i libpci3 - утилиты для работы с PCI (динамически загр
p libpciaccess-dev - Generic PCI access library for X - develop
i libpciaccess0 - Generic PCI access library for X
olej@nvidia ~/VirtualBox VMs $ apt install libpci-dev
...
olej@nvidia ~/VirtualBox VMs $ pkg-config --libs-only-l libpci
-lpci
Код: Выделить всё
olej@nvidia ~/VirtualBox VMs $ apt search libexif
p libexif-dev - библиотека для получения метаданных EXIF и
p libexif-gtk-dev - Library providing GTK+ widgets to display/
p libexif-gtk5 - Library providing GTK+ widgets to display/
i libexif12 - библиотека для получения метаданных EXIF и
olej@nvidia ~/VirtualBox VMs $ apt install libexif-dev
...
olej@nvidia ~/VirtualBox VMs $ pkg-config --cflags libexif
-I/usr/include/libexif
Код: Выделить всё
olej@nvidia ~/VirtualBox VMs $ apt-file search gconf-2.0.pc
libgconf2-dev: /usr/lib/i386-linux-gnu/pkgconfig/gconf-2.0.pc
olej@nvidia ~/VirtualBox VMs $ apt install libgconf2-dev
...
olej@nvidia ~/VirtualBox VMs $ pkg-config --cflags gconf-2.0
-pthread -I/usr/include/gconf/2 -I/usr/include/dbus-1.0 -I/usr/lib/i386-linux-gnu/dbus-1.0/include -I/usr/include/glib-2.0 -I/usr/lib/i386-linux-gnu/glib-2.0/include
Код: Выделить всё
olej@nvidia ~/VirtualBox VMs $ apt-file search gnome-keyring-1
libgnome-keyring-dev: /usr/include/gnome-keyring-1/gnome-keyring-memory.h
libgnome-keyring-dev: /usr/include/gnome-keyring-1/gnome-keyring-result.h
libgnome-keyring-dev: /usr/include/gnome-keyring-1/gnome-keyring.h
libgnome-keyring-dev: /usr/lib/i386-linux-gnu/pkgconfig/gnome-keyring-1.pc
libgnome-keyring-dev: /usr/share/vala/vapi/gnome-keyring-1.vapi
valac-0.14: /usr/share/vala-0.14/vapi/gnome-keyring-1.vapi
valac-0.16-vapi: /usr/share/vala-0.16/vapi/gnome-keyring-1.vapi
valac-0.18-vapi: /usr/share/vala-0.18/vapi/gnome-keyring-1.vapi
valac-0.20-vapi: /usr/share/vala-0.20/vapi/gnome-keyring-1.vapi
valac-0.22-vapi: /usr/share/vala-0.22/vapi/gnome-keyring-1.vapi
olej@nvidia ~/VirtualBox VMs $ apt install libgnome-keyring-dev
...
olej@nvidia ~/VirtualBox VMs $ pkg-config --cflags gnome-keyring-1
-I/usr/include/gnome-keyring-1 -I/usr/include/glib-2.0 -I/usr/lib/i386-linux-gnu/glib-2.0/include
Код: Выделить всё
olej@nvidia ~/VirtualBox VMs $ apt-file search nss.pc
libnss3-dev: /usr/lib/i386-linux-gnu/pkgconfig/nss.pc
libnss3-dev: /usr/lib/i386-linux-gnu/pkgconfig/xulrunner-nss.pc
libpathfinder-dev: /usr/include/pathfinder-1/pathfinder-nss.pc
libxmlsec1-dev: /usr/lib/pkgconfig/xmlsec1-nss.pc
olej@nvidia ~/VirtualBox VMs $ apt install libnss3-dev
...
olej@nvidia ~/VirtualBox VMs $ pkg-config --cflags nss
-I/usr/include/nss -I/usr/include/nspr
Удивляют меня в этом разработчики Chromium.
И наконец:
Код: Выделить всё
olej@nvidia ~/chromium/src $ gclient runhooks
...
Updating projects from gyp files...
Hook '/usr/bin/python src/build/gyp_chromium' took 82.48 secs
________ running '/usr/bin/python src/tools/check_git_config.py --running-as-hook' in '/home/olej/chromium'
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: Chromium - сборка и модификация
Building Chromium
If you've checked out the code, you should see the following files and folders in the directory where you ran fetch:
.gclient This file (generated by fetch) defines the configuration of your checkout. It contains the location of the repository, as well as some other useful configuration
.gclient_entries This file (also generated by fetch) contains the repository and version information for each of Chromium's sub-repositories (dependencies)
Код: Выделить всё
olej@nvidia ~/chromium $ pwd
/home/olej/chromium
olej@nvidia ~/chromium $ ls -l .gc*
-rw-r--r-- 1 olej olej 208 сент. 3 10:59 .gclient
-rw-r--r-- 1 olej olej 10524 сент. 3 11:33 .gclient_entries
src/ Contains the Chromium codebase (an explanation of the directory structure)
out/ Contains the generated output from builds
Debug/ One of the default build folders; builds the debug build
Release/ One of the default build folders; builds the release build
Код: Выделить всё
olej@nvidia ~/chromium $ ls -l src/out
итого 12
drwxr-xr-x 3 olej olej 4096 сент. 3 19:37 Debug
drwxr-xr-x 20 olej olej 4096 сент. 3 19:37 gypfiles
drwxr-xr-x 3 olej olej 4096 сент. 3 19:37 Release
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 10 гостей