Made NBEngine installable + CMake restruct

This commit is contained in:
NaifBanana 2026-07-19 22:19:50 -05:00
parent abbae156a2
commit 5415a01885
26 changed files with 159 additions and 78 deletions

View File

@ -7,6 +7,9 @@ set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
include(GNUInstallDirs)
include(CMakePackageConfigHelpers)
function(toAbsolutePath SETVAR PATHS)
set(PATHS ${PATHS} ${ARGN})
set(RET_VAL "")
@ -31,6 +34,7 @@ elseif(CMAKE_BUILD_TYPE STREQUAL "Debug")
set(NB_LOGGING ON)
set(NB_BUILD_TESTS ON)
set(NB_BUILD_DOCS ON)
set(NBENGINE_INSTALL ON)
add_compile_definitions(_NB_BUILD_DEBUG)
endif()
@ -55,7 +59,6 @@ if(NB_BUILD_TESTS)
FetchContent_MakeAvailable(gtest)
endif()
set(GTEST_COLOR ON)
set(GLFW_BUILD_TESTS ON CACHE BOOL "" FORCE)
endif()
if (NB_LOGGING)
@ -70,13 +73,7 @@ elseif (NB_TARGET_LINUX)
add_compile_definitions(_NB_TARGET_LINUX)
endif()
# External Dep paths
set(GLFW_PATH ../glfw/)
set(GLAD_PATH ../glad/)
set(STBIMAGE_PATH ../stbi_image)
get_filename_component(GLFW_PATH ${GLFW_PATH} ABSOLUTE)
get_filename_component(GLAD_PATH ${GLAD_PATH} ABSOLUTE)
get_filename_component(STBIMAGE_PATH ${STBIMAGE_PATH} ABSOLUTE)
get_filename_component(NBENGINE_ROOT ./ ABSOLUTE)
add_subdirectory(./engine)
@ -86,3 +83,23 @@ set(NB_REBUILD_DOCS)
if (NB_BUILD_DOCS)
add_subdirectory(./docs)
endif()
if (NBENGINE_INSTALL)
include(GNUInstallDirs)
include(CMakePackageConfigHelpers)
configure_package_config_file(
"NBEngineConfig.cmake.in"
"NBEngineConfig.cmake"
INSTALL_DESTINATION ${CMAKE_INSTALL_PREFIX}/cmake
PATH_VARS CMAKE_INSTALL_LIBDIR
)
write_basic_package_version_file(
"${CMAKE_CURRENT_BINARY_DIR}/NBEngineConfigVersion.cmake"
COMPATIBILITY AnyNewerVersion
)
install(FILES
"${CMAKE_CURRENT_BINARY_DIR}/NBEngineConfig.cmake"
"${CMAKE_CURRENT_BINARY_DIR}/NBEngineConfigVersion.cmake"
DESTINATION "${CMAKE_INSTALL_PREFIX}/cmake"
)
endif()

8
NBEngineConfig.cmake.in Normal file
View File

@ -0,0 +1,8 @@
@PACKAGE_INIT@
set(NBENGINE_PACKAGES
NBCore
NBGraphics
)
foreach(NBENGINE_LIB ${NBENGINE_PACKAGES})
include("${CMAKE_CURRENT_LIST_DIR}/${NBENGINE_LIB}Config.cmake")
endforeach()

BIN
awesomeface.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

View File

@ -1,6 +1,8 @@
include_directories(./.)
add_subdirectory(./NBCore)
get_target_property(NBCORE_INTERFACE_INCLUDES NBCore INTERFACE_INCLUDE_DIRECTORIES)
include_directories(${NBCORE_INTERFACE_INCLUDES})
add_subdirectory(./NBEvents)
add_subdirectory(./NBGraphics)
@ -10,7 +12,6 @@ if (NB_CORE_SOURCE OR NB_EVENTS_SOURCE OR NB_GRAPHICS_SOURCE)
set(NB_SOURCE_FILES ${NB_SOURCE_FILES} PARENT_SCOPE)
endif()
if (NB_CORE_INCLUDE OR NB_EVENTS_INCLUDE OR NB_GRAPHICS_INCLUDE)
set(NB_INCLUDE_FILES "")
list(APPEND NB_INCLUDE_FILES ${NB_CORE_INCLUDE} ${NB_GRAPHICS_INCLUDE} ${NB_EVENTS_INCLUDE})

