omni/core/Omni.h
File members: omni/core/Omni.h
// Copyright (c) 2020-2023, NVIDIA CORPORATION. All rights reserved.
//
// NVIDIA CORPORATION and its licensors retain all intellectual property
// and proprietary rights in and to this software, related documentation
// and any modifications thereto. Any use, reproduction, disclosure or
// distribution of this software and related documentation without an express
// license agreement from NVIDIA CORPORATION is strictly prohibited.
//
#pragma once
#include "../../carb/extras/Library.h"
#include "../../carb/PluginInitializers.h"
#include "Api.h"
#include "BuiltIn.h"
#include "ITypeFactory.h"
#include "../log/ILog.h"
#include "../structuredlog/IStructuredLog.h"
OMNI_API const char* omniGetModuleFilename();
OMNI_API const char* omniGetModuleDirectory();
#if CARB_PLATFORM_WINDOWS || defined(DOXYGEN_BUILD)
# define OMNI_MODULE_GLOBALS_BUILD_CONFIG_SYMBOLS()
#else
# if CARB_DEBUG
# define OMNI_MODULE_GLOBALS_BUILD_CONFIG_SYMBOLS() CARB_HIDDEN int g_carbIsDebugConfig = 1
# else
# define OMNI_MODULE_GLOBALS_BUILD_CONFIG_SYMBOLS() CARB_HIDDEN int g_carbIsReleaseConfig = 1
# endif
#endif
#define OMNI_MODULE_DEFINE_LOCATION_FUNCTIONS() \
OMNI_API const char* omniGetModuleFilename() \
{ \
static std::string s_omniModuleFilename = carb::extras::getLibraryFilename((void*)(omniGetModuleFilename)); \
return s_omniModuleFilename.c_str(); \
} \
OMNI_API const char* omniGetModuleDirectory() \
{ \
static std::string s_omniModuleDirectory = carb::extras::getLibraryDirectory((void*)(omniGetModuleDirectory)); \
return s_omniModuleDirectory.c_str(); \
}
#define OMNI_MODULE_DEFINE_OMNI_FUNCTIONS() \
namespace \
{ \
::omni::core::ITypeFactory* s_omniTypeFactory = nullptr; \
::omni::log::ILog* s_omniLog = nullptr; \
::omni::structuredlog::IStructuredLog* s_omniStructuredLog = nullptr; \
} \
OMNI_MODULE_DEFINE_LOCATION_FUNCTIONS() \
OMNI_MODULE_GLOBALS_BUILD_CONFIG_SYMBOLS(); \
OMNI_API void* omniGetBuiltInWithoutAcquire(OmniBuiltIn type) \
{ \
switch (type) \
{ \
case ::OmniBuiltIn::eITypeFactory: \
return s_omniTypeFactory; \
case ::OmniBuiltIn::eILog: \
return s_omniLog; \
case ::OmniBuiltIn::eIStructuredLog: \
return s_omniStructuredLog; \
default: \
return nullptr; \
} \
}
using OmniCarbStartupFn = const char* (*)(carb::Framework*);
using OmniCarbShutdownFn = void (*)();
#define OMNI_MODULE_DEFINE_CARB_FUNCTIONS() \
OMNI_EXPORT const char* omniCarbStartup(carb::Framework* framework) \
{ \
g_carbFramework = framework; \
carb::pluginInitialize(); \
return g_carbClientName; \
} \
OMNI_EXPORT void omniCarbShutdown() \
{ \
carb::pluginDeinitialize(); \
}
#define OMNI_GLOBALS_ADD_DEFAULT_CHANNEL_1(chan_, name_, desc_) OMNI_LOG_ADD_CHANNEL(chan_, name_, desc_)
#define OMNI_GLOBALS_ADD_DEFAULT_CHANNEL(name_, desc_) \
OMNI_GLOBALS_ADD_DEFAULT_CHANNEL_1(OMNI_LOG_DEFAULT_CHANNEL, name_, desc_)
#define OMNI_MODULE_GLOBALS_WITHOUT_CARB(name_, desc_) \
OMNI_MODULE_DEFINE_OMNI_FUNCTIONS() \
OMNI_GLOBALS_ADD_DEFAULT_CHANNEL(name_, desc_)
#define OMNI_MODULE_GLOBALS(name_, desc_) \
OMNI_MODULE_DEFINE_OMNI_FUNCTIONS() \
OMNI_MODULE_DEFINE_CARB_FUNCTIONS() \
CARB_GLOBALS_EX(name_, desc_)
#define OMNI_MODULE_SET_EXPORTS_WITHOUT_CARB(out_) \
do \
{ \
OMNI_RETURN_IF_FAILED(out_->checkVersion(omni::core::kModuleExportsMagic, omni::core::kModuleExportsVersion)); \
OMNI_RETURN_IF_FAILED(out_->addITypeFactory(&s_omniTypeFactory)); \
OMNI_RETURN_IF_FAILED(out_->addILog(&s_omniLog)); \
OMNI_RETURN_IF_FAILED(out_->addIStructuredLog(&s_omniStructuredLog)); \
for (auto channel = omni::log::getModuleLogChannels(); channel; channel = channel->next) \
{ \
OMNI_MODULE_ADD_LOG_CHANNEL(out_, channel->name, &channel->level, channel->description); \
} \
for (auto& schema : omni::structuredlog::getModuleSchemas()) \
{ \
OMNI_MODULE_ADD_STRUCTURED_LOG_SCHEMA(out_, schema); \
} \
} while (0)
#define OMNI_MODULE_SET_EXPORTS(out_) \
OMNI_MODULE_SET_EXPORTS_WITHOUT_CARB(out_); \
OMNI_MODULE_SET_CARB_EXPORTS(out_)
#define OMNI_MODULE_SET_CARB_EXPORTS(out_) \
OMNI_RETURN_IF_FAILED(out_->addCarbClientName(g_carbClientName)); \
OMNI_RETURN_IF_FAILED(out_->addCarbFramework(&g_carbFramework, carb::kFrameworkVersion)); \
OMNI_RETURN_IF_FAILED(out_->addCarbIAssert(&g_carbAssert, carb::assert::IAssert::getInterfaceDesc())); \
OMNI_RETURN_IF_FAILED(out_->addCarbILogging(&g_carbLogging, &g_carbLogFn, \
[](int32_t logLevel) { g_carbLogLevel = logLevel; }, &g_carbLogLevel, \
carb::logging::ILogging::getInterfaceDesc())); \
OMNI_RETURN_IF_FAILED(out_->addCarbIProfiler(&g_carbProfiler, carb::profiler::IProfiler::getInterfaceDesc())); \
OMNI_RETURN_IF_FAILED( \
out_->addCarbIL10n(&g_carbLocalization, &g_localizationFn, carb::l10n::IL10n::getInterfaceDesc()))
#define OMNI_APP_GLOBALS(clientName, clientDescription) CARB_GLOBALS_EX(clientName, clientDescription)
#define OMNI_CORE_START(args_) \
omniCoreStart(args_); \
omni::log::addModulesChannels(); \
omni::structuredlog::addModulesSchemas(); \
carb::detail::registerAtexitHandler()
#define OMNI_CORE_STOP() \
omni::log::removeModulesChannels(); \
omniCoreStop()
#define OMNI_CORE_STOP_FOR_BINDINGS() \
omni::log::removeModulesChannels(); \
omniCoreStopForBindings()
constexpr uint16_t kOmniCoreStartArgsVersion = 1;
using OmniCoreStartFlags = uint32_t;
constexpr OmniCoreStartFlags fStartFlagDisableILog = 0x00000001;
constexpr OmniCoreStartFlags fStartFlagDisableIStructuredLog = 0x00000002;
class OmniCoreStartArgs
{
public:
uint16_t version;
uint16_t byteCount;
OmniCoreStartFlags flags;
omni::core::ITypeFactory* typeFactory;
omni::log::ILog* log;
omni::structuredlog::IStructuredLog* structuredLog;
void* reserved[12];
OmniCoreStartArgs()
{
std::memset(this, 0, sizeof(*this));
version = kOmniCoreStartArgsVersion;
byteCount = sizeof(*this);
}
OmniCoreStartArgs(omni::core::ITypeFactory* factory_,
omni::log::ILog* log_ = nullptr,
omni::structuredlog::IStructuredLog* strucLog_ = nullptr)
: OmniCoreStartArgs()
{
typeFactory = factory_;
log = log_;
structuredLog = strucLog_;
}
};
CARB_ASSERT_INTEROP_SAFE(OmniCoreStartArgs);
static_assert((8 + 15 * sizeof(void*)) == sizeof(OmniCoreStartArgs), "OmniCoreStartArgs has an unexpected size");
OMNI_API void omniCoreStart(const OmniCoreStartArgs* args);
OMNI_API void omniCoreStop();
OMNI_API void omniCoreStopForBindings();
OMNI_API void omniReleaseStructuredLog();
#include "../../carb/ClientUtils.h"