[webkit-dev] Using JavaScriptCore in Win32

Brian Barnes ggadwa at charter.net
Tue Aug 11 07:12:00 PDT 2009


Oliver Hunt wrote:
>> Dependency walker tells me that the JavaScriptCore.dll depends on
>> CFLite.dll, pthreadvc2.dl, and ICUUC40.dll.  Perhaps these links are
>> not all needed; now that JavaScriptCore is its own DLL, we should be
>> able to get rid of pthreadvc2 (IIRC, the only reason it was kept after
>> the win32 threading work was that a dll target was needed for handling
>> thread shut-down.)
>>
>> I'm not sure if CFLite/CoreFoundation is really needed.  Their
>> inclusion in the header file is no doubt the cause of your compiler
>> problems, but it might just be that the CoreFoundation link library
>> was left in when JavaScriptCore was made a separate DLL.
>>
>> Darin, do you know if CoreFoundation is really needed by
>> JavaScriptCore? Or maybe Olliver would know?
>
> Beyond the requirements of JSStringRef.h (eg. that a few types exist) 
> there should not be any deliberate dependency on CF in JSC for 
> anything other than platform specific behaviour, and a quick scan 
> indicates that all such sites seem to have appropriate ifdef guards.
>
> On non-CF platforms you also only want to include 
> JavaScriptCore/JavaScript.h not JavaScriptCore/JavaScriptCore.h as it 
> is JavaScriptCore.h that brings in the CF APIs.  The only real concern 
> beyond that is to make sure that in builds where you do not want a CF 
> dependency in JSC to ensure that PLATFORM(CF) is false and that 
> JSStringRefCF.cpp is not compiled.
>
> In an ideal world that should Just Work.
>
> --Oliver 
Here's what works so far, and a couple suggestions.  Note that I am 
shifting my engine from SpiderMonkey to JSC, so all I'm concerned with 
right now is the headers compiling, I have a lot of work ahead to remake 
the glue code before I attempt to run it with an actuall DLL/LIB combo.

You need these headers:

JavaScript.h
JSBase.h
JSContextRef.h
JSObjectRef.h
JSStringRef.h
JSValueRef.h
stdbool.h
WebKitAvailability.h

And put this in your headers:

// get rid of it trying to use STDBOOL
#define STDBOOL_WIN32_H

// if not already defined by some other code
typedef unsigned char            bool;
#define true 1
#define false 0

#include <JavaScriptCore/JavaScript.h>

OK, obviously needing stdbool is a problem here as it's meant for 
compiling the DLL, not integrating the DLL.  Maybe check for windows in 
JavaScript.h and put the three defines in there?  I suspect (could be 
wrong, didn't check) that JavaScript.h is a header not used in the DLL 
compile.  Then you could remove stdbool from JSBase (where it's 
referenced.)  Obviously, you guy know this code far better than I would :)

Another slight problem is that I already defined bool and I suspect a 
lot of others will when doing cross platform code, so they are going to 
have to be sure to use the same bool or they'll get a re-def error.

Another thing that's a little obnoxious is that you have to have all you 
.h files in a JavaScriptCore directory because of the OS X naming for 
the headers.  This is not a big deal at all, but could potentially throw 
off some non OS X users.  Not something I'd worry about changing, but 
maybe something noted in a doc somewhere.

This is a really good bit of code for a script engine.  The future is 
javascript embedded in about everything, so the easier it is to compile 
this alone the better :)

[>] Brian


More information about the webkit-dev mailing list