xref: /OK3568_Linux_fs/yocto/meta-browser/meta-chromium/README.md (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1OpenEmbedded/Yocto BSP layer for Chromium Browsers
2==================================================
3
4This layer provides web browser recipes for use with OpenEmbedded
5and/or Yocto.
6
7This layer depends on:
8
9* URI: git://git.openembedded.org/openembedded-core
10  - branch: master
11  - revision: HEAD
12
13* URI: git://git.openembedded.org/meta-openembedded
14  - layers: meta-oe
15  - branch: master
16  - revision: HEAD
17
18* URI: git://github.com/kraj/meta-clang
19  - branch: master
20  - revision: HEAD
21
22Contributing
23------------
24
25The preferred way to contribute to this layer is to send GitHub pull requests or
26report problems in GitHub's issue tracker.
27
28Alternatively there is the classic way of review on the OpenEmbedded dev mailing
29list openembedded-devel@lists.openembedded.org (you have to be subscribed to
30post to the list). Please cc the maintainers if you send your patches.
31
32Maintainers
33-----------
34* Fabio Berton <fabio.berton@ossystems.com.br>
35* Raphael Kubo da Costa <raphael.kubo.da.costa@intel.com>
36* Khem Raj <raj.khem@gmail.com>
37* Otavio Salvador <otavio@ossystems.com.br>
38* Maksim Sisov <msisov@igalia.com>
39
40When sending single patches, please use something like:
41```
42git send-email -1 -s --to openembedded-devel@lists.openembedded.org --subject-prefix='meta-browser][PATCH'
43```
44
45Recipes
46-------
47recipes-browser/chromium:
48Chromium browser.
49
50This recipe provides a package for the Chromium web browser. It strives to
51always follow the latest stable Linux release as listed in
52https://omahaproxy.appspot.com
53
54We refer to the web browser as Chromium, not Chrome, because "Chrome" is
55Google's version of the web browser with proprietary content on top of the
56open-source Chromium browser.
57
58Compared to a usual, smaller recipe, the Chromium recipe has a few
59peculiarities:
60- We manually patch parts of the build system to replace Chromium's bundled
61  copies of some packages (flac, libjpeg and others) with system-wide ones.
62- Parts of the V8 (Chromium's JavaScript engine) build need to run binaries
63  built for the target, for which we use QEMU.
64
65Build requirements
66------------------
67This recipe requires clang, and GCC is not supported. Upstream Chromium has not
68tested or officially supported GCC for years, so it is safer and easier to
69follow their lead and only support one compiler.
70
71As part of its build process, Chromium builds and runs some binaries on the
72host. clang-native from the meta-clang layer is used to build those binaries.
73
74For building most of the code for your target, a C++14-compliant compiler is
75required. At least clang 7.0.0 (and thus the "thud" branch) is required.
76
77Additionally, make sure the machine being used to build Chromium is powerful
78enough: a x86-64 machine with at least 16GB RAM is recommended.
79
80PACKAGECONFIG knobs
81-------------------
82* component-build: (off by default)
83  Enables component build mode. By default, all of Chromium (with the exception
84  of FFmpeg) is linked into one big binary. The linker step requires at least 8
85  GB RAM. Component mode was created to facilitate development and testing,
86  since with it, there is not one big binary; instead, each component is linked
87  to a separate shared object. Use component mode for development, testing, and
88  in case the build machine is not a 64-bit one, or has less than 8 GB RAM.
89
90* cups: (off by default)
91  Enables CUPS support in Chromium, and adds a dependency on the "cups" recipe.
92
93* custom-libcxx (off by default)
94  Enable vendored version of C++ runtime ( libc++ ) instead of using this from
95  meta-clang provided libc++, this could be useful in some cases, where the
96  binary is to be run on foreign systems which are not built using OE/Yocto
97  base
98
99* gtk4: (off by default)
100  Enables GTK4 runtime support in Chromium by adding --gtk-version=4
101  to the command line. Chromium is still built against GTK3.
102
103* kiosk-mode: (off by default)
104  Enable this option if you want your browser to start up full-screen, without
105  any menu bars, without any clutter, and without any initial start-up
106  indicators.
107
108* proprietary-codecs: (off by default)
109  Enable this option if you want to add support for additional proprietary
110  codecs, most notably MPEG standards (h.264, h.265, MP4, MP3, AAC etc). It is
111  your responsibility to make sure you are complying with the codecs' licensing
112  terms.
113
114* use-egl: (on by default)
115  Without this packageconfig, the Chromium build will use GLX for creating an
116  OpenGL context in X11, and regular OpenGL for painting operations. Neither
117  are desirable on embedded platforms. With this packageconfig, EGL and OpenGL
118  ES 2.x are used instead.
119
120* use-vaapi: (off by default)
121  Enables VA-API support with that allows hardware accelerated media playback on
122  GPUs that support VA-API. If h.264 codec is required, proprietary-codecs must
123  also be enabled. Please note that not all the possible hardware configs are
124  tested and supported.
125
126* upower: (on by default)
127  Chromium expects the presence of `org.freedesktop.UPower` via D-Bus to
128  query battery status. If disabled, there will be warning messages seen on
129  stderr and Battery Status Web API will not work.
130
131Google API keys
132---------------
133Some Chromium features use Google APIs, and to access those APIs either an API
134Key or a set of OAuth 2.0 tokens is required. Setting up API keys is optional.
135
136If you don't do it, the specific APIs using Google services won't work in your
137build, but all other features will run normally.
138
139By default, we build Chromium with invalid keys to avoid the "Google API keys
140are missing" error message in the browser's infobar. If you have your own API
141keys, you need to set the GOOGLE_API_KEY, GOOGLE_DEFAULT_CLIENT_ID and
142GOOGLE_DEFAULT_CLIENT_SECRET appropriately in your local.conf.
143
144For more information, see https://dev.chromium.org/developers/how-tos/api-keys.
145