add test engine

This commit is contained in:
ouczbs 2024-08-01 22:22:01 +08:00
commit 10423e024f
28 changed files with 424 additions and 0 deletions

6
.gitignore vendored Normal file
View File

@ -0,0 +1,6 @@
.vs/
.vscode/
.xmake/
build/
vsxmake*/
.idea/

4
engine/include/api.h Normal file
View File

@ -0,0 +1,4 @@
#pragma once
#include "zlib.h"
ENGINE_API const char* engine();
inline Module engine_module{engine(), true};

View File

@ -0,0 +1,4 @@
#pragma once
#include "zlib.h"
const char* asset();
inline Module asset_module{ asset(), false};

View File

@ -0,0 +1,5 @@
#include "asset.h"
const char* asset() {
return "asset";
}

View File

@ -0,0 +1,8 @@
target("asset")
set_kind("static")
set_group("engine/comp")
add_files("src/*.cpp")
add_headerfiles("include/*.h")
add_includedirs("include", {public = true})
add_deps("core", "zlib", {public = true})
add_rules("engine.api")

View File

@ -0,0 +1,4 @@
#pragma once
#include "zlib.h"
const char* core();
inline Module core_module{ core(), false};

View File

@ -0,0 +1,5 @@
#include "core.h"
const char* core()
{
return "core";
}

View File

@ -0,0 +1,8 @@
target("core")
set_kind("static")
set_group("engine/comp")
add_files("src/*.cpp")
add_headerfiles("include/*.h")
add_includedirs("include", {public = true})
add_deps("zlib", {public = true})
add_rules("engine.api")

View File

@ -0,0 +1,88 @@
#ifndef NOSTD_SOURCE_LOCATION_HPP
#define NOSTD_SOURCE_LOCATION_HPP
#pragma once
#include <cstdint>
namespace zlog {
struct source_location {
public:
#if not defined(__apple_build_version__) and defined(__clang__) and (__clang_major__ >= 9)
static constexpr source_location current(const char* fileName = __builtin_FILE(),
const char* functionName = __builtin_FUNCTION(),
const uint_least32_t lineNumber = __builtin_LINE(),
const uint_least32_t columnOffset = __builtin_COLUMN()) noexcept
#elif defined(__GNUC__) and (__GNUC__ > 4 or (__GNUC__ == 4 and __GNUC_MINOR__ >= 8))
static constexpr source_location current(const char* fileName = __builtin_FILE(),
const char* functionName = __builtin_FUNCTION(),
const uint_least32_t lineNumber = __builtin_LINE(),
const uint_least32_t columnOffset = 0) noexcept
#else
static constexpr source_location current(const char* fileName = "unsupported",
const char* functionName = "unsupported",
const uint_least32_t lineNumber = 0,
const uint_least32_t columnOffset = 0) noexcept
#endif
{
return source_location(fileName, functionName, lineNumber, columnOffset);
}
source_location(const source_location&) = default;
source_location(source_location&&) = default;
constexpr const char* file_name() const noexcept
{
return fileName;
}
constexpr const char* function_name() const noexcept
{
return functionName;
}
constexpr uint_least32_t line() const noexcept
{
return lineNumber;
}
constexpr std::uint_least32_t column() const noexcept
{
return columnOffset;
}
private:
constexpr source_location(const char* fileName, const char* functionName, const uint_least32_t lineNumber,
const uint_least32_t columnOffset) noexcept
: fileName(fileName)
, functionName(functionName)
, lineNumber(lineNumber)
, columnOffset(columnOffset)
{
}
const char* fileName;
const char* functionName;
const std::uint_least32_t lineNumber;
const std::uint_least32_t columnOffset;
};
[[nodiscard]] constexpr auto get_log_source_location(
const source_location& location) {
return spdlog::source_loc{location.file_name(),
static_cast<std::int32_t>(location.line()),
location.function_name()};
}
struct format_with_location {
std::string_view value;
spdlog::source_loc loc;
template <typename String>
format_with_location(const String& s, const source_location& location =
source_location::current())
: value{ s }, loc{ get_log_source_location(location) } {}
};
} // namespace nostd
#endif

View File

