<div dir="ltr"><div>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.</div><div><br></div><div>All the best,</div><div>Jean-Michaël<br></div><div><div><div dir="ltr" class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr"><div><br></div><div><font color="#783f04"><br></font></div><div><font size="2" face="arial, helvetica, sans-serif" color="#134f5c">-------</font></div><font size="2" face="arial, helvetica, sans-serif" color="#134f5c">Jean-Michaël Celerier</font><div><font size="2" face="arial, helvetica, sans-serif" color="#134f5c"><a href="http://www.jcelerier.name" target="_blank">http://www.jcelerier.name</a></font></div></div></div></div><br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Mon, Oct 5, 2020 at 6:01 PM Jacob Carlborg via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">On 2020-10-05 09:44, Jean-Michaël Celerier via llvm-dev wrote:<br>
<br>
> My question is: is it possible to hook something in clang to allow it to <br>
> go look for files inside a virtual file system à la <br>
> <a href="https://github.com/yevgeniy-logachev/vfspp" rel="noreferrer" target="_blank">https://github.com/yevgeniy-logachev/vfspp</a> for instance ? This way I <br>
> would only download the zip, not extract it, and it'd be just opened in <br>
> ram when needed.<br>
> Or does it necessarily go through fopen() for includes right now ?<br>
<br>
I have a tool where I use libclang (the C API). For the internal <br>
headers, I've embedded those inside the executable, to avoid the need to <br>
ship them separately or have the users to install them.<br>
<br>
What I do is for each header file I create a `CXUnsavedFile` [1].  Then <br>
I can pass that to `clang_parseTranslationUnit` when parsing the source <br>
files.<br>
<br>
`CXUnsavedFile` expects the filename and the content of the file. If you <br>
can get that, you should be able to use the same approach.<br>
<br>
If you're using the C++ API, you can have a look at the implementation <br>
of `clang_parseTranslationUnit` to see how to do the same using the C++ API.<br>
<br>
[1] <a href="https://clang.llvm.org/doxygen/structCXUnsavedFile.html" rel="noreferrer" target="_blank">https://clang.llvm.org/doxygen/structCXUnsavedFile.html</a><br>
[2] <br>
<a href="https://clang.llvm.org/doxygen/group__CINDEX__TRANSLATION__UNIT.html#ga2baf83f8c3299788234c8bce55e4472e" rel="noreferrer" target="_blank">https://clang.llvm.org/doxygen/group__CINDEX__TRANSLATION__UNIT.html#ga2baf83f8c3299788234c8bce55e4472e</a><br>
<br>
-- <br>
/Jacob Carlborg<br>
<br>
_______________________________________________<br>
LLVM Developers mailing list<br>
<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a><br>
<a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" rel="noreferrer" target="_blank">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a><br>
</blockquote></div>