Files
swift-mirror/include/swift/Basic/CASOptions.h
Steven Wu cd07d532af [CAS] Use IncludeTreeFileList instead of full CASFS for caching
Use IncludeTreeFileList instead of full feature CASFS for swift
dependency filesystem. This allows smaller CAS based VFS that is smaller
and faster. This is enabled by the CAS enabled compilation does not
need to iterate file system.

rdar://136787368
2024-09-30 16:01:33 -07:00

89 lines
2.7 KiB
C++

//===--- CASOptions.h - CAS & caching options -------------------*- C++ -*-===//
//
// This source file is part of the Swift.org open source project
//
// Copyright (c) 2014 - 2020 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
//
//===----------------------------------------------------------------------===//
//
// This file defines the CASOptions class, which provides various
// CAS and caching flags.
//
//===----------------------------------------------------------------------===//
#ifndef SWIFT_BASIC_CASOPTIONS_H
#define SWIFT_BASIC_CASOPTIONS_H
#include "clang/CAS/CASOptions.h"
#include "llvm/ADT/Hashing.h"
namespace swift {
class CASOptions final {
public:
/// Enable compiler caching.
bool EnableCaching = false;
/// Enable compiler caching remarks.
bool EnableCachingRemarks = false;
/// Skip replaying outputs from cache.
bool CacheSkipReplay = false;
/// CASOptions
clang::CASOptions CASOpts;
/// CASFS Root.
std::vector<std::string> CASFSRootIDs;
/// Clang Include Trees.
std::vector<std::string> ClangIncludeTrees;
/// Clang Include Tree FileList.
std::vector<std::string> ClangIncludeTreeFileList;
/// CacheKey for input file.
std::string InputFileKey;
/// Cache key for imported bridging header.
std::string BridgingHeaderPCHCacheKey;
/// Has immutable file system input.
bool HasImmutableFileSystem = false;
/// Get the CAS configuration flags.
void enumerateCASConfigurationFlags(
llvm::function_ref<void(llvm::StringRef)> Callback) const;
/// Check to see if a CASFileSystem is required.
bool requireCASFS() const {
return EnableCaching &&
(!CASFSRootIDs.empty() || !ClangIncludeTrees.empty() ||
!ClangIncludeTreeFileList.empty() || !InputFileKey.empty() ||
!BridgingHeaderPCHCacheKey.empty());
}
/// Return a hash code of any components from these options that should
/// contribute to a Swift Bridging PCH hash.
llvm::hash_code getPCHHashComponents() const {
// The CASIDs are generated from scanner, thus not part of the hash since
// they will always be empty when requested.
// TODO: Add frozen clang::CASOptions to the hash.
return llvm::hash_combine(EnableCaching);
}
/// Return a hash code of any components from these options that should
/// contribute to a Swift Dependency Scanning hash.
llvm::hash_code getModuleScanningHashComponents() const {
return getPCHHashComponents();
}
};
} // namespace swift
#endif // SWIFT_BASIC_CASOPTIONS_H