cmakefileapi.py 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306
  1. # Copyright (c) 2020 The Linux Foundation
  2. #
  3. # SPDX-License-Identifier: Apache-2.0
  4. from enum import Enum
  5. class Codemodel:
  6. def __init__(self):
  7. super(Codemodel, self).__init__()
  8. self.paths_source = ""
  9. self.paths_build = ""
  10. self.configurations = []
  11. def __repr__(self):
  12. return f"Codemodel: source {self.paths_source}, build {self.paths_build}"
  13. # A member of the codemodel configurations array
  14. class Config:
  15. def __init__(self):
  16. super(Config, self).__init__()
  17. self.name = ""
  18. self.directories = []
  19. self.projects = []
  20. self.configTargets = []
  21. def __repr__(self):
  22. if self.name == "":
  23. return f"Config: [no name]"
  24. else:
  25. return f"Config: {self.name}"
  26. # A member of the configuration.directories array
  27. class ConfigDir:
  28. def __init__(self):
  29. super(ConfigDir, self).__init__()
  30. self.source = ""
  31. self.build = ""
  32. self.parentIndex = -1
  33. self.childIndexes = []
  34. self.projectIndex = -1
  35. self.targetIndexes = []
  36. self.minimumCMakeVersion = ""
  37. self.hasInstallRule = False
  38. # actual items, calculated from indices after loading
  39. self.parent = None
  40. self.children = []
  41. self.project = None
  42. self.targets = []
  43. def __repr__(self):
  44. return f"ConfigDir: source {self.source}, build {self.build}"
  45. # A member of the configuration.projects array
  46. class ConfigProject:
  47. def __init__(self):
  48. super(ConfigProject, self).__init__()
  49. self.name = ""
  50. self.parentIndex = -1
  51. self.childIndexes = []
  52. self.directoryIndexes = []
  53. self.targetIndexes = []
  54. # actual items, calculated from indices after loading
  55. self.parent = None
  56. self.children = []
  57. self.directories = []
  58. self.targets = []
  59. def __repr__(self):
  60. return f"ConfigProject: {self.name}"
  61. # A member of the configuration.configTargets array
  62. class ConfigTarget:
  63. def __init__(self):
  64. super(ConfigTarget, self).__init__()
  65. self.name = ""
  66. self.id = ""
  67. self.directoryIndex = -1
  68. self.projectIndex = -1
  69. self.jsonFile = ""
  70. # actual target data, loaded from self.jsonFile
  71. self.target = None
  72. # actual items, calculated from indices after loading
  73. self.directory = None
  74. self.project = None
  75. def __repr__(self):
  76. return f"ConfigTarget: {self.name}"
  77. # The available values for Target.type
  78. class TargetType(Enum):
  79. UNKNOWN = 0
  80. EXECUTABLE = 1
  81. STATIC_LIBRARY = 2
  82. SHARED_LIBRARY = 3
  83. MODULE_LIBRARY = 4
  84. OBJECT_LIBRARY = 5
  85. UTILITY = 6
  86. # A member of the target.install_destinations array
  87. class TargetInstallDestination:
  88. def __init__(self):
  89. super(TargetInstallDestination, self).__init__()
  90. self.path = ""
  91. self.backtrace = -1
  92. def __repr__(self):
  93. return f"TargetInstallDestination: {self.path}"
  94. # A member of the target.link_commandFragments and
  95. # archive_commandFragments array
  96. class TargetCommandFragment:
  97. def __init__(self):
  98. super(TargetCommandFragment, self).__init__()
  99. self.fragment = ""
  100. self.role = ""
  101. def __repr__(self):
  102. return f"TargetCommandFragment: {self.fragment}"
  103. # A member of the target.dependencies array
  104. class TargetDependency:
  105. def __init__(self):
  106. super(TargetDependency, self).__init__()
  107. self.id = ""
  108. self.backtrace = -1
  109. def __repr__(self):
  110. return f"TargetDependency: {self.id}"
  111. # A member of the target.sources array
  112. class TargetSource:
  113. def __init__(self):
  114. super(TargetSource, self).__init__()
  115. self.path = ""
  116. self.compileGroupIndex = -1
  117. self.sourceGroupIndex = -1
  118. self.isGenerated = False
  119. self.backtrace = -1
  120. # actual items, calculated from indices after loading
  121. self.compileGroup = None
  122. self.sourceGroup = None
  123. def __repr__(self):
  124. return f"TargetSource: {self.path}"
  125. # A member of the target.sourceGroups array
  126. class TargetSourceGroup:
  127. def __init__(self):
  128. super(TargetSourceGroup, self).__init__()
  129. self.name = ""
  130. self.sourceIndexes = []
  131. # actual items, calculated from indices after loading
  132. self.sources = []
  133. def __repr__(self):
  134. return f"TargetSourceGroup: {self.name}"
  135. # A member of the target.compileGroups.includes array
  136. class TargetCompileGroupInclude:
  137. def __init__(self):
  138. super(TargetCompileGroupInclude, self).__init__()
  139. self.path = ""
  140. self.isSystem = False
  141. self.backtrace = -1
  142. def __repr__(self):
  143. return f"TargetCompileGroupInclude: {self.path}"
  144. # A member of the target.compileGroups.precompileHeaders array
  145. class TargetCompileGroupPrecompileHeader:
  146. def __init__(self):
  147. super(TargetCompileGroupPrecompileHeader, self).__init__()
  148. self.header = ""
  149. self.backtrace = -1
  150. def __repr__(self):
  151. return f"TargetCompileGroupPrecompileHeader: {self.header}"
  152. # A member of the target.compileGroups.defines array
  153. class TargetCompileGroupDefine:
  154. def __init__(self):
  155. super(TargetCompileGroupDefine, self).__init__()
  156. self.define = ""
  157. self.backtrace = -1
  158. def __repr__(self):
  159. return f"TargetCompileGroupDefine: {self.define}"
  160. # A member of the target.compileGroups array
  161. class TargetCompileGroup:
  162. def __init__(self):
  163. super(TargetCompileGroup, self).__init__()
  164. self.sourceIndexes = []
  165. self.language = ""
  166. self.compileCommandFragments = []
  167. self.includes = []
  168. self.precompileHeaders = []
  169. self.defines = []
  170. self.sysroot = ""
  171. # actual items, calculated from indices after loading
  172. self.sources = []
  173. def __repr__(self):
  174. return f"TargetCompileGroup: {self.sources}"
  175. # A member of the target.backtraceGraph_nodes array
  176. class TargetBacktraceGraphNode:
  177. def __init__(self):
  178. super(TargetBacktraceGraphNode, self).__init__()
  179. self.file = -1
  180. self.line = -1
  181. self.command = -1
  182. self.parent = -1
  183. def __repr__(self):
  184. return f"TargetBacktraceGraphNode: {self.command}"
  185. # Actual data in config.target.target, loaded from
  186. # config.target.jsonFile
  187. class Target:
  188. def __init__(self):
  189. super(Target, self).__init__()
  190. self.name = ""
  191. self.id = ""
  192. self.type = TargetType.UNKNOWN
  193. self.backtrace = -1
  194. self.folder = ""
  195. self.paths_source = ""
  196. self.paths_build = ""
  197. self.nameOnDisk = ""
  198. self.artifacts = []
  199. self.isGeneratorProvided = False
  200. # only if install rule is present
  201. self.install_prefix = ""
  202. self.install_destinations = []
  203. # only for executables and shared library targets that link into
  204. # a runtime binary
  205. self.link_language = ""
  206. self.link_commandFragments = []
  207. self.link_lto = False
  208. self.link_sysroot = ""
  209. # only for static library targets
  210. self.archive_commandFragments = []
  211. self.archive_lto = False
  212. # only if the target depends on other targets
  213. self.dependencies = []
  214. # corresponds to target's source files
  215. self.sources = []
  216. # only if sources are grouped together by source_group() or by default
  217. self.sourceGroups = []
  218. # only if target has sources that compile
  219. self.compileGroups = []
  220. # graph of backtraces referenced from elsewhere
  221. self.backtraceGraph_nodes = []
  222. self.backtraceGraph_commands = []
  223. self.backtraceGraph_files = []
  224. def __repr__(self):
  225. return f"Target: {self.name}"