// SPDX-License-Identifier: GPL-3.0-or-later #ifndef RCC_TOOLING_ARTIFACTSTORE_H #define RCC_TOOLING_ARTIFACTSTORE_H #include "rcc/MIR/MIRDocument.h" #include "rcc/Support/Error.h" #include "rcc/Tooling/BackendManifest.h" #include #include #include #include #include #include namespace rcc { class TargetDescription; namespace tooling { struct CanonicalMIR final { mir::MIRDocument Document; std::string Text; }; struct CacheEntry final { BackendManifest Manifest; std::string InputMIR; std::vector Artifact; std::optional ParsedArtifact; }; struct ReproducerPackage final { BackendManifest Manifest; CanonicalMIR Input; }; [[nodiscard]] Expected parseAndCanonicalizeMIR(std::string SourceName, std::string SourceText, const TargetDescription &Target, const BackendInvocation &Invocation); [[nodiscard]] Expected createBackendManifest(ManifestKind Kind, ArtifactKind Artifact, const BackendInvocation &Invocation, const TargetDescription &Target, std::string_view CanonicalInputMIR, std::optional> ArtifactBytes = std::nullopt, std::vector Diagnostics = {}); [[nodiscard]] Expected storeCacheEntry(const std::filesystem::path &CacheRoot, const BackendManifest &Manifest, std::string_view CanonicalInputMIR, std::span Artifact); [[nodiscard]] Expected loadCacheEntry(const std::filesystem::path &CacheRoot, ArtifactKind Artifact, const BackendInvocation &Invocation, const TargetDescription &Target, std::string_view CanonicalInputMIR); [[nodiscard]] Expected writeReproducer(const std::filesystem::path &PackagePath, const BackendManifest &Manifest, std::string_view CanonicalInputMIR); [[nodiscard]] Expected updateReproducerDiagnostics(const std::filesystem::path &PackagePath, std::vector Diagnostics); [[nodiscard]] Expected loadReproducer(const std::filesystem::path &PackagePath, const TargetDescription &Target); } // namespace tooling } // namespace rcc #endif // RCC_TOOLING_ARTIFACTSTORE_H