ams: support building unit test programs on windows/linux/macos

This commit is contained in:
Michael Scire
2022-03-06 12:08:20 -08:00
committed by SciresM
parent 9a38be201a
commit 64a97576d0
756 changed files with 33359 additions and 9372 deletions

View File

@@ -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
}

View File

@@ -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();

View File

@@ -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);

View File

@@ -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);

View File

@@ -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 };

View File

@@ -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();

View File

@@ -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);
}

View File

@@ -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) {