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 };
 }
Esempio n. 2
0
        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
            });
        }
Esempio n. 3
0
        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
            });
        }
Esempio n. 4
0
        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
            });
        }
Esempio n. 5
0
        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);
        }
Esempio n. 6
0
        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());
        }