@ -0,0 +1,34 @@
#pragma once
#include <iostream>
#include <vector>
#include "zlog.h"
struct Detail {
int count = 0;
int new_count = 0;
int del_count = 0;
};
struct Module;
inline Detail detail{};
inline std::vector<Module*>* pModuleList{};
struct Module {
std::string name;
bool kind;
void* mHandle{nullptr};
bool Load(std::string path = "");
void* GetSymbol(const char* name);
Module(std::string name, bool kind):kind(kind), name(name){
detail.count++;
if (!pModuleList) {
pModuleList = new std::vector<Module*>;
}
pModuleList->push_back(this);
std::string kind_str = kind ? std::string("shared") : std::string("static");
std::cout << detail.count << ":" << uintptr_t(&zlog::zlog) << "::" << name << ":" << kind_str << std::endl;
}
};
const char* zlib();
#ifdef ZLIB_API_VAL
ZLIB_API inline Module zlib_module{ zlib(), false };
#else
ZLIB_API extern Module zlib_module;
#endif

View File

@ -0,0 +1,47 @@
#pragma once
#include "spdlog/spdlog.h"
#include "source_location.h"
#include <cstdint>
#include <stdexcept>
namespace zlog {
using level_enum = spdlog::level::level_enum;
class zloger {
private:
std::shared_ptr<spdlog::logger> m_logger;
public:
zloger();
~zloger();
template <typename... Args>
void log(level_enum level, format_with_location& fmt, Args &&...args) {
m_logger->log(fmt.loc, level, fmt::runtime(fmt.value), std::forward<Args>(args)...);
}
void flush() {
m_logger->flush();
}
};
ZLIB_API inline zloger zlog;
template <typename... Args>
void info(format_with_location fmt, Args &&...args) {
zlog.log(level_enum::info, fmt, std::forward<Args>(args)...);
};
template <typename... Args>
void debug(format_with_location fmt, Args &&...args) {
zlog.log(level_enum::debug, fmt, std::forward<Args>(args)...);
};
template <typename... Args>
void warn(format_with_location fmt, Args &&...args) {
zlog.log(level_enum::warn, fmt, std::forward<Args>(args)...);
};
template <typename... Args>
void error(format_with_location fmt, Args &&...args) {
zlog.log(level_enum::err, fmt, std::forward<Args>(args)...);
};
template <typename... Args>
void fatal(format_with_location fmt, Args &&...args) {
zlog.log(level_enum::critical, fmt, std::forward<Args>(args)...);
const std::string format_str = fmt::format(std::forward<Args>(args)...);
throw std::runtime_error(format_str);
};
void flush();
};

View File

@ -0,0 +1,28 @@
#include "zlib.h"
const char* zlib()
{
return "zlib";
}
bool Module::Load(std::string path)
{
if (!path.empty())
{
mHandle = GetModuleHandle(path.c_str());
if (mHandle == NULL)
{
mHandle = LoadLibrary(path.c_str());
}
}
else
{
mHandle = GetModuleHandle(nullptr);
}
return mHandle;
}
void* Module::GetSymbol(const char* name)
{
void* addr = (void*)GetProcAddress((HMODULE)mHandle, name);
return addr;
}

View File

@ -0,0 +1,38 @@
#include "zlog.h"
#include <spdlog/async.h>
#include <spdlog/sinks/basic_file_sink.h>
#include <spdlog/sinks/stdout_color_sinks.h>
#include <spdlog/spdlog.h>
namespace zlog {
zloger::zloger()
{
auto console_sink = std::make_shared<spdlog::sinks::stdout_color_sink_mt>();
console_sink->set_level(spdlog::level::trace);
console_sink->set_pattern("[%Y-%m-%d %H:%M:%S][%s:%#] %-8l %^%v%$");
auto file_sink = std::make_shared<spdlog::sinks::basic_file_sink_mt>("logs/zengine.log", true);
file_sink->set_level(spdlog::level::trace);
//file_sink->set_pattern("[%Y-%m-%d %H:%M:%S][%s:%#] %-8l %^%v%$");
const spdlog::sinks_init_list sink_list = { console_sink, file_sink };
spdlog::init_thread_pool(8192, 1);
m_logger = std::make_shared<spdlog::async_logger>("zlogger",
sink_list.begin(),
sink_list.end(),
spdlog::thread_pool(),
spdlog::async_overflow_policy::block);
m_logger->set_level(spdlog::level::trace);
m_logger->set_pattern("[%Y-%m-%d %H:%M:%S][%s:%#] %-8l %^%v%$");
spdlog::register_logger(m_logger);
}
zloger::~zloger()
{
m_logger->flush();
spdlog::drop_all();
}
void flush(){
zlog.flush();
}
}

