public override CrayonWorkerResult DoWorkImpl(CrayonWorkerResult[] args) { // byteCode = EncodeByteCode(compilationResult) CompilationBundle compilationResult = (CompilationBundle)args[0].Value; string byteCode = ByteCodeEncoder.Encode(compilationResult.ByteCode); return new CrayonWorkerResult() { Value = byteCode }; }
public override CrayonWorkerResult DoWorkImpl(CrayonWorkerResult[] args) { ExportCommand command = (ExportCommand)args[0].Value; BuildContext buildContext = (BuildContext)args[1].Value; CompilationBundle compilationResult = this.ExportVmBundle(command, buildContext); return(new CrayonWorkerResult() { Value = compilationResult }); }
public override CrayonWorkerResult DoWorkImpl(CrayonWorkerResult[] args) { // compilationResult = Compiler(buildContext) BuildContext buildContext = (BuildContext)args[0].Value; CompilationBundle compilationResult = CompilationBundle.Compile(buildContext); return(new CrayonWorkerResult() { Value = compilationResult }); }
public override CrayonWorkerResult DoWorkImpl(CrayonWorkerResult[] args) { // cbxFileBytes = GenerateCbxFileContent(buildContext, resDb, compilationResult, byteCode) BuildContext buildContext = (BuildContext)args[0].Value; ResourceDatabase resDb = (ResourceDatabase)args[1].Value; CompilationBundle compilationResult = (CompilationBundle)args[2].Value; string byteCode = (string)args[3].Value; byte[] cbxData = this.GenerateCbxBinaryData(buildContext, resDb, compilationResult, byteCode); return(new CrayonWorkerResult() { Value = cbxData }); }
private CompilationBundle ExportVmBundle(ExportCommand command, BuildContext buildContext) { // TODO: Worker: platform = GetPlatform(buildContext, command) string platformId = buildContext.Platform.ToLowerInvariant(); Platform.AbstractPlatform platform = command.PlatformProvider.GetPlatform(platformId); if (platform == null) { throw new InvalidOperationException("Unrecognized platform. See usage."); } // TODO: Worker: Compile CompilationBundle compilationResult = CompilationBundle.Compile(buildContext); LibraryMetadata[] libraries = compilationResult.LibraryScopesUsed.Select(scope => scope.Library).ToArray(); ResourceDatabase resourceDatabase = ResourceDatabaseBuilder.PrepareResources(buildContext, compilationResult.ByteCode); string outputDirectory = buildContext.OutputFolder; if (!FileUtil.IsAbsolutePath(outputDirectory)) { outputDirectory = FileUtil.JoinPath(buildContext.ProjectDirectory, outputDirectory); } outputDirectory = FileUtil.GetCanonicalizeUniversalPath(outputDirectory); FileOutputExporter exporter = new FileOutputExporter(outputDirectory); VmGenerator vmGenerator = new VmGenerator(); Dictionary <string, FileOutput> result = new Dictionary <string, FileOutput>(); vmGenerator.GenerateVmSourceCodeForPlatform( result, platform, compilationResult, resourceDatabase, libraries, outputDirectory, command.InlineImportCodeLoader, VmGenerationMode.EXPORT_SELF_CONTAINED_PROJECT_SOURCE); exporter.ExportFiles(result); // TODO: this needs to be the result of an earlier step after this is split into workers. return(compilationResult); }
private byte[] GenerateCbxBinaryData(BuildContext buildContext, ResourceDatabase resDb, CompilationBundle compilationResult, string byteCode) { List <byte> cbxOutput = new List <byte>() { 0 }; cbxOutput.AddRange("CBX".ToCharArray().Select(c => (byte)c)); cbxOutput.AddRange(GetBigEndian4Byte(0)); cbxOutput.AddRange(GetBigEndian4Byte(2)); cbxOutput.AddRange(GetBigEndian4Byte(0)); byte[] code = StringToBytes(byteCode); cbxOutput.AddRange("CODE".ToCharArray().Select(c => (byte)c)); cbxOutput.AddRange(GetBigEndian4Byte(code.Length)); cbxOutput.AddRange(code); List <string> libraries = new List <string>(); foreach (LibraryCompilationScope scopeForLibrary in compilationResult.LibraryScopesUsed.Where(scope => scope.Library.IsMoreThanJustEmbedCode)) { libraries.Add(scopeForLibrary.Library.ID); libraries.Add(scopeForLibrary.Library.Version); } string libsData = string.Join(",", libraries); byte[] libsDataBytes = StringToBytes(libsData); cbxOutput.AddRange("LIBS".ToCharArray().Select(c => (byte)c)); cbxOutput.AddRange(GetBigEndian4Byte(libsDataBytes.Length)); cbxOutput.AddRange(libsDataBytes); byte[] resourceManifest = StringToBytes(resDb.ResourceManifestFile.TextContent); cbxOutput.AddRange("RSRC".ToCharArray().Select(c => (byte)c)); cbxOutput.AddRange(GetBigEndian4Byte(resourceManifest.Length)); cbxOutput.AddRange(resourceManifest); if (resDb.ImageSheetManifestFile != null) { byte[] imageSheetManifest = StringToBytes(resDb.ImageSheetManifestFile.TextContent); cbxOutput.AddRange("IMSH".ToCharArray().Select(c => (byte)c)); cbxOutput.AddRange(GetBigEndian4Byte(imageSheetManifest.Length)); cbxOutput.AddRange(imageSheetManifest); } return(cbxOutput.ToArray()); }