Clang API: any way to use a virtual filesystem ?

I am shipping my app ( with an embedded clang to allow people to write extensions in C++ at run-time.

For that to work I also ship a SDK with all the required headers, libc++, etc… which is downloaded & extracted in some folder.

Problem is: while on my linux dev. machine this operation is fast, apparently on Windows and mac extracting a .zip with a few thousand files takes the better part of a decade - just downloading the makes my Safari get stuck for ten minutes as this idiot tries to extract it itself (see the sdk files there:

My question is: is it possible to hook something in clang to allow it to go look for files inside a virtual file system à la for instance ? This way I would only download the zip, not extract it, and it’d be just opened in ram when needed.

Or does it necessarily go through fopen() for includes right now ?

Kind regards,

I have a tool where I use libclang (the C API). For the internal headers, I've embedded those inside the executable, to avoid the need to ship them separately or have the users to install them.

What I do is for each header file I create a `CXUnsavedFile` [1]. Then I can pass that to `clang_parseTranslationUnit` when parsing the source files.

`CXUnsavedFile` expects the filename and the content of the file. If you can get that, you should be able to use the same approach.

If you're using the C++ API, you can have a look at the implementation of `clang_parseTranslationUnit` to see how to do the same using the C++ API.


Thanks, those are very good starting points ! I’ll try to make it work and report if it does if that can be useful to someone else.

All the best,