static string output = "a.out";
static string object_out = null;
static List<string> link_paths = new List<string> ();
- static List<string> aot_paths = new List<string> ();
- static List<string> aot_names = new List<string> ();
static Dictionary<string,string> libraries = new Dictionary<string,string> ();
static bool autodeps = false;
static bool keeptemp = false;
static bool custom_mode = true;
static string embedded_options = null;
static string runtime = null;
- static bool aot_compile = false;
- static string aot_args = "static";
- static string aot_mode = "";
- static string aot_runtime = null;
static string sdk_path = null;
static string lib_path = null;
static Dictionary<string,string> environment = new Dictionary<string,string>();
case "--bundled-header":
bundled_header = true;
break;
- case "--aot-runtime":
- aot_runtime = args [++i];
- break;
- case "--aot-mode":
- if (i+1 == top) {
- Console.WriteLine ("Need string of aot mode");
- return 1;
- }
- aot_mode = args [++i];
- aot_compile = true;
- break;
- case "--aot-args":
- if (i+1 == top) {
- Console.WriteLine ("AOT arguments are passed as a comma-delimited list");
- return 1;
- }
- if (args [i + 1].Contains ("outfile")) {
- Console.WriteLine ("Per-aot-output arguments (ex: outfile, llvm-outfile) cannot be given");
- return 1;
- }
- aot_args = String.Format("static,{0}", args [++i]);
- aot_compile = true;
- break;
default:
sources.Add (args [i]);
break;
}
+
}
// Modern bundling starts here
if (!custom_mode){
foreach (string file in assemblies)
if (!QueueAssembly (files, file))
return 1;
-
- if (aot_compile)
- AotCompile (files);
-
if (custom_mode)
GenerateBundles (files);
else
Console.WriteLine ("At {0:x} with input {1}", package.Position, fileStream.Length);
fileStream.CopyTo (package);
package.Position = package.Position + (align - (package.Position % align));
+
return (int) ret;
}
}
{
var p = package.Position;
var size = AddFile (fname);
+
locations [entry] = Tuple.Create(p, size);
}
return false;
}
maker.Add (code, file);
+ // add a space after code (="systemconfig:" or "machineconfig:")
+ Console.WriteLine (code + " " + file);
return true;
}
Console.WriteLine (" Assembly: " + fname);
if (File.Exists (fname + ".config")){
maker.Add ("config:" + aname, fname + ".config");
- Console.WriteLine (" Config: " + runtime);
+ Console.WriteLine (" Config: " + fname + ".config");
}
}
if (!MaybeAddFile (maker, "systemconfig:", config_file) || !MaybeAddFile (maker, "machineconfig:", machine_config_file))
return false;
- if (config_dir != null)
+ if (config_dir != null){
maker.Add ("config_dir:", config_dir);
+ Console.WriteLine (" Config_dir: " + config_dir );
+ }
if (embedded_options != null)
maker.AddString ("options:", embedded_options);
if (environment.Count > 0){
} else {
tc.WriteLine ("#include <mono/metadata/mono-config.h>");
tc.WriteLine ("#include <mono/metadata/assembly.h>\n");
- tc.WriteLine ("#include <mono/jit/jit.h>\n");
}
if (compress) {
}
ts.Close ();
- // Managed assemblies baked in
if (compress)
tc.WriteLine ("\nstatic const CompressedAssembly *compressed [] = {");
else
tc.WriteLine ("\t&{0},", c);
}
tc.WriteLine ("\tNULL\n};\n");
-
-
- // AOT baked in plus loader
- foreach (string asm in aot_names){
- tc.WriteLine ("\textern const void *mono_aot_module_{0}_info;", asm);
- }
-
- tc.WriteLine ("\nstatic void install_aot_modules (void) {\n");
- foreach (string asm in aot_names){
- tc.WriteLine ("\tmono_aot_register_module (mono_aot_module_{0}_info);\n", asm);
- }
-
- string enum_aot_mode;
- switch (aot_mode) {
- case "full":
- enum_aot_mode = "MONO_AOT_MODE_FULL";
- break;
- case "llvmonly":
- enum_aot_mode = "MONO_AOT_MODE_LLVMONLY";
- break;
- case "":
- enum_aot_mode = "MONO_AOT_MODE_NORMAL";
- break;
- default:
- throw new Exception ("Unsupported AOT mode");
- }
- tc.WriteLine ("\tmono_jit_set_aot_mode ({0});", enum_aot_mode);
-
- tc.WriteLine ("\n}\n");
-
-
tc.WriteLine ("static char *image_name = \"{0}\";", prog);
if (ctor_func != null) {
debugging = "-ggdb";
if (static_link)
{
- string platform_libs;
string smonolib;
- if (style == "osx") {
+ if (style == "osx")
smonolib = "`pkg-config --variable=libdir mono-2`/libmono-2.0.a ";
- platform_libs = "-liconv -framework Foundation ";
- } else {
+ else
smonolib = "-Wl,-Bstatic -lmono-2.0 -Wl,-Bdynamic ";
- platform_libs = "";
- }
-
cmd = String.Format("{4} -o '{2}' -Wall `pkg-config --cflags mono-2` {0} {3} " +
- "`pkg-config --libs-only-L mono-2` {5} {6} " + platform_libs +
- "`pkg-config --libs-only-l mono-2 | sed -e \"s/\\-lmono-2.0 //\"` {1} -g ",
- temp_c, temp_o, output, zlib, cc, smonolib, String.Join (" ", aot_paths));
+ "`pkg-config --libs-only-L mono-2` " + smonolib +
+ "`pkg-config --libs-only-l mono-2 | sed -e \"s/\\-lmono-2.0 //\"` {1}",
+ temp_c, temp_o, output, zlib, cc);
}
else
{
}
}
-
- static string EncodeAotSymbol (string symbol)
- {
- var sb = new StringBuilder ();
- /* This mimics what the aot-compiler does */
- foreach (var b in System.Text.Encoding.UTF8.GetBytes (symbol)) {
- char c = (char) b;
- if ((c >= '0' && c <= '9') ||
- (c >= 'a' && c <= 'z') ||
- (c >= 'A' && c <= 'Z')) {
- sb.Append (c);
- continue;
- }
- sb.Append ('_');
- }
- return sb.ToString ();
- }
-
- static void AotCompile (List<string> files)
- {
- if (aot_runtime == null)
- aot_runtime = runtime;
-
- foreach (var fileName in files) {
- string path = LocateFile (new Uri (fileName).LocalPath);
- string outPath = String.Format ("{0}.aot_out", path);
- aot_paths.Add (outPath);
- var name = System.Reflection.Assembly.LoadFrom(path).GetName().Name;
- aot_names.Add (EncodeAotSymbol (name));
- var aot_mode_string = "";
- if (aot_mode != null)
- aot_mode_string = "," + aot_mode;
- Execute (String.Format ("{0} --aot={1},outfile={2}{3} {4}", aot_runtime, aot_args, outPath, aot_mode_string, path));
- }
- }
-
static void Execute (string cmdLine)
{
if (IsUnix) {