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