summaryrefslogtreecommitdiffstats
path: root/clang/tools/libclang/BuildSystem.cpp
diff options
context:
space:
mode:
authorArgyrios Kyrtzidis <akyrtzi@gmail.com>2014-03-03 07:41:45 +0000
committerArgyrios Kyrtzidis <akyrtzi@gmail.com>2014-03-03 07:41:45 +0000
commitd502a10c5ee20dbde8cd793d6609fce69004f56a (patch)
treece224877f70e56c63702c3e020bcf5801c3c97ec /clang/tools/libclang/BuildSystem.cpp
parent6d73f449b833c2af87f61305f2e53ccd4f5d8e81 (diff)
downloadbcm5719-llvm-d502a10c5ee20dbde8cd793d6609fce69004f56a.tar.gz
bcm5719-llvm-d502a10c5ee20dbde8cd793d6609fce69004f56a.zip
[libclang] Introduce APIs that assist in constructing a simple module.map file for a user framework.
rdar://16092858 llvm-svn: 202681
Diffstat (limited to 'clang/tools/libclang/BuildSystem.cpp')
-rw-r--r--clang/tools/libclang/BuildSystem.cpp58
1 files changed, 58 insertions, 0 deletions
diff --git a/clang/tools/libclang/BuildSystem.cpp b/clang/tools/libclang/BuildSystem.cpp
index 5fd95b0a859..ce3762b5be2 100644
--- a/clang/tools/libclang/BuildSystem.cpp
+++ b/clang/tools/libclang/BuildSystem.cpp
@@ -197,3 +197,61 @@ clang_VirtualFileOverlay_writeToBuffer(CXVirtualFileOverlay VFO, unsigned,
void clang_VirtualFileOverlay_dispose(CXVirtualFileOverlay VFO) {
delete VFO;
}
+
+
+struct CXModuleMapDescriptorImpl {
+ std::string ModuleName;
+ std::string UmbrellaHeader;
+};
+
+CXModuleMapDescriptor clang_ModuleMapDescriptor_create(unsigned) {
+ return new CXModuleMapDescriptorImpl();
+}
+
+enum CXErrorCode
+clang_ModuleMapDescriptor_setFrameworkModuleName(CXModuleMapDescriptor MMD,
+ const char *name) {
+ if (!MMD || !name)
+ return CXError_InvalidArguments;
+
+ MMD->ModuleName = name;
+ return CXError_Success;
+}
+
+enum CXErrorCode
+clang_ModuleMapDescriptor_setUmbrellaHeader(CXModuleMapDescriptor MMD,
+ const char *name) {
+ if (!MMD || !name)
+ return CXError_InvalidArguments;
+
+ MMD->UmbrellaHeader = name;
+ return CXError_Success;
+}
+
+enum CXErrorCode
+clang_ModuleMapDescriptor_writeToBuffer(CXModuleMapDescriptor MMD, unsigned,
+ char **out_buffer_ptr,
+ unsigned *out_buffer_size) {
+ if (!MMD || !out_buffer_ptr || !out_buffer_size)
+ return CXError_InvalidArguments;
+
+ llvm::SmallString<256> Buf;
+ llvm::raw_svector_ostream OS(Buf);
+ OS << "framework module " << MMD->ModuleName << " {\n";
+ OS << " umbrella header \"";
+ OS.write_escaped(MMD->UmbrellaHeader) << "\"\n";
+ OS << '\n';
+ OS << " export *\n";
+ OS << " module * { export * }\n";
+ OS << "}\n";
+
+ StringRef Data = OS.str();
+ *out_buffer_ptr = (char*)malloc(Data.size());
+ *out_buffer_size = Data.size();
+ memcpy(*out_buffer_ptr, Data.data(), Data.size());
+ return CXError_Success;
+}
+
+void clang_ModuleMapDescriptor_dispose(CXModuleMapDescriptor MMD) {
+ delete MMD;
+}
OpenPOWER on IntegriCloud