mirror of
https://github.com/Kitware/CMake.git
synced 2026-01-05 13:20:47 -06:00
cmCxxModuleMapper: track transitive modules for MSVC
MSVC needs the transitive closure of module usage to compile.
This commit is contained in:
@@ -5,12 +5,15 @@
|
||||
#include "cmConfigure.h" // IWYU pragma: keep
|
||||
|
||||
#include <functional>
|
||||
#include <map>
|
||||
#include <set>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
#include <cm/optional>
|
||||
#include <cmext/string_view>
|
||||
|
||||
struct cmScanDepInfo;
|
||||
#include "cmScanDepFormat.h"
|
||||
|
||||
enum class CxxModuleMapFormat
|
||||
{
|
||||
@@ -37,10 +40,42 @@ struct CxxModuleLocations
|
||||
std::string const& logical_name) const;
|
||||
};
|
||||
|
||||
struct CxxModuleReference
|
||||
{
|
||||
// The path to the module file used.
|
||||
std::string Path;
|
||||
// How the module was looked up.
|
||||
LookupMethod Method;
|
||||
};
|
||||
|
||||
struct CxxModuleUsage
|
||||
{
|
||||
// The usage requirements for this object.
|
||||
std::map<std::string, std::set<std::string>> Usage;
|
||||
|
||||
// The references for this object.
|
||||
std::map<std::string, CxxModuleReference> Reference;
|
||||
|
||||
// Add a reference to a module.
|
||||
//
|
||||
// Returns `true` if it matches how it was found previously, `false` if it
|
||||
// conflicts.
|
||||
bool AddReference(std::string const& logical, std::string const& loc,
|
||||
LookupMethod method);
|
||||
};
|
||||
|
||||
// Return the extension to use for a given modulemap format.
|
||||
cm::static_string_view CxxModuleMapExtension(
|
||||
cm::optional<CxxModuleMapFormat> format);
|
||||
|
||||
// Fill in module usage information for internal usages.
|
||||
//
|
||||
// Returns the set of unresolved module usage requirements (these form an
|
||||
// import cycle).
|
||||
std::set<std::string> CxxModuleUsageSeed(
|
||||
CxxModuleLocations const& loc, std::vector<cmScanDepInfo> const& objects,
|
||||
CxxModuleUsage& usages);
|
||||
|
||||
// Return the contents of the module map in the given format for the
|
||||
// object file.
|
||||
std::string CxxModuleMapContent(CxxModuleMapFormat format,
|
||||
|
||||
Reference in New Issue
Block a user