diff --git a/Makefile.common b/Makefile.common index b808048894..08c67641ec 100644 --- a/Makefile.common +++ b/Makefile.common @@ -156,8 +156,7 @@ endif DEFINES += -DHAVE_DR_MP3 DEF_FLAGS += -DHAVE_DR_MP3 -OBJ += frontend/frontend.o \ - frontend/frontend_driver.o \ +OBJ += frontend/frontend_driver.o \ frontend/drivers/platform_null.o \ retroarch.o \ paths.o \ diff --git a/frontend/frontend.c b/frontend/frontend.c deleted file mode 100644 index 72cfe3c1dd..0000000000 --- a/frontend/frontend.c +++ /dev/null @@ -1,192 +0,0 @@ -/* RetroArch - A frontend for libretro. - * Copyright (C) 2010-2014 - Hans-Kristian Arntzen - * Copyright (C) 2011-2017 - Daniel De Matteis - * Copyright (C) 2012-2015 - Michael Lelli - * - * RetroArch is free software: you can redistribute it and/or modify it under the terms - * of the GNU General Public License as published by the Free Software Found- - * ation, either version 3 of the License, or (at your option) any later version. - * - * RetroArch is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR - * PURPOSE. See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with RetroArch. - * If not, see . - */ - -#include -#include - -#ifdef HAVE_CONFIG_H -#include "../config.h" -#endif - -#include - -#ifdef HAVE_MENU -#include "../menu/menu_driver.h" -#endif - -#include "frontend.h" -#include "frontend_driver.h" -#include "../configuration.h" -#include "../ui/ui_companion_driver.h" -#include "../tasks/task_content.h" - -#include "../driver.h" -#include "../paths.h" -#include "../retroarch.h" -#include "../verbosity.h" - -#if defined(_WIN32) && !defined(_XBOX) && !defined(__WINRT__) -#include -#endif - -/* Griffin hack */ -#ifdef HAVE_QT -#ifndef HAVE_MAIN -#define HAVE_MAIN -#endif -#endif - -/** - * main_exit: - * - * Cleanly exit RetroArch. - * - * Also saves configuration files to disk, - * and (optionally) autosave state. - **/ -void main_exit(void *args) -{ - settings_t *settings = config_get_ptr(); - - if (settings->bools.config_save_on_exit) - command_event(CMD_EVENT_MENU_SAVE_CURRENT_CONFIG, NULL); - -#ifdef HAVE_MENU - /* Do not want menu context to live any more. */ - menu_driver_ctl(RARCH_MENU_CTL_UNSET_OWN_DRIVER, NULL); -#endif - rarch_ctl(RARCH_CTL_MAIN_DEINIT, NULL); - - command_event(CMD_EVENT_PERFCNT_REPORT_FRONTEND_LOG, NULL); - -#if defined(HAVE_LOGGER) && !defined(ANDROID) - logger_shutdown(); -#endif - - frontend_driver_deinit(args); - frontend_driver_exitspawn( - path_get_ptr(RARCH_PATH_CORE), - path_get_realsize(RARCH_PATH_CORE)); - - rarch_ctl(RARCH_CTL_DESTROY, NULL); - - ui_companion_driver_deinit(); - - frontend_driver_shutdown(false); - - driver_ctl(RARCH_DRIVER_CTL_DEINIT, NULL); - ui_companion_driver_free(); - frontend_driver_free(); - -#if defined(_WIN32) && !defined(_XBOX) && !defined(__WINRT__) - CoUninitialize(); -#endif -} - -/** - * main_entry: - * - * Main function of RetroArch. - * - * If HAVE_MAIN is not defined, will contain main loop and will not - * be exited from until we exit the program. Otherwise, will - * just do initialization. - * - * Returns: varies per platform. - **/ -int rarch_main(int argc, char *argv[], void *data) -{ -#if defined(_WIN32) && !defined(_XBOX) && !defined(__WINRT__) - if (FAILED(CoInitialize(NULL))) - { - RARCH_ERR("FATAL: Failed to initialize the COM interface\n"); - return 1; - } -#endif - - rarch_ctl(RARCH_CTL_PREINIT, NULL); - frontend_driver_init_first(data); - rarch_ctl(RARCH_CTL_INIT, NULL); - - if (frontend_driver_is_inited()) - { - content_ctx_info_t info; - - info.argc = argc; - info.argv = argv; - info.args = data; - info.environ_get = frontend_driver_environment_get_ptr(); - - if (!task_push_load_content_from_cli( - NULL, - NULL, - &info, - CORE_TYPE_PLAIN, - NULL, - NULL)) - return 1; - } - - ui_companion_driver_init_first(); - -#if !defined(HAVE_MAIN) || defined(HAVE_QT) - do - { - int ret; - bool app_exit = false; - unsigned sleep_ms = 0; -#if defined(_WIN32) && !defined(_XBOX) && !defined(__WINRT__) - ui_companion_win32.application->process_events(); -#endif -#ifdef HAVE_QT - ui_companion_qt.application->process_events(); -#endif - ret = runloop_iterate(&sleep_ms); - - if (ret == 1 && sleep_ms > 0) - retro_sleep(sleep_ms); - - task_queue_check(); - -#ifdef HAVE_QT - app_exit = ui_companion_qt.application->exiting; -#endif - - if (ret == -1 || app_exit) - { -#ifdef HAVE_QT - ui_companion_qt.application->quit(); -#endif - break; - } - }while(1); - - main_exit(data); -#endif - - return 0; -} - -#ifndef HAVE_MAIN -#ifdef __cplusplus -extern "C" -#endif -int main(int argc, char *argv[]) -{ - return rarch_main(argc, argv, NULL); -} -#endif diff --git a/griffin/griffin.c b/griffin/griffin.c index 2327b1100b..cf68c63021 100644 --- a/griffin/griffin.c +++ b/griffin/griffin.c @@ -1065,11 +1065,6 @@ UI #include "../ui/drivers/win32/ui_win32_application.c" #endif -/*============================================================ -MAIN -============================================================ */ -#include "../frontend/frontend.c" - /*============================================================ GIT ============================================================ */ diff --git a/retroarch.c b/retroarch.c index 11f3bcae1e..53c6031cb6 100644 --- a/retroarch.c +++ b/retroarch.c @@ -35,6 +35,9 @@ #endif #endif +#if defined(_WIN32) && !defined(_XBOX) && !defined(__WINRT__) +#include +#endif #include #include @@ -1687,6 +1690,156 @@ void *video_driver_get_ptr(bool force_nonthreaded_data) return video_driver_get_ptr_internal(force_nonthreaded_data); } +/* FRONTEND */ + +/* Griffin hack */ +#ifdef HAVE_QT +#ifndef HAVE_MAIN +#define HAVE_MAIN +#endif +#endif + +/** + * main_exit: + * + * Cleanly exit RetroArch. + * + * Also saves configuration files to disk, + * and (optionally) autosave state. + **/ +void main_exit(void *args) +{ + settings_t *settings = configuration_settings; + + if (settings->bools.config_save_on_exit) + command_event(CMD_EVENT_MENU_SAVE_CURRENT_CONFIG, NULL); + +#ifdef HAVE_MENU + /* Do not want menu context to live any more. */ + menu_driver_ctl(RARCH_MENU_CTL_UNSET_OWN_DRIVER, NULL); +#endif + rarch_ctl(RARCH_CTL_MAIN_DEINIT, NULL); + + command_event(CMD_EVENT_PERFCNT_REPORT_FRONTEND_LOG, NULL); + +#if defined(HAVE_LOGGER) && !defined(ANDROID) + logger_shutdown(); +#endif + + frontend_driver_deinit(args); + frontend_driver_exitspawn( + path_get_ptr(RARCH_PATH_CORE), + path_get_realsize(RARCH_PATH_CORE)); + + rarch_ctl(RARCH_CTL_DESTROY, NULL); + + ui_companion_driver_deinit(); + + frontend_driver_shutdown(false); + + driver_ctl(RARCH_DRIVER_CTL_DEINIT, NULL); + ui_companion_driver_free(); + frontend_driver_free(); + +#if defined(_WIN32) && !defined(_XBOX) && !defined(__WINRT__) + CoUninitialize(); +#endif +} + +/** + * main_entry: + * + * Main function of RetroArch. + * + * If HAVE_MAIN is not defined, will contain main loop and will not + * be exited from until we exit the program. Otherwise, will + * just do initialization. + * + * Returns: varies per platform. + **/ +int rarch_main(int argc, char *argv[], void *data) +{ +#if defined(_WIN32) && !defined(_XBOX) && !defined(__WINRT__) + if (FAILED(CoInitialize(NULL))) + { + RARCH_ERR("FATAL: Failed to initialize the COM interface\n"); + return 1; + } +#endif + + rarch_ctl(RARCH_CTL_PREINIT, NULL); + frontend_driver_init_first(data); + rarch_ctl(RARCH_CTL_INIT, NULL); + + if (frontend_driver_is_inited()) + { + content_ctx_info_t info; + + info.argc = argc; + info.argv = argv; + info.args = data; + info.environ_get = frontend_driver_environment_get_ptr(); + + if (!task_push_load_content_from_cli( + NULL, + NULL, + &info, + CORE_TYPE_PLAIN, + NULL, + NULL)) + return 1; + } + + ui_companion_driver_init_first(); + +#if !defined(HAVE_MAIN) || defined(HAVE_QT) + do + { + int ret; + bool app_exit = false; + unsigned sleep_ms = 0; +#if defined(_WIN32) && !defined(_XBOX) && !defined(__WINRT__) + ui_companion_win32.application->process_events(); +#endif +#ifdef HAVE_QT + ui_companion_qt.application->process_events(); +#endif + ret = runloop_iterate(&sleep_ms); + + if (ret == 1 && sleep_ms > 0) + retro_sleep(sleep_ms); + + task_queue_check(); + +#ifdef HAVE_QT + app_exit = ui_companion_qt.application->exiting; +#endif + + if (ret == -1 || app_exit) + { +#ifdef HAVE_QT + ui_companion_qt.application->quit(); +#endif + break; + } + }while(1); + + main_exit(data); +#endif + + return 0; +} + +#ifndef HAVE_MAIN +#ifdef __cplusplus +extern "C" +#endif +int main(int argc, char *argv[]) +{ + return rarch_main(argc, argv, NULL); +} +#endif + /* CORE OPTIONS */ static bool core_option_manager_parse_variable( core_option_manager_t *opt, size_t idx,