// Copyright 2025 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef TOOLS_GN_NINJA_MODULE_WRITER_UTIL_H_
#define TOOLS_GN_NINJA_MODULE_WRITER_UTIL_H_

#include <string>
#include <vector>

#include "gn/output_file.h"

class ResolvedTargetData;
class SourceFile;
class Target;

struct ClangModuleDep {
  ClangModuleDep(const SourceFile* modulemap,
                 const std::string& module_name,
                 const OutputFile& pcm,
                 bool is_self);

  // The input module.modulemap source file.
  const SourceFile* modulemap;

  // The internal module name.
  std::string module_name;

  // The compiled version of the module.
  OutputFile pcm;

  // Is this the module for the current target.
  bool is_self;
};

// Gathers information about all module dependencies for a given target.
std::vector<ClangModuleDep> GetModuleDepsInformation(
    const Target* target,
    const ResolvedTargetData& resolved);

#endif  // TOOLS_GN_NINJA_MODULE_WRITER_UTIL_H_
