[cfe-dev] [PATCH] [Driver] Add -ivfsoverlay-lib option to load VFS from shared library

Andrew Savonichev via cfe-dev cfe-dev at lists.llvm.org
Mon Jun 4 03:40:16 PDT 2018


Hi Volodymyr,

I'm trying to setup a pre-processing of input files: input source file
contains a region, which is not a valid C code, but external tool can
consume it and replace it with meaningful code. This replacement may
have standard C preprocessor directives (e.g. #include), so the tool
should run before C preprocessor and follow #include directives,
preprocessing #included files as well.

With VFS this is pretty easy to do: you just implement a
FileSystem::openFileForRead function which returns a file after
pre-processing, and Clang calls this function whenever it needs a file.

In general, VFS is similar to Filesystem in Userspace (FUSE): it allows
you to read files from memory instead of a real file system, but it is
more portable than FUSE.

> Hello Andrew,
>
> That is an interesting idea with providing VFS as a shared
> library. Can you please provide more details about what you are trying
> to accomplish with custom VFS? It is hard to judge about merits of the
> approach without knowing the intended usage.
>
> Thanks,
> Volodymyr
>
>> On May 28, 2018, at 04:23, Andrew Savonichev via cfe-dev <cfe-dev at lists.llvm.org> wrote:
>>
>> Hi,
>>
>> Recently I was trying to hijack into clang's file management to do a
>> custom pre-processing of input files, and found that VirtualFileSystem
>> (VFS) is pretty flexible and can be extended to support any weird
>> use-cases related to files: preprocessing, in-memory files, code
>> generation, etc.
>>
>> Unfortunately, it is not exposed from clang driver, and you have to
>> patch clang to add your own custom VFS. Thus I added an option to clang
>> cc1 driver that loads a said shared library, gets a VFS and pushes it on
>> top of real file system.
>>
>> The patch is on the review: https://reviews.llvm.org/D47190
>>
>> Any commets/suggestions are welcome.
>>
>> --
>> Andrew

-- 
Andrew

--------------------------------------------------------------------
Joint Stock Company Intel A/O
Registered legal address: Krylatsky Hills Business Park,
17 Krylatskaya Str., Bldg 4, Moscow 121614,
Russian Federation

This e-mail and any attachments may contain confidential material for
the sole use of the intended recipient(s). Any review or distribution
by others is strictly prohibited. If you are not the intended
recipient, please contact the sender and delete all copies.




More information about the cfe-dev mailing list