[clang] [lld] [llvm] Integrated Distributed ThinLTO (DTLTO): Initial support (PR #126654)
Fangrui Song via llvm-commits
llvm-commits at lists.llvm.org
Sun Feb 23 16:02:25 PST 2025
================
@@ -1702,6 +1703,37 @@ static uint8_t getOsAbi(const Triple &t) {
}
}
+// Check if an archive file is a thin archive.
+static bool isThinArchive(Ctx &ctx, StringRef archiveFilePath) {
+ const size_t thinArchiveMagicLen = sizeof(ThinArchiveMagic) - 1;
+
+ ErrorOr<std::unique_ptr<MemoryBuffer>> memBufferOrError =
+ MemoryBuffer::getFileSlice(archiveFilePath, thinArchiveMagicLen, 0);
+ if (std::error_code ec = memBufferOrError.getError()) {
+ ErrAlways(ctx) << "cannot open " << archiveFilePath << ": " << ec.message();
+ return false;
+ }
+
+ MemoryBufferRef memBufRef = *memBufferOrError.get();
+ return memBufRef.getBuffer().starts_with(ThinArchiveMagic);
+}
+
+// Compute a thin archive member full file path.
+static std::string
+computeThinArchiveMemberFullPath(const StringRef modulePath,
----------------
MaskRay wrote:
If two new functions can be combined. Perhaps name the new one `dtltoGetMemberPathIfThinArchive`. What if it a non-thin archive? Shall we create a temporary file?
```
if (!ctx.arg.dtltoDistributor.empty() && !archiveName.empty())
path = dtltoGetMemberPathIfThinArchive(...)
```
https://github.com/llvm/llvm-project/pull/126654
More information about the llvm-commits
mailing list