This allows clients to invoke clang without writing anything to disk.
I'm not sure if this is the right design, so I'm sending this patch to
start a discussion about the right way to do this. I'll be happy to make
changes and add tests after talking about the right way to do this!
Motivation:
At Google, we run some Swift source tooling on diskless servers. The
Swift source tooling calls Clang through the ClangImporter
(https://github.com/apple/swift/blob/master/lib/ClangImporter/ClangImporter.cpp).
Clang compiles module to an on-disk module cache, which does not work on
the diskless servers. This patch lets clients ask Clang to write the
module cache to memory.
Current design:
* Adds `class InMemoryOutputFileSystem : public llvm::vfs::FileSystem` that supports write operations backed by memory. After a file is written, its contents are accessible through the `llvm::vfs::FileSystem` interface.
that supports write operations backed by memory. After a file is
written, its contents are accessible through the `llvm::vfs::FileSystem`
interface.
* Adds an `InMemoryOutputFileSystem` field to `CompilerInstance`. When
this field is set, the `CompilerInstance` writes to the
the `InMemoryOutputFileSystem` instead of the real file system.