mirror of
https://github.com/libretro/RetroArch
synced 2025-03-31 10:20:41 +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)))
|
OBJ += $(patsubst %.c,%.o,$(foreach dir,$(SOURCES), $(wildcard $(dir)/*.c)))
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
ifeq ($(HAVE_WEBOS), 1)
|
||||||
|
DEFINES += -DWEBOS
|
||||||
|
endif
|
||||||
|
|
||||||
#####################################
|
#####################################
|
||||||
### Android Play Feature Delivery ###
|
### Android Play Feature Delivery ###
|
||||||
### (Play Store build core ###
|
### (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 */
|
||||||
/* Window size. A value of 0 uses window scale
|
/* Window size. A value of 0 uses window scale
|
||||||
* multiplied by the core framebuffer size. */
|
* 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_WIDTH 1280
|
||||||
#define DEFAULT_WINDOW_HEIGHT 720
|
#define DEFAULT_WINDOW_HEIGHT 720
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Fullscreen resolution. A value of 0 uses the desktop
|
/* Fullscreen resolution. A value of 0 uses the desktop
|
||||||
* resolution. */
|
* resolution. */
|
||||||
@ -251,8 +256,18 @@
|
|||||||
*/
|
*/
|
||||||
#define DEFAULT_WINDOW_OPACITY 100
|
#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_DECORATIONS true
|
||||||
|
#define DEFAULT_WINDOW_SAVE_POSITIONS false
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined(RARCH_CONSOLE) || defined(__APPLE__)
|
#if defined(RARCH_CONSOLE) || defined(__APPLE__)
|
||||||
#define DEFAULT_LOAD_DUMMY_ON_CORE_SHUTDOWN false
|
#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
|
#define DEFAULT_REWIND_GRANULARITY 1
|
||||||
#endif
|
#endif
|
||||||
/* Pause gameplay when gameplay loses focus. */
|
/* Pause gameplay when gameplay loses focus. */
|
||||||
#ifdef EMSCRIPTEN
|
#if defined(EMSCRIPTEN) || defined(WEBOS)
|
||||||
#define DEFAULT_PAUSE_NONACTIVE false
|
#define DEFAULT_PAUSE_NONACTIVE false
|
||||||
#else
|
#else
|
||||||
#define DEFAULT_PAUSE_NONACTIVE true
|
#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;
|
static const enum input_driver_enum INPUT_DEFAULT_DRIVER = INPUT_ANDROID;
|
||||||
#elif defined(EMSCRIPTEN) && defined(HAVE_SDL2)
|
#elif defined(EMSCRIPTEN) && defined(HAVE_SDL2)
|
||||||
static const enum input_driver_enum INPUT_DEFAULT_DRIVER = INPUT_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)
|
#elif defined(EMSCRIPTEN)
|
||||||
static const enum input_driver_enum INPUT_DEFAULT_DRIVER = INPUT_RWEBINPUT;
|
static const enum input_driver_enum INPUT_DEFAULT_DRIVER = INPUT_RWEBINPUT;
|
||||||
#elif defined(_WIN32) && defined(HAVE_DINPUT)
|
#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;
|
static const enum joypad_driver_enum JOYPAD_DEFAULT_DRIVER = JOYPAD_GX;
|
||||||
#elif defined(WIIU)
|
#elif defined(WIIU)
|
||||||
static const enum joypad_driver_enum JOYPAD_DEFAULT_DRIVER = JOYPAD_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)
|
#elif defined(_XBOX)
|
||||||
static const enum joypad_driver_enum JOYPAD_DEFAULT_DRIVER = JOYPAD_XDK;
|
static const enum joypad_driver_enum JOYPAD_DEFAULT_DRIVER = JOYPAD_XDK;
|
||||||
#elif defined(PS2)
|
#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_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_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);
|
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);
|
FILE_TYPE_DIRECTORY, 0, 0);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
|
||||||
menu_entries_append_enum(list,
|
menu_entries_append_enum(list,
|
||||||
"/storage/emulated/0",
|
"/storage/emulated/0",
|
||||||
msg_hash_to_str(MSG_REMOVABLE_STORAGE),
|
msg_hash_to_str(MSG_REMOVABLE_STORAGE),
|
||||||
enum_idx,
|
enum_idx,
|
||||||
FILE_TYPE_DIRECTORY, 0, 0);
|
FILE_TYPE_DIRECTORY, 0, 0);
|
||||||
}
|
|
||||||
menu_entries_append_enum(list,
|
menu_entries_append_enum(list,
|
||||||
"/storage",
|
"/storage",
|
||||||
msg_hash_to_str(MSG_REMOVABLE_STORAGE),
|
msg_hash_to_str(MSG_REMOVABLE_STORAGE),
|
||||||
enum_idx,
|
enum_idx,
|
||||||
FILE_TYPE_DIRECTORY, 0, 0);
|
FILE_TYPE_DIRECTORY, 0, 0);
|
||||||
if (!string_is_empty(internal_storage_app_path))
|
if (!string_is_empty(internal_storage_app_path))
|
||||||
{
|
|
||||||
menu_entries_append_enum(list,
|
menu_entries_append_enum(list,
|
||||||
internal_storage_app_path,
|
internal_storage_app_path,
|
||||||
msg_hash_to_str(MSG_EXTERNAL_APPLICATION_DIR),
|
msg_hash_to_str(MSG_EXTERNAL_APPLICATION_DIR),
|
||||||
enum_idx,
|
enum_idx,
|
||||||
FILE_TYPE_DIRECTORY, 0, 0);
|
FILE_TYPE_DIRECTORY, 0, 0);
|
||||||
}
|
|
||||||
if (!string_is_empty(app_dir))
|
if (!string_is_empty(app_dir))
|
||||||
{
|
|
||||||
menu_entries_append_enum(list,
|
menu_entries_append_enum(list,
|
||||||
app_dir,
|
app_dir,
|
||||||
msg_hash_to_str(MSG_APPLICATION_DIR),
|
msg_hash_to_str(MSG_APPLICATION_DIR),
|
||||||
enum_idx,
|
enum_idx,
|
||||||
FILE_TYPE_DIRECTORY, 0, 0);
|
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
|
#else
|
||||||
char base_path[PATH_MAX] = {0};
|
char base_path[PATH_MAX] = {0};
|
||||||
char udisks_media_path[PATH_MAX] = {0};
|
char udisks_media_path[PATH_MAX] = {0};
|
||||||
|
@ -32,6 +32,10 @@
|
|||||||
#include "../common/sdl2_common.h"
|
#include "../common/sdl2_common.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(WEBOS) && defined(HAVE_SDL2)
|
||||||
|
#include <SDL_webOS.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
typedef struct gfx_ctx_sdl_data
|
typedef struct gfx_ctx_sdl_data
|
||||||
{
|
{
|
||||||
int width;
|
int width;
|
||||||
@ -41,6 +45,7 @@ typedef struct gfx_ctx_sdl_data
|
|||||||
|
|
||||||
bool full;
|
bool full;
|
||||||
bool resized;
|
bool resized;
|
||||||
|
bool subsystem_inited;
|
||||||
|
|
||||||
#ifdef HAVE_SDL2
|
#ifdef HAVE_SDL2
|
||||||
SDL_Window *win;
|
SDL_Window *win;
|
||||||
@ -73,6 +78,19 @@ static void sdl_ctx_destroy_resources(gfx_ctx_sdl_data_t *sdl)
|
|||||||
sdl->win = NULL;
|
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)
|
static void *sdl_ctx_init(void *video_driver)
|
||||||
{
|
{
|
||||||
gfx_ctx_sdl_data_t *sdl = (gfx_ctx_sdl_data_t*)
|
gfx_ctx_sdl_data_t *sdl = (gfx_ctx_sdl_data_t*)
|
||||||
@ -86,6 +104,12 @@ static void *sdl_ctx_init(void *video_driver)
|
|||||||
XInitThreads();
|
XInitThreads();
|
||||||
#endif
|
#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 */
|
/* Initialise graphics subsystem, if required */
|
||||||
if (sdl_subsystem_flags == 0)
|
if (sdl_subsystem_flags == 0)
|
||||||
{
|
{
|
||||||
@ -96,6 +120,7 @@ static void *sdl_ctx_init(void *video_driver)
|
|||||||
{
|
{
|
||||||
if (SDL_InitSubSystem(SDL_INIT_VIDEO) < 0)
|
if (SDL_InitSubSystem(SDL_INIT_VIDEO) < 0)
|
||||||
goto error;
|
goto error;
|
||||||
|
sdl->subsystem_inited = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
RARCH_LOG("[SDL_GL] SDL %i.%i.%i gfx context driver initialized.\n",
|
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",
|
RARCH_WARN("[SDL_GL]: Failed to initialize SDL gfx context driver: %s\n",
|
||||||
SDL_GetError());
|
SDL_GetError());
|
||||||
|
|
||||||
sdl_ctx_destroy_resources(sdl);
|
sdl_ctx_destroy(sdl);
|
||||||
|
|
||||||
if (sdl)
|
|
||||||
free(sdl);
|
|
||||||
|
|
||||||
return NULL;
|
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; }
|
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;
|
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),
|
SDL_WINDOWPOS_UNDEFINED_DISPLAY(display),
|
||||||
width, height, SDL_WINDOW_OPENGL | fsflag);
|
width, height, SDL_WINDOW_OPENGL | fsflag);
|
||||||
}
|
}
|
||||||
|
@ -35,6 +35,11 @@
|
|||||||
#include "../../gfx/common/sdl2_common.h"
|
#include "../../gfx/common/sdl2_common.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef WEBOS
|
||||||
|
#include <SDL_webOS.h>
|
||||||
|
#include <dlfcn.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
/* TODO/FIXME -
|
/* TODO/FIXME -
|
||||||
* fix game focus toggle */
|
* fix game focus toggle */
|
||||||
|
|
||||||
@ -55,6 +60,15 @@ typedef struct sdl_input
|
|||||||
int mouse_wr;
|
int mouse_wr;
|
||||||
} sdl_input_t;
|
} 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)
|
static void *sdl_input_init(const char *joypad_driver)
|
||||||
{
|
{
|
||||||
sdl_input_t *sdl = (sdl_input_t*)calloc(1, sizeof(*sdl));
|
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];
|
unsigned sym = rarch_keysym_lut[(enum retro_key)key];
|
||||||
#endif
|
#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)
|
if (sym >= (unsigned)num_keys)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
@ -164,6 +190,27 @@ static int16_t sdl_input_state(
|
|||||||
return sdl->mouse_l;
|
return sdl->mouse_l;
|
||||||
case RETRO_DEVICE_ID_MOUSE_RIGHT:
|
case RETRO_DEVICE_ID_MOUSE_RIGHT:
|
||||||
return sdl->mouse_r;
|
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:
|
case RETRO_DEVICE_ID_MOUSE_WHEELUP:
|
||||||
return sdl->mouse_wu;
|
return sdl->mouse_wu;
|
||||||
case RETRO_DEVICE_ID_MOUSE_WHEELDOWN:
|
case RETRO_DEVICE_ID_MOUSE_WHEELDOWN:
|
||||||
@ -172,6 +219,7 @@ static int16_t sdl_input_state(
|
|||||||
return sdl->mouse_x;
|
return sdl->mouse_x;
|
||||||
case RETRO_DEVICE_ID_MOUSE_Y:
|
case RETRO_DEVICE_ID_MOUSE_Y:
|
||||||
return sdl->mouse_y;
|
return sdl->mouse_y;
|
||||||
|
#endif
|
||||||
case RETRO_DEVICE_ID_MOUSE_MIDDLE:
|
case RETRO_DEVICE_ID_MOUSE_MIDDLE:
|
||||||
return sdl->mouse_m;
|
return sdl->mouse_m;
|
||||||
case RETRO_DEVICE_ID_MOUSE_BUTTON_4:
|
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)
|
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(
|
unsigned code = input_keymaps_translate_keysym_to_rk(
|
||||||
event.key.keysym.sym);
|
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)
|
if (event.key.keysym.mod & KMOD_SHIFT)
|
||||||
mod |= RETROKMOD_SHIFT;
|
mod |= RETROKMOD_SHIFT;
|
||||||
@ -396,3 +476,23 @@ input_driver_t input_sdl = {
|
|||||||
#endif
|
#endif
|
||||||
NULL
|
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];
|
vendor = guid_ptr[0];
|
||||||
product = guid_ptr[1];
|
product = guid_ptr[1];
|
||||||
#endif
|
#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
|
#endif
|
||||||
|
|
||||||
input_autoconfigure_connect(
|
input_autoconfigure_connect(
|
||||||
|
@ -34467,9 +34467,12 @@ static bool retroarch_parse_input_and_config(
|
|||||||
optstring = "hs:fvS:A:U:DN:d:"
|
optstring = "hs:fvS:A:U:DN:d:"
|
||||||
BSV_MOVIE_ARG NETPLAY_ARG DYNAMIC_ARG FFMPEG_RECORD_ARG CONFIG_FILE_ARG;
|
BSV_MOVIE_ARG NETPLAY_ARG DYNAMIC_ARG FFMPEG_RECORD_ARG CONFIG_FILE_ARG;
|
||||||
|
|
||||||
#ifdef ORBIS
|
#if defined(ORBIS)
|
||||||
argv = &(argv[2]);
|
argv = &(argv[2]);
|
||||||
argc = argc - 2;
|
argc = argc - 2;
|
||||||
|
#elif defined(WEBOS)
|
||||||
|
argv = &(argv[1]);
|
||||||
|
argc = argc - 1;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef HAVE_MENU
|
#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