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