haikuwebkit/README.markdown

238 lines
10 KiB
Markdown
Raw Permalink Normal View History

# Haiku WebKit #
This repository contains the Haiku WebKit port source code.
For more information, please visit the [project's wiki and issue tracker](http://dev.haiku-os.org/)
## Quick build instructions ##
### Cloning the repository ###
This repository is *huge* (about 5 gigabytes). If you are only interested in building
the latest version of WebKit, remember to use the --depth option to git clone.
This can be used to download only a limited part of the history and will reduce the
checkout to about 600MB. Note that WebKit uses SVN and they have the changelog inside the tree in "Changelog"
files, which you can still use as a primitive way to browse the history. You
can also use github for that, or download parts of the history later.
### Requirements ###
- A recent version of Haiku (beta2 is too old, it lacks at least madvise() and support for compositing draw operations)
- The GCC8 development tools
- The dependencies as listed below
- At least about 2G of RAM
- Preferably a fast computer!
Dependencies can be installed (for a gcc2hybrid version) via:
$ pkgman install cmake_x86 gcc_x86 gperf haiku_x86_devel \
libjpeg_turbo_x86_devel sqlite_x86_devel libpng16_x86_devel \
libxml2_x86_devel libxslt_x86_devel icu66_x86_devel perl python \
ruby_x86 libexecinfo_x86_devel libwebp_x86_devel ninja_x86 \
pkgconfig_x86 pywebsocket gnutls_x86 gnutls_x86_devel
Additionally if you want to run the tests:
$ pkgman install php_x86 lighttpd_x86
##### NOTE :
If you get an _Ruby missng error_ even after you have installed ruby, similar to <br>
`Could NOT find Ruby (missing: RUBY_INCLUDE_DIR RUBY_LIBRARY RUBY_CONFIG_INCLUDE_DIR) (found suitable version "2.2.0", minimum required is "1.9")`, you can skip that.
Packages for other flavors of Haiku may or may not be available. Use [haikuporter](http://haikuports.org) to build them if needed.
### Building WebKit ###
#### Configuring your build for the first time ####
Commands to run from the webkit checkout directory:
On a gcc2hybrid (32bit) Haiku:
$ PKG_CONFIG_LIBDIR=/boot/system/develop/lib/x86/pkgconfig \
CC=gcc-x86 CXX=g++-x86 Tools/Scripts/build-webkit \
--cmakeargs="-DCMAKE_AR=/bin/ar-x86 -DCMAKE_RANLIB=/bin/ranlib-x86" --haiku
On other versions:
$ Tools/Scripts/build-webkit --haiku
#### Regular build, once configured ####
$ cd WebKitBuild/Release
$ ninja
This will build a release version of WebKit libraries on a quad core cpu.
On a successful build, executables and libraries are generated in the WebKitBuild/Release directory.
### Advanced Build, other targets ###
The following make targets are available:
- libwtf.so - WebKit Template Framework (a complement of the STL used in WebKit)
- libjavascriptcore.so - The JavaScript interpreter
- jsc - The JavaScript executable shell
- libwebcore.so - The WebCore library (cross-platform WebKit code)
- libwebkitlegacy.so - The Haiku specific parts of WebKit
- HaikuLauncher - A simple browsing test app
- DumpRenderTree - The tree parsing test tool
Example given, this will build the JavaScriptCore library:
$ ninja libjavascriptcore.so
In some rare cases the build system can be confused, to be sure that everything gets rebuilt from scratch,
you can remove the WebKitBuild/ directory and start over.
There are several cmake variables available to configure the build in various ways.
These can be given to build-webkit using the --cmakeargs option, or changed later on
using "cmake -Dvar=value WebKitBuild/Release".
### Speeding up the build with distcc ###
You can set the compiler while calling the configure script:
$ CC="distcc gcc-x86" CXX="distcc g++-x86" build-webkit ...
It is a good idea to set the NUMBER\_OF\_PROCESSORS environment variable as well
(this will be given to cmake through the -j option). If you don't set it, only
the local CPUs will be counted, leading to a sub-optimal distcc distribution.
distcc will look for a compiler named gcc-x86 and g++-x86. You'll need to adjust
the path on the slaves to get that pointing to the gcc8 version (the gcc8 compiler
is already visible under this name on the local machine and haiku slaves).
CMake usually tries to resolve the compiler to an absolute path on the first
time it is called, but this doesn't work when the compiler is called through
distcc.
## Testing ##
### Testing the test framework ###
$ ruby Tools/Scripts/test-webkitruby
$ perl Tools/Scripts/test-webkitperl
$ python Tools/Scripts/test-webkitpy
The ruby tests pass (all 2 of them!)
The perl test almost pass: Failed 1/27 test programs. 1/482 subtests failed.
The python tests hit some errors related to file locking, tracked in #13795, as
well as some other issues.
### JSC ###
$ perl Tools/Scripts/run-javascriptcore-tests
Add the --no-build argument if you already compiled JSC. It is built by default
for the Haiku port, so it is a good idea to always add this.
Current results:
- 9258 tests are run (some are excluded because of missing features in our Ruby port)
- 10 failures related to parsing dates and trigonometry:
mozilla-tests.yaml/ecma_3/Date/15.9.5.6.js.mozilla
mozilla-tests.yaml/ecma_3/Date/15.9.5.6.js.mozilla-baseline
mozilla-tests.yaml/ecma_3/Date/15.9.5.6.js.mozilla-dfg-eager-no-cjit-validate-phases
mozilla-tests.yaml/ecma_3/Date/15.9.5.6.js.mozilla-llint
stress/ftl-arithcos.js.always-trigger-copy-phase
stress/ftl-arithcos.js.default
stress/ftl-arithcos.js.dfg-eager
stress/ftl-arithcos.js.dfg-eager-no-cjit-validate
stress/ftl-arithcos.js.no-cjit-validate-phases
stress/ftl-arithcos.js.no-llint
### WebKit ###
You will have to install the Ahem font for layout tests to work properly. This
is a font with known-size glyphs that render the same on all platforms. Most of
the characters look like black squares, this is expected and not a bug!
http://www.w3.org/Style/CSS/Test/Fonts/Ahem/
$ cp LayoutTests/resources/Ahem.ttf /system/non-packaged/data/fonts/
It is also a good idea to enable automated debug reports for DumpRenderTree.
Create the file ~/config/settings/system/debug\_server/settings and add:
executable_actions {
DumpRenderTree log
}
The crash reports will be moved from the Desktop to the test result directory
and renamed to the name of the test that triggered the crash. If you don't do
this, you have to manually click the "save report" button, and while the
testsuite waits on that, it may mark one or several tests as "timed out".
WebKit also needs an HTTP server for some of the tests, with CGI support for
PHP, Perl, and a few others. You can use the --no-http option to
run-webkit-tests to skip this part. Otherwise you need to install lighttpd
and PHP (both available in HaikuPorts package depot).
Finally, the tests are a mix of html and xhtml files. The file:// loader in
Haiku relies on MIME sniffing to tell them apart. This is not completely
reliable, so for some tests the type needs to be forced (unfortunately this
can't be stored in the git repo):
$ sh Tools/haiku/mimefix.sh
You can then run the testsuite:
$ python Tools/Scripts/run-webkit-tests --platform=haiku --dump-render-tree --no-build \
--no-retry-failures --clobber-old-results --no-new-test-results
The options will prevent the script to try updating DumpRenderTree (it doesn't
know how to do that on Haiku, yet). It doesn't retry failed tests, will remove
previous results before starting, and will not generate missing "expected" files
in the LayoutTests directory.
A lot of tests are currently failing. The problems are either in the WebKit
code itself, or in the various parts of the test harness, none of which are
actually complete: DumpRenderTree, webkitpy, etc. Some of them are triggering
asserts in WebKit code.
You can run the tests manually using either DumpRenderTree or HaikuLauncher
(both accept an URL from the command line). For tests that require the page to
be served over http (and not directly read from a file), you need an HTTP server.
Install the lighttpd package and run:
Tools/Scripts/new-run-webkit-httpd --server start
This will start lighttpd with the appropriate setting file, allowing you to run
the tests. The server listens on port 8000 by default.
### WebKit2 ###
Same as above, but:
$ python Tools/Scripts/run-webkit-tests --platform=haiku-wk2 --no-build \
--no-retry-failures --clobber-old-results --no-new-test-results
Note that this is currently not working.
### Others ###
There are more tests, but the build-\* scripts must be working before we can run them.
## Status of WebKit2 port ##
The Haiku port currently uses the WebKitLegacy API. Eventually we should move to
WebKit2 (simply called WebKit in the sources). WebKit2 splits the web engine into
multiple processes: an user interface, a web process, a network process, etc. This
allows for better sandboxing, and better stability (the user interface will not
crash or freeze when it hits a problematic website).
The work on WebKit2 is found in the GSoC2019 tag. It has not been updated since
and the internals of WebKit have changed a bit. An attempt to rebase it is found
in the webkit2 branch, but it's completely broken. The best thing to do is
probably to enable webkit2 in the current rebased branch, see what breaks, and
cherry-pick the relevant changes from the GSoC2019 tag (and the commit history leading to it).
## Notes ##
cmake is smart enough to detect when a variable has changed and will rebuild everything.
You can keep several generated folders with different settings if you need to switch
between them very often (eg. debug and release builds). Just invoke the build-webkit
script with different settings and different output dirs. You can then run make
(or ninja) from each of these folders.
You can copy a WebPositive binary from your Haiku installation into the
WebKitBuild/Release folder. Launching it will then use the freshly built
libraries instead of the system ones. It is a good idea to test this because
HaikuLauncher doesn't use tabs, which sometimes expose different bugs.
This document was last updated August 13, 2020.
Authors: Maxime Simon, Alexandre Deckner, Adrien Destugues