[Android] Unified xenia-app with windowed apps and build prerequisites
This commit is contained in:
parent
b41bb35a20
commit
037310f8dc
15
.drone.star
15
.drone.star
|
@ -39,37 +39,36 @@ def targets_android(platform):
|
||||||
'mspack',
|
'mspack',
|
||||||
'snappy',
|
'snappy',
|
||||||
'xxhash',
|
'xxhash',
|
||||||
'xenia-core',
|
'xenia-app',
|
||||||
# 'xenia-app-discord',
|
# 'xenia-app-discord',
|
||||||
'xenia-apu',
|
'xenia-apu',
|
||||||
'xenia-apu-nop',
|
'xenia-apu-nop',
|
||||||
'xenia-base',
|
'xenia-base',
|
||||||
'xenia-base-tests',
|
'xenia-base-tests',
|
||||||
|
'xenia-core',
|
||||||
'xenia-cpu',
|
'xenia-cpu',
|
||||||
# 'xenia-cpu-tests',
|
'xenia-cpu-tests',
|
||||||
# 'xenia-cpu-ppc-tests',
|
'xenia-cpu-ppc-tests',
|
||||||
# 'xenia-cpu-backend-x64',
|
# 'xenia-cpu-backend-x64',
|
||||||
# 'xenia-debug-ui',
|
# 'xenia-debug-ui',
|
||||||
'xenia-gpu',
|
'xenia-gpu',
|
||||||
'xenia-gpu-shader-compiler',
|
'xenia-gpu-shader-compiler',
|
||||||
'xenia-gpu-null',
|
'xenia-gpu-null',
|
||||||
'xenia-gpu-vulkan',
|
'xenia-gpu-vulkan',
|
||||||
# 'xenia-gpu-vulkan-trace-viewer',
|
'xenia-gpu-vulkan-trace-viewer',
|
||||||
'xenia-gpu-vulkan-trace-dump',
|
'xenia-gpu-vulkan-trace-dump',
|
||||||
'xenia-hid',
|
'xenia-hid',
|
||||||
# 'xenia-hid-demo',
|
'xenia-hid-demo',
|
||||||
'xenia-hid-nop',
|
'xenia-hid-nop',
|
||||||
'xenia-kernel',
|
'xenia-kernel',
|
||||||
'xenia-ui',
|
'xenia-ui',
|
||||||
'xenia-ui-vulkan',
|
'xenia-ui-vulkan',
|
||||||
# 'xenia-ui-window-vulkan-demo',
|
'xenia-ui-window-vulkan-demo',
|
||||||
'xenia-vfs',
|
'xenia-vfs',
|
||||||
'xenia-vfs-dump',
|
'xenia-vfs-dump',
|
||||||
]
|
]
|
||||||
if platform == 'Android-x86_64':
|
if platform == 'Android-x86_64':
|
||||||
targets.extend([
|
targets.extend([
|
||||||
'xenia-cpu-tests',
|
|
||||||
'xenia-cpu-ppc-tests',
|
|
||||||
'xenia-cpu-backend-x64',
|
'xenia-cpu-backend-x64',
|
||||||
'xenia-debug-ui',
|
'xenia-debug-ui',
|
||||||
])
|
])
|
||||||
|
|
|
@ -13,8 +13,7 @@ import jp.xenia.XeniaRuntimeException;
|
||||||
|
|
||||||
public abstract class WindowedAppActivity extends Activity {
|
public abstract class WindowedAppActivity extends Activity {
|
||||||
static {
|
static {
|
||||||
// TODO(Triang3l): Move all demos to libxenia.so.
|
System.loadLibrary("xenia-app");
|
||||||
System.loadLibrary("xenia-ui-window-vulkan-demo");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private final WindowSurfaceOnLayoutChangeListener mWindowSurfaceOnLayoutChangeListener =
|
private final WindowSurfaceOnLayoutChangeListener mWindowSurfaceOnLayoutChangeListener =
|
||||||
|
|
11
premake5.lua
11
premake5.lua
|
@ -141,6 +141,12 @@ filter("platforms:Android-*")
|
||||||
systemversion("24")
|
systemversion("24")
|
||||||
cppstl("c++")
|
cppstl("c++")
|
||||||
staticruntime("On")
|
staticruntime("On")
|
||||||
|
-- Hidden visibility is needed to prevent dynamic relocations in FFmpeg
|
||||||
|
-- AArch64 Neon libavcodec assembly with PIC (accesses extern lookup tables
|
||||||
|
-- using `adrp` and `add`, without the Global Object Table, expecting that all
|
||||||
|
-- FFmpeg symbols that aren't a part of the FFmpeg API are hidden by FFmpeg's
|
||||||
|
-- original build system) by resolving those relocations at link time instead.
|
||||||
|
visibility("Hidden")
|
||||||
links({
|
links({
|
||||||
"android",
|
"android",
|
||||||
"dl",
|
"dl",
|
||||||
|
@ -272,6 +278,7 @@ workspace("xenia")
|
||||||
end
|
end
|
||||||
|
|
||||||
include("src/xenia")
|
include("src/xenia")
|
||||||
|
include("src/xenia/app")
|
||||||
include("src/xenia/app/discord")
|
include("src/xenia/app/discord")
|
||||||
include("src/xenia/apu")
|
include("src/xenia/apu")
|
||||||
include("src/xenia/apu/nop")
|
include("src/xenia/apu/nop")
|
||||||
|
@ -293,10 +300,6 @@ workspace("xenia")
|
||||||
include("src/xenia/apu/sdl")
|
include("src/xenia/apu/sdl")
|
||||||
include("src/xenia/helper/sdl")
|
include("src/xenia/helper/sdl")
|
||||||
include("src/xenia/hid/sdl")
|
include("src/xenia/hid/sdl")
|
||||||
|
|
||||||
-- TODO(Triang3l): src/xenia/app has a dependency on xenia-helper-sdl, bring
|
|
||||||
-- it back later.
|
|
||||||
include("src/xenia/app")
|
|
||||||
end
|
end
|
||||||
|
|
||||||
if os.istarget("windows") then
|
if os.istarget("windows") then
|
||||||
|
|
|
@ -4,25 +4,18 @@ include(project_root.."/tools/build")
|
||||||
group("src")
|
group("src")
|
||||||
project("xenia-app")
|
project("xenia-app")
|
||||||
uuid("d7e98620-d007-4ad8-9dbd-b47c8853a17f")
|
uuid("d7e98620-d007-4ad8-9dbd-b47c8853a17f")
|
||||||
kind("WindowedApp")
|
|
||||||
targetname("xenia")
|
|
||||||
language("C++")
|
language("C++")
|
||||||
links({
|
links({
|
||||||
"xenia-app-discord",
|
|
||||||
"xenia-apu",
|
"xenia-apu",
|
||||||
"xenia-apu-nop",
|
"xenia-apu-nop",
|
||||||
"xenia-apu-sdl",
|
|
||||||
"xenia-base",
|
"xenia-base",
|
||||||
"xenia-core",
|
"xenia-core",
|
||||||
"xenia-cpu",
|
"xenia-cpu",
|
||||||
"xenia-debug-ui",
|
|
||||||
"xenia-gpu",
|
"xenia-gpu",
|
||||||
"xenia-gpu-null",
|
"xenia-gpu-null",
|
||||||
"xenia-gpu-vulkan",
|
"xenia-gpu-vulkan",
|
||||||
"xenia-helper-sdl",
|
|
||||||
"xenia-hid",
|
"xenia-hid",
|
||||||
"xenia-hid-nop",
|
"xenia-hid-nop",
|
||||||
"xenia-hid-sdl",
|
|
||||||
"xenia-kernel",
|
"xenia-kernel",
|
||||||
"xenia-ui",
|
"xenia-ui",
|
||||||
"xenia-ui-vulkan",
|
"xenia-ui-vulkan",
|
||||||
|
@ -48,7 +41,6 @@ project("xenia-app")
|
||||||
})
|
})
|
||||||
local_platform_files()
|
local_platform_files()
|
||||||
files({
|
files({
|
||||||
"xenia_main.cc",
|
|
||||||
"../base/main_init_"..platform_suffix..".cc",
|
"../base/main_init_"..platform_suffix..".cc",
|
||||||
"../ui/windowed_app_main_"..platform_suffix..".cc",
|
"../ui/windowed_app_main_"..platform_suffix..".cc",
|
||||||
})
|
})
|
||||||
|
@ -57,19 +49,53 @@ project("xenia-app")
|
||||||
project_root,
|
project_root,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
filter(SINGLE_LIBRARY_FILTER)
|
||||||
|
-- Unified library containing all apps as StaticLibs, not just the main
|
||||||
|
-- emulator windowed app.
|
||||||
|
kind("SharedLib")
|
||||||
|
links({
|
||||||
|
"xenia-gpu-vulkan-trace-viewer",
|
||||||
|
"xenia-hid-demo",
|
||||||
|
"xenia-ui-window-vulkan-demo",
|
||||||
|
})
|
||||||
|
filter(NOT_SINGLE_LIBRARY_FILTER)
|
||||||
|
kind("WindowedApp")
|
||||||
|
|
||||||
|
-- `targetname` is broken if building from Gradle, works only for toggling the
|
||||||
|
-- `lib` prefix, as Gradle uses LOCAL_MODULE_FILENAME, not a derivative of
|
||||||
|
-- LOCAL_MODULE, to specify the targets to build when executing ndk-build.
|
||||||
|
filter("platforms:not Android-*")
|
||||||
|
targetname("xenia")
|
||||||
|
|
||||||
filter("architecture:x86_64")
|
filter("architecture:x86_64")
|
||||||
links({
|
links({
|
||||||
"xenia-cpu-backend-x64",
|
"xenia-cpu-backend-x64",
|
||||||
})
|
})
|
||||||
|
|
||||||
|
-- TODO(Triang3l): The emulator itself on Android.
|
||||||
|
filter("platforms:not Android-*")
|
||||||
|
files({
|
||||||
|
"xenia_main.cc",
|
||||||
|
})
|
||||||
|
|
||||||
filter("platforms:Windows")
|
filter("platforms:Windows")
|
||||||
files({
|
files({
|
||||||
"main_resources.rc",
|
"main_resources.rc",
|
||||||
})
|
})
|
||||||
|
|
||||||
filter("files:../base/main_init_"..platform_suffix..".cc")
|
filter({"architecture:x86_64", "files:../base/main_init_"..platform_suffix..".cc"})
|
||||||
vectorextensions("IA32") -- Disable AVX for main_init_win.cc so our AVX check doesn't use AVX instructions.
|
vectorextensions("IA32") -- Disable AVX for main_init_win.cc so our AVX check doesn't use AVX instructions.
|
||||||
|
|
||||||
|
filter("platforms:not Android-*")
|
||||||
|
links({
|
||||||
|
"xenia-app-discord",
|
||||||
|
"xenia-apu-sdl",
|
||||||
|
-- TODO(Triang3l): CPU debugger on Android.
|
||||||
|
"xenia-debug-ui",
|
||||||
|
"xenia-helper-sdl",
|
||||||
|
"xenia-hid-sdl",
|
||||||
|
})
|
||||||
|
|
||||||
filter("platforms:Linux")
|
filter("platforms:Linux")
|
||||||
links({
|
links({
|
||||||
"X11",
|
"X11",
|
||||||
|
@ -87,6 +113,12 @@ project("xenia-app")
|
||||||
"xenia-ui-d3d12",
|
"xenia-ui-d3d12",
|
||||||
})
|
})
|
||||||
|
|
||||||
|
filter({"platforms:Windows", SINGLE_LIBRARY_FILTER})
|
||||||
|
links({
|
||||||
|
"xenia-gpu-d3d12-trace-viewer",
|
||||||
|
"xenia-ui-window-d3d12-demo",
|
||||||
|
})
|
||||||
|
|
||||||
filter("platforms:Windows")
|
filter("platforms:Windows")
|
||||||
-- Only create the .user file if it doesn't already exist.
|
-- Only create the .user file if it doesn't already exist.
|
||||||
local user_file = project_root.."/build/xenia-app.vcxproj.user"
|
local user_file = project_root.."/build/xenia-app.vcxproj.user"
|
||||||
|
|
|
@ -36,7 +36,9 @@
|
||||||
|
|
||||||
// Available audio systems:
|
// Available audio systems:
|
||||||
#include "xenia/apu/nop/nop_audio_system.h"
|
#include "xenia/apu/nop/nop_audio_system.h"
|
||||||
|
#if !XE_PLATFORM_ANDROID
|
||||||
#include "xenia/apu/sdl/sdl_audio_system.h"
|
#include "xenia/apu/sdl/sdl_audio_system.h"
|
||||||
|
#endif // !XE_PLATFORM_ANDROID
|
||||||
#if XE_PLATFORM_WIN32
|
#if XE_PLATFORM_WIN32
|
||||||
#include "xenia/apu/xaudio2/xaudio2_audio_system.h"
|
#include "xenia/apu/xaudio2/xaudio2_audio_system.h"
|
||||||
#endif // XE_PLATFORM_WIN32
|
#endif // XE_PLATFORM_WIN32
|
||||||
|
@ -50,7 +52,9 @@
|
||||||
|
|
||||||
// Available input drivers:
|
// Available input drivers:
|
||||||
#include "xenia/hid/nop/nop_hid.h"
|
#include "xenia/hid/nop/nop_hid.h"
|
||||||
|
#if !XE_PLATFORM_ANDROID
|
||||||
#include "xenia/hid/sdl/sdl_hid.h"
|
#include "xenia/hid/sdl/sdl_hid.h"
|
||||||
|
#endif // !XE_PLATFORM_ANDROID
|
||||||
#if XE_PLATFORM_WIN32
|
#if XE_PLATFORM_WIN32
|
||||||
#include "xenia/hid/winkey/winkey_hid.h"
|
#include "xenia/hid/winkey/winkey_hid.h"
|
||||||
#include "xenia/hid/xinput/xinput_hid.h"
|
#include "xenia/hid/xinput/xinput_hid.h"
|
||||||
|
@ -253,7 +257,9 @@ std::unique_ptr<apu::AudioSystem> EmulatorApp::CreateAudioSystem(
|
||||||
#if XE_PLATFORM_WIN32
|
#if XE_PLATFORM_WIN32
|
||||||
factory.Add<apu::xaudio2::XAudio2AudioSystem>("xaudio2");
|
factory.Add<apu::xaudio2::XAudio2AudioSystem>("xaudio2");
|
||||||
#endif // XE_PLATFORM_WIN32
|
#endif // XE_PLATFORM_WIN32
|
||||||
|
#if !XE_PLATFORM_ANDROID
|
||||||
factory.Add<apu::sdl::SDLAudioSystem>("sdl");
|
factory.Add<apu::sdl::SDLAudioSystem>("sdl");
|
||||||
|
#endif // !XE_PLATFORM_ANDROID
|
||||||
factory.Add<apu::nop::NopAudioSystem>("nop");
|
factory.Add<apu::nop::NopAudioSystem>("nop");
|
||||||
return factory.Create(cvars::apu, processor);
|
return factory.Create(cvars::apu, processor);
|
||||||
}
|
}
|
||||||
|
@ -350,7 +356,9 @@ std::vector<std::unique_ptr<hid::InputDriver>> EmulatorApp::CreateInputDrivers(
|
||||||
#if XE_PLATFORM_WIN32
|
#if XE_PLATFORM_WIN32
|
||||||
factory.Add("xinput", xe::hid::xinput::Create);
|
factory.Add("xinput", xe::hid::xinput::Create);
|
||||||
#endif // XE_PLATFORM_WIN32
|
#endif // XE_PLATFORM_WIN32
|
||||||
|
#if !XE_PLATFORM_ANDROID
|
||||||
factory.Add("sdl", xe::hid::sdl::Create);
|
factory.Add("sdl", xe::hid::sdl::Create);
|
||||||
|
#endif // !XE_PLATFORM_ANDROID
|
||||||
#if XE_PLATFORM_WIN32
|
#if XE_PLATFORM_WIN32
|
||||||
// WinKey input driver should always be the last input driver added!
|
// WinKey input driver should always be the last input driver added!
|
||||||
factory.Add("winkey", xe::hid::winkey::Create);
|
factory.Add("winkey", xe::hid::winkey::Create);
|
||||||
|
|
|
@ -425,7 +425,9 @@ bool RunTests(const std::string_view test_name) {
|
||||||
int failed_count = 0;
|
int failed_count = 0;
|
||||||
int passed_count = 0;
|
int passed_count = 0;
|
||||||
|
|
||||||
|
#if XE_ARCH_AMD64
|
||||||
XELOGI("Instruction feature mask {}.", cvars::x64_extension_mask);
|
XELOGI("Instruction feature mask {}.", cvars::x64_extension_mask);
|
||||||
|
#endif // XE_ARCH_AMD64
|
||||||
|
|
||||||
auto test_path_root = cvars::test_path;
|
auto test_path_root = cvars::test_path;
|
||||||
std::vector<std::filesystem::path> test_files;
|
std::vector<std::filesystem::path> test_files;
|
||||||
|
|
|
@ -8,10 +8,17 @@ test_suite("xenia-cpu-tests", project_root, ".", {
|
||||||
"xenia-base",
|
"xenia-base",
|
||||||
"xenia-core",
|
"xenia-core",
|
||||||
"xenia-cpu",
|
"xenia-cpu",
|
||||||
"xenia-cpu-backend-x64",
|
|
||||||
|
|
||||||
-- TODO(benvanik): cut these dependencies?
|
-- TODO(benvanik): cut these dependencies?
|
||||||
"xenia-kernel",
|
"xenia-kernel",
|
||||||
"xenia-ui", -- needed by xenia-base
|
"xenia-ui", -- needed by xenia-base
|
||||||
},
|
},
|
||||||
|
filtered_links = {
|
||||||
|
{
|
||||||
|
filter = 'architecture:x86_64',
|
||||||
|
links = {
|
||||||
|
"xenia-cpu-backend-x64",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
},
|
||||||
})
|
})
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
|
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
|
#include "xenia/base/platform.h"
|
||||||
#include "xenia/cpu/backend/x64/x64_backend.h"
|
#include "xenia/cpu/backend/x64/x64_backend.h"
|
||||||
#include "xenia/cpu/hir/hir_builder.h"
|
#include "xenia/cpu/hir/hir_builder.h"
|
||||||
#include "xenia/cpu/ppc/ppc_context.h"
|
#include "xenia/cpu/ppc/ppc_context.h"
|
||||||
|
@ -21,8 +22,6 @@
|
||||||
|
|
||||||
#include "third_party/catch/include/catch.hpp"
|
#include "third_party/catch/include/catch.hpp"
|
||||||
|
|
||||||
#define XENIA_TEST_X64 1
|
|
||||||
|
|
||||||
namespace xe {
|
namespace xe {
|
||||||
namespace cpu {
|
namespace cpu {
|
||||||
namespace testing {
|
namespace testing {
|
||||||
|
@ -36,14 +35,17 @@ class TestFunction {
|
||||||
memory.reset(new Memory());
|
memory.reset(new Memory());
|
||||||
memory->Initialize();
|
memory->Initialize();
|
||||||
|
|
||||||
#if XENIA_TEST_X64
|
|
||||||
{
|
{
|
||||||
auto backend = std::make_unique<xe::cpu::backend::x64::X64Backend>();
|
std::unique_ptr<xe::cpu::backend::Backend> backend;
|
||||||
|
#if XE_ARCH_AMD64
|
||||||
|
backend.reset(new xe::cpu::backend::x64::X64Backend());
|
||||||
|
#endif // XE_ARCH
|
||||||
|
if (backend) {
|
||||||
auto processor = std::make_unique<Processor>(memory.get(), nullptr);
|
auto processor = std::make_unique<Processor>(memory.get(), nullptr);
|
||||||
processor->Setup(std::move(backend));
|
processor->Setup(std::move(backend));
|
||||||
processors.emplace_back(std::move(processor));
|
processors.emplace_back(std::move(processor));
|
||||||
}
|
}
|
||||||
#endif // XENIA_TEST_X64
|
}
|
||||||
|
|
||||||
for (auto& processor : processors) {
|
for (auto& processor : processors) {
|
||||||
auto module = std::make_unique<xe::cpu::TestModule>(
|
auto module = std::make_unique<xe::cpu::TestModule>(
|
||||||
|
|
|
@ -22,7 +22,7 @@ project("xenia-gpu-d3d12")
|
||||||
group("src")
|
group("src")
|
||||||
project("xenia-gpu-d3d12-trace-viewer")
|
project("xenia-gpu-d3d12-trace-viewer")
|
||||||
uuid("7b5b9fcb-7bf1-43ff-a774-d4c41c8706be")
|
uuid("7b5b9fcb-7bf1-43ff-a774-d4c41c8706be")
|
||||||
kind("WindowedApp")
|
single_library_windowed_app_kind()
|
||||||
language("C++")
|
language("C++")
|
||||||
links({
|
links({
|
||||||
"xenia-apu",
|
"xenia-apu",
|
||||||
|
|
|
@ -26,7 +26,7 @@ project("xenia-gpu-vulkan")
|
||||||
group("src")
|
group("src")
|
||||||
project("xenia-gpu-vulkan-trace-viewer")
|
project("xenia-gpu-vulkan-trace-viewer")
|
||||||
uuid("86a1dddc-a26a-4885-8c55-cf745225d93e")
|
uuid("86a1dddc-a26a-4885-8c55-cf745225d93e")
|
||||||
kind("WindowedApp")
|
single_library_windowed_app_kind()
|
||||||
language("C++")
|
language("C++")
|
||||||
links({
|
links({
|
||||||
"xenia-apu",
|
"xenia-apu",
|
||||||
|
|
|
@ -21,6 +21,7 @@
|
||||||
#include "xenia/base/clock.h"
|
#include "xenia/base/clock.h"
|
||||||
#include "xenia/base/cvar.h"
|
#include "xenia/base/cvar.h"
|
||||||
#include "xenia/base/logging.h"
|
#include "xenia/base/logging.h"
|
||||||
|
#include "xenia/base/platform.h"
|
||||||
#include "xenia/base/threading.h"
|
#include "xenia/base/threading.h"
|
||||||
#include "xenia/hid/hid_flags.h"
|
#include "xenia/hid/hid_flags.h"
|
||||||
#include "xenia/hid/input_system.h"
|
#include "xenia/hid/input_system.h"
|
||||||
|
@ -36,7 +37,9 @@
|
||||||
|
|
||||||
// Available input drivers:
|
// Available input drivers:
|
||||||
#include "xenia/hid/nop/nop_hid.h"
|
#include "xenia/hid/nop/nop_hid.h"
|
||||||
|
#if !XE_PLATFORM_ANDROID
|
||||||
#include "xenia/hid/sdl/sdl_hid.h"
|
#include "xenia/hid/sdl/sdl_hid.h"
|
||||||
|
#endif // !XE_PLATFORM_ANDROID
|
||||||
#if XE_PLATFORM_WIN32
|
#if XE_PLATFORM_WIN32
|
||||||
#include "xenia/hid/winkey/winkey_hid.h"
|
#include "xenia/hid/winkey/winkey_hid.h"
|
||||||
#include "xenia/hid/xinput/xinput_hid.h"
|
#include "xenia/hid/xinput/xinput_hid.h"
|
||||||
|
@ -122,11 +125,13 @@ std::vector<std::unique_ptr<hid::InputDriver>> HidDemoApp::CreateInputDrivers(
|
||||||
std::vector<std::unique_ptr<hid::InputDriver>> drivers;
|
std::vector<std::unique_ptr<hid::InputDriver>> drivers;
|
||||||
if (cvars::hid.compare("nop") == 0) {
|
if (cvars::hid.compare("nop") == 0) {
|
||||||
drivers.emplace_back(xe::hid::nop::Create(window, kZOrderHidInput));
|
drivers.emplace_back(xe::hid::nop::Create(window, kZOrderHidInput));
|
||||||
|
#if !XE_PLATFORM_ANDROID
|
||||||
} else if (cvars::hid.compare("sdl") == 0) {
|
} else if (cvars::hid.compare("sdl") == 0) {
|
||||||
auto driver = xe::hid::sdl::Create(window, kZOrderHidInput);
|
auto driver = xe::hid::sdl::Create(window, kZOrderHidInput);
|
||||||
if (XSUCCEEDED(driver->Setup())) {
|
if (XSUCCEEDED(driver->Setup())) {
|
||||||
drivers.emplace_back(std::move(driver));
|
drivers.emplace_back(std::move(driver));
|
||||||
}
|
}
|
||||||
|
#endif // !XE_PLATFORM_ANDROID
|
||||||
#if XE_PLATFORM_WIN32
|
#if XE_PLATFORM_WIN32
|
||||||
} else if (cvars::hid.compare("winkey") == 0) {
|
} else if (cvars::hid.compare("winkey") == 0) {
|
||||||
auto driver = xe::hid::winkey::Create(window, kZOrderHidInput);
|
auto driver = xe::hid::winkey::Create(window, kZOrderHidInput);
|
||||||
|
@ -140,10 +145,12 @@ std::vector<std::unique_ptr<hid::InputDriver>> HidDemoApp::CreateInputDrivers(
|
||||||
}
|
}
|
||||||
#endif // XE_PLATFORM_WIN32
|
#endif // XE_PLATFORM_WIN32
|
||||||
} else {
|
} else {
|
||||||
|
#if !XE_PLATFORM_ANDROID
|
||||||
auto sdl_driver = xe::hid::sdl::Create(window, kZOrderHidInput);
|
auto sdl_driver = xe::hid::sdl::Create(window, kZOrderHidInput);
|
||||||
if (sdl_driver && XSUCCEEDED(sdl_driver->Setup())) {
|
if (sdl_driver && XSUCCEEDED(sdl_driver->Setup())) {
|
||||||
drivers.emplace_back(std::move(sdl_driver));
|
drivers.emplace_back(std::move(sdl_driver));
|
||||||
}
|
}
|
||||||
|
#endif // !XE_PLATFORM_ANDROID
|
||||||
#if XE_PLATFORM_WIN32
|
#if XE_PLATFORM_WIN32
|
||||||
auto xinput_driver = xe::hid::xinput::Create(window, kZOrderHidInput);
|
auto xinput_driver = xe::hid::xinput::Create(window, kZOrderHidInput);
|
||||||
if (xinput_driver && XSUCCEEDED(xinput_driver->Setup())) {
|
if (xinput_driver && XSUCCEEDED(xinput_driver->Setup())) {
|
||||||
|
|
|
@ -17,16 +17,14 @@ project("xenia-hid")
|
||||||
group("demos")
|
group("demos")
|
||||||
project("xenia-hid-demo")
|
project("xenia-hid-demo")
|
||||||
uuid("a56a209c-16d5-4913-85f9-86976fe7fddf")
|
uuid("a56a209c-16d5-4913-85f9-86976fe7fddf")
|
||||||
kind("WindowedApp")
|
single_library_windowed_app_kind()
|
||||||
language("C++")
|
language("C++")
|
||||||
links({
|
links({
|
||||||
"fmt",
|
"fmt",
|
||||||
"imgui",
|
"imgui",
|
||||||
"xenia-base",
|
"xenia-base",
|
||||||
"xenia-helper-sdl",
|
|
||||||
"xenia-hid",
|
"xenia-hid",
|
||||||
"xenia-hid-nop",
|
"xenia-hid-nop",
|
||||||
"xenia-hid-sdl",
|
|
||||||
"xenia-ui",
|
"xenia-ui",
|
||||||
"xenia-ui-vulkan",
|
"xenia-ui-vulkan",
|
||||||
})
|
})
|
||||||
|
@ -41,6 +39,12 @@ project("xenia-hid-demo")
|
||||||
project_root,
|
project_root,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
filter("platforms:not Android-*")
|
||||||
|
links({
|
||||||
|
"xenia-helper-sdl",
|
||||||
|
"xenia-hid-sdl",
|
||||||
|
})
|
||||||
|
|
||||||
filter("platforms:Linux")
|
filter("platforms:Linux")
|
||||||
links({
|
links({
|
||||||
"SDL2",
|
"SDL2",
|
||||||
|
|
|
@ -18,7 +18,7 @@ project("xenia-ui-d3d12")
|
||||||
group("demos")
|
group("demos")
|
||||||
project("xenia-ui-window-d3d12-demo")
|
project("xenia-ui-window-d3d12-demo")
|
||||||
uuid("3b9686a7-0f04-4e17-8b00-aeb78ae1107c")
|
uuid("3b9686a7-0f04-4e17-8b00-aeb78ae1107c")
|
||||||
kind("WindowedApp")
|
single_library_windowed_app_kind()
|
||||||
language("C++")
|
language("C++")
|
||||||
links({
|
links({
|
||||||
"fmt",
|
"fmt",
|
||||||
|
|
|
@ -0,0 +1,37 @@
|
||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* Xenia : Xbox 360 Emulator Research Project *
|
||||||
|
******************************************************************************
|
||||||
|
* Copyright 2022 Ben Vanik. All rights reserved. *
|
||||||
|
* Released under the BSD license - see LICENSE in the root for more details. *
|
||||||
|
******************************************************************************
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <memory>
|
||||||
|
|
||||||
|
#include "xenia/ui/file_picker.h"
|
||||||
|
|
||||||
|
namespace xe {
|
||||||
|
namespace ui {
|
||||||
|
|
||||||
|
// TODO(Triang3l): An asynchronous file picker with a callback, starting an
|
||||||
|
// activity for an ACTION_OPEN_DOCUMENT or an ACTION_OPEN_DOCUMENT_TREE intent.
|
||||||
|
// This intent, however, provides a content URI, not the file path directly.
|
||||||
|
// Accessing the file via the Storage Access Framework doesn't require the
|
||||||
|
// READ_EXTERNAL_STORAGE permission, unlike opening a file by its path directly.
|
||||||
|
// A file descriptor can be opened for the URI using
|
||||||
|
// Context.getContentResolver().openFileDescriptor (it will return a
|
||||||
|
// ParcelFileDescriptor, and a FileDescriptor can be obtained using its
|
||||||
|
// getFileDescriptor() method).
|
||||||
|
|
||||||
|
class AndroidFilePicker : public FilePicker {
|
||||||
|
public:
|
||||||
|
bool Show(Window* parent_window) override { return false; }
|
||||||
|
};
|
||||||
|
|
||||||
|
std::unique_ptr<FilePicker> FilePicker::Create() {
|
||||||
|
return std::make_unique<AndroidFilePicker>();
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace ui
|
||||||
|
} // namespace xe
|
|
@ -22,7 +22,7 @@ project("xenia-ui-vulkan")
|
||||||
group("demos")
|
group("demos")
|
||||||
project("xenia-ui-window-vulkan-demo")
|
project("xenia-ui-window-vulkan-demo")
|
||||||
uuid("97598f13-3177-454c-8e58-c59e2b6ede27")
|
uuid("97598f13-3177-454c-8e58-c59e2b6ede27")
|
||||||
kind("WindowedApp")
|
single_library_windowed_app_kind()
|
||||||
language("C++")
|
language("C++")
|
||||||
links({
|
links({
|
||||||
"fmt",
|
"fmt",
|
||||||
|
|
|
@ -5,4 +5,5 @@ include("scripts/force_compile_as_c.lua")
|
||||||
include("scripts/force_compile_as_cc.lua")
|
include("scripts/force_compile_as_cc.lua")
|
||||||
include("scripts/pkg_config.lua")
|
include("scripts/pkg_config.lua")
|
||||||
include("scripts/platform_files.lua")
|
include("scripts/platform_files.lua")
|
||||||
|
include("scripts/single_library.lua")
|
||||||
include("scripts/test_suite.lua")
|
include("scripts/test_suite.lua")
|
||||||
|
|
|
@ -0,0 +1,20 @@
|
||||||
|
SINGLE_LIBRARY_PLATFORM_PATTERNS = {
|
||||||
|
"Android-*",
|
||||||
|
};
|
||||||
|
|
||||||
|
SINGLE_LIBRARY_FILTER =
|
||||||
|
"platforms:" .. table.concat(SINGLE_LIBRARY_PLATFORM_PATTERNS, " or ");
|
||||||
|
NOT_SINGLE_LIBRARY_FILTER = table.translate(
|
||||||
|
SINGLE_LIBRARY_PLATFORM_PATTERNS,
|
||||||
|
function(pattern)
|
||||||
|
return "platforms:not " .. pattern;
|
||||||
|
end);
|
||||||
|
|
||||||
|
function single_library_windowed_app_kind()
|
||||||
|
filter(SINGLE_LIBRARY_FILTER);
|
||||||
|
kind("StaticLib");
|
||||||
|
wholelib("On");
|
||||||
|
filter(NOT_SINGLE_LIBRARY_FILTER);
|
||||||
|
kind("WindowedApp");
|
||||||
|
filter({});
|
||||||
|
end
|
|
@ -24,8 +24,14 @@ local function combined_test_suite(test_suite_name, project_root, base_path, con
|
||||||
libdirs(merge_arrays(config["libdirs"], {
|
libdirs(merge_arrays(config["libdirs"], {
|
||||||
project_root.."/"..build_bin,
|
project_root.."/"..build_bin,
|
||||||
}))
|
}))
|
||||||
links(merge_arrays(config["links"], {
|
links(config["links"])
|
||||||
}))
|
if config.filtered_links ~= nil then
|
||||||
|
for _, filtered_links in ipairs(config.filtered_links) do
|
||||||
|
filter(filtered_links.filter)
|
||||||
|
links(filtered_links.links)
|
||||||
|
end
|
||||||
|
filter({})
|
||||||
|
end
|
||||||
defines({
|
defines({
|
||||||
"XE_TEST_SUITE_NAME=\""..test_suite_name.."\"",
|
"XE_TEST_SUITE_NAME=\""..test_suite_name.."\"",
|
||||||
})
|
})
|
||||||
|
@ -57,8 +63,14 @@ local function split_test_suite(test_suite_name, project_root, base_path, config
|
||||||
libdirs(merge_arrays(config["libdirs"], {
|
libdirs(merge_arrays(config["libdirs"], {
|
||||||
project_root.."/"..build_bin,
|
project_root.."/"..build_bin,
|
||||||
}))
|
}))
|
||||||
links(merge_arrays(config["links"], {
|
links(config["links"])
|
||||||
}))
|
if config.filtered_links ~= nil then
|
||||||
|
for _, filtered_links in ipairs(config.filtered_links) do
|
||||||
|
filter(filtered_links.filter)
|
||||||
|
links(filtered_links.links)
|
||||||
|
end
|
||||||
|
filter({})
|
||||||
|
end
|
||||||
files({
|
files({
|
||||||
project_root.."/"..build_tools_src.."/test_suite_main.cc",
|
project_root.."/"..build_tools_src.."/test_suite_main.cc",
|
||||||
file_path,
|
file_path,
|
||||||
|
|
Loading…
Reference in New Issue