View File

@ -1,3 +1,6 @@
cmake_minimum_required(VERSION 3.10)
project(NBCore VERSION 0.1)
toAbsolutePath(NB_CORE_SOURCE
./src/ErrorsImpl.cpp
./src/Logger.cpp
@ -5,27 +8,64 @@ toAbsolutePath(NB_CORE_SOURCE
./src/StringUtils.cpp
./src/Utils.cpp
)
toAbsolutePath(NB_CORE_INCLUDE
./ANSITerm.hpp
./DataSink.hpp
./Errors.hpp
./ErrorsImpl.hpp
./Logger.hpp
./Processes.hpp
./StringUtils.hpp
./ThreadsafeQueue.hpp
./Types.hpp
./TypeTraits.hpp
./Utils.hpp
./include/NBCore/ANSITerm.hpp
./include/NBCore/DataSink.hpp
./include/NBCore/Errors.hpp
./include/NBCore/ErrorsImpl.hpp
./include/NBCore/Logger.hpp
./include/NBCore/Processes.hpp
./include/NBCore/StringUtils.hpp
./include/NBCore/ThreadsafeQueue.hpp
./include/NBCore/Types.hpp
./include/NBCore/TypeTraits.hpp
./include/NBCore/Utils.hpp
)
set(NB_CORE_SOURCE ${NB_CORE_SOURCE} PARENT_SCOPE)
set(NB_CORE_INCLUDE ${NB_CORE_INCLUDE} PARENT_SCOPE)
add_library(NBCore ${NB_CORE_SOURCE})
add_library(NBEngine::Core ALIAS NBCore)
target_include_directories(NBCore
PUBLIC "$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include>"
PUBLIC "$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>"
)
target_include_directories(NBCore PUBLIC ./.)
if (NBENGINE_INSTALL)
message("Installing NBCore to ${CMAKE_INSTALL_PREFIX}")
include(GNUInstallDirs)
include(CMakePackageConfigHelpers)
install(
TARGETS NBCore
EXPORT NBCoreTargets
)
install(
DIRECTORY "${PROJECT_SOURCE_DIR}/include/NBCore"
DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}"
FILES_MATCHING PATTERN "*.h" PATTERN "*.hpp"
)
install(
EXPORT NBCoreTargets
DESTINATION ${CMAKE_INSTALL_PREFIX}/cmake
NAMESPACE NBEngine::
)
configure_package_config_file(
"NBCoreConfig.cmake.in"
"NBCoreConfig.cmake"
INSTALL_DESTINATION ${CMAKE_INSTALL_PREFIX}/cmake
PATH_VARS CMAKE_INSTALL_LIBDIR
)
write_basic_package_version_file(
"${CMAKE_CURRENT_BINARY_DIR}/NBCoreConfigVersion.cmake"
COMPATIBILITY AnyNewerVersion
)
install(FILES
"${CMAKE_CURRENT_BINARY_DIR}/NBCoreConfig.cmake"
"${CMAKE_CURRENT_BINARY_DIR}/NBCoreConfigVersion.cmake"
DESTINATION "${CMAKE_INSTALL_PREFIX}/cmake"
)
endif()
if (NB_BUILD_TESTS)
add_subdirectory(./tests)

View File

@ -0,0 +1,2 @@
@PACKAGE_INIT@
include("${CMAKE_CURRENT_LIST_DIR}/NBCoreTargets.cmake")

View File

