ams: support building unit test programs on windows/linux/macos
This commit is contained in:
@@ -19,6 +19,7 @@
|
||||
|
||||
namespace ams::lm {
|
||||
|
||||
#if defined(ATMOSPHERE_OS_HORIZON)
|
||||
namespace {
|
||||
|
||||
struct LmRemoteLogServiceTag;
|
||||
@@ -57,10 +58,15 @@ namespace ams::lm {
|
||||
}
|
||||
|
||||
sf::SharedPointer<ILogService> CreateLogService() {
|
||||
::Service srv;
|
||||
R_ABORT_UNLESS(sm::GetService(std::addressof(srv), LogServiceName));
|
||||
os::NativeHandle h;
|
||||
R_ABORT_UNLESS(sm::GetServiceHandle(std::addressof(h), LogServiceName));
|
||||
|
||||
return RemoteObjectFactory::CreateSharedEmplaced<::ams::lm::ILogService, RemoteLogService>(srv);
|
||||
return RemoteObjectFactory::CreateSharedEmplaced<::ams::lm::ILogService, RemoteLogService>(h);
|
||||
}
|
||||
#else
|
||||
sf::SharedPointer<ILogService> CreateLogService() {
|
||||
AMS_ABORT("TODO");
|
||||
}
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
|
||||
namespace ams::lm {
|
||||
|
||||
#if defined(ATMOSPHERE_OS_HORIZON)
|
||||
/* TODO: Real libnx primitives? */
|
||||
|
||||
#define NX_SERVICE_ASSUME_NON_DOMAIN
|
||||
@@ -48,7 +49,9 @@ namespace ams::lm {
|
||||
private:
|
||||
::Service m_srv;
|
||||
public:
|
||||
RemoteLogService(::Service &s) : m_srv(s) { /* ... */ }
|
||||
RemoteLogService(os::NativeHandle h) {
|
||||
::serviceCreate(std::addressof(m_srv), h);
|
||||
}
|
||||
~RemoteLogService() { ::serviceClose(std::addressof(m_srv)); }
|
||||
public:
|
||||
/* Actual commands. */
|
||||
@@ -57,6 +60,7 @@ namespace ams::lm {
|
||||
static_assert(lm::IsILogService<RemoteLogService>);
|
||||
|
||||
#undef NX_SERVICE_ASSUME_NON_DOMAIN
|
||||
#endif
|
||||
|
||||
sf::SharedPointer<ILogService> CreateLogService();
|
||||
|
||||
|
||||
@@ -29,7 +29,7 @@ namespace ams::lm::srv {
|
||||
size_t m_used_buffer_size;
|
||||
FlushFunction m_flush_function;
|
||||
public:
|
||||
constexpr explicit CustomSinkBuffer(void *buffer, size_t buffer_size, FlushFunction f) : m_buffer(static_cast<u8 *>(buffer)), m_buffer_size(buffer_size), m_used_buffer_size(0), m_flush_function(f) {
|
||||
constexpr explicit CustomSinkBuffer(u8 *buffer, size_t buffer_size, FlushFunction f) : m_buffer(buffer), m_buffer_size(buffer_size), m_used_buffer_size(0), m_flush_function(f) {
|
||||
AMS_ASSERT(m_buffer != nullptr);
|
||||
AMS_ASSERT(m_buffer_size > 0);
|
||||
AMS_ASSERT(m_flush_function != nullptr);
|
||||
|
||||
@@ -30,7 +30,7 @@ namespace ams::lm::srv {
|
||||
constinit u8 g_fs_heap[32_KB];
|
||||
constinit lmem::HeapHandle g_fs_heap_handle;
|
||||
|
||||
constinit os::ThreadType g_flush_thread;
|
||||
constinit os::ThreadType g_flush_thread = {};
|
||||
|
||||
os::Event g_stop_event(os::EventClearMode_ManualClear);
|
||||
os::Event g_sd_logging_event(os::EventClearMode_ManualClear);
|
||||
|
||||
@@ -39,12 +39,12 @@ namespace ams::lm::srv {
|
||||
|
||||
using ServerManager = sf::hipc::ServerManager<PortCountMax, ServerManagerOptions, SessionCountMax>;
|
||||
|
||||
constinit util::TypedStorage<ServerManager> g_server_manager_storage;
|
||||
constinit util::TypedStorage<ServerManager> g_server_manager_storage = {};
|
||||
constinit ServerManager *g_server_manager = nullptr;
|
||||
|
||||
constinit util::TypedStorage<psc::PmModule> g_pm_module_storage;
|
||||
constinit psc::PmModule *g_pm_module;
|
||||
constinit os::MultiWaitHolderType g_pm_module_holder;
|
||||
constinit util::TypedStorage<psc::PmModule> g_pm_module_storage = {};
|
||||
constinit psc::PmModule *g_pm_module = nullptr;
|
||||
constinit os::MultiWaitHolderType g_pm_module_holder = {};
|
||||
|
||||
constexpr const psc::PmModuleId PmModuleDependencies[] = { psc::PmModuleId_TmaHostIo, psc::PmModuleId_Fs };
|
||||
|
||||
|
||||
@@ -42,7 +42,7 @@ namespace ams::lm::srv {
|
||||
bool m_push_canceled;
|
||||
size_t m_push_ready_wait_count;
|
||||
public:
|
||||
constexpr explicit LogBuffer(void *buffer, size_t buffer_size, FlushFunction f)
|
||||
constexpr explicit LogBuffer(u8 *buffer, size_t buffer_size, FlushFunction f)
|
||||
: m_buffers{}, m_push_buffer(m_buffers + 0), m_flush_buffer(m_buffers + 1),
|
||||
m_buffer_size(buffer_size / 2), m_flush_function(f), m_push_buffer_mutex{},
|
||||
m_flush_buffer_mutex{}, m_cv_push_ready{}, m_cv_flush_ready{},
|
||||
@@ -52,8 +52,8 @@ namespace ams::lm::srv {
|
||||
AMS_ASSERT(buffer_size > 0);
|
||||
AMS_ASSERT(f != nullptr);
|
||||
|
||||
m_buffers[0].m_head = static_cast<u8 *>(buffer);
|
||||
m_buffers[1].m_head = static_cast<u8 *>(buffer) + (buffer_size / 2);
|
||||
m_buffers[0].m_head = buffer;
|
||||
m_buffers[1].m_head = buffer + (buffer_size / 2);
|
||||
}
|
||||
|
||||
static LogBuffer &GetDefaultInstance();
|
||||
|
||||
@@ -256,7 +256,7 @@ namespace ams::lm::srv {
|
||||
}
|
||||
|
||||
if (is_text_log) {
|
||||
const size_t sendable_size = std::min(size, remaining);
|
||||
const size_t sendable_size = std::min<size_t>(size, remaining);
|
||||
callback(reinterpret_cast<const char *>(cur), sendable_size, arg);
|
||||
}
|
||||
|
||||
|
||||
@@ -133,7 +133,7 @@ namespace ams::lm::srv {
|
||||
|
||||
/* Ensure the directory. */
|
||||
/* NOTE: Nintendo does not perform recusrive directory ensure, only a single CreateDirectory level. */
|
||||
return R_SUCCEEDED(fs::EnsureDirectoryRecursively(path));
|
||||
return R_SUCCEEDED(fs::EnsureDirectory(path));
|
||||
}
|
||||
|
||||
bool MakeLogFilePathWithoutExtension(char *dst, size_t size, const char *dir) {
|
||||
|
||||
Reference in New Issue
Block a user