# Windows CE Port of WebKit

WebKit is an open source web browser engine. WebKit WinCE is a project aiming at porting this fabulous engine to Windows CE.

The WinCE port of WebKit currently compiles on Windows.

## Status

WebKit WinCE port is based on the work done by Torch Mobile before they have been acquired by RIM. Their code has beend made public and integrated into WebKit trunk. There is also a Buildslave, which checks if the latest revision compiles for WinCE.

## Getting the Source

Follow the the offical procedures to checkout the source code.

You also need to get the source code of third party libraries:

git clone git://gitorious.org/webkit-thirdparty/webkit-thirdparty.git


If you get a message like "fatal: The remote end hung up unexpectedly" try to use the actual version of msysgit.

## Build

We use CMake as our build system. You don't need a full Cygwin environment like Apple's Windows port, but the following tooles are required:

Please install these tools in a path without spaces (i.e. not in "C:\Program Files")

Make sure that all listed tools are accessible via your PATH. If you have Cygwin's bin directory in your path, make sure that it comes after the paths to the listed tools. You might have to remove it completely from your PATH if you have problems while building.

### Windows CE SDK

Visual Studio 2005 or 2008 (No Express Edition!) with a Windows CE SDK is required to build the binary.

You can find the Windows CE 5.0 Standard SDK at http://www.microsoft.com/downloads/details.aspx?familyid=fa1a3d66-3f61-4ddc-9510-ae450e2318c3. Any other SDK should work too. It has been tested on Windows CE 6.0 but there may not be a public SDK available.

### CMake

Starting with CMake 2.8.11 Windows CE is supported out of the box. Until the release of that version a Nightly Binary of CMake can be used.

### Build WebKit

When you have installed all tools correctly you can generate a Visual Studio Solution out of the CMake files.

mkdir WebKitBuild
cd WebKitBuild
cmake -G "Visual Studio 8 2005 STANDARDSDK_500 (ARMV4I)" -DPORT=WinCE -D3RDPARTY_DIR=/path/to/webkit-thirdparty \path\to\source


ATTENTION: The 3RDPARTY_DIR argument needs slash as separator, while the path to the source needs backslash.

This will generate a WebKit.sln in the WebKitBuild directory from the sourcecode in \path\to\source. You can replace Visual Studio 8 2005 with Visual Studio 9 2008 if you want to generate Visual Studio 2008 projects. It is also possible to select an other Windwos CE SDK when you replace the STANDARDSDK_500 (ARMV4I) with the name of SDK you want to use.

Now you should be able to open the solution and build it. You also can simply type cmake --build . --config Release in your build directory.

The following is an example of the required steps:

C:\>svn checkout http://svn.webkit.org/repository/webkit/trunk WebKit
C:\>git clone git://gitorious.org/webkit-thirdparty/webkit-thirdparty.git
C:\>mkdir WebKitBuild
C:\>cd WebKitBuild
C:\WebKitBuild>cmake -G "Visual Studio 8 2005 STANDARDSDK_500 (ARMV4I)" -DPORT=WinCE -D3RDPARTY_DIR=C:/webkit-thirdparty C:\WebKit
C:\WebKitBuild>cmake --build . --config Release


Additonal information about cross compiling for Windows CE can be found at http://www.cmake.org/Wiki/CMake_Cross_Compiling.

#### Possible Builderrors

Because of the fact that the buildsystem isn't 100% finished you may see one or more of the following errors:

example.h(123) : fatal error C1083: Cannot open include file: 'ExampleNames.h': No such file or directory


This should happen only with the first build, because of some missing dependencies. When you build the solution a second time (wait until the first is finished!) they will be gone.

Creating library...
LIB : warning LNK4068: /MACHINE not specified; defaulting to X86
example.obj : fatal error LNK1112: module machine type 'ARM' conflicts with target machine type 'X86'


To fix this issue open the project properties and navigate to "Configuration Properties" / "Librarian" / "Command Line" and add /MACHINE:ARM into the "Additional options".

example.lib(example.obj) : error LNK2005: "void * __cdecl operator new(unsigned int)" (??2@YAPAXI@Z) already defined in coredll.lib(COREDLL.dll)
example.lib(example.obj) : error LNK2005: "void __cdecl operator delete(void *)" (??3@YAXPAX@Z) already defined in coredll.lib(COREDLL.dll)


If you get tons of this messages you hit http://support.microsoft.com/kb/148652. Moving all windows libraries after the WebKit libraries in "Configuration Properties" / "Linker" / "Additional Dependencies" will solve this problem.

javascriptcore\wtf\hashtraits.h(123) : fatal error C1001: An internal error has occurred in the compiler.
(compiler file 'd:\yzcompiler\compiler\utc\src\P2\main.c[0x10247C8B:0x10247C8B]', line 243)
To work around this problem, try simplifying or changing the program near the locations listed above.
Please choose the Technical Support command on the Visual C++


An internal error has occurred in the compiler. If you have luck removing the stated line will fix the error and compiling the file again works.

Generating ../DerivedSources/DocTypeStrings.cpp
syntax error at .../WebCore/make-hash-tools.pl line 123, near "} continue"
Execution of .../WebCore/make-hash-tools.pl aborted due to compilation errors.


It seams that your make-hash-tools.pl has CRLF line ending. Changing the line endings to LF only should fix this problem.

You may also encounter errors generating chartables.c because of the version of perl that you are using. Some versions of perl have issues with CR/LF. Most win32 versions of perl will work.

## Run

After a successful build you got a WinCELauncher.exe in your build directory. You can run it with the following command:

WinCELauncher.exe http://webkit.org/


#### Possible Runtimeerrors

The file 'WinCELauncher' cannot be opened. Either is is not signed with a trusted certificate or one
of its components cannot be found. If the problem persists, try reinstalling or restoring this file.


If you get this message you probably need to copy additional files to your device. You can open the executable with Dependency Walker (depends.exe) to examine all dependecies. When you are building with Visual Studio 2005 the executable will depend on MSVCR80.DLL; with Visual Studio 2008 it will depend on MSVCR90.DLL.

## Questions and feedback

If you have questions please send an email to the Windows CE WebKit Mailinglist.

Some old code can be found at http://gitorious.org/+wincewebkit-developers/webkit/wincewebkit.