| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- /* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
- file Copyright.txt or https://cmake.org/licensing for details. */
- #pragma once
- #include "cmConfigure.h" // IWYU pragma: keep
- #include <functional>
- #include <map>
- #include <set>
- #include <string>
- #include <vector>
- #include <cm/optional>
- #include <cmext/string_view>
- enum class LookupMethod;
- struct cmScanDepInfo;
- enum class CxxModuleMapFormat
- {
- Clang,
- Gcc,
- Msvc,
- };
- struct CxxBmiLocation
- {
- static CxxBmiLocation Unknown();
- static CxxBmiLocation Private();
- static CxxBmiLocation Known(std::string path);
- bool IsKnown() const;
- bool IsPrivate() const;
- std::string const& Location() const;
- private:
- CxxBmiLocation();
- CxxBmiLocation(std::string path);
- cm::optional<std::string> BmiLocation;
- };
- struct CxxModuleLocations
- {
- // The path from which all relative paths should be computed. If
- // this is relative, it is relative to the compiler's working
- // directory.
- std::string RootDirectory;
- // A function to convert a full path to a path for the generator.
- std::function<std::string(std::string)> PathForGenerator;
- // Lookup the BMI location of a logical module name.
- std::function<CxxBmiLocation(std::string const&)> BmiLocationForModule;
- // Returns the generator path (if known) for the BMI given a
- // logical module name.
- CxxBmiLocation BmiGeneratorPathForModule(
- 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,
- CxxModuleLocations const& loc,
- cmScanDepInfo const& obj,
- CxxModuleUsage const& usages);
|