def buildTarget(target, options, project, lock=None): if options.cleanMode: target.currBuildStep = target.findBuildStep("clean") target.success = buildStepActor(target, options, project, lock) else: if target.success: logger.reportSkipped(target.name, "", "Target successfully built in previous MixDown build") elif target.prefix != "" and os.path.exists(options.defines.expand(target.prefix)): logger.reportSkipped(target.name, "", "Target's defined prefix detected.") target.success = True elif not options.targetSpecifiedToBuild(target.name): logger.reportSkipped(target.name, "", "Target was not specified on command-line.") target.success = True else: if options.continueBuilding: for dependancyName in target.expandedDependsOn: dependancyTarget = project.getTarget(dependancyName) if dependancyTarget.success == False: reasonString = "Target could not be built because dependant target ({0}) previously failed.".format( dependancyTarget.name ) logger.reportSkipped(target.name, reason=reasonString) target.skippedDueToDependanciesFailing = True return for buildStep in target.buildSteps: if buildStep.name == "clean" or buildStep.command == "": continue buildStep.restartPath = target.path target.currBuildStep = buildStep target.success = buildStepActor(target, options, project, lock) if not target.success: break
def buildTarget(target, options, project, lock=None): if options.cleanMode: target.currBuildStep = target.findBuildStep("clean") target.success = buildStepActor(target, options, project, lock) else: if target.success: logger.reportSkipped( target.name, "", "Target successfully built in previous MixDown build") elif target.prefix != "" and os.path.exists( options.defines.expand(target.prefix)): logger.reportSkipped(target.name, "", "Target's defined prefix detected.") target.success = True elif not options.targetSpecifiedToBuild(target.name): logger.reportSkipped(target.name, "", "Target was not specified on command-line.") target.success = True else: if options.continueBuilding: for dependancyName in target.expandedDependsOn: dependancyTarget = project.getTarget(dependancyName) if dependancyTarget.success == False: reasonString = "Target could not be built because dependant target ({0}) previously failed.".format( dependancyTarget.name) logger.reportSkipped(target.name, reason=reasonString) target.skippedDueToDependanciesFailing = True return for buildStep in target.buildSteps: if buildStep.name == "clean" or buildStep.command == "": continue buildStep.restartPath = target.path target.currBuildStep = buildStep target.success = buildStepActor(target, options, project, lock) if not target.success: break
def buildStepActor(target, options, project, lock=None): if target.isStepToBeSkipped(target.currBuildStep.name): try: if lock: lock.acquire() logger.reportSkipped(target.name, target.currBuildStep.name, "Target specified to skip step") finally: if lock: lock.release() return True if target.isStepPreviouslyDone(target.currBuildStep.name): try: if lock: lock.acquire() logger.reportSkipped( target.name, target.currBuildStep.name, "Build step successfully built in previous MixDown build" ) finally: if lock: lock.release() return True try: if lock: lock.acquire() logger.reportStart(target.name, target.currBuildStep.name) # Refresh defines before start of every step project.setTargetFieldsAsDefines(options.defines) finally: if lock: lock.release() returnCode = None timeStart = time.time() command = options.defines.expand(target.currBuildStep.command) isPythonCommand, namespace, function = python.parsePythonCommand(command) if isPythonCommand: success = python.callPythonCommand(namespace, function, target, options, project) if not success: returnCode = 1 else: returnCode = 0 else: try: if lock: lock.acquire() logger.writeMessage("Executing command: " + command, target.name, target.currBuildStep.name, True) finally: if lock: lock.release() if not os.path.exists(target.path): logger.writeError( target.name + "'s path does not exist when about to execute build command in step " + target.currBuildStep.name + ".", filePath=target.path, ) returnCode = 1 else: outFd = logger.getOutFd(target.name, target.currBuildStep.name) returnCode = utilityFunctions.executeSubProcess(command, target.path, outFd) timeFinished = time.time() timeElapsed = timeFinished - timeStart if returnCode != 0: target.currBuildStep.success = False try: if lock: lock.acquire() logger.reportFailure(target.name, target.currBuildStep.name, timeElapsed, returnCode) finally: if lock: lock.release() return False target.currBuildStep.success = True try: if lock: lock.acquire() logger.reportSuccess(target.name, target.currBuildStep.name, timeElapsed) finally: if lock: lock.release() return True