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