From 24a859fa16745c550adab9acb89d59a35f15d578 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Tue, 9 Jul 2019 08:09:40 +0200 Subject: [PATCH] Move secondary_core to retroarch.c --- Makefile.common | 3 +- dynamic.c | 2 +- griffin/griffin.c | 1 - retroarch.c | 430 +++++++++++++++++++++++++++++++++++- runahead/secondary_core.c | 447 -------------------------------------- runahead/secondary_core.h | 24 -- 6 files changed, 431 insertions(+), 476 deletions(-) delete mode 100644 runahead/secondary_core.c delete mode 100644 runahead/secondary_core.h diff --git a/Makefile.common b/Makefile.common index 35004ba67c..f1edf685f8 100644 --- a/Makefile.common +++ b/Makefile.common @@ -265,8 +265,7 @@ ifeq ($(HAVE_RUNAHEAD), 1) DEFINES += -DHAVE_RUNAHEAD OBJ += runahead/copy_load_info.o \ runahead/mem_util.o \ - runahead/mylist.o \ - runahead/secondary_core.o + runahead/mylist.o endif ifeq ($(HAVE_CC_RESAMPLER), 1) diff --git a/dynamic.c b/dynamic.c index 8da15379a3..f5bd40c8e1 100644 --- a/dynamic.c +++ b/dynamic.c @@ -71,7 +71,7 @@ #endif #ifdef HAVE_RUNAHEAD -#include "runahead/secondary_core.h" +#include "runahead/copy_load_info.h" #include "runahead/run_ahead.h" #endif diff --git a/griffin/griffin.c b/griffin/griffin.c index 386aabc392..540457a691 100644 --- a/griffin/griffin.c +++ b/griffin/griffin.c @@ -1363,7 +1363,6 @@ MENU #ifdef HAVE_RUNAHEAD #include "../runahead/mem_util.c" -#include "../runahead/secondary_core.c" #include "../runahead/copy_load_info.c" #include "../runahead/mylist.c" #endif diff --git a/retroarch.c b/retroarch.c index 77326a4714..1fdde71fc7 100644 --- a/retroarch.c +++ b/retroarch.c @@ -29,6 +29,13 @@ #endif #endif +#if defined(_WIN32_WINNT) && _WIN32_WINNT < 0x0500 || defined(_XBOX) +#ifndef LEGACY_WIN32 +#define LEGACY_WIN32 +#endif +#endif + + #include #include #include @@ -168,7 +175,7 @@ #include "runahead/dirty_input.h" #include "runahead/copy_load_info.h" #include "runahead/mylist.h" -#include "runahead/secondary_core.h" +#include "runahead/mem_util.h" #include "runahead/run_ahead.h" #endif @@ -334,6 +341,426 @@ static char log_file_override_path[PATH_MAX_LENGTH] = {0}; static char launch_arguments[4096]; +static bool has_variable_update = false; + + +#if defined(HAVE_RUNAHEAD) + +/* Runahead - Secondary core */ +#if defined(HAVE_DYNAMIC) || defined(HAVE_DYLIB) +#include + +static int port_map[16]; + +static char *secondary_library_path; +static dylib_t secondary_module; +static struct retro_core_t secondary_core; +static struct retro_callbacks secondary_callbacks; + +extern retro_ctx_load_content_info_t *load_content_info; +extern enum rarch_core_type last_core_type; +extern struct retro_callbacks retro_ctx; + +static bool secondary_core_create(void); + +static void secondary_core_destroy(void) +{ + if (!secondary_module) + return; + + /* unload game from core */ + if (secondary_core.retro_unload_game) + secondary_core.retro_unload_game(); + /* deinit */ + if (secondary_core.retro_deinit) + secondary_core.retro_deinit(); + memset(&secondary_core, 0, sizeof(struct retro_core_t)); + + dylib_close(secondary_module); + secondary_module = NULL; + filestream_delete(secondary_library_path); + if (secondary_library_path) + free(secondary_library_path); + secondary_library_path = NULL; +} + +static bool secondary_core_ensure_exists(void) +{ + if (!secondary_module) + { + if (!secondary_core_create()) + { + secondary_core_destroy(); + return false; + } + } + return true; +} + +static bool secondary_core_deserialize(const void *buffer, int size) +{ + if (secondary_core_ensure_exists()) + return secondary_core.retro_unserialize(buffer, size); + return false; +} + +static void remember_controller_port_device(long port, long device) +{ + if (port >= 0 && port < 16) + port_map[port] = (int)device; + if (secondary_module && secondary_core.retro_set_controller_port_device) + secondary_core.retro_set_controller_port_device((unsigned)port, (unsigned)device); +} + +static void clear_controller_port_map(void) +{ + unsigned port; + for (port = 0; port < 16; port++) + port_map[port] = -1; +} + +static void secondary_core_set_variable_update(void) +{ + has_variable_update = true; +} + +static char *get_temp_directory_alloc(void) +{ + char *path = NULL; +#ifdef _WIN32 +#ifdef LEGACY_WIN32 + DWORD pathLength = GetTempPath(0, NULL) + 1; + path = (char*)malloc(pathLength * sizeof(char)); + + if (!path) + return NULL; + + path[pathLength - 1] = 0; + GetTempPath(pathLength, path); +#else + DWORD pathLength = GetTempPathW(0, NULL) + 1; + wchar_t *wideStr = (wchar_t*)malloc(pathLength * sizeof(wchar_t)); + + if (!wideStr) + return NULL; + + wideStr[pathLength - 1] = 0; + GetTempPathW(pathLength, wideStr); + + path = utf16_to_utf8_string_alloc(wideStr); + free(wideStr); +#endif +#elif defined ANDROID + { + settings_t *settings = config_get_ptr(); + path = strcpy_alloc_force(settings->paths.directory_libretro); + } +#else + if (getenv("TMPDIR")) + path = strcpy_alloc_force(getenv("TMPDIR")); + else + path = strcpy_alloc_force("/tmp"); + +#endif + return path; +} + +static bool write_file_with_random_name(char **tempDllPath, + const char *retroarchTempPath, const void* data, ssize_t dataSize) +{ + unsigned i; + char number_buf[32]; + bool okay = false; + const char *prefix = "tmp"; + time_t time_value = time(NULL); + unsigned number_value = (unsigned)time_value; + char *ext = strcpy_alloc_force( + path_get_extension(*tempDllPath)); + int ext_len = (int)strlen(ext); + + if (ext_len > 0) + { + strcat_alloc(&ext, "."); + memmove(ext + 1, ext, ext_len); + ext[0] = '.'; + ext_len++; + } + + /* Try up to 30 'random' filenames before giving up */ + for (i = 0; i < 30; i++) + { + int number; + number_value = number_value * 214013 + 2531011; + number = (number_value >> 14) % 100000; + + snprintf(number_buf, sizeof(number_buf), "%05d", number); + + if (*tempDllPath) + free(*tempDllPath); + *tempDllPath = NULL; + strcat_alloc(tempDllPath, retroarchTempPath); + strcat_alloc(tempDllPath, prefix); + strcat_alloc(tempDllPath, number_buf); + strcat_alloc(tempDllPath, ext); + if (filestream_write_file(*tempDllPath, data, dataSize)) + { + okay = true; + break; + } + } + + if (ext) + free(ext); + ext = NULL; + return okay; +} + +static char *copy_core_to_temp_file(void) +{ + bool failed = false; + char *tempDirectory = NULL; + char *retroarchTempPath = NULL; + char *tempDllPath = NULL; + void *dllFileData = NULL; + int64_t dllFileSize = 0; + const char *corePath = path_get(RARCH_PATH_CORE); + const char *coreBaseName = path_basename(corePath); + + if (strlen(coreBaseName) == 0) + { + failed = true; + goto end; + } + + tempDirectory = get_temp_directory_alloc(); + if (!tempDirectory) + { + failed = true; + goto end; + } + + strcat_alloc(&retroarchTempPath, tempDirectory); + strcat_alloc(&retroarchTempPath, path_default_slash()); + strcat_alloc(&retroarchTempPath, "retroarch_temp"); + strcat_alloc(&retroarchTempPath, path_default_slash()); + + if (!path_mkdir(retroarchTempPath)) + { + failed = true; + goto end; + } + + if (!filestream_read_file(corePath, &dllFileData, &dllFileSize)) + { + failed = true; + goto end; + } + + strcat_alloc(&tempDllPath, retroarchTempPath); + strcat_alloc(&tempDllPath, coreBaseName); + + if (!filestream_write_file(tempDllPath, dllFileData, dllFileSize)) + { + /* try other file names */ + if (!write_file_with_random_name(&tempDllPath, + retroarchTempPath, dllFileData, dllFileSize)) + failed = true; + } + +end: + if (tempDirectory) + free(tempDirectory); + if (retroarchTempPath) + free(retroarchTempPath); + if (dllFileData) + free(dllFileData); + + tempDirectory = NULL; + retroarchTempPath = NULL; + dllFileData = NULL; + + if (!failed) + return tempDllPath; + + if (tempDllPath) + free(tempDllPath); + + tempDllPath = NULL; + + return NULL; +} + +static bool rarch_environment_secondary_core_hook(unsigned cmd, void *data) +{ + bool result = rarch_environment_cb(cmd, data); + if (has_variable_update) + { + if (cmd == RETRO_ENVIRONMENT_GET_VARIABLE_UPDATE) + { + bool *bool_p = (bool*)data; + *bool_p = true; + has_variable_update = false; + return true; + } + else if (cmd == RETRO_ENVIRONMENT_GET_VARIABLE) + has_variable_update = false; + } + return result; +} + +static bool secondary_core_create(void) +{ + long port, device; + bool contentless = false; + bool is_inited = false; + + if ( last_core_type != CORE_TYPE_PLAIN || + !load_content_info || + load_content_info->special) + return false; + + if (secondary_library_path) + free(secondary_library_path); + secondary_library_path = NULL; + secondary_library_path = copy_core_to_temp_file(); + + if (!secondary_library_path) + return false; + + /* Load Core */ + if (init_libretro_sym_custom( + CORE_TYPE_PLAIN, &secondary_core, + secondary_library_path, &secondary_module)) + { + secondary_core.symbols_inited = true; + secondary_core.retro_set_environment( + rarch_environment_secondary_core_hook); + secondary_core_set_variable_update(); + + secondary_core.retro_init(); + + content_get_status(&contentless, &is_inited); + secondary_core.inited = is_inited; + + /* Load Content */ + if (!load_content_info || load_content_info->special) + { + /* disabled due to crashes */ + return false; +#if 0 + secondary_core.game_loaded = secondary_core.retro_load_game_special( + loadContentInfo.special->id, loadContentInfo.info, loadContentInfo.content->size); + if (!secondary_core.game_loaded) + { + secondary_core_destroy(); + return false; + } +#endif + } + else if (load_content_info->content->size > 0 && load_content_info->content->elems[0].data) + { + secondary_core.game_loaded = secondary_core.retro_load_game(load_content_info->info); + if (!secondary_core.game_loaded) + { + secondary_core_destroy(); + return false; + } + } + else if (contentless) + { + secondary_core.game_loaded = secondary_core.retro_load_game(NULL); + if (!secondary_core.game_loaded) + { + secondary_core_destroy(); + return false; + } + } + else + secondary_core.game_loaded = false; + + if (!secondary_core.inited) + { + secondary_core_destroy(); + return false; + } + + core_set_default_callbacks(&secondary_callbacks); + secondary_core.retro_set_video_refresh(secondary_callbacks.frame_cb); + secondary_core.retro_set_audio_sample(secondary_callbacks.sample_cb); + secondary_core.retro_set_audio_sample_batch(secondary_callbacks.sample_batch_cb); + secondary_core.retro_set_input_state(secondary_callbacks.state_cb); + secondary_core.retro_set_input_poll(secondary_callbacks.poll_cb); + + for (port = 0; port < 16; port++) + { + device = port_map[port]; + if (device >= 0) + secondary_core.retro_set_controller_port_device( + (unsigned)port, (unsigned)device); + } + clear_controller_port_map(); + } + else + return false; + + return true; +} + +static void secondary_core_input_poll_null(void) { } + +bool secondary_core_run_use_last_input(void) +{ + retro_input_poll_t old_poll_function; + retro_input_state_t old_input_function; + + if (!secondary_core_ensure_exists()) + return false; + + old_poll_function = secondary_callbacks.poll_cb; + old_input_function = secondary_callbacks.state_cb; + + secondary_callbacks.poll_cb = secondary_core_input_poll_null; + secondary_callbacks.state_cb = input_state_get_last; + + secondary_core.retro_set_input_poll(secondary_callbacks.poll_cb); + secondary_core.retro_set_input_state(secondary_callbacks.state_cb); + + secondary_core.retro_run(); + + secondary_callbacks.poll_cb = old_poll_function; + secondary_callbacks.state_cb = old_input_function; + + secondary_core.retro_set_input_poll(secondary_callbacks.poll_cb); + secondary_core.retro_set_input_state(secondary_callbacks.state_cb); + + return true; +} + +#else +bool secondary_core_deserialize(const void *buffer, int size) +{ + return false; +} + +static void secondary_core_destroy(void) +{ +} + +static void remember_controller_port_device(long port, long device) +{ +} + +static void secondary_core_set_variable_update(void) +{ +} + +static void clear_controller_port_map(void) +{ +} +#endif + +#endif + /* Core Options */ static bool core_option_manager_parse_variable( @@ -13522,6 +13949,7 @@ bool get_hard_disable_audio(void) { return hard_disable_audio; } + #endif void rarch_core_runtime_tick(void) diff --git a/runahead/secondary_core.c b/runahead/secondary_core.c deleted file mode 100644 index 085abddf0b..0000000000 --- a/runahead/secondary_core.c +++ /dev/null @@ -1,447 +0,0 @@ -#if defined(HAVE_DYNAMIC) || defined(HAVE_DYLIB) - -#include -#include - -#if defined(_WIN32_WINNT) && _WIN32_WINNT < 0x0500 || defined(_XBOX) -#ifndef LEGACY_WIN32 -#define LEGACY_WIN32 -#endif -#endif - -#include -#include -#include -#include -#include - -#include "mem_util.h" - -#include "../core.h" -#include "../configuration.h" -#include "../dynamic.h" -#include "../paths.h" -#include "../content.h" - -#include "secondary_core.h" -#include "dirty_input.h" - -static int port_map[16]; - -static char *secondary_library_path; -static dylib_t secondary_module; -static struct retro_core_t secondary_core; -static struct retro_callbacks secondary_callbacks; - -extern retro_ctx_load_content_info_t *load_content_info; -extern enum rarch_core_type last_core_type; -extern struct retro_callbacks retro_ctx; - -bool secondary_core_run_no_input_polling(void); - -bool secondary_core_deserialize(const void *buffer, int size); - -void secondary_core_destroy(void); - -void set_last_core_type(enum rarch_core_type type); - -void remember_controller_port_device(long port, long device); - -void clear_controller_port_map(void); - -static char *get_temp_directory_alloc(void) -{ - char *path = NULL; -#ifdef _WIN32 -#ifdef LEGACY_WIN32 - DWORD pathLength = GetTempPath(0, NULL) + 1; - path = (char*)malloc(pathLength * sizeof(char)); - - if (!path) - return NULL; - - path[pathLength - 1] = 0; - GetTempPath(pathLength, path); -#else - DWORD pathLength = GetTempPathW(0, NULL) + 1; - wchar_t *wideStr = (wchar_t*)malloc(pathLength * sizeof(wchar_t)); - - if (!wideStr) - return NULL; - - wideStr[pathLength - 1] = 0; - GetTempPathW(pathLength, wideStr); - - path = utf16_to_utf8_string_alloc(wideStr); - free(wideStr); -#endif -#elif defined ANDROID - { - settings_t *settings = config_get_ptr(); - path = strcpy_alloc_force(settings->paths.directory_libretro); - } -#else - if (getenv("TMPDIR")) - path = strcpy_alloc_force(getenv("TMPDIR")); - else - path = strcpy_alloc_force("/tmp"); - -#endif - return path; -} - -static bool write_file_with_random_name(char **tempDllPath, - const char *retroarchTempPath, const void* data, ssize_t dataSize) -{ - unsigned i; - char number_buf[32]; - bool okay = false; - const char *prefix = "tmp"; - time_t time_value = time(NULL); - unsigned number_value = (unsigned)time_value; - char *ext = strcpy_alloc_force( - path_get_extension(*tempDllPath)); - int ext_len = (int)strlen(ext); - - if (ext_len > 0) - { - strcat_alloc(&ext, "."); - memmove(ext + 1, ext, ext_len); - ext[0] = '.'; - ext_len++; - } - - /* Try up to 30 'random' filenames before giving up */ - for (i = 0; i < 30; i++) - { - int number; - number_value = number_value * 214013 + 2531011; - number = (number_value >> 14) % 100000; - - snprintf(number_buf, sizeof(number_buf), "%05d", number); - - if (*tempDllPath) - free(*tempDllPath); - *tempDllPath = NULL; - strcat_alloc(tempDllPath, retroarchTempPath); - strcat_alloc(tempDllPath, prefix); - strcat_alloc(tempDllPath, number_buf); - strcat_alloc(tempDllPath, ext); - if (filestream_write_file(*tempDllPath, data, dataSize)) - { - okay = true; - break; - } - } - - if (ext) - free(ext); - ext = NULL; - return okay; -} - -static char *copy_core_to_temp_file(void) -{ - bool failed = false; - char *tempDirectory = NULL; - char *retroarchTempPath = NULL; - char *tempDllPath = NULL; - void *dllFileData = NULL; - int64_t dllFileSize = 0; - const char *corePath = path_get(RARCH_PATH_CORE); - const char *coreBaseName = path_basename(corePath); - - if (strlen(coreBaseName) == 0) - { - failed = true; - goto end; - } - - tempDirectory = get_temp_directory_alloc(); - if (!tempDirectory) - { - failed = true; - goto end; - } - - strcat_alloc(&retroarchTempPath, tempDirectory); - strcat_alloc(&retroarchTempPath, path_default_slash()); - strcat_alloc(&retroarchTempPath, "retroarch_temp"); - strcat_alloc(&retroarchTempPath, path_default_slash()); - - if (!path_mkdir(retroarchTempPath)) - { - failed = true; - goto end; - } - - if (!filestream_read_file(corePath, &dllFileData, &dllFileSize)) - { - failed = true; - goto end; - } - - strcat_alloc(&tempDllPath, retroarchTempPath); - strcat_alloc(&tempDllPath, coreBaseName); - - if (!filestream_write_file(tempDllPath, dllFileData, dllFileSize)) - { - /* try other file names */ - if (!write_file_with_random_name(&tempDllPath, - retroarchTempPath, dllFileData, dllFileSize)) - failed = true; - } - -end: - if (tempDirectory) - free(tempDirectory); - if (retroarchTempPath) - free(retroarchTempPath); - if (dllFileData) - free(dllFileData); - - tempDirectory = NULL; - retroarchTempPath = NULL; - dllFileData = NULL; - - if (!failed) - return tempDllPath; - - if (tempDllPath) - free(tempDllPath); - - tempDllPath = NULL; - - return NULL; -} - -static bool has_variable_update = false; - -static bool rarch_environment_secondary_core_hook(unsigned cmd, void *data) -{ - bool result = rarch_environment_cb(cmd, data); - if (has_variable_update) - { - if (cmd == RETRO_ENVIRONMENT_GET_VARIABLE_UPDATE) - { - bool *bool_p = (bool*)data; - *bool_p = true; - has_variable_update = false; - return true; - } - else if (cmd == RETRO_ENVIRONMENT_GET_VARIABLE) - has_variable_update = false; - } - return result; -} - -static bool secondary_core_create(void) -{ - long port, device; - bool contentless = false; - bool is_inited = false; - - if ( last_core_type != CORE_TYPE_PLAIN || - !load_content_info || - load_content_info->special) - return false; - - if (secondary_library_path) - free(secondary_library_path); - secondary_library_path = NULL; - secondary_library_path = copy_core_to_temp_file(); - - if (!secondary_library_path) - return false; - - /* Load Core */ - if (init_libretro_sym_custom( - CORE_TYPE_PLAIN, &secondary_core, - secondary_library_path, &secondary_module)) - { - secondary_core.symbols_inited = true; - secondary_core.retro_set_environment( - rarch_environment_secondary_core_hook); - secondary_core_set_variable_update(); - - secondary_core.retro_init(); - - content_get_status(&contentless, &is_inited); - secondary_core.inited = is_inited; - - /* Load Content */ - if (!load_content_info || load_content_info->special) - { - /* disabled due to crashes */ - return false; -#if 0 - secondary_core.game_loaded = secondary_core.retro_load_game_special( - loadContentInfo.special->id, loadContentInfo.info, loadContentInfo.content->size); - if (!secondary_core.game_loaded) - { - secondary_core_destroy(); - return false; - } -#endif - } - else if (load_content_info->content->size > 0 && load_content_info->content->elems[0].data) - { - secondary_core.game_loaded = secondary_core.retro_load_game(load_content_info->info); - if (!secondary_core.game_loaded) - { - secondary_core_destroy(); - return false; - } - } - else if (contentless) - { - secondary_core.game_loaded = secondary_core.retro_load_game(NULL); - if (!secondary_core.game_loaded) - { - secondary_core_destroy(); - return false; - } - } - else - secondary_core.game_loaded = false; - - if (!secondary_core.inited) - { - secondary_core_destroy(); - return false; - } - - core_set_default_callbacks(&secondary_callbacks); - secondary_core.retro_set_video_refresh(secondary_callbacks.frame_cb); - secondary_core.retro_set_audio_sample(secondary_callbacks.sample_cb); - secondary_core.retro_set_audio_sample_batch(secondary_callbacks.sample_batch_cb); - secondary_core.retro_set_input_state(secondary_callbacks.state_cb); - secondary_core.retro_set_input_poll(secondary_callbacks.poll_cb); - - for (port = 0; port < 16; port++) - { - device = port_map[port]; - if (device >= 0) - secondary_core.retro_set_controller_port_device( - (unsigned)port, (unsigned)device); - } - clear_controller_port_map(); - } - else - return false; - - return true; -} - -void secondary_core_set_variable_update(void) -{ - has_variable_update = true; -} - -static void secondary_core_input_poll_null(void) { } - -bool secondary_core_run_use_last_input(void) -{ - retro_input_poll_t old_poll_function; - retro_input_state_t old_input_function; - - if (!secondary_core_ensure_exists()) - return false; - - old_poll_function = secondary_callbacks.poll_cb; - old_input_function = secondary_callbacks.state_cb; - - secondary_callbacks.poll_cb = secondary_core_input_poll_null; - secondary_callbacks.state_cb = input_state_get_last; - - secondary_core.retro_set_input_poll(secondary_callbacks.poll_cb); - secondary_core.retro_set_input_state(secondary_callbacks.state_cb); - - secondary_core.retro_run(); - - secondary_callbacks.poll_cb = old_poll_function; - secondary_callbacks.state_cb = old_input_function; - - secondary_core.retro_set_input_poll(secondary_callbacks.poll_cb); - secondary_core.retro_set_input_state(secondary_callbacks.state_cb); - - return true; -} - -bool secondary_core_deserialize(const void *buffer, int size) -{ - if (secondary_core_ensure_exists()) - return secondary_core.retro_unserialize(buffer, size); - return false; -} - -bool secondary_core_ensure_exists(void) -{ - if (!secondary_module) - { - if (!secondary_core_create()) - { - secondary_core_destroy(); - return false; - } - } - return true; -} - -void secondary_core_destroy(void) -{ - if (!secondary_module) - return; - - /* unload game from core */ - if (secondary_core.retro_unload_game) - secondary_core.retro_unload_game(); - /* deinit */ - if (secondary_core.retro_deinit) - secondary_core.retro_deinit(); - memset(&secondary_core, 0, sizeof(struct retro_core_t)); - - dylib_close(secondary_module); - secondary_module = NULL; - filestream_delete(secondary_library_path); - if (secondary_library_path) - free(secondary_library_path); - secondary_library_path = NULL; -} - -void remember_controller_port_device(long port, long device) -{ - if (port >= 0 && port < 16) - port_map[port] = (int)device; - if (secondary_module && secondary_core.retro_set_controller_port_device) - secondary_core.retro_set_controller_port_device((unsigned)port, (unsigned)device); -} - -void clear_controller_port_map(void) -{ - unsigned port; - for (port = 0; port < 16; port++) - port_map[port] = -1; -} - -#else -#include - -#include "../core.h" - -bool secondary_core_run_no_input_polling(void) -{ - return false; -} - -bool secondary_core_deserialize(const void *buffer, int size) -{ - return false; -} - -void secondary_core_destroy(void) { } -void remember_controller_port_device(long port, long device) { } -void secondary_core_set_variable_update(void) { } -void clear_controller_port_map(void) { } - -#endif diff --git a/runahead/secondary_core.h b/runahead/secondary_core.h deleted file mode 100644 index 9a6ead0b7c..0000000000 --- a/runahead/secondary_core.h +++ /dev/null @@ -1,24 +0,0 @@ -#ifndef __SECONDARY_CORE_H__ -#define __SECONDARY_CORE_H__ - -#include -#include - -#include - -#include "../core_type.h" - -RETRO_BEGIN_DECLS - -bool secondary_core_run_use_last_input(void); -bool secondary_core_deserialize(const void *buffer, int size); -bool secondary_core_ensure_exists(void); -void secondary_core_destroy(void); -void set_last_core_type(enum rarch_core_type type); -void remember_controller_port_device(long port, long device); -void clear_controller_port_map(void); -void secondary_core_set_variable_update(void); - -RETRO_END_DECLS - -#endif