public int Generate(List <string> args) { Console.WriteLine("Parsing assemblies..."); var universe = new Universe(UniverseOptions.MetadataOnly); var assemblies = new List <Assembly> (); foreach (var arg in args) { assemblies.Add(universe.LoadFile(arg)); Console.WriteLine($"\tParsed '{arg}'"); } // if not specified then we use the first specified assembly name if (LibraryName == null) { LibraryName = Path.GetFileNameWithoutExtension(args [0]); } Console.WriteLine("Processing assemblies..."); var g = new ObjCGenerator(); g.Process(assemblies); Console.WriteLine("Generating binding code..."); g.Generate(assemblies); g.Write(OutputDirectory); var exe = typeof(Driver).Assembly; foreach (var res in exe.GetManifestResourceNames()) { if (res == "main.c") { // no main is needed for dylib and don't re-write an existing main.c file - it's a template if (CompilationTarget != CompilationTarget.StaticLibrary || File.Exists("main.c")) { continue; } } var path = Path.Combine(OutputDirectory, res); Console.WriteLine($"\tGenerated: {path}"); using (var sw = new StreamWriter(path)) exe.GetManifestResourceStream(res).CopyTo(sw.BaseStream); } return(0); }
public int Generate(List <string> args) { Console.WriteLine("Parsing assemblies..."); var universe = new Universe(UniverseOptions.MetadataOnly); universe.AssemblyResolve += (object sender, IKVM.Reflection.ResolveEventArgs resolve_args) => { var directories = new List <string> (); directories.Add(PlatformSdkDirectory); directories.Add(Path.Combine(PlatformSdkDirectory, "Facades")); foreach (var asm in Assemblies) { directories.Add(Path.GetDirectoryName(asm.Location)); } AssemblyName an = new AssemblyName(resolve_args.Name); foreach (var dir in directories) { var filename = Path.Combine(dir, an.Name + ".dll"); if (File.Exists(filename)) { return(universe.LoadFile(filename)); } } throw ErrorHelper.CreateError(13, $"Can't find the assembly '{resolve_args.Name}', referenced by '{resolve_args.RequestingAssembly.FullName}'."); }; foreach (var arg in args) { if (!File.Exists(arg)) { throw ErrorHelper.CreateError(11, $"The assembly {arg} does not exist."); } Assemblies.Add(universe.LoadFile(arg)); Console.WriteLine($"\tParsed '{arg}'"); } // if not specified then we use the first specified assembly name if (LibraryName == null) { LibraryName = Path.GetFileNameWithoutExtension(args [0]); } Console.WriteLine("Processing assemblies..."); var g = new ObjCGenerator(); g.Process(Assemblies); Console.WriteLine("Generating binding code..."); g.Generate(); g.Write(OutputDirectory); var exe = typeof(Driver).Assembly; foreach (var res in exe.GetManifestResourceNames()) { if (res == "main.c") { // no main is needed for dylib and don't re-write an existing main.c file - it's a template if (CompilationTarget != CompilationTarget.StaticLibrary || File.Exists("main.c")) { continue; } } var path = Path.Combine(OutputDirectory, res); Console.WriteLine($"\tGenerated: {path}"); using (var sw = new StreamWriter(path)) exe.GetManifestResourceStream(res).CopyTo(sw.BaseStream); } return(0); }