mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
92 lines
3.2 KiB
C++
92 lines
3.2 KiB
C++
//===--- CompilationRecord.h ------------------------------------*- C++ -*-===//
|
|
//
|
|
// This source file is part of the Swift.org open source project
|
|
//
|
|
// Copyright (c) 2014 - 2017 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 SWIFT_DRIVER_COMPILATIONRECORD_H
|
|
#define SWIFT_DRIVER_COMPILATIONRECORD_H
|
|
|
|
#include "swift/Driver/Action.h"
|
|
|
|
namespace swift {
|
|
namespace driver {
|
|
namespace compilation_record {
|
|
|
|
/// Compilation record files (-master.swiftdeps files) are YAML files composed
|
|
/// of these top-level keys.
|
|
enum class TopLevelKey {
|
|
/// The key for the Swift compiler version used to produce the compilation
|
|
/// record.
|
|
Version,
|
|
/// The key for the list of arguments passed to the Swift compiler when
|
|
/// producing the compilation record.
|
|
Options,
|
|
/// The key for the time at which the build that produced the compilation
|
|
/// record started.
|
|
BuildTime,
|
|
/// The key for the list of inputs to the compilation that produced the
|
|
/// compilation record.
|
|
Inputs,
|
|
};
|
|
|
|
/// \returns A string representation of the given key.
|
|
inline static StringRef getName(TopLevelKey Key) {
|
|
switch (Key) {
|
|
case TopLevelKey::Version: return "version";
|
|
case TopLevelKey::Options: return "options";
|
|
case TopLevelKey::BuildTime: return "build_time";
|
|
case TopLevelKey::Inputs: return "inputs";
|
|
}
|
|
|
|
// Work around MSVC warning: not all control paths return a value
|
|
llvm_unreachable("All switch cases are covered");
|
|
}
|
|
|
|
/// \returns The string identifier used to represent the given status in a
|
|
/// compilation record file (.swiftdeps file).
|
|
///
|
|
/// \note Not every InputInfo::Status has a unique identifier. For example,
|
|
/// both NewlyAdded and NeedsCascadingBuild are represented as "!dirty".
|
|
/// Therefore, this will not cleanly round-trip between InputInfo::Status and
|
|
/// string identifiers.
|
|
inline static StringRef
|
|
getIdentifierForInputInfoStatus(CompileJobAction::InputInfo::Status Status) {
|
|
switch (Status) {
|
|
case CompileJobAction::InputInfo::UpToDate:
|
|
return "";
|
|
case CompileJobAction::InputInfo::NewlyAdded:
|
|
case CompileJobAction::InputInfo::NeedsCascadingBuild:
|
|
return "!dirty";
|
|
case CompileJobAction::InputInfo::NeedsNonCascadingBuild:
|
|
return "!private";
|
|
}
|
|
|
|
// Work around MSVC warning: not all control paths return a value
|
|
llvm_unreachable("All switch cases are covered");
|
|
}
|
|
|
|
/// \returns The status corresponding to the string identifier used in a
|
|
/// compilation record file (.swiftdeps file).
|
|
inline static Optional<CompileJobAction::InputInfo::Status>
|
|
getInfoStatusForIdentifier(StringRef Identifier) {
|
|
return llvm::StringSwitch<Optional<
|
|
CompileJobAction::InputInfo::Status>>(Identifier)
|
|
.Case("", CompileJobAction::InputInfo::UpToDate)
|
|
.Case("!dirty", CompileJobAction::InputInfo::NeedsCascadingBuild)
|
|
.Case("!private", CompileJobAction::InputInfo::NeedsNonCascadingBuild)
|
|
.Default(None);
|
|
}
|
|
|
|
} // end namespace compilation_record
|
|
} // end namespace driver
|
|
} // end namespace swift
|
|
|
|
#endif
|