Skip to content
Snippets Groups Projects

Check for required CPU features

Merged Ludovico de Nittis requested to merge wip/denittis/t20489 into master
Files
10
+ 59
0
@@ -251,6 +251,49 @@ jsonify_flags (JsonBuilder *builder,
g_type_class_unref (class);
}
static void
jsonify_flags_string_bool_map (JsonBuilder *builder,
GType flags_type,
unsigned int values)
{
GFlagsClass *class;
GFlagsValue *flags_value;
g_return_if_fail (G_TYPE_IS_FLAGS (flags_type));
class = g_type_class_ref (flags_type);
for (flags_value = class->values; flags_value->value_name; flags_value++)
{
/* Skip the numerically zero flag (usually "none") */
if (flags_value->value == 0)
continue;
json_builder_set_member_name (builder, flags_value->value_nick);
if ((flags_value->value & values) == flags_value->value)
{
json_builder_add_boolean_value (builder, TRUE);
values &= ~flags_value->value;
}
else
{
json_builder_add_boolean_value (builder, FALSE);
}
}
if (values)
{
gchar *rest = g_strdup_printf ("0x%x", values);
json_builder_set_member_name (builder, rest);
json_builder_add_boolean_value (builder, TRUE);
g_free (rest);
}
g_type_class_unref (class);
}
static void
jsonify_library_issues (JsonBuilder *builder,
SrtLibraryIssues issues)
@@ -306,6 +349,13 @@ jsonify_locale_issues (JsonBuilder *builder,
jsonify_flags (builder, SRT_TYPE_LOCALE_ISSUES, issues);
}
static void
jsonify_x86_features (JsonBuilder *builder,
SrtX86FeatureFlags features)
{
jsonify_flags_string_bool_map (builder, SRT_TYPE_X86_FEATURE_FLAGS, features);
}
static void
print_libraries_details (JsonBuilder *builder,
GList *libraries,
@@ -743,6 +793,7 @@ main (int argc,
SrtSteamIssues steam_issues = SRT_STEAM_ISSUES_NONE;
SrtRuntimeIssues runtime_issues = SRT_RUNTIME_ISSUES_NONE;
SrtLocaleIssues locale_issues = SRT_LOCALE_ISSUES_NONE;
SrtX86FeatureFlags x86_features = SRT_X86_FEATURE_NONE;
char *expectations = NULL;
gboolean verbose = FALSE;
JsonBuilder *builder;
@@ -1213,6 +1264,14 @@ main (int argc,
}
json_builder_end_array (builder);
json_builder_set_member_name (builder, "cpu-features");
json_builder_begin_object (builder);
{
x86_features = srt_system_info_get_x86_features (info);
jsonify_x86_features (builder, x86_features);
}
json_builder_end_object (builder);
json_builder_end_object (builder); // End global object
JsonNode *root = json_builder_get_root (builder);
Loading