Files
swift-mirror/lib/AST/FrontendSourceFileDepGraphFactory.h
Steven Wu 09b8af86fb Virtualize swift compiler outputs (#63206)
Using a virutal output backend to capture all the outputs from
swift-frontend invocation. This allows redirecting and/or mirroring
compiler outputs to multiple location using different OutputBackend.

As an example usage for the virtual outputs, teach swift compiler to
check its output determinism by running the compiler invocation
twice and compare the hash of all its outputs.

Virtual output will be used to enable caching in the future.
2023-04-05 23:34:37 +08:00

62 lines
2.0 KiB
C++

//===----- FrontendSourceFileDepGraphFactory.h ------------------*- C++ -*-===//
//
// This source file is part of the Swift.org open source project
//
// Copyright (c) 2014 - 2018 Apple Inc. and the Swift project authors
// Licensed under Apache License v2.0 with Runtime Library Exception
//
// See https://swift.org/LICENSE.txt for license information
// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
//
//===----------------------------------------------------------------------===//
#ifndef FrontendSourceFileDepGraphFactory_h
#define FrontendSourceFileDepGraphFactory_h
#include "swift/AST/AbstractSourceFileDepGraphFactory.h"
#include "llvm/Support/VirtualOutputBackend.h"
namespace swift {
namespace fine_grained_dependencies {
/// Constructs a SourceFileDepGraph from a *real* \c SourceFile
/// Reads the information provided by the frontend and builds the
/// SourceFileDepGraph
class FrontendSourceFileDepGraphFactory
: public AbstractSourceFileDepGraphFactory {
const SourceFile *SF;
const DependencyTracker &depTracker;
public:
FrontendSourceFileDepGraphFactory(const SourceFile *SF,
llvm::vfs::OutputBackend &backend,
StringRef outputPath,
const DependencyTracker &depTracker,
bool alsoEmitDotFile);
~FrontendSourceFileDepGraphFactory() override = default;
private:
void addAllDefinedDecls() override;
void addAllUsedDecls() override;
};
class ModuleDepGraphFactory : public AbstractSourceFileDepGraphFactory {
const ModuleDecl *Mod;
public:
ModuleDepGraphFactory(llvm::vfs::OutputBackend &backend,
const ModuleDecl *Mod, bool emitDot);
~ModuleDepGraphFactory() override = default;
private:
void addAllDefinedDecls() override;
void addAllUsedDecls() override {}
};
} // namespace fine_grained_dependencies
} // namespace swift
#endif /* FrontendSourceFileDepGraphFactory_h */