-chromium-efl
-==========
+## Introduction
chromium-efl is a Chromium/Blink engine port to tizen/efl platform. The port
implements Chromium/Blink platform APIs.
It also exposes a webview API implementation based on chromium-efl port. It is
supposed to be completely source and binary compatible with EFL-WebKit2.
-Building
-----------
-
-### For Desktop build
-
- $ ./build/build_desktop.sh [-h|--help] [--skip-gyp] [--skip-ninja] [--ccache] [--debug] [--content-shell]
-
-### Requirements For Desktop build
-Base build system : Ubuntu 14.04 LTS 64bit
-Since upgrade EFL version 1.9.5, packages needed to install into build machine is added as below.
-
- $ sudo apt-get install libfribidi-dev libgif-dev libtiff4-dev libgstreamer1.0-dev \
- libsndfile1-dev libxp-dev libmount-dev libblkid-dev libluajit-5.1-dev \
- libgstreamer-plugins-base1.0-dev
-
-### For Emulator(i586) build
-
- $ build/build_emulator.sh [--clean] [--define '_debug_mode 1'] [--define '_skip_gyp 1'] [--define 'nodebug 1'] [--define '_enable_content_shell 1']
- [--ccache]
-
- [--define '_debug_mode 1'] excute debug build (default : release)
- [--define '_skip_gyp 1'] skip gyp generate (default : gyp generate)
- [--define 'nodebug 1'] omit creation of debug packages (default: build debug packages too)
- Note: To let binaries to be recreated without debug symbols, this should be
- preceded by removing build directory.
- [--ccache] see ### Using ccache inside gbs
-
-### For Mobile build
-Before Tizen build You need to install GBS.
-Please refer to (https://developer.tizen.org/help/index.jsp?topic=%2Forg.tizen.
-platform.development%2Fhtml%2Fplatform_dev_env%2Fgit_build_system.htm)
-
- $ build/build_mobile.sh [--clean] [--define '_debug_mode 1'] [--define '_skip_gyp 1'] [--define 'nodebug 1'] [--define '_enable_content_shell 1']
- [--ccache]
-
- [--define '_debug_mode 1'] excute debug build (default : release)
- [--define '_skip_gyp 1'] skip gyp generate (default : gyp generate)
- [--define 'nodebug 1'] omit creation of debug packages (default: build debug packages too)
- Note: To let binaries to be recreated without debug symbols, this should be
- preceded by removing build directory.
- [--ccache] see ### Using ccache inside gbs
- [-P tizenmb_v2.3] trigger tizen v2.3 build (default)
-
-
-### Deploy Mobile build
-The mobile profile currently supported is based on Tizen 2.3, where GCC 4.6 and the respective compatible libraries
-are available.
-However for dev/master development, where we biweekly rebase against chromium.org, a newer compiler version is
-required (namely GCC 4.8 or Clang). To accommodate this, GBS-based mobile builds pull in a extra supplement repository
-that provides GCC 4.8 and compatible run/buildtime libraries. Upon a success build, these binaries have to be deployed
-into the target. It is done by executing the following script once upon a device flash (with 'sdb root on' toggled):
-
- $ build/deploy_libc_to_target.sh
-
-### For TV build
-Before Tizen build You need to install GBS.
-Please refer to (https://developer.tizen.org/help/index.jsp?topic=%2Forg.tizen.
-platform.development%2Fhtml%2Fplatform_dev_env%2Fgit_build_system.htm)
-
- $ build/build_tv.sh [--clean] [--define '_debug_mode 1'] [--define '_skip_gyp 1'] [--define 'nodebug 1']
- [--ccache]
-
- [--define '_debug_mode 1'] excute debug build (default : release)
- [--define '_skip_gyp 1'] skip gyp generate (default : gyp generate)
- [--define 'nodebug 1'] omit creation of debug packages (default: build debug packages too)
- Note: To let binaries to be recreated without debug symbols, this should be
- preceded by removing build directory.
- [--ccache] see ### Using ccache inside gbs
-
-
-### Using ccache inside gbs
-To use ccache for faster full builds use --ccache parameter:
-gbs build --ccache ...
-
-Prerequisites:
-* 10GB free space
-
-ccache directory will be created with profile and architecture prefix e.g:
-out.mobile.arm.ccache
-
-
-### Requirements for Media Element
-You need to install GStreamer packages from tizenrepo.
- package location : http://10.251.52.177/tizenrepo/jpn-dcm/Redwood8974JPNDCM_20131218.006/repos/slp-release/armv7l/packages/armv7l/
- shell script location : http://10.251.52.177/tizenrepo/release/common/
-
-1. Download 3 shell script files to your local folder.
- $ mkdir temp
- $ cd temp
- $ wget http://10.251.52.177/tizenrepo/release/common/1_get_gstreamer_packages.sh
- $ wget http://10.251.52.177/tizenrepo/release/common/2_push_gstreamer_packages_to_target.sh
- $ wget http://10.251.52.177/tizenrepo/release/common/3_install_gstreamer_packages.sh
-
-2. Excute script 1 to download GStreamer packages.
- $ ./1_get_gstreamer_packages.sh
-
-3. Excute script 2 to push packages to target device.
- $ ./2_push_gstreamer_packages_to_target.sh [TARGET_DIR: default is /opt/usr/]
-
-4. Excute script 3 on sdb shell to install packages on target.
- $ sdb root on
- $ sdb shell
- # cd [TARGET_DIR]
- # ./3_install_gstreamer_packages.sh
-
-Coding style
------------
+## Details
+
+1. gclient pulls chromium-efl into "src/tizen_src".
+2. The it runs 3 custom hooks in order to get the rest of the source:
+
+```
+* fetch-src-blink: src/tizen_src/sync_repos.sh is called and
+ pulls in src and src/third_party/WebKit from a pre-defined locations.
+* generate-gclient-xwalk: .gclient-xwalk is created by running
+ src/tizen_src/scripts/xwalkgenerate_gclient-xwalk.py (this is a fork
+ of the same script in xwalk repository).
+* fetch-deps: actually fetches all depedencies in .gclient-xwalk.
+```
+
+## Procedure
+
+1. create .gclient file (as below)
+
+```
+solutions = [
+ { "name" : "src/tizen_src",
+ "url" : "git@github.com:crosswalk-project/chromium-efl.git@efl/crosswalk-10/39.0.2171.19",
+ "managed" : True,
+ "custom_hooks": [
+ {
+ # fetch custom src and blink repositories.
+ "name": "fetch-src-blink",
+ "pattern": ".",
+ "action": ["src/tizen_src/sync_repos.sh"],
+ },
+ {
+ # Generate .gclient-xwalk for Crosswalk's dependencies.
+ "name": "generate-gclient-xwalk",
+ "pattern": ".",
+ "action": ["python", "src/tizen_src/scripts/xwalk/generate_gclient-xwalk.py"],
+ },
+ {
+ # Fetch Crosswalk dependencies.
+ "name": "fetch-deps",
+ "pattern": ".",
+ "action": ["python", "src/xwalk/tools/fetch_deps.py", "-v"],
+ },
+ {
+ # At some point, we will integrate to gyp_xwalk. Not now...
+ "name": "gyp-xwalk",
+ }
+ ],
+ "safesync_url": "",
+ },
+]
+cache_dir = None
+```
+
+2. gclient sync
+
+## Building
+
+* For Desktop build
+
+ $ ./build/build_desktop.sh [-h|--help] [--skip-gyp] [--skip-ninja] [--ccache] [--debug]
+
+## Coding style
Internally we use the chromium coding style: http://www.chromium.org/developers/coding-style.
For public headers we follow efl style.
-Running content shell
------------
-
-### For Desktop build
- $ ./out.x64/{Debug,Release}/content_shell_efl --no-sandbox --use-gl=egl [command line flags]
-
-Full list of chromium command line switches can be found at: http://peter.sh/experiments/chromium-co
-mmand-line-switches/
-
-Testing
------------
-
-### Layout tests - Desktop
-Chromium unit tests need functional content_shell app. Before trying to run them make sure content_s
-hell
-is compiled and working.
-
-More information about chromium layout tests can be found at: http://www.chromium.org/developers/tes
-ting/webkit-layout-tests
-
-1. Install necessary dependencies. On some ubuntu boxes this can be done running the following scrip
-t:
- $ ./src/build/install-build-deps.sh
-2. Execute webkit test runner:
- $ ./scripts/run-layout-tests <optional arguments>
-
-run-layout-tests script can take multiple extra parameters. The ones listed above are required to ru
-n tests in release
-mode on Ubuntu. Some other useful switches include:
- --debug Run tests on debug build of chromium
- --nocheck-sys-deps Do not check if necessary dependencies have been installed on target system. Useful when not using supported ubuntu version
- --help Display full list of supported command line options
-
-### Crosscompile mobile build
-This is a build mode only for development purposes. It doesn't produce an installable
-rpm package. It might break any time. I warned you! The advantage is that everything
-is built directly on the host and the overhead of gbs is eliminated. Ergo it is fast.
-
-The setup is a bit involved. Let's see. Note that it is quite likely that it will not
-work out-of-box and you have to tailor it to your system.
-
-First you need to have your gbs root directory set up which effectively means you
-should do a gbs mobile build.
-
-Now you need to have corresponding cross compiler. We have sources of cross compiler
-used in gbs so why don't use it? Let's clone tizenbuildtools repo first:
-
- git clone -b master http://gitorious.org/tizenbuildtools/tizenbuildtools.git
- cd tizenbuildtools/tools
-
-Now build binutils and cross compiler.
- ./create_cross_compiler_from_gbs_sysroot \
- -p ~/toolchains/gcc-4.8-mobile/ \
- -s ~/GBS-ROOT-2.3-DEV/local/BUILD-ROOTS/scratch.armv7l.0 \
- -r http://10.251.52.177/tizenrepo/tv_repo/tizen-2.2.1-vd-4.8_20140822.1/repos/base/source
-First parameter (-p) is toolchain prefix. There will land binutils and gcc. Second one is gbs sysroot
-needed to cross compilation. It needs to be prepared (gbs build performed). Third parameter is source
-rpm repository corresponding to binary repository used by gbs(almost always this repository is
-ancestor of repository used by gbs and placed in gbs.conf)
-
-It's recommended to use gold linker. Replace the ld binary in the compiler with gold.
-
- cd ~/toolchains/gcc-4.8-mobile/bin
- cp armv7l-tizen-linux-gnueabi-ld armv7l-tizen-linux-gnueabi-ld.normal
- ln -sf armv7l-tizen-linux-gnueabi-ld.gold armv7l-tizen-linux-gnueabi-ld
-
-Build
- export GBS_ROOT_PATH=~/GBS-ROOT-2.3-DEV
- export PATH=~/toolchains/gcc-4.8-mobile/bin:$PATH
- export CROSS_COMPILE=armv7l-tizen-linux-gnueabi-
- ./build/cross_build_mobile.sh
-
-Before first deployment of cross compiled binaries ensure that you installed rpm on device.
-Rpm will create necessary, initial configuration e.g. smack permissions.
-
-Deploy:
- scripts/deploy2device.sh release -o /home/tolszak/workspace/CT/chromium-efl/out.cross.arm
-
-[Optional] Icecc
-You can use ccache and/or icecc by setting up the cc variables and symlinks appropriately.
-This is more or less what I have done before running build_dekstop.sh to set up both:
-
- cd ~/bin
- TARBALL=$(/usr/lib/icecc/icecc-create-env --gcc /usr/bin/arm-linux-gnueabi-gcc-4.6 /usr/bin/arm-linux-gnueabi-g++-4.6 | tail -n 1)
- mv $TARBALL arm-linux-gnueabi-gcc-4.6.3.tar.gz
- export ICECC_VERSION="$HOME/bin/arm-linux-gnueabi-gcc-4.6.3.tar.gz=arm-linux-gnueabi,$ICECC_VERSION"
- ln -s /usr/bin/arm-linux-gnueabi-gcc-4.6 arm-linux-gnueabi-gcc
- ln -s /usr/bin/arm-linux-gnueabi-gcc-4.6 arm-linux-gnueabi-g++
- export PATH=~/bin:$PATH
-
- cd /usr/lib/ccache
- ln -s ../../bin/ccache arm-linux-gnueabi-gcc
- ln -s ../../bin/ccache arm-linux-gnueabi-g++
- cd /usr/lib/icecc/bin
- ln -s ../../bin/icecc arm-linux-gnueabi-gcc
- ln -s ../../bin/icecc arm-linux-gnueabi-g++
- cd ~/bin
-
- export CC_target=arm-linux-gnueabi-gcc
- export CXX_target=arm-linux-gnueabi-g++
- export CC_host=gcc
- export CXX_host=g++
-[Optional] ccache
- # make symbolic links to your cross compiler
- ln -s ~/toolchains/gcc-4.8-mobile/bin/armv7l-tizen-linux-gnueabi-gcc armv7l-tizen-linux-gnueabi-gcc
- ln -s ~/toolchains/gcc-4.8-mobile/bin/armv7l-tizen-linux-gnueabi-g++ armv7l-tizen-linux-gnueabi-g++
- # add invoke build script with with --ccache parameter
- cd chromium-efl
- ./build/cross_build_mobile.sh --ccache
-
-Now let's set up the phone to be able to run it. We need the nss libraries from
-chromium-ewk/thirdparty to be on the phone under /lib. This might not be very safe
-(break other apps) so be sure you make a backup.
-gconf-2 has to be installed as well. Download the rpm from the tizen repositories
-(that gbs is using also) and install.
-
-It is recommended to use scripts/deploy2device.sh to install binaries on device.
+## License
+
+Chromium-efl's code uses the BSD license, see our `LICENSE` file.