mirror of
https://github.com/libretro/RetroArch
synced 2025-03-29 04:20:28 +00:00
Add initial webOS port courtesy of informatic/webosbrew/mariotaku
This commit is contained in:
parent
c34982d695
commit
20ef0667b0
@ -2437,6 +2437,10 @@ ifeq ($(HAVE_VITAGLES), 1)
|
||||
OBJ += $(patsubst %.c,%.o,$(foreach dir,$(SOURCES), $(wildcard $(dir)/*.c)))
|
||||
endif
|
||||
|
||||
ifeq ($(HAVE_WEBOS), 1)
|
||||
DEFINES += -DWEBOS
|
||||
endif
|
||||
|
||||
#####################################
|
||||
### Android Play Feature Delivery ###
|
||||
### (Play Store build core ###
|
||||
|
242
Makefile.webos
Normal file
242
Makefile.webos
Normal file
@ -0,0 +1,242 @@
|
||||
include version.all
|
||||
|
||||
$(call assert,$(call seq,$(TARGET_PREFIX),arm-webos-linux-gnueabi-),webOS SDK isn't setup properly. See https://github.com/webosbrew/meta-lg-webos-ndk#compile-program-by-command-line)
|
||||
|
||||
WEBOS_FREETYPE_CONFIG ?= $(SDKTARGETSYSROOT)/usr/bin/freetype-config
|
||||
|
||||
WEBOS_INC_DIR ?= $(SDKTARGETSYSROOT)/usr/include
|
||||
WEBOS_LIB_DIR ?= $(SDKTARGETSYSROOT)/usr/lib
|
||||
|
||||
#########################
|
||||
#########################
|
||||
|
||||
PACKAGE_NAME = com.retroarch
|
||||
PACKAGE_VERSION := $(patsubst "%",%,$(RARCH_VERSION))
|
||||
|
||||
DEBUG ?= 0
|
||||
|
||||
HAVE_SCREENSHOTS = 0
|
||||
HAVE_REWIND = 1
|
||||
HAVE_7ZIP = 1
|
||||
HAVE_ACCESSIBILITY = 1
|
||||
HAVE_AL = 0
|
||||
# ALSA freezes when switching back from menu
|
||||
HAVE_ALSA = 0
|
||||
HAVE_ANGLE = 0
|
||||
HAVE_AUDIOIO = 0
|
||||
HAVE_AUDIOMIXER = 1
|
||||
HAVE_BLISSBOX = 0
|
||||
HAVE_BSV_MOVIE = 1
|
||||
HAVE_BUILTINBEARSSL = 0
|
||||
HAVE_BUILTINFLAC = 1
|
||||
HAVE_DSP_FILTER = 1
|
||||
HAVE_VIDEO_FILTER = 1
|
||||
HAVE_STATIC_VIDEO_FILTERS = 1
|
||||
HAVE_STATIC_AUDIO_FILTERS = 1
|
||||
HAVE_FILTERS_BUILTIN = 1
|
||||
HAVE_BUILTINMBEDTLS = 1
|
||||
HAVE_BUILTINZLIB = 1
|
||||
HAVE_C99 = 1
|
||||
HAVE_CC = 1
|
||||
HAVE_CC_RESAMPLER = 1
|
||||
HAVE_NEAREST_RESAMPLER = 1
|
||||
HAVE_CHD = 1
|
||||
HAVE_COMMAND = 1
|
||||
HAVE_CXX = 1
|
||||
HAVE_DR_MP3 = 1
|
||||
HAVE_DYNAMIC = 1
|
||||
HAVE_DYLIB = 1
|
||||
HAVE_EGL = 0
|
||||
HAVE_FREETYPE = 0
|
||||
HAVE_GDI = 1
|
||||
HAVE_GETADDRINFO = 1
|
||||
HAVE_GETOPT_LONG = 1
|
||||
HAVE_GLSL = 1
|
||||
HAVE_GLSLANG = 0
|
||||
HAVE_GLSLANG_HLSL = 0
|
||||
HAVE_GLSLANG_OGLCOMPILER = 0
|
||||
HAVE_GLSLANG_OSDEPENDENT = 0
|
||||
HAVE_GLSLANG_SPIRV = 0
|
||||
HAVE_GLSLANG_SPIRV_TOOLS = 0
|
||||
HAVE_GLSLANG_SPIRV_TOOLS_OPT = 0
|
||||
HAVE_HID = 1
|
||||
HAVE_IBXM = 1
|
||||
HAVE_IMAGEVIEWER = 1
|
||||
HAVE_LANGEXTRA = 1
|
||||
HAVE_LIBRETRODB = 1
|
||||
HAVE_MENU = 1
|
||||
HAVE_MENU_COMMON = 1
|
||||
HAVE_NEON = 1
|
||||
HAVE_NETPLAYDISCOVERY = 1
|
||||
HAVE_NETPLAYDISCOVERY = 1
|
||||
HAVE_NETWORK_CMD = 1
|
||||
HAVE_NETWORKGAMEPAD = 1
|
||||
HAVE_NETWORKING = 1
|
||||
HAVE_GFX_WIDGETS = 1
|
||||
HAVE_MMAP = 1
|
||||
HAVE_ONLINE_UPDATER = 1
|
||||
HAVE_OPENDINGUX_FBDEV = 0
|
||||
HAVE_OPENGL = 0
|
||||
HAVE_OPENGL1 = 0
|
||||
HAVE_OPENGL_CORE = 0
|
||||
HAVE_OPENGLES = 1
|
||||
HAVE_OPENGLES3 = 0
|
||||
HAVE_OPENGLES3_1 = 0
|
||||
HAVE_OPENGLES3_2 = 0
|
||||
HAVE_OPENSSL = 0
|
||||
HAVE_OVERLAY = 1
|
||||
HAVE_PULSE = 1
|
||||
HAVE_RBMP = 1
|
||||
HAVE_RJPEG = 1
|
||||
HAVE_RPILED = 0
|
||||
HAVE_RPNG = 1
|
||||
HAVE_RUNAHEAD = 1
|
||||
HAVE_SDL = 0
|
||||
HAVE_SDL2 = 1
|
||||
HAVE_SHADERPIPELINE = 1
|
||||
HAVE_STB_FONT = 1
|
||||
HAVE_STB_IMAGE = 1
|
||||
HAVE_STB_VORBIS = 1
|
||||
HAVE_STDIN_CMD = 0
|
||||
HAVE_STRCASESTR = 1
|
||||
HAVE_THREADS = 1
|
||||
HAVE_UDEV = 0
|
||||
HAVE_RGUI = 1
|
||||
HAVE_MATERIALUI = 0
|
||||
HAVE_XMB = 1
|
||||
HAVE_OZONE = 1
|
||||
HAVE_ZLIB = 1
|
||||
HAVE_CONFIGFILE = 1
|
||||
HAVE_PATCH = 1
|
||||
HAVE_CHEATS = 1
|
||||
HAVE_CHEEVOS = 1
|
||||
HAVE_LIBSHAKE = 1
|
||||
HAVE_UPDATE_ASSETS = 1
|
||||
HAVE_UPDATE_CORES = 1
|
||||
|
||||
OS = Linux
|
||||
TARGET = retroarch
|
||||
|
||||
OBJ :=
|
||||
LINK := $(CXX)
|
||||
DEF_FLAGS += -ffunction-sections -fdata-sections
|
||||
DEF_FLAGS += -I. -Ideps -Ideps/stb -DWEBOS=1 -MMD
|
||||
DEF_FLAGS += -Wall -Wno-unused-variable
|
||||
LIBS := -ldl -lz -lrt -pthread
|
||||
CFLAGS :=
|
||||
CXXFLAGS := -fno-exceptions -fno-rtti -std=c++11 -D__STDC_CONSTANT_MACROS
|
||||
ASFLAGS :=
|
||||
LDFLAGS := -Wl,--gc-sections
|
||||
INCLUDE_DIRS = -I$(WEBOS_INC_DIR)
|
||||
LIBRARY_DIRS = -L$(WEBOS_LIB_DIR)
|
||||
DEFINES := -DRARCH_INTERNAL -D_FILE_OFFSET_BITS=64 -UHAVE_STATIC_DUMMY
|
||||
DEFINES += -DHAVE_C99=1 -DHAVE_CXX=1 -D_GNU_SOURCE
|
||||
DEFINES += -DHAVE_GETOPT_LONG=1 -DHAVE_STRCASESTR=1 -DHAVE_DYNAMIC=1
|
||||
DEFINES += -DHAVE_FILTERS_BUILTIN
|
||||
DEFINES += -DHAVE_SDL2
|
||||
DEFINES += -DHAVE_PULSE
|
||||
DEFINES += -DHAVE_NETWORKING -DHAVE_ONLINE_UPDATER -DHAVE_UPDATE_ASSETS -DHAVE_UPDATE_CORES
|
||||
|
||||
SDL2_CFLAGS := $(shell pkg-config --cflags sdl2)
|
||||
SDL2_LIBS := $(shell pkg-config --libs sdl2)
|
||||
OPENGLES_LIBS = -lGLESv2
|
||||
PULSE_LIBS = $(shell pkg-config --libs libpulse)
|
||||
MMAP_LIBS = -lc
|
||||
NEON_CFLAGS = -mfpu=neon
|
||||
NEON_ASFLAGS = -mfpu=neon
|
||||
NETWORKING_LIBS = -lc
|
||||
|
||||
OBJDIR_BASE := obj-unix
|
||||
|
||||
ifeq ($(DEBUG), 1)
|
||||
OBJDIR := $(OBJDIR_BASE)/debug
|
||||
DEF_FLAGS += -O0 -g -DDEBUG -D_DEBUG
|
||||
else
|
||||
OBJDIR := $(OBJDIR_BASE)/release
|
||||
DEF_FLAGS += -O2 -DNDEBUG
|
||||
endif
|
||||
|
||||
include Makefile.common
|
||||
|
||||
DEF_FLAGS += $(INCLUDE_DIRS)
|
||||
LDFLAGS += $(CFLAGS) $(CXXFLAGS) $(DEF_FLAGS)
|
||||
CFLAGS += $(DEF_FLAGS)
|
||||
CXXFLAGS += $(DEF_FLAGS)
|
||||
|
||||
HEADERS = $(wildcard */*/*.h) $(wildcard */*.h) $(wildcard *.h)
|
||||
|
||||
Q := @
|
||||
|
||||
RARCH_OBJ := $(addprefix $(OBJDIR)/,$(OBJ))
|
||||
|
||||
define APPINFO
|
||||
{
|
||||
"id": "$(PACKAGE_NAME)",
|
||||
"version": "$(PACKAGE_VERSION)",
|
||||
"vendor": "webosbrew.org",
|
||||
"title": "RetroArch",
|
||||
"icon": "icon160.png",
|
||||
"main": "retroarch",
|
||||
"iconColor": "#333333",
|
||||
"type": "native",
|
||||
"appDescription": "Emulation frontend"
|
||||
}
|
||||
endef
|
||||
export APPINFO
|
||||
|
||||
all: $(TARGET) ipk
|
||||
|
||||
-include $(RARCH_OBJ:.o=.d)
|
||||
|
||||
SYMBOL_MAP := -Wl,-Map=output.map
|
||||
|
||||
$(TARGET): $(RARCH_OBJ)
|
||||
@$(if $(Q), $(shell echo echo LD $@),)
|
||||
$(Q)$(LINK) -o $@ $(RARCH_OBJ) $(LIBS) $(LDFLAGS) $(LIBRARY_DIRS)
|
||||
|
||||
$(OBJDIR)/%.o: %.c
|
||||
@mkdir -p $(dir $@)
|
||||
@$(if $(Q), $(shell echo echo CC $<),)
|
||||
$(Q)$(CC) $(CPPFLAGS) $(CFLAGS) $(DEFINES) -c -o $@ $<
|
||||
|
||||
$(OBJDIR)/%.o: %.cpp
|
||||
@mkdir -p $(dir $@)
|
||||
@$(if $(Q), $(shell echo echo CXX $<),)
|
||||
$(Q)$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(DEFINES) -MMD -c -o $@ $<
|
||||
|
||||
$(OBJDIR)/%.o: %.m
|
||||
@mkdir -p $(dir $@)
|
||||
@$(if $(Q), $(shell echo echo OBJC $<),)
|
||||
$(Q)$(CXX) $(OBJCFLAGS) $(DEFINES) -MMD -c -o $@ $<
|
||||
|
||||
$(OBJDIR)/%.o: %.S $(HEADERS)
|
||||
@mkdir -p $(dir $@)
|
||||
@$(if $(Q), $(shell echo echo AS $<),)
|
||||
$(Q)$(CC) $(CFLAGS) $(ASFLAGS) $(DEFINES) -c -o $@ $<
|
||||
|
||||
clean:
|
||||
rm -rf $(OBJDIR_BASE)
|
||||
rm -f $(TARGET)
|
||||
rm -f *.d
|
||||
rm -rf webos/*.ipk
|
||||
rm -rf webos/dist
|
||||
|
||||
ipk: $(TARGET)
|
||||
rm -rf webos/dist
|
||||
mkdir -p webos/dist/lib
|
||||
echo "$$APPINFO" > webos/dist/appinfo.json
|
||||
cp -t webos/dist -vf $(TARGET) webos/icon160.png
|
||||
cp -t webos/dist/lib -vf $(WEBOS_LIB_DIR)/libstdc++.so.6
|
||||
$(STRIP) webos/dist/$(TARGET)
|
||||
cd webos && ares-package dist
|
||||
|
||||
install: ipk
|
||||
ares-install webos/$(PACKAGE_NAME)_$(PACKAGE_VERSION)_$(ARCH).ipk
|
||||
|
||||
launch: install
|
||||
ares-launch com.retroarch
|
||||
|
||||
.PHONY: all clean ipk
|
||||
|
||||
print-%:
|
||||
@echo '$*=$($*)'
|
19
config.def.h
19
config.def.h
@ -224,8 +224,13 @@
|
||||
/* Window */
|
||||
/* Window size. A value of 0 uses window scale
|
||||
* multiplied by the core framebuffer size. */
|
||||
#if defined(WEBOS)
|
||||
#define DEFAULT_WINDOW_WIDTH 1920
|
||||
#define DEFAULT_WINDOW_HEIGHT 1080
|
||||
#else
|
||||
#define DEFAULT_WINDOW_WIDTH 1280
|
||||
#define DEFAULT_WINDOW_HEIGHT 720
|
||||
#endif
|
||||
|
||||
/* Fullscreen resolution. A value of 0 uses the desktop
|
||||
* resolution. */
|
||||
@ -251,8 +256,18 @@
|
||||
*/
|
||||
#define DEFAULT_WINDOW_OPACITY 100
|
||||
|
||||
/* Whether to show the usual window decorations like border, titlebar etc. */
|
||||
/* DEFAULT_WINDOW_DECORATIONS:
|
||||
Whether to show the usual window decorations like border, titlebar etc. */
|
||||
/* DEFAULT_WINDOW_SAVE_POSITIONS:
|
||||
Whether to remember window positions
|
||||
*/
|
||||
#ifdef WEBOS
|
||||
#define DEFAULT_WINDOW_DECORATIONS false
|
||||
#define DEFAULT_WINDOW_SAVE_POSITIONS true
|
||||
#else
|
||||
#define DEFAULT_WINDOW_DECORATIONS true
|
||||
#define DEFAULT_WINDOW_SAVE_POSITIONS false
|
||||
#endif
|
||||
|
||||
#if defined(RARCH_CONSOLE) || defined(__APPLE__)
|
||||
#define DEFAULT_LOAD_DUMMY_ON_CORE_SHUTDOWN false
|
||||
@ -1061,7 +1076,7 @@ static const bool audio_enable_menu_bgm = false;
|
||||
#define DEFAULT_REWIND_GRANULARITY 1
|
||||
#endif
|
||||
/* Pause gameplay when gameplay loses focus. */
|
||||
#ifdef EMSCRIPTEN
|
||||
#if defined(EMSCRIPTEN) || defined(WEBOS)
|
||||
#define DEFAULT_PAUSE_NONACTIVE false
|
||||
#else
|
||||
#define DEFAULT_PAUSE_NONACTIVE true
|
||||
|
@ -427,6 +427,8 @@ static const enum input_driver_enum INPUT_DEFAULT_DRIVER = INPUT_XINPUT;
|
||||
static const enum input_driver_enum INPUT_DEFAULT_DRIVER = INPUT_ANDROID;
|
||||
#elif defined(EMSCRIPTEN) && defined(HAVE_SDL2)
|
||||
static const enum input_driver_enum INPUT_DEFAULT_DRIVER = INPUT_SDL2;
|
||||
#elif defined(WEBOS) && defined(HAVE_SDL2)
|
||||
static const enum input_driver_enum INPUT_DEFAULT_DRIVER = INPUT_SDL2;
|
||||
#elif defined(EMSCRIPTEN)
|
||||
static const enum input_driver_enum INPUT_DEFAULT_DRIVER = INPUT_RWEBINPUT;
|
||||
#elif defined(_WIN32) && defined(HAVE_DINPUT)
|
||||
@ -479,6 +481,8 @@ static const enum joypad_driver_enum JOYPAD_DEFAULT_DRIVER = JOYPAD_XINPUT;
|
||||
static const enum joypad_driver_enum JOYPAD_DEFAULT_DRIVER = JOYPAD_GX;
|
||||
#elif defined(WIIU)
|
||||
static const enum joypad_driver_enum JOYPAD_DEFAULT_DRIVER = JOYPAD_WIIU;
|
||||
#elif defined(WEBOS)
|
||||
static const enum joypad_driver_enum JOYPAD_DEFAULT_DRIVER = JOYPAD_SDL;
|
||||
#elif defined(_XBOX)
|
||||
static const enum joypad_driver_enum JOYPAD_DEFAULT_DRIVER = JOYPAD_XDK;
|
||||
#elif defined(PS2)
|
||||
@ -1840,7 +1844,7 @@ static struct config_bool_setting *populate_settings_bool(
|
||||
|
||||
SETTING_BOOL("video_msg_bgcolor_enable", &settings->bools.video_msg_bgcolor_enable, true, message_bgcolor_enable, false);
|
||||
SETTING_BOOL("video_window_show_decorations", &settings->bools.video_window_show_decorations, true, DEFAULT_WINDOW_DECORATIONS, false);
|
||||
SETTING_BOOL("video_window_save_positions", &settings->bools.video_window_save_positions, true, false, false);
|
||||
SETTING_BOOL("video_window_save_positions", &settings->bools.video_window_save_positions, true, DEFAULT_WINDOW_SAVE_POSITIONS, false);
|
||||
|
||||
SETTING_BOOL("sustained_performance_mode", &settings->bools.sustained_performance_mode, true, sustained_performance_mode, false);
|
||||
|
||||
|
@ -2123,34 +2123,41 @@ static int frontend_unix_parse_drive_list(void *data, bool load_content)
|
||||
FILE_TYPE_DIRECTORY, 0, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
menu_entries_append_enum(list,
|
||||
"/storage/emulated/0",
|
||||
msg_hash_to_str(MSG_REMOVABLE_STORAGE),
|
||||
enum_idx,
|
||||
FILE_TYPE_DIRECTORY, 0, 0);
|
||||
}
|
||||
|
||||
menu_entries_append_enum(list,
|
||||
"/storage",
|
||||
msg_hash_to_str(MSG_REMOVABLE_STORAGE),
|
||||
enum_idx,
|
||||
FILE_TYPE_DIRECTORY, 0, 0);
|
||||
if (!string_is_empty(internal_storage_app_path))
|
||||
{
|
||||
menu_entries_append_enum(list,
|
||||
internal_storage_app_path,
|
||||
msg_hash_to_str(MSG_EXTERNAL_APPLICATION_DIR),
|
||||
enum_idx,
|
||||
FILE_TYPE_DIRECTORY, 0, 0);
|
||||
}
|
||||
if (!string_is_empty(app_dir))
|
||||
{
|
||||
menu_entries_append_enum(list,
|
||||
app_dir,
|
||||
msg_hash_to_str(MSG_APPLICATION_DIR),
|
||||
enum_idx,
|
||||
FILE_TYPE_DIRECTORY, 0, 0);
|
||||
}
|
||||
#elif defined(WEBOS)
|
||||
if (path_is_directory("/media/internal"))
|
||||
menu_entries_append_enum(list, "/media/internal",
|
||||
msg_hash_to_str(MENU_ENUM_LABEL_FILE_DETECT_CORE_LIST_PUSH_DIR),
|
||||
enum_idx,
|
||||
FILE_TYPE_DIRECTORY, 0, 0);
|
||||
|
||||
if (path_is_directory("/tmp/usb"))
|
||||
menu_entries_append_enum(list, "/tmp/usb",
|
||||
msg_hash_to_str(MENU_ENUM_LABEL_FILE_DETECT_CORE_LIST_PUSH_DIR),
|
||||
enum_idx,
|
||||
FILE_TYPE_DIRECTORY, 0, 0);
|
||||
#else
|
||||
char base_path[PATH_MAX] = {0};
|
||||
char udisks_media_path[PATH_MAX] = {0};
|
||||
|
@ -32,6 +32,10 @@
|
||||
#include "../common/sdl2_common.h"
|
||||
#endif
|
||||
|
||||
#if defined(WEBOS) && defined(HAVE_SDL2)
|
||||
#include <SDL_webOS.h>
|
||||
#endif
|
||||
|
||||
typedef struct gfx_ctx_sdl_data
|
||||
{
|
||||
int width;
|
||||
@ -41,6 +45,7 @@ typedef struct gfx_ctx_sdl_data
|
||||
|
||||
bool full;
|
||||
bool resized;
|
||||
bool subsystem_inited;
|
||||
|
||||
#ifdef HAVE_SDL2
|
||||
SDL_Window *win;
|
||||
@ -73,6 +78,19 @@ static void sdl_ctx_destroy_resources(gfx_ctx_sdl_data_t *sdl)
|
||||
sdl->win = NULL;
|
||||
}
|
||||
|
||||
static void sdl_ctx_destroy(void *data)
|
||||
{
|
||||
gfx_ctx_sdl_data_t *sdl = (gfx_ctx_sdl_data_t*)data;
|
||||
|
||||
if (!sdl)
|
||||
return;
|
||||
|
||||
sdl_ctx_destroy_resources(sdl);
|
||||
if (sdl->subsystem_inited)
|
||||
SDL_QuitSubSystem(SDL_INIT_VIDEO);
|
||||
free(sdl);
|
||||
}
|
||||
|
||||
static void *sdl_ctx_init(void *video_driver)
|
||||
{
|
||||
gfx_ctx_sdl_data_t *sdl = (gfx_ctx_sdl_data_t*)
|
||||
@ -86,6 +104,12 @@ static void *sdl_ctx_init(void *video_driver)
|
||||
XInitThreads();
|
||||
#endif
|
||||
|
||||
#ifdef WEBOS
|
||||
SDL_SetHint(SDL_HINT_WEBOS_ACCESS_POLICY_KEYS_BACK, "true");
|
||||
SDL_SetHint(SDL_HINT_WEBOS_ACCESS_POLICY_KEYS_EXIT, "true");
|
||||
SDL_SetHint(SDL_HINT_WEBOS_CURSOR_SLEEP_TIME, "1000");
|
||||
#endif
|
||||
|
||||
/* Initialise graphics subsystem, if required */
|
||||
if (sdl_subsystem_flags == 0)
|
||||
{
|
||||
@ -96,6 +120,7 @@ static void *sdl_ctx_init(void *video_driver)
|
||||
{
|
||||
if (SDL_InitSubSystem(SDL_INIT_VIDEO) < 0)
|
||||
goto error;
|
||||
sdl->subsystem_inited = true;
|
||||
}
|
||||
|
||||
RARCH_LOG("[SDL_GL] SDL %i.%i.%i gfx context driver initialized.\n",
|
||||
@ -107,24 +132,11 @@ error:
|
||||
RARCH_WARN("[SDL_GL]: Failed to initialize SDL gfx context driver: %s\n",
|
||||
SDL_GetError());
|
||||
|
||||
sdl_ctx_destroy_resources(sdl);
|
||||
|
||||
if (sdl)
|
||||
free(sdl);
|
||||
sdl_ctx_destroy(sdl);
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static void sdl_ctx_destroy(void *data)
|
||||
{
|
||||
gfx_ctx_sdl_data_t *sdl = (gfx_ctx_sdl_data_t*)data;
|
||||
|
||||
if (!sdl)
|
||||
return;
|
||||
|
||||
sdl_ctx_destroy_resources(sdl);
|
||||
free(sdl);
|
||||
}
|
||||
|
||||
static enum gfx_ctx_api sdl_ctx_get_api(void *data) { return sdl_api; }
|
||||
|
||||
@ -201,7 +213,8 @@ static bool sdl_ctx_set_video_mode(void *data,
|
||||
{
|
||||
unsigned display = video_monitor_index;
|
||||
|
||||
sdl->win = SDL_CreateWindow("", SDL_WINDOWPOS_UNDEFINED_DISPLAY(display),
|
||||
sdl->win = SDL_CreateWindow("RetroArch",
|
||||
SDL_WINDOWPOS_UNDEFINED_DISPLAY(display),
|
||||
SDL_WINDOWPOS_UNDEFINED_DISPLAY(display),
|
||||
width, height, SDL_WINDOW_OPENGL | fsflag);
|
||||
}
|
||||
|
@ -35,6 +35,11 @@
|
||||
#include "../../gfx/common/sdl2_common.h"
|
||||
#endif
|
||||
|
||||
#ifdef WEBOS
|
||||
#include <SDL_webOS.h>
|
||||
#include <dlfcn.h>
|
||||
#endif
|
||||
|
||||
/* TODO/FIXME -
|
||||
* fix game focus toggle */
|
||||
|
||||
@ -55,6 +60,15 @@ typedef struct sdl_input
|
||||
int mouse_wr;
|
||||
} sdl_input_t;
|
||||
|
||||
#ifdef WEBOS
|
||||
enum sdl_webos_special_key {
|
||||
sdl_webos_spkey_back,
|
||||
sdl_webos_spkey_size,
|
||||
};
|
||||
|
||||
static uint8_t sdl_webos_special_keymap[sdl_webos_spkey_size] = {0};
|
||||
#endif
|
||||
|
||||
static void *sdl_input_init(const char *joypad_driver)
|
||||
{
|
||||
sdl_input_t *sdl = (sdl_input_t*)calloc(1, sizeof(*sdl));
|
||||
@ -77,6 +91,18 @@ static bool sdl_key_pressed(int key)
|
||||
unsigned sym = rarch_keysym_lut[(enum retro_key)key];
|
||||
#endif
|
||||
|
||||
#ifdef WEBOS
|
||||
if ( (key == RETROK_BACKSPACE )
|
||||
&& sdl_webos_special_keymap[sdl_webos_spkey_back])
|
||||
{
|
||||
/* Reset to unpressed state */
|
||||
sdl_webos_special_keymap[sdl_webos_spkey_back] = 0;
|
||||
return true;
|
||||
}
|
||||
if (key == RETROK_F1 && keymap[SDL_WEBOS_SCANCODE_EXIT])
|
||||
return true;
|
||||
#endif
|
||||
|
||||
if (sym >= (unsigned)num_keys)
|
||||
return false;
|
||||
|
||||
@ -164,6 +190,27 @@ static int16_t sdl_input_state(
|
||||
return sdl->mouse_l;
|
||||
case RETRO_DEVICE_ID_MOUSE_RIGHT:
|
||||
return sdl->mouse_r;
|
||||
#ifdef WEBOS
|
||||
case RETRO_DEVICE_ID_MOUSE_WHEELUP:
|
||||
/* Note: webOS wheel is reversed */
|
||||
if (sdl->mouse_wd != 0)
|
||||
{
|
||||
sdl->mouse_wd = 0;
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
case RETRO_DEVICE_ID_MOUSE_WHEELDOWN:
|
||||
if (sdl->mouse_wu != 0)
|
||||
{
|
||||
sdl->mouse_wu = 0;
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
case RETRO_DEVICE_ID_MOUSE_X:
|
||||
return sdl->mouse_abs_x;
|
||||
case RETRO_DEVICE_ID_MOUSE_Y:
|
||||
return sdl->mouse_abs_y;
|
||||
#else
|
||||
case RETRO_DEVICE_ID_MOUSE_WHEELUP:
|
||||
return sdl->mouse_wu;
|
||||
case RETRO_DEVICE_ID_MOUSE_WHEELDOWN:
|
||||
@ -172,6 +219,7 @@ static int16_t sdl_input_state(
|
||||
return sdl->mouse_x;
|
||||
case RETRO_DEVICE_ID_MOUSE_Y:
|
||||
return sdl->mouse_y;
|
||||
#endif
|
||||
case RETRO_DEVICE_ID_MOUSE_MIDDLE:
|
||||
return sdl->mouse_m;
|
||||
case RETRO_DEVICE_ID_MOUSE_BUTTON_4:
|
||||
@ -330,9 +378,41 @@ static void sdl_input_poll(void *data)
|
||||
{
|
||||
if (event.type == SDL_KEYDOWN || event.type == SDL_KEYUP)
|
||||
{
|
||||
uint16_t mod = 0;
|
||||
uint16_t mod = 0;
|
||||
unsigned code = input_keymaps_translate_keysym_to_rk(
|
||||
event.key.keysym.sym);
|
||||
#ifdef WEBOS
|
||||
switch ((int) event.key.keysym.scancode)
|
||||
{
|
||||
case SDL_WEBOS_SCANCODE_BACK:
|
||||
/* Because webOS is sending DOWN/UP at the same time,
|
||||
we save this flag for later */
|
||||
sdl_webos_special_keymap[sdl_webos_spkey_back] |= event.type == SDL_KEYDOWN;
|
||||
code = RETROK_BACKSPACE;
|
||||
break;
|
||||
case SDL_WEBOS_SCANCODE_RED:
|
||||
code = RETROK_x;
|
||||
break;
|
||||
case SDL_WEBOS_SCANCODE_GREEN:
|
||||
code = RETROK_z;
|
||||
break;
|
||||
case SDL_WEBOS_SCANCODE_YELLOW:
|
||||
code = RETROK_s;
|
||||
break;
|
||||
case SDL_WEBOS_SCANCODE_BLUE:
|
||||
code = RETROK_a;
|
||||
break;
|
||||
case SDL_WEBOS_SCANCODE_EXIT:
|
||||
code = RETROK_F1;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
/* Disable cursor when using the buttons */
|
||||
if (code && code != RETROK_RETURN)
|
||||
SDL_webOSCursorVisibility(0);
|
||||
#endif
|
||||
|
||||
if (event.key.keysym.mod & KMOD_SHIFT)
|
||||
mod |= RETROKMOD_SHIFT;
|
||||
@ -396,3 +476,23 @@ input_driver_t input_sdl = {
|
||||
#endif
|
||||
NULL
|
||||
};
|
||||
|
||||
#ifdef WEBOS
|
||||
SDL_bool SDL_webOSCursorVisibility(SDL_bool visible)
|
||||
{
|
||||
static SDL_bool (*fn)(SDL_bool visible) = NULL;
|
||||
static bool dlsym_called = false;
|
||||
if (!dlsym_called)
|
||||
{
|
||||
fn = dlsym(RTLD_NEXT, "SDL_webOSCursorVisibility");
|
||||
dlsym_called = true;
|
||||
}
|
||||
if (!fn)
|
||||
{
|
||||
SDL_ShowCursor(SDL_DISABLE);
|
||||
SDL_ShowCursor(SDL_ENABLE);
|
||||
return SDL_TRUE;
|
||||
}
|
||||
return fn(visible);
|
||||
}
|
||||
#endif
|
||||
|
@ -138,6 +138,17 @@ static void sdl_pad_connect(unsigned id)
|
||||
vendor = guid_ptr[0];
|
||||
product = guid_ptr[1];
|
||||
#endif
|
||||
#ifdef WEBOS
|
||||
if (vendor == 0x9999 && product == 0x9999)
|
||||
{
|
||||
RARCH_WARN("[SDL_JOYPAD]: Ignoring pad #%d (vendor: %d; product: %d)\n", id, vendor, product);
|
||||
if (pad->joypad)
|
||||
SDL_JoystickClose(pad->joypad);
|
||||
|
||||
pad->joypad = NULL;
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
input_autoconfigure_connect(
|
||||
|
@ -34467,9 +34467,12 @@ static bool retroarch_parse_input_and_config(
|
||||
optstring = "hs:fvS:A:U:DN:d:"
|
||||
BSV_MOVIE_ARG NETPLAY_ARG DYNAMIC_ARG FFMPEG_RECORD_ARG CONFIG_FILE_ARG;
|
||||
|
||||
#ifdef ORBIS
|
||||
#if defined(ORBIS)
|
||||
argv = &(argv[2]);
|
||||
argc = argc - 2;
|
||||
#elif defined(WEBOS)
|
||||
argv = &(argv[1]);
|
||||
argc = argc - 1;
|
||||
#endif
|
||||
|
||||
#ifndef HAVE_MENU
|
||||
|
3
webos/.gitignore
vendored
Normal file
3
webos/.gitignore
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
dist/
|
||||
prefix/
|
||||
*.ipk
|
14
webos/README.md
Normal file
14
webos/README.md
Normal file
@ -0,0 +1,14 @@
|
||||
## Building
|
||||
```sh
|
||||
make -f Makefile.webos clean
|
||||
make -f Makefile.webos -j$(ncpu --all) ipk
|
||||
```
|
||||
|
||||
## Testing
|
||||
```sh
|
||||
# Install and launch via ares-launch
|
||||
make -f Makefile.webos launch
|
||||
|
||||
# Start installed application via SSH
|
||||
XDG_RUNTIME_DIR=/tmp/xdg /usr/bin/jailer -t native_devmode -i com.retroarch -p /media/developer/apps/usr/palm/applications/com.retroarch /media/developer/apps/usr/palm/applications/com.retroarch/retroarch --verbose --verbose
|
||||
```
|
11
webos/appinfo.json
Normal file
11
webos/appinfo.json
Normal file
@ -0,0 +1,11 @@
|
||||
{
|
||||
"id": "com.retroarch",
|
||||
"version": "1.9.8",
|
||||
"vendor": "libretro.com",
|
||||
"title": "RetroArch",
|
||||
"icon": "icon160.png",
|
||||
"main": "retroarch",
|
||||
"iconColor": "#333333",
|
||||
"type": "native",
|
||||
"appDescription": "Official Libretro frontend"
|
||||
}
|
3
webos/build-icon.sh
Normal file
3
webos/build-icon.sh
Normal file
@ -0,0 +1,3 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
convert -background none media/retroarch.svg -resize 160x160 -negate webos/icon160.png
|
BIN
webos/icon160.png
Normal file
BIN
webos/icon160.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 10 KiB |
Loading…
x
Reference in New Issue
Block a user