@ -5,7 +5,7 @@
#include <atomic>
#include <thread>
#include "ThreadSafeQueue.hpp"
#include <NBCore/ThreadSafeQueue.hpp>
namespace nb {

View File

@ -2,8 +2,8 @@
#ifndef _NB_ERROR
#define _NB_ERROR
#include "ErrorsImpl.hpp"
#include "Logger.hpp"
#include <NBCore/ErrorsImpl.hpp>
#include <NBCore/Logger.hpp>
namespace nb {

View File

@ -8,7 +8,7 @@
#include <type_traits>
#include <unordered_map>
#include "StringUtils.hpp"
#include <NBCore/StringUtils.hpp>
namespace nb {
@ -25,14 +25,15 @@ class ErrorBase {
ErrorBase(const ErrorBase&) = default;
ErrorBase(const std::exception&) noexcept;
ErrorBase(const std::string&) noexcept;
virtual std::string what() const noexcept {
std::string ret = msg;
if (trace) {
std::string trace_msg = msg;
ret += nb::NEWLINE + indent_strblock(
ret += NEWLINE + indent_strblock(
trace_msg,
nb::TABOVER,
nb::TABOVER+"Trace: "
TABOVER,
TABOVER+"Trace: "
);
}
return ret;
@ -52,7 +53,7 @@ class ErrorBase {
{}
};
template <class ErrorType>
template <class ErrorType=NoneType>
class Error : public ErrorBase {
private:
void inline check_asserts() {
@ -132,39 +133,43 @@ class Error : public ErrorBase {
using ErrorBase::type;
};
class NBError : public Error<NBError> {
template<>
class Error<NoneType> : public Error<Error<NoneType>> {
protected:
using Base = Error<NBError>;
using Base = Error<Error<NoneType>>;
public:
using Base::what;
using Base::code;
using Base::trace;
enum Codes : unsigned int {
STANDARD, UNDEFINED, INDEX_ERROR
};
NBError(unsigned int code_=1) noexcept : Base(code_) {}
NBError(const std::exception& err) : Base(
STANDARD,
std::string(err.what()),
"std::exception",
nullptr
) {}
// fix
NBError(std::string msg_) noexcept : Base(
Codes::UNDEFINED,
msg_
) {}
inline static const std::string type = "nb::Error";
inline static const ErrorCodeMap ErrorMessages = {
{STANDARD, "std::exception"},
{UNDEFINED, "Error"},
{INDEX_ERROR, "Indexing error"}
};
Error(unsigned int code_=1) noexcept : Base(code_) {}
Error(const std::exception& err) : Base(
STANDARD,
std::string(err.what()),
"std::exception",
nullptr
) {}
Error(const std::string& msg_) noexcept : Base(
Codes::UNDEFINED,
msg_,
type,
nullptr
) {}
};
// template<typename... Args>
// Error(Args...) -> Error<NoneType>;
template<typename... Args>
Error(Args...) -> Error<NoneType>;
} // namespace nb

View File

@ -8,11 +8,11 @@
#include <unordered_map>
#include <vector>
#include "DataSink.hpp"
#include "ErrorsImpl.hpp"
#include "Processes.hpp"
#include "ThreadSafeQueue.hpp"
#include "TypeTraits.hpp"
#include <NBCore/DataSink.hpp>
#include <NBCore/ErrorsImpl.hpp>
#include <NBCore/Processes.hpp>
#include <NBCore/ThreadSafeQueue.hpp>
#include <NBCore/TypeTraits.hpp>
namespace nb {
@ -99,6 +99,14 @@ public:
static_cast<LoggerType*>(this)->write_message(val, 0xFF, file, line);
static_cast<LoggerType*>(this)->flush();
}
void error(
const std::string& val,
std::string file="",
unsigned int line=0
) {
static_cast<LoggerType*>(this)->write_message(Error(val), 0xFF, file, line);
static_cast<LoggerType*>(this)->flush();
}
protected:
std::vector<std::ostream*> _ostream;

View File

@ -6,17 +6,17 @@
#include <string>
#include <string_view>
#include "TypeTraits.hpp"
#include <NBCore/TypeTraits.hpp>
namespace nb {
#ifdef _NB_TARGET_WINDOWS
const std::string NEWLINE = "\n";
const std::wstring WNEWLINE = L"\n";
inline static const std::string NEWLINE = "\n";
inline static const std::wstring WNEWLINE = L"\n";
#endif // _NB_TARGET_WINDOWS
#ifdef _NB_TARGET_LINUX
const std::string NEWLINE = "\n";
const std::wstring WNEWLINE = L"\n";
inline const std::string NEWLINE = "\n";
inline const std::wstring WNEWLINE = L"\n";
#endif // _NB_TARGET_LINUX
const std::string TABOVER = " ";
@ -34,7 +34,7 @@ void stream(const Stream& s, Args&&... args) {
}
template<typename... Args>
void term(Args&&... args) { stream(std::cout, args..., nb::NEWLINE); }
void term(Args&&... args) { stream(std::cout, args..., NEWLINE); }
template<typename... Args>
void wterm(Args&&... args) { stream(std::wcout, args..., nb::WNEWLINE); }

View File

@ -5,7 +5,7 @@
#include <mutex>
#include <vector>
#include "Errors.hpp"
#include <NBCore/Errors.hpp>
namespace nb {

View File

@ -1,10 +1,10 @@
#include "ErrorsImpl.hpp"
#include <NBCore/ErrorsImpl.hpp>
namespace nb {
//ErrorBase::
ErrorBase::ErrorBase(const std::exception& exception_) noexcept
: ErrorBase(NBError(exception_)) {}
: ErrorBase(Error(exception_)) {}
} // namespace nb

View File

@ -1,7 +1,7 @@
#include <iostream>
#include "Logger.hpp"
#include "StringUtils.hpp"
#include <NBCore/Logger.hpp>
#include <NBCore/StringUtils.hpp>
namespace nb {

View File

@ -6,7 +6,7 @@
#include <unistd.h>
#endif // _NB_TARGET_LINUX
#include "Processes.hpp"
#include <NBCore/Processes.hpp>
namespace nb {

View File

@ -1,4 +1,4 @@
#include "StringUtils.hpp"
#include <NBCore/StringUtils.hpp>
/* std::string nb::wstr_to_str(std::wstring in) {
std::size_t wstrlen = in.length();

View File

@ -1,4 +1,4 @@
#include "Utils.hpp"
#include <NBCore/Utils.hpp>
namespace nb {

View File

@ -1,10 +1,10 @@
#define CODE_ERROR_LOCATIONS
#include <gtest/gtest.h>
#include "Errors.hpp"
#include <string>
#include <NBCore/Errors.hpp>
using namespace nb;
class TestError : public Error<TestError> {

View File

@ -1,7 +1,7 @@
#include <exception>
#include "Errors.hpp"
#include "Logger.hpp"
#include <NBCore/Errors.hpp>
#include <NBCore/Logger.hpp>
class TestError : public nb::Error<TestError> {
using Base = Error<TestError>;

View File

@ -1,7 +1,7 @@
#define CODE_ERROR_LOCATIONS
#include <gtest/gtest.h>
#include "Processes.hpp"
#include <NBCore/Processes.hpp>
#include <Windows.h>
TEST(ProcessesTest, GetPID) {

View File

@ -3,8 +3,8 @@
#include <gtest/gtest.h>
#include <string>
#include "TypeTraits.hpp"
#include "StringUtils.hpp"
#include <NBCore/TypeTraits.hpp>
#include <NBCore/StringUtils.hpp>
namespace nb {

View File

@ -1,4 +1,4 @@
#include "Events.hpp"
#include <NBCore/Events.hpp>
namespace NB {