static TestBase() { // We do the common initialization here // Create the binaries directory, where the binaries will go when compiled Directory.CreateDirectory(IntermediatesDirectory); NativeToolchain = Toolchains.All().First(); }
private void LoadExternals() { // TODO: Implement this if (Assembly.Externals.Count == 0) { return; } #if false // We need to compile every external binary to a DLL // TODO: We'd need to target what this application _is_ // If this application is x86, we need x86, ... var linker = Toolchains.All().First().Linker; var externalBinaries = Assembly.BinaryReferences.ToList(); foreach (var ext in externalBinaries) { linker.SourceFiles.Add(ext); } linker.OutputKind = OutputKind.DynamicLibrary; // Export external symbols foreach (var sym in Assembly.Externals) { linker.Exports.Add(sym); } // NOTE: Don't we need to delete this when the VM dies? var linkedBinariesPath = Path.GetTempFileName(); if (linker.Link(linkedBinariesPath) != 0) { // TODO throw new NotImplementedException(); } // Collect externals // NOTE: Don't we need to free this when the VM dies? var linkedBinaries = NativeLibrary.Load(linkedBinariesPath); externals.Clear(); foreach (var ext in Assembly.Externals) { externals[ext] = NativeLibrary.GetExport(linkedBinaries, $"{ext.Name}"); } #endif }