View File

@ -0,0 +1,8 @@
target("zlib")
set_kind("static")
set_group("engine/comp")
add_files("src/*.cpp")
add_headerfiles("include/*.h")
add_includedirs("include", {public = true})
add_packages("spdlog", {public = true})
add_rules("engine.api")

6
engine/src/api.cpp Normal file
View File

@ -0,0 +1,6 @@
#include "api.h"
const char* engine()
{
return "engine";
}

28
engine/src/temp Normal file
View File

@ -0,0 +1,28 @@
WORK=C:\Users\ouczbs\AppData\Local\Temp\go-build2430488546
cd D:\zvulkan
git status --porcelain
cd D:\zvulkan
git -c log.showsignature=false show -s --format=%H:%ct
# cd D:\zvulkan; git -c log.showsignature=false show -s --format=%H:%ct
fatal: your current branch 'master' does not have any commits yet
github.com/veandco/go-sdl2/sdl
mkdir -p $WORK\b047\
cd C:\Users\ouczbs\go\pkg\mod\github.com\veandco\go-sdl2@v0.4.35\sdl
TERM='dumb' CGO_LDFLAGS='"-LC:\\Users\\ouczbs\\go\\cgo" "-lSDL2"' "C:\\Program Files\\Go\\pkg\\tool\\windows_amd64\\cgo.exe" -objdir "$WORK\\b047\\" -importpath github.com/veandco/go-sdl2/sdl -- -I "$WORK\\b047\\" "-IC:\\Users\\
ouczbs\\go\\cgo" "C:\\Users\\ouczbs\\go\\pkg\\mod\\github.com\\veandco\\go-sdl2@v0.4.35\\sdl\\audio.go" "C:\\Users\\ouczbs\\go\\pkg\\mod\\github.com\\veandco\\go-sdl2@v0.4.35\\sdl\\blendmode.go" "C:\\Users\\ouczbs\\go\\pkg\\mod\
\github.com\\veandco\\go-sdl2@v0.4.35\\sdl\\clipboard.go" "C:\\Users\\ouczbs\\go\\pkg\\mod\\github.com\\veandco\\go-sdl2@v0.4.35\\sdl\\cpuinfo.go" "C:\\Users\\ouczbs\\go\\pkg\\mod\\github.com\\veandco\\go-sdl2@v0.4.35\\sdl\\endi
an.go" "C:\\Users\\ouczbs\\go\\pkg\\mod\\github.com\\veandco\\go-sdl2@v0.4.35\\sdl\\error.go" "C:\\Users\\ouczbs\\go\\pkg\\mod\\github.com\\veandco\\go-sdl2@v0.4.35\\sdl\\events.go" "C:\\Users\\ouczbs\\go\\pkg\\mod\\github.com\\
veandco\\go-sdl2@v0.4.35\\sdl\\filesystem.go" "C:\\Users\\ouczbs\\go\\pkg\\mod\\github.com\\veandco\\go-sdl2@v0.4.35\\sdl\\gamecontroller.go" "C:\\Users\\ouczbs\\go\\pkg\\mod\\github.com\\veandco\\go-sdl2@v0.4.35\\sdl\\gesture.g
o" "C:\\Users\\ouczbs\\go\\pkg\\mod\\github.com\\veandco\\go-sdl2@v0.4.35\\sdl\\guid.go" "C:\\Users\\ouczbs\\go\\pkg\\mod\\github.com\\veandco\\go-sdl2@v0.4.35\\sdl\\haptic.go" "C:\\Users\\ouczbs\\go\\pkg\\mod\\github.com\\veand
co\\go-sdl2@v0.4.35\\sdl\\hidapi.go" "C:\\Users\\ouczbs\\go\\pkg\\mod\\github.com\\veandco\\go-sdl2@v0.4.35\\sdl\\hints.go" "C:\\Users\\ouczbs\\go\\pkg\\mod\\github.com\\veandco\\go-sdl2@v0.4.35\\sdl\\joystick.go" "C:\\Users\\ou
czbs\\go\\pkg\\mod\\github.com\\veandco\\go-sdl2@v0.4.35\\sdl\\keyboard.go" "C:\\Users\\ouczbs\\go\\pkg\\mod\\github.com\\veandco\\go-sdl2@v0.4.35\\sdl\\keycode.go" "C:\\Users\\ouczbs\\go\\pkg\\mod\\github.com\\veandco\\go-sdl2@
v0.4.35\\sdl\\loadso.go" "C:\\Users\\ouczbs\\go\\pkg\\mod\\github.com\\veandco\\go-sdl2@v0.4.35\\sdl\\log.go" "C:\\Users\\ouczbs\\go\\pkg\\mod\\github.com\\veandco\\go-sdl2@v0.4.35\\sdl\\mouse.go" "C:\\Users\\ouczbs\\go\\pkg\\mo
d\\github.com\\veandco\\go-sdl2@v0.4.35\\sdl\\mutex.go" "C:\\Users\\ouczbs\\go\\pkg\\mod\\github.com\\veandco\\go-sdl2@v0.4.35\\sdl\\pixels.go" "C:\\Users\\ouczbs\\go\\pkg\\mod\\github.com\\veandco\\go-sdl2@v0.4.35\\sdl\\power.g
o" "C:\\Users\\ouczbs\\go\\pkg\\mod\\github.com\\veandco\\go-sdl2@v0.4.35\\sdl\\rect.go" "C:\\Users\\ouczbs\\go\\pkg\\mod\\github.com\\veandco\\go-sdl2@v0.4.35\\sdl\\render.go" "C:\\Users\\ouczbs\\go\\pkg\\mod\\github.com\\veand
co\\go-sdl2@v0.4.35\\sdl\\rwops.go" "C:\\Users\\ouczbs\\go\\pkg\\mod\\github.com\\veandco\\go-sdl2@v0.4.35\\sdl\\scancode.go" "C:\\Users\\ouczbs\\go\\pkg\\mod\\github.com\\veandco\\go-sdl2@v0.4.35\\sdl\\sdl.go" "C:\\Users\\ouczb
s\\go\\pkg\\mod\\github.com\\veandco\\go-sdl2@v0.4.35\\sdl\\sdl_cgo.go" "C:\\Users\\ouczbs\\go\\pkg\\mod\\github.com\\veandco\\go-sdl2@v0.4.35\\sdl\\sensor.go" "C:\\Users\\ouczbs\\go\\pkg\\mod\\github.com\\veandco\\go-sdl2@v0.4.
35\\sdl\\shape.go" "C:\\Users\\ouczbs\\go\\pkg\\mod\\github.com\\veandco\\go-sdl2@v0.4.35\\sdl\\surface.go" "C:\\Users\\ouczbs\\go\\pkg\\mod\\github.com\\veandco\\go-sdl2@v0.4.35\\sdl\\sysrender.go" "C:\\Users\\ouczbs\\go\\pkg\\
mod\\github.com\\veandco\\go-sdl2@v0.4.35\\sdl\\system.go" "C:\\Users\\ouczbs\\go\\pkg\\mod\\github.com\\veandco\\go-sdl2@v0.4.35\\sdl\\system_windows.go" "C:\\Users\\ouczbs\\go\\pkg\\mod\\github.com\\veandco\\go-sdl2@v0.4.35\\s
dl\\syswm.go" "C:\\Users\\ouczbs\\go\\pkg\\mod\\github.com\\veandco\\go-sdl2@v0.4.35\\sdl\\syswm_windows.go" "C:\\Users\\ouczbs\\go\\pkg\\mod\\github.com\\veandco\\go-sdl2@v0.4.35\\sdl\\thread.go" "C:\\Users\\ouczbs\\go\\pkg\\mo
d\\github.com\\veandco\\go-sdl2@v0.4.35\\sdl\\timer.go" "C:\\Users\\ouczbs\\go\\pkg\\mod\\github.com\\veandco\\go-sdl2@v0.4.35\\sdl\\touch.go" "C:\\Users\\ouczbs\\go\\pkg\\mod\\github.com\\veandco\\go-sdl2@v0.4.35\\sdl\\version.
go" "C:\\Users\\ouczbs\\go\\pkg\\mod\\github.com\\veandco\\go-sdl2@v0.4.35\\sdl\\video.go" "C:\\Users\\ouczbs\\go\\pkg\\mod\\github.com\\veandco\\go-sdl2@v0.4.35\\sdl\\vulkan.go"

14
engine/xmake.lua Normal file
View File

@ -0,0 +1,14 @@
target("engine")
set_kind("shared")
set_group("engine")
add_files("src/*.cpp")
add_headerfiles("include/*.h")
add_includedirs("include", {public = true})
add_includedirs("modules/asset/include", {public = true})
add_includedirs("modules/core/include", {public = true})
add_includedirs("modules/zlib/include", {public = true})
add_deps("asset", "zlib", "core")
add_rules("engine.api")
includes("xmake/xmake.lua")
includes("modules/*/xmake.lua")

View File

@ -0,0 +1,9 @@
function main(target, name)
local api = string.upper(name) .. "_API"
if target:kind() == "static" then
target:add("defines", api .. "=", api .. "_VAL", {public = false})
else
target:add("defines", api.."=__declspec(dllimport)", {interface=true})
target:add("defines", api.."=__declspec(dllexport)", {public=false})
end
end

16
engine/xmake/xmake.lua Normal file
View File

@ -0,0 +1,16 @@
rule("engine.api")
on_load(function (target)
print(target:name())
import("api_define")
api_define(target, target:name())
local deps = target:get("deps")
if not deps then return end
import("core.project.project")
local is_static = target:kind() == "static"
for _,name in ipairs(deps) do
local deptarget = project.target(name)
if deptarget:kind() == "static" then
api_define(target, name)
end
end
end)

View File

@ -0,0 +1,4 @@
#pragma once
#include "zlib.h"
VULKAN_API const char* vulkan();
inline Module vulkan_module{vulkan(), true};

View File

@ -0,0 +1,6 @@
#include "vulkan.h"
const char* vulkan()
{
return "vulkan";
}

8
game/vulkan/xmake.lua Normal file
View File

@ -0,0 +1,8 @@
target("vulkan")
set_kind("shared")
set_group("engine")
add_rules("engine.api")
add_files("src/*.cpp")
add_headerfiles("include/*.h")
add_includedirs("include", {public = true})
add_deps("engine", {public = true})

View File

@ -0,0 +1,4 @@
#pragma once
#include "zlib.h"
ZWORLD_API const char* zworld();
inline Module zworld_module{zworld(), true};

View File

@ -0,0 +1,5 @@
#include "zworld.h"
const char* zworld()
{
return "zworld";
}

8
game/zworld/xmake.lua Normal file
View File

@ -0,0 +1,8 @@
target("zworld")
set_kind("shared")
set_group("game")
add_rules("engine.api")
add_files("src/*.cpp")
add_headerfiles("include/*.h")
add_includedirs("include", {public = true})
add_deps("vulkan", "engine", {public = true})

View File

@ -0,0 +1,11 @@
#include "zlib.h"
#include "core.h"
#include "asset.h"
#include "api.h"
#include "vulkan.h"
#include "zworld.h"
int main(int argc, char** argv) {
zlog::info("hello world");
zlog::flush();
return 0;
}

View File

@ -0,0 +1,7 @@
target("zworld-editor")
set_kind("binary")
set_group("game")
add_files("src/*.cpp")
add_headerfiles("include/*.h")
add_includedirs("include", {public = true})
add_deps("zworld", {public = true})

11
xmake.lua Normal file
View File

@ -0,0 +1,11 @@
add_rules("mode.debug", "mode.release")
set_arch("x64")
set_languages("cxx20")
set_project("zengine")
set_toolchains("clang")
set_runtimes("MD","c++_shared")
add_requires("spdlog")
includes("engine/xmake.lua")
includes("game/*/xmake.lua")
--xmake project -k vsxmake2022 -m "debug;release"