| /* | |
| * Test for multiple targets | |
| * | |
| * Ensures targets compatible can be linked together. | |
| * Also that each QOM type is unique among them and can be initialized. | |
| * | |
| * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. | |
| * | |
| * Author: | |
| * Pierrick Bouvier <pierrick.bouvier@oss.qualcomm.com> | |
| * | |
| * SPDX-License-Identifier: GPL-2.0-or-later | |
| */ | |
| #include "qemu/osdep.h" | |
| #include "qemu/module.h" | |
| #include "qemu/target-info.h" | |
| #include "qemu/target-info-qom.h" | |
| #include "qom/object.h" | |
| #ifdef CONFIG_SDL | |
| /* | |
| * SDL insists on wrapping the main() function with its own implementation on | |
| * some platforms; it does so via a macro that renames our main function, so | |
| * <SDL.h> must be #included here even with no SDL code called from this file. | |
| */ | |
| #include <SDL.h> | |
| #endif | |
| /* stub for system/main.c */ | |
| int (*qemu_main)(void); | |
| static void test_qom_types_are_unique(void) | |
| { | |
| module_call_init(MODULE_INIT_TARGET_INFO); | |
| g_autoptr(GSList) targets = object_class_get_list(TYPE_TARGET_INFO, false); | |
| g_assert(targets); | |
| const TargetInfo *first_ti = TARGET_INFO_CLASS(targets->data)->target_info; | |
| target_info_qom_set_target_info(first_ti); | |
| /* register all types */ | |
| module_call_init(MODULE_INIT_QOM); | |
| /* trigger type_initialize for all types */ | |
| object_class_get_list("", false); | |
| } | |
| int main(int argc, char **argv) | |
| { | |
| g_test_init(&argc, &argv, NULL); | |
| g_test_add_func("/multi-targets/qom-types-are-unique", | |
| test_qom_types_are_unique); | |
| return g_test_run(); | |
| } |