blob: 44a5d9c7e3edeb65a32a97698b9dbb57dbc05322 [file] [log] [blame]
//===--- LinkLibrary.h - A module-level linker dependency -------*- 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_AST_LINKLIBRARY_H
#define SWIFT_AST_LINKLIBRARY_H
#include "swift/Basic/LLVM.h"
#include "llvm/ADT/SmallString.h"
#include <string>
namespace swift {
// Must be kept in sync with diag::error_immediate_mode_missing_library.
enum class LibraryKind {
Library = 0,
Framework
};
/// Represents a linker dependency for an imported module.
// FIXME: This is basically a slightly more generic version of Clang's
// Module::LinkLibrary.
class LinkLibrary {
private:
std::string Name;
unsigned Kind : 1;
unsigned ForceLoad : 1;
public:
LinkLibrary(StringRef N, LibraryKind K, bool forceLoad = false)
: Name(N), Kind(static_cast<unsigned>(K)), ForceLoad(forceLoad) {
assert(getKind() == K && "not enough bits for the kind");
}
LibraryKind getKind() const { return static_cast<LibraryKind>(Kind); }
StringRef getName() const { return Name; }
bool shouldForceLoad() const { return ForceLoad; }
};
} // end namespace swift
#endif