[webkit-dev] Question for people working on ports

Krzysztof Kowalczyk kkowalczyk at gmail.com
Thu Sep 29 15:11:22 PDT 2005

That's really a compiler thing. On Windows (both for desktop and
pocket pc) Microsoft's compilers support /FI  (Name Forced Include
File) option. To quote

"This option causes the preprocessor to process the specified header
file. This option has the same effect as specifying the file with
double quotes in an #include directive on the first line of every
source file specified on the command line, in the CL environment
variable, or in an command file. If you use multiple /FI options,
files are included in the order they are processed by CL."

So it'll be possible to craft a Makefile that will add "/FIconfig.h"
to every compilation.

On gcc "-include" seems to do the same (according to
http://www.freeos.com/articles/3185/) so the same should be doable on

Symbian, as far as I know, uses gcc as well (at least some versions of
the SDK) so as long as the version of gcc that they use supports a
similar option, it should work as well.

Having said that, in general I'm wary of using tricks like this. C++
compilers don't seem to support them uniformly well. Some of the
javascriptcore code depended on gcc-specific behaviour and required
changes for visual c compatiblity.

On Windows, for example, malloc() is thread-safe by default so unless
there is a measurable speed gain in using the replacement, there's
little value in using something else.

-- kjk

On 9/29/05, Maciej Stachowiak <mjs at apple.com> wrote:
> Hi everyone,
> After recently changing to a threadsafe malloc, I'd like to use it
> for all C++ allocations in WebCore/JavaScriptCore. Darin suggested a
> neat trick for doing this, where we can do a private declaration of
> operator new, so it won't affect outside C++ code:
> #if __GNUC__
> #define PRIVATE_INLINE __private_extern__ inline __attribute__
> ((always_inline))
> #else
> #define PRIVATE_INLINE inline
> #endif
> PRIVATE_INLINE void* operator new(size_t s) { return fastMalloc(s); }
> PRIVATE_INLINE void operator delete(void* p) { fastFree(p); }
> PRIVATE_INLINE void* operator new[](size_t s) { return fastMalloc(s); }
> PRIVATE_INLINE void operator delete[](void* p) { fastFree(p); }
> Note that the operator declarations are inline, so the header that
> contains this must be included in every C++ implementation file (or
> you could get new/delete mismatches which would lead to crashes or
> random memory trashing).
> On Mac OS X, the easiest way to do this is to make sure these
> definitions are included in the per-project prefix header. The Xcode
> build system will tell gcc to make a precompiled header out of this,
> and then automatically pass it as a prefix header to all gcc
> invocations. I don't know if other build systems have anything
> analogous. Another possible alternative is to make sure these
> declarations go in config.h, and then force every source file to
> include it. But that's a little ugly and furthermore hard to
> maintain, since forgetting a config.h include will not lead to a
> build failure but will cause incorrect code to be generated.
> So does anyone have any experience here? I'd like the solution to
> work at least on Linux, Windows and Symbian Series 60.
> Regards,
> Maciej
> _______________________________________________
> webkit-dev mailing list
> webkit-dev at opendarwin.org
> http://www.opendarwin.org/mailman/listinfo/webkit-dev

More information about the webkit-dev mailing list