aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/TextAPI
diff options
context:
space:
mode:
authorCyndy Ishida <cyndy_ishida@apple.com>2023-12-20 14:56:53 -0800
committerGitHub <noreply@github.com>2023-12-20 14:56:53 -0800
commitc6f29dbb596ff0fd6d8b6445eabbf01f6d063c8c (patch)
treef721aa4c1a7ddb8a2ea1b2884c01a518000b36a2 /llvm/lib/TextAPI
parent8773c9be3d9868288f1f46957945d50ff58e4e91 (diff)
downloadllvm-c6f29dbb596ff0fd6d8b6445eabbf01f6d063c8c.zip
llvm-c6f29dbb596ff0fd6d8b6445eabbf01f6d063c8c.tar.gz
llvm-c6f29dbb596ff0fd6d8b6445eabbf01f6d063c8c.tar.bz2
[readtapi] Setup simple stubify support (#76075)
Stubify broadly takes either tbd files or binary dylibs and turns them into tbd files. In future patches, stubify will also allow additional information to be embedded into the final TBD output too. Add Util APIs to TextAPI for common operations used by readtapi for now.
Diffstat (limited to 'llvm/lib/TextAPI')
-rw-r--r--llvm/lib/TextAPI/CMakeLists.txt1
-rw-r--r--llvm/lib/TextAPI/Utils.cpp40
2 files changed, 41 insertions, 0 deletions
diff --git a/llvm/lib/TextAPI/CMakeLists.txt b/llvm/lib/TextAPI/CMakeLists.txt
index 2017a1ad..2953375 100644
--- a/llvm/lib/TextAPI/CMakeLists.txt
+++ b/llvm/lib/TextAPI/CMakeLists.txt
@@ -13,6 +13,7 @@ add_llvm_component_library(LLVMTextAPI
TextAPIError.cpp
TextStub.cpp
TextStubCommon.cpp
+ Utils.cpp
ADDITIONAL_HEADER_DIRS
"${LLVM_MAIN_INCLUDE_DIR}/llvm/TextAPI"
diff --git a/llvm/lib/TextAPI/Utils.cpp b/llvm/lib/TextAPI/Utils.cpp
new file mode 100644
index 0000000..6d85083
--- /dev/null
+++ b/llvm/lib/TextAPI/Utils.cpp
@@ -0,0 +1,40 @@
+//===- Utils.cpp ----------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+// Implements utility functions for TextAPI Darwin operations.
+//
+//===----------------------------------------------------------------------===//
+
+#include "llvm/TextAPI/Utils.h"
+
+using namespace llvm;
+using namespace llvm::MachO;
+
+void llvm::MachO::replace_extension(SmallVectorImpl<char> &Path,
+ const Twine &Extension) {
+ StringRef P(Path.begin(), Path.size());
+ auto ParentPath = sys::path::parent_path(P);
+ auto Filename = sys::path::filename(P);
+
+ if (!ParentPath.ends_with(Filename.str() + ".framework")) {
+ sys::path::replace_extension(Path, Extension);
+ return;
+ }
+ // Framework dylibs do not have a file extension, in those cases the new
+ // extension is appended. e.g. given Path: "Foo.framework/Foo" and Extension:
+ // "tbd", the result is "Foo.framework/Foo.tbd".
+ SmallString<8> Storage;
+ StringRef Ext = Extension.toStringRef(Storage);
+
+ // Append '.' if needed.
+ if (!Ext.empty() && Ext[0] != '.')
+ Path.push_back('.');
+
+ // Append extension.
+ Path.append(Ext.begin(), Ext.end());
+}