llvm/clang/include/module.modulemap

module Clang_C {
  umbrella "clang-c"
  module * { export * }
}

module Clang_Analysis {
  requires cplusplus
  umbrella "clang/Analysis"

  textual header "clang/Analysis/Analyses/ThreadSafetyOps.def"

  module * { export * }

  // FIXME: Exclude these headers to avoid pulling all of the AST matchers
  // library into clang. Due to inline key functions in the headers,
  // importing the AST matchers library gives a link dependency on the AST
  // matchers (and thus the AST), which clang-format should not have.
  exclude header "clang/Analysis/Analyses/ExprMutationAnalyzer.h"
}

module Clang_AST {
  requires cplusplus
  umbrella "clang/AST"

  textual header "clang/AST/BuiltinTypes.def"
  textual header "clang/AST/CXXRecordDeclDefinitionBits.def"
  textual header "clang/AST/OperationKinds.def"
  textual header "clang/AST/TypeLocNodes.def"

  module * { export * }
}

module Clang_ASTMatchers { requires cplusplus umbrella "clang/ASTMatchers" module * { export * } }

module Clang_Basic {
  requires cplusplus
  umbrella "clang/Basic"

  textual header "clang/Basic/AArch64SVEACLETypes.def"
  textual header "clang/Basic/AMDGPUTypes.def"
  textual header "clang/Basic/BuiltinHeaders.def"
  textual header "clang/Basic/BuiltinsAArch64.def"
  textual header "clang/Basic/BuiltinsAArch64NeonSVEBridge.def"
  textual header "clang/Basic/BuiltinsAArch64NeonSVEBridge_cg.def"
  textual header "clang/Basic/BuiltinsAMDGPU.def"
  textual header "clang/Basic/BuiltinsARM.def"
  textual header "clang/Basic/BuiltinsHexagon.def"
  textual header "clang/Basic/BuiltinsHexagonDep.def"
  textual header "clang/Basic/BuiltinsHexagonMapCustomDep.def"
  textual header "clang/Basic/BuiltinsLoongArch.def"
  textual header "clang/Basic/BuiltinsLoongArchBase.def"
  textual header "clang/Basic/BuiltinsLoongArchLASX.def"
  textual header "clang/Basic/BuiltinsLoongArchLSX.def"
  textual header "clang/Basic/BuiltinsMips.def"
  textual header "clang/Basic/BuiltinsNEON.def"
  textual header "clang/Basic/BuiltinsNVPTX.def"
  textual header "clang/Basic/BuiltinsPPC.def"
  textual header "clang/Basic/BuiltinsRISCVVector.def"
  textual header "clang/Basic/BuiltinsSME.def"
  textual header "clang/Basic/BuiltinsSVE.def"
  textual header "clang/Basic/BuiltinsSystemZ.def"
  textual header "clang/Basic/BuiltinsVE.def"
  textual header "clang/Basic/BuiltinsVEVL.gen.def"
  textual header "clang/Basic/BuiltinsWebAssembly.def"
  textual header "clang/Basic/BuiltinsX86.def"
  textual header "clang/Basic/BuiltinsX86_64.def"
  textual header "clang/Basic/BuiltinsXCore.def"
  textual header "clang/Basic/CodeGenOptions.def"
  textual header "clang/Basic/DebugOptions.def"
  textual header "clang/Basic/DiagnosticOptions.def"
  textual header "clang/Basic/FPOptions.def"
  textual header "clang/Basic/Features.def"
  textual header "clang/Basic/HLSLIntangibleTypes.def"
  textual header "clang/Basic/LangOptions.def"
  textual header "clang/Basic/MSP430Target.def"
  textual header "clang/Basic/OpenACCClauses.def"
  textual header "clang/Basic/OpenCLExtensionTypes.def"
  textual header "clang/Basic/OpenCLExtensions.def"
  textual header "clang/Basic/OpenCLImageTypes.def"
  textual header "clang/Basic/OpenMPKinds.def"
  textual header "clang/Basic/OperatorKinds.def"
  textual header "clang/Basic/PPCTypes.def"
  textual header "clang/Basic/RISCVVTypes.def"
  textual header "clang/Basic/Sanitizers.def"
  textual header "clang/Basic/TargetCXXABI.def"
  textual header "clang/Basic/TargetOSMacros.def"
  textual header "clang/Basic/TokenKinds.def"
  textual header "clang/Basic/TransformTypeTraits.def"
  textual header "clang/Basic/WebAssemblyReferenceTypes.def"

  module * { export * }
}
module Clang_Basic_TokenKinds {
  requires cplusplus

  header "clang/Basic/TokenKinds.h"
  textual header "clang/Basic/TokenKinds.def"

  export *
}

module Clang_CodeGen { requires cplusplus umbrella "clang/CodeGen" module * { export * } }
module Clang_Config { requires cplusplus umbrella "clang/Config" module * { export * } }

// Files for diagnostic groups are spread all over the include/clang/ tree, but
// logically form a single module.
module Clang_Diagnostics {
  requires cplusplus

  module All { header "clang/Basic/AllDiagnostics.h" export * }
  module Analysis { textual header "clang/Analysis/Analyses/UnsafeBufferUsageGadgets.def" }
  module AST { header "clang/AST/ASTDiagnostic.h" export * }
  module Comment { header "clang/AST/CommentDiagnostic.h" export * }
  module Driver { header "clang/Driver/DriverDiagnostic.h" export * }
  module Frontend { header "clang/Frontend/FrontendDiagnostic.h" export * }
  module Lex { header "clang/Lex/LexDiagnostic.h" export * }
  module Parse { header "clang/Parse/ParseDiagnostic.h" export * }
  module Sema { header "clang/Sema/SemaDiagnostic.h" export * }
  module Serialization { header "clang/Serialization/SerializationDiagnostic.h" export * }
  module Refactoring { header "clang/Tooling/Refactoring/RefactoringDiagnostic.h" export * }
}

module Clang_Driver {
  requires cplusplus
  umbrella "clang/Driver"

  textual header "clang/Driver/Types.def"

  module * { export * }
}

module Clang_Edit { requires cplusplus umbrella "clang/Edit" module * { export * } }
module Clang_Format { requires cplusplus umbrella "clang/Format" module * { export * } }

module Clang_Frontend {
  requires cplusplus
  umbrella "clang/Frontend"

  textual header "clang/Basic/LangStandards.def"

  module * { export * }
}

module Clang_FrontendTool { requires cplusplus umbrella "clang/FrontendTool" module * { export * } }
module Clang_Index { requires cplusplus umbrella "clang/Index" module * { export * } }
module Clang_Lex { requires cplusplus umbrella "clang/Lex" module * { export * } }
module Clang_Parse { requires cplusplus umbrella "clang/Parse" module * { export * } }
module Clang_Rewrite { requires cplusplus umbrella "clang/Rewrite/Core" module * { export * } }
module Clang_RewriteFrontend { requires cplusplus umbrella "clang/Rewrite/Frontend" module * { export * } }
module Clang_Sema { requires cplusplus umbrella "clang/Sema" module * { export * } }

module Clang_Serialization {
  requires cplusplus
  umbrella "clang/Serialization"

  textual header "clang/Serialization/TypeBitCodes.def"

  module * { export * }
}

module Clang_StaticAnalyzer_Core {
  requires cplusplus
  umbrella "clang/StaticAnalyzer/Core"

  textual header "clang/StaticAnalyzer/Core/Analyses.def"
  textual header "clang/StaticAnalyzer/Core/AnalyzerOptions.def"
  textual header "clang/StaticAnalyzer/Core/PathSensitive/SVals.def"
  textual header "clang/StaticAnalyzer/Core/PathSensitive/Symbols.def"
  textual header "clang/StaticAnalyzer/Core/PathSensitive/Regions.def"

  module * { export * }
}

module Clang_StaticAnalyzer_Checkers {
  requires cplusplus
  umbrella "clang/StaticAnalyzer/Checkers"
  module * { export * }
}

module Clang_StaticAnalyzer_Frontend {
  requires cplusplus
  umbrella "clang/StaticAnalyzer/Frontend"
  module * { export * }
}

module Clang_Testing {
  requires cplusplus
  umbrella "clang/Testing"
  module * { export * }
}

module Clang_Tooling {
  requires cplusplus umbrella "clang/Tooling" module * { export * }
  // FIXME: Exclude these headers to avoid pulling all of the AST matchers
  // library into clang-format. Due to inline key functions in the headers,
  // importing the AST matchers library gives a link dependency on the AST
  // matchers (and thus the AST), which clang-format should not have.
  exclude header "clang/Tooling/RefactoringCallbacks.h"
}

module Clang_ToolingCore {
  requires cplusplus
  umbrella "clang/Tooling/Core" module * { export * }
}

module Clang_ToolingInclusions {
  requires cplusplus
  umbrella "clang/Tooling/Inclusions"
  module * { export * }
}