#elif defined(__arm__)
#define CONFIG_CPU "arm"
#define CONFIG_WORDSIZE "32"
+#elif defined(__aarch64__)
+#define CONFIG_CPU "armv8"
+#define CONFIG_WORDSIZE "64"
#elif defined(__ia64__)
#define CONFIG_CPU "ia64"
#define CONFIG_WORDSIZE "64"
for (i = 0; attribute_names [i]; ++i) {
if (strcmp (attribute_names [i], "dll") == 0)
info->dll = g_strdup (attribute_values [i]);
- else if (strcmp (attribute_names [i], "target") == 0)
- info->target = g_strdup (attribute_values [i]);
- else if (strcmp (attribute_names [i], "os") == 0 && !arch_matches (CONFIG_OS, attribute_values [i]))
+ else if (strcmp (attribute_names [i], "target") == 0){
+ char *p = strstr (attribute_values [i], "$mono_libdir");
+ if (p != NULL){
+ const char *libdir = mono_assembly_getrootdir ();
+ int libdir_len = strlen (libdir);
+ char *result;
+
+ result = g_malloc (libdir_len-strlen("$mono_libdir")+strlen(attribute_values[i])+1);
+ strncpy (result, attribute_names[i], p-attribute_values[i]);
+ strcat (result, libdir);
+ strcat (result, p+strlen("$mono_libdir"));
+ info->target = result;
+ } else
+ info->target = g_strdup (attribute_values [i]);
+ } else if (strcmp (attribute_names [i], "os") == 0 && !arch_matches (CONFIG_OS, attribute_values [i]))
info->ignore = TRUE;
else if (strcmp (attribute_names [i], "cpu") == 0 && !arch_matches (CONFIG_CPU, attribute_values [i]))
info->ignore = TRUE;
NULL, /* finish */
};
+static void
+aot_cache_start (gpointer user_data,
+ const gchar *element_name,
+ const gchar **attribute_names,
+ const gchar **attribute_values)
+{
+ int i;
+ MonoAotCacheConfig *config;
+
+ if (strcmp (element_name, "aotcache") != 0)
+ return;
+
+ config = mono_get_aot_cache_config ();
+
+ /* Per-app configuration */
+ for (i = 0; attribute_names [i]; ++i) {
+ if (!strcmp (attribute_names [i], "app")) {
+ config->apps = g_slist_prepend (config->apps, g_strdup (attribute_values [i]));
+ }
+ }
+
+ /* Global configuration */
+ for (i = 0; attribute_names [i]; ++i) {
+ if (!strcmp (attribute_names [i], "assemblies")) {
+ char **parts, **ptr;
+ char *part;
+
+ parts = g_strsplit (attribute_values [i], " ", -1);
+ for (ptr = parts; ptr && *ptr; ptr ++) {
+ part = *ptr;
+ config->assemblies = g_slist_prepend (config->assemblies, g_strdup (part));
+ }
+ g_strfreev (parts);
+ } else if (!strcmp (attribute_names [i], "options")) {
+ config->aot_options = g_strdup (attribute_values [i]);
+ }
+ }
+}
+
+static const MonoParseHandler
+aot_cache_handler = {
+ "aotcache",
+ NULL, /* init */
+ aot_cache_start,
+ NULL, /* text */
+ NULL, /* end */
+ NULL, /* finish */
+};
+
static int inited = 0;
static void
config_handlers = g_hash_table_new (g_str_hash, g_str_equal);
g_hash_table_insert (config_handlers, (gpointer) dllmap_handler.element_name, (gpointer) &dllmap_handler);
g_hash_table_insert (config_handlers, (gpointer) legacyUEP_handler.element_name, (gpointer) &legacyUEP_handler);
+ g_hash_table_insert (config_handlers, (gpointer) aot_cache_handler.element_name, (gpointer) &aot_cache_handler);
}
void
if (!g_file_get_contents (filename, &text, &len, NULL))
return 0;
-
offset = 0;
if (len > 3 && text [0] == '\xef' && text [1] == (gchar) '\xbb' && text [2] == '\xbf')
offset = 3; /* Skip UTF-8 BOM */
int got_it = 0, i;
char *aname, *cfg, *cfg_name;
const char *bundled_config;
- const char *home;
state.assembly = assembly;
cfg_name = g_strdup_printf ("%s.config", mono_image_get_name (assembly));
- home = g_get_home_dir ();
-
for (i = 0; (aname = get_assembly_filename (assembly, i)) != NULL; ++i) {
cfg = g_build_filename (mono_get_config_dir (), "mono", "assemblies", aname, cfg_name, NULL);
got_it += mono_config_parse_file_with_context (&state, cfg);
g_free (cfg);
#ifdef TARGET_WIN32
+ const char *home = g_get_home_dir ();
cfg = g_build_filename (home, ".mono", "assemblies", aname, cfg_name, NULL);
got_it += mono_config_parse_file_with_context (&state, cfg);
g_free (cfg);