diff --git a/BasaltPresenter/Presenter/CMakeLists.txt b/BasaltPresenter/Presenter/CMakeLists.txt index a898490..f61ddfa 100644 --- a/BasaltPresenter/Presenter/CMakeLists.txt +++ b/BasaltPresenter/Presenter/CMakeLists.txt @@ -2,13 +2,20 @@ add_executable(BasaltPresenter "") target_sources(BasaltPresenter PRIVATE main.cpp + dll_loader.cpp +) +target_sources(BasaltPresenter +PUBLIC +FILE_SET HEADERS +FILES + dll_loader.hpp ) target_include_directories(BasaltPresenter PUBLIC "${CMAKE_CURRENT_LIST_DIR}" ) -# target_link_libraries(YYCCTest -# PRIVATE -# BasaltShared -# ) +target_link_libraries(BasaltPresenter +PRIVATE + BasaltShared +) diff --git a/BasaltPresenter/Presenter/dll_loader.cpp b/BasaltPresenter/Presenter/dll_loader.cpp new file mode 100644 index 0000000..7d85d3e --- /dev/null +++ b/BasaltPresenter/Presenter/dll_loader.cpp @@ -0,0 +1,30 @@ +#include "dll_loader.hpp" +#include + +namespace Basalt::Presenter { + + DllLoader::DllLoader(DllKind kind, const std::basic_string_view filename) { + // TODO: + // Add current executable location supports. + // Add sub directories supports. + // Fix file name terminal error. +#if defined(BASALT_OS_WINDOWS) + m_Handle = LoadLibraryW(filename.data()); +#else + m_Handle = dlopen(filename.data(), RTLD_LAZY); +#endif + if (!m_Handle) + throw std::runtime_error("can not load given dynamic library."); + } + + DllLoader::~DllLoader() { + if (m_Handle) { +#if defined(BASALT_OS_WINDOWS) + FreeLibrary(m_Handle); +#else + dlclose(m_Handle); +#endif + } + } + +} // namespace Basalt::Presenter diff --git a/BasaltPresenter/Presenter/dll_loader.hpp b/BasaltPresenter/Presenter/dll_loader.hpp new file mode 100644 index 0000000..e44adc1 --- /dev/null +++ b/BasaltPresenter/Presenter/dll_loader.hpp @@ -0,0 +1,35 @@ +#include +#include + +#if defined(BASALT_OS_WINDOWS) +#include +#else +#include +#endif + +namespace Basalt::Presenter { + + enum class DllKind { + RenderEngine, + DataDeliver, + ObjectLoader, + AnimationLoader, + }; + + class DllLoader { + public: +#if defined(BASALT_OS_WINDOWS) + using Handle = HMODULE; +#else + using Handle = void *; +#endif + + public: + DllLoader(DllKind kind, const std::basic_string_view filename); + ~DllLoader(); + + private: + Handle m_Handle; + }; + +} // namespace Basalt::Presenter diff --git a/BasaltPresenter/Shared/CMakeLists.txt b/BasaltPresenter/Shared/CMakeLists.txt index e69de29..7480015 100644 --- a/BasaltPresenter/Shared/CMakeLists.txt +++ b/BasaltPresenter/Shared/CMakeLists.txt @@ -0,0 +1,54 @@ +add_library(BasaltShared STATIC "") +target_sources(BasaltShared +PRIVATE + pipe_sender.cpp +) +target_sources(BasaltShared +PUBLIC +FILE_SET HEADERS +FILES + # Headers + basalt_char.hpp + pipe_sender.hpp +) +target_include_directories(BasaltShared +PUBLIC + "$" + "$" +) +# target_link_libraries(BasaltShared +# PRIVATE +# BasaltShared +# ) +target_compile_definitions(BasaltShared +PUBLIC + $<$:BASALT_OS_WINDOWS> + $<$>:BASALT_OS_POSIX> + +PUBLIC + # Use Unicode charset on MSVC + $<$:UNICODE> + $<$:_UNICODE> + # Fix MSVC shit + $<$:_CRT_SECURE_NO_WARNINGS> + $<$:_CRT_SECURE_NO_DEPRECATE> + $<$:_CRT_NONSTDC_NO_WARNINGS> + $<$:_CRT_NONSTDC_NO_DEPRECATE> + # Fix Windows header file shit + $<$:WIN32_LEAN_AND_MEAN> + $<$:NOMINMAX> +) +target_compile_options(BasaltShared +PUBLIC + $<$:/utf-8> + $<$:/Zc:preprocessor> + $<$:/Zc:__cplusplus> +) + +install(TARGETS BasaltShared + EXPORT BasaltSharedTargets + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} + FILE_SET HEADERS DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} +) diff --git a/BasaltPresenter/Shared/basalt_char.hpp b/BasaltPresenter/Shared/basalt_char.hpp new file mode 100644 index 0000000..587d170 --- /dev/null +++ b/BasaltPresenter/Shared/basalt_char.hpp @@ -0,0 +1,10 @@ +#include + +#if defined(BASALT_OS_WINDOWS) +#define BSCHAR wchar_t +#define _BSTEXT(x) L##x +#define BSTEXT(x) _BSTEXT(x) +#else +#define BSCHAR char +#define BSTEXT(x) x +#endif diff --git a/BasaltPresenter/Shared/pipe_sender.cpp b/BasaltPresenter/Shared/pipe_sender.cpp new file mode 100644 index 0000000..4a08610 --- /dev/null +++ b/BasaltPresenter/Shared/pipe_sender.cpp @@ -0,0 +1,9 @@ +#include "pipe_sender.hpp" + +namespace Basalt::Shared { + + PipeSender::PipeSender(PipeSenderKind kind) {} + + PipeSender::~PipeSender() {} + +} diff --git a/BasaltPresenter/Shared/pipe_sender.hpp b/BasaltPresenter/Shared/pipe_sender.hpp new file mode 100644 index 0000000..d306cf8 --- /dev/null +++ b/BasaltPresenter/Shared/pipe_sender.hpp @@ -0,0 +1,19 @@ + + +namespace Basalt::Shared { + + enum class PipeSenderKind { + Data, + Command + }; + + class PipeSender { + public: + PipeSender(PipeSenderKind kind); + ~PipeSender(); + + private: + PipeSenderKind kind; + + }; +}