xref: /llvm-project/llvm/utils/gn/build/write_library_dependencies.py (revision b71edfaa4ec3c998aadb35255ce2f60bba2940b0)
10ff3cc20SNico Weber#!/usr/bin/env python3
217df195fSNico Weber
317df195fSNico Weberimport argparse
417df195fSNico Weberimport os
517df195fSNico Weberimport re
617df195fSNico Weberimport sys
717df195fSNico Weber
817df195fSNico Weber
917df195fSNico Weber# FIXME: This should get outputs from gn.
1017df195fSNico WeberOUTPUT = """struct AvailableComponent {
1117df195fSNico Weber    /// The name of the component.
1217df195fSNico Weber    const char *Name;
1317df195fSNico Weber
1417df195fSNico Weber    /// The name of the library for this component (or NULL).
1517df195fSNico Weber    const char *Library;
1617df195fSNico Weber
1717df195fSNico Weber    /// Whether the component is installed.
1817df195fSNico Weber    bool IsInstalled;
1917df195fSNico Weber
2017df195fSNico Weber    /// The list of libraries required when linking this component.
21ffaa859bSNico Weber    const char *RequiredLibraries[84];
22ffaa859bSNico Weber  } AvailableComponents[84] = {
2317df195fSNico Weber  { "aggressiveinstcombine", "LLVMAggressiveInstCombine", true, {"analysis", "core", "support", "transformutils"} },
244cf3c35cSNico Weber{ "all", nullptr, true, {"demangle", "support", "tablegen", "core", "fuzzmutate", "filecheck", "interfacestub", "irreader", "codegen", "selectiondag", "asmprinter", "mirparser", "globalisel", "binaryformat", "bitreader", "bitwriter", "bitstreamreader", "dwarflinker", "extensions", "frontendopenmp", "transformutils", "instrumentation", "aggressiveinstcombine", "instcombine", "scalaropts", "ipo", "vectorize", "objcarcopts", "coroutines", "cfguard", "linker", "analysis", "lto", "mc", "mcparser", "mcdisassembler", "mca", "object", "objectyaml", "option", "remarks", "debuginfodwarf", "debuginfogsym", "debuginfomsf", "debuginfocodeview", "debuginfopdb", "symbolize", "executionengine", "interpreter", "jitlink", "mcjit", "orcjit", "orcshared", "orctargetprocess", "runtimedyld", "target", "asmparser", "lineeditor", "profiledata", "coverage", "passes", "textapi", "dlltooldriver", "libdriver", "xray", "windowsmanifest"} },
259194aa88SNico Weber{ "all-targets", nullptr, true, {} },
2617df195fSNico Weber{ "analysis", "LLVMAnalysis", true, {"binaryformat", "core", "object", "profiledata", "support"} },
2717df195fSNico Weber{ "asmparser", "LLVMAsmParser", true, {"binaryformat", "core", "support"} },
2817df195fSNico Weber{ "asmprinter", "LLVMAsmPrinter", true, {"analysis", "binaryformat", "codegen", "core", "debuginfocodeview", "debuginfodwarf", "debuginfomsf", "mc", "mcparser", "remarks", "support", "target"} },
2917df195fSNico Weber{ "binaryformat", "LLVMBinaryFormat", true, {"support"} },
3017df195fSNico Weber{ "bitreader", "LLVMBitReader", true, {"bitstreamreader", "core", "support"} },
3117df195fSNico Weber{ "bitstreamreader", "LLVMBitstreamReader", true, {"support"} },
3217df195fSNico Weber{ "bitwriter", "LLVMBitWriter", true, {"analysis", "core", "mc", "object", "support"} },
3317df195fSNico Weber{ "cfguard", "LLVMCFGuard", true, {"core", "support"} },
3417df195fSNico Weber{ "codegen", "LLVMCodeGen", true, {"analysis", "bitreader", "bitwriter", "core", "mc", "profiledata", "scalaropts", "support", "target", "transformutils"} },
3517df195fSNico Weber{ "core", "LLVMCore", true, {"binaryformat", "remarks", "support"} },
3617df195fSNico Weber{ "coroutines", "LLVMCoroutines", true, {"analysis", "core", "ipo", "scalaropts", "support", "transformutils"} },
3717df195fSNico Weber{ "coverage", "LLVMCoverage", true, {"core", "object", "profiledata", "support"} },
3817df195fSNico Weber{ "debuginfocodeview", "LLVMDebugInfoCodeView", true, {"support", "debuginfomsf"} },
3917df195fSNico Weber{ "debuginfodwarf", "LLVMDebugInfoDWARF", true, {"binaryformat", "object", "mc", "support"} },
4017df195fSNico Weber{ "debuginfogsym", "LLVMDebugInfoGSYM", true, {"mc", "object", "support", "debuginfodwarf"} },
4117df195fSNico Weber{ "debuginfomsf", "LLVMDebugInfoMSF", true, {"support"} },
4217df195fSNico Weber{ "debuginfopdb", "LLVMDebugInfoPDB", true, {"binaryformat", "object", "support", "debuginfocodeview", "debuginfomsf"} },
4317df195fSNico Weber{ "demangle", "LLVMDemangle", true, {} },
4417df195fSNico Weber{ "dlltooldriver", "LLVMDlltoolDriver", true, {"object", "option", "support"} },
4517df195fSNico Weber{ "dwarflinker", "LLVMDWARFLinker", true, {"debuginfodwarf", "asmprinter", "codegen", "mc", "object", "support"} },
4617df195fSNico Weber{ "engine", nullptr, true, {"interpreter"} },
4717df195fSNico Weber{ "executionengine", "LLVMExecutionEngine", true, {"core", "mc", "object", "runtimedyld", "support", "target"} },
4817df195fSNico Weber{ "extensions", "LLVMExtensions", true, {"support"} },
4917df195fSNico Weber{ "filecheck", "LLVMFileCheck", true, {} },
5017df195fSNico Weber{ "frontendopenmp", "LLVMFrontendOpenMP", true, {"core", "support", "transformutils"} },
5117df195fSNico Weber{ "fuzzmutate", "LLVMFuzzMutate", true, {"analysis", "bitreader", "bitwriter", "core", "scalaropts", "support", "target"} },
5217df195fSNico Weber{ "globalisel", "LLVMGlobalISel", true, {"analysis", "codegen", "core", "mc", "selectiondag", "support", "target", "transformutils"} },
5317df195fSNico Weber{ "instcombine", "LLVMInstCombine", true, {"analysis", "core", "support", "transformutils"} },
5417df195fSNico Weber{ "instrumentation", "LLVMInstrumentation", true, {"analysis", "core", "mc", "support", "transformutils", "profiledata"} },
5517df195fSNico Weber{ "interfacestub", "LLVMInterfaceStub", true, {"object", "support"} },
5617df195fSNico Weber{ "interpreter", "LLVMInterpreter", true, {"codegen", "core", "executionengine", "support"} },
5717df195fSNico Weber{ "ipo", "LLVMipo", true, {"aggressiveinstcombine", "analysis", "bitreader", "bitwriter", "core", "frontendopenmp", "instcombine", "irreader", "linker", "object", "profiledata", "scalaropts", "support", "transformutils", "vectorize", "instrumentation"} },
5817df195fSNico Weber{ "irreader", "LLVMIRReader", true, {"asmparser", "bitreader", "core", "support"} },
5917df195fSNico Weber{ "jitlink", "LLVMJITLink", true, {"binaryformat", "object", "orctargetprocess", "support"} },
6017df195fSNico Weber{ "libdriver", "LLVMLibDriver", true, {"binaryformat", "bitreader", "object", "option", "support", "binaryformat", "bitreader", "object", "option", "support"} },
6117df195fSNico Weber{ "lineeditor", "LLVMLineEditor", true, {"support"} },
6217df195fSNico Weber{ "linker", "LLVMLinker", true, {"core", "support", "transformutils"} },
6317df195fSNico Weber{ "lto", "LLVMLTO", true, {"aggressiveinstcombine", "analysis", "binaryformat", "bitreader", "bitwriter", "codegen", "core", "extensions", "ipo", "instcombine", "linker", "mc", "objcarcopts", "object", "passes", "remarks", "scalaropts", "support", "target", "transformutils"} },
6417df195fSNico Weber{ "mc", "LLVMMC", true, {"support", "binaryformat", "debuginfocodeview"} },
6517df195fSNico Weber{ "mca", "LLVMMCA", true, {"mc", "support"} },
6617df195fSNico Weber{ "mcdisassembler", "LLVMMCDisassembler", true, {"mc", "support"} },
6717df195fSNico Weber{ "mcjit", "LLVMMCJIT", true, {"core", "executionengine", "object", "runtimedyld", "support", "target"} },
6817df195fSNico Weber{ "mcparser", "LLVMMCParser", true, {"mc", "support"} },
6917df195fSNico Weber{ "mirparser", "LLVMMIRParser", true, {"asmparser", "binaryformat", "codegen", "core", "mc", "support", "target"} },
709194aa88SNico Weber{ "native", nullptr, true, {} },
719194aa88SNico Weber{ "nativecodegen", nullptr, true, {} },
7217df195fSNico Weber{ "objcarcopts", "LLVMObjCARCOpts", true, {"analysis", "core", "support", "transformutils"} },
7317df195fSNico Weber{ "object", "LLVMObject", true, {"bitreader", "core", "mc", "binaryformat", "mcparser", "support", "textapi"} },
7417df195fSNico Weber{ "objectyaml", "LLVMObjectYAML", true, {"binaryformat", "object", "support", "debuginfocodeview", "mc"} },
7517df195fSNico Weber{ "option", "LLVMOption", true, {"support"} },
7617df195fSNico Weber{ "orcjit", "LLVMOrcJIT", true, {"core", "executionengine", "jitlink", "object", "orcshared", "orctargetprocess", "mc", "passes", "runtimedyld", "support", "target", "transformutils"} },
7717df195fSNico Weber{ "orcshared", "LLVMOrcShared", true, {"support"} },
7817df195fSNico Weber{ "orctargetprocess", "LLVMOrcTargetProcess", true, {"orcshared", "support"} },
794cf3c35cSNico Weber{ "passes", "LLVMPasses", true, {"aggressiveinstcombine", "analysis", "core", "coroutines", "ipo", "instcombine", "objcarcopts", "scalaropts", "support", "target", "transformutils", "vectorize", "instrumentation"} },
8017df195fSNico Weber{ "profiledata", "LLVMProfileData", true, {"core", "support", "demangle"} },
8117df195fSNico Weber{ "remarks", "LLVMRemarks", true, {"bitstreamreader", "support"} },
8217df195fSNico Weber{ "runtimedyld", "LLVMRuntimeDyld", true, {"core", "mc", "object", "support"} },
8317df195fSNico Weber{ "scalaropts", "LLVMScalarOpts", true, {"aggressiveinstcombine", "analysis", "core", "instcombine", "support", "transformutils"} },
8417df195fSNico Weber{ "selectiondag", "LLVMSelectionDAG", true, {"analysis", "codegen", "core", "mc", "support", "target", "transformutils"} },
8517df195fSNico Weber{ "support", "LLVMSupport", true, {"demangle"} },
8617df195fSNico Weber{ "symbolize", "LLVMSymbolize", true, {"debuginfodwarf", "debuginfopdb", "object", "support", "demangle"} },
8717df195fSNico Weber{ "tablegen", "LLVMTableGen", true, {"support"} },
8817df195fSNico Weber{ "target", "LLVMTarget", true, {"analysis", "core", "mc", "support"} },
8917df195fSNico Weber{ "textapi", "LLVMTextAPI", true, {"support", "binaryformat"} },
9017df195fSNico Weber{ "transformutils", "LLVMTransformUtils", true, {"analysis", "core", "support"} },
9117df195fSNico Weber{ "vectorize", "LLVMVectorize", true, {"analysis", "core", "support", "transformutils"} },
9217df195fSNico Weber{ "windowsmanifest", "LLVMWindowsManifest", true, {"support"} },
9317df195fSNico Weber{ "xray", "LLVMXRay", true, {"support", "object"} },
9417df195fSNico Weber};
9517df195fSNico Weber"""
9617df195fSNico Weber
9717df195fSNico Weber
9817df195fSNico Weberdef main():
9917df195fSNico Weber    parser = argparse.ArgumentParser()
100*b71edfaaSTobias Hieta    parser.add_argument("-o", "--output", required=True, help="output file")
10117df195fSNico Weber    args = parser.parse_args()
10217df195fSNico Weber
103*b71edfaaSTobias Hieta    with open(args.output, "w") as f:
10417df195fSNico Weber        f.write(OUTPUT)
10517df195fSNico Weber
10617df195fSNico Weber
107*b71edfaaSTobias Hietaif __name__ == "__main__":
10817df195fSNico Weber    sys.exit(main())
109