diff --git a/engine/include/api.h b/engine/include/api.h index 06dff05..bf6548a 100644 --- a/engine/include/api.h +++ b/engine/include/api.h @@ -1,8 +1,5 @@ #pragma once #include "zlib.h" ENGINE_API const char* engine(); -#ifdef ENGINE_API_VAL -ENGINE_API inline Module engine_module{ engine(), false }; -#else ENGINE_API extern Module engine_module; -#endif \ No newline at end of file +ENGINE_API extern Module engine_module_hello; \ No newline at end of file diff --git a/engine/modules/zlib/include/zlib.h b/engine/modules/zlib/include/zlib.h index b301222..f38cb2f 100644 --- a/engine/modules/zlib/include/zlib.h +++ b/engine/modules/zlib/include/zlib.h @@ -21,6 +21,7 @@ struct Module { if (!pModuleList) { pModuleList = new std::vector; } + auto ptr = this; 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; diff --git a/engine/src/api.cpp b/engine/src/api.cpp index c712349..dffcc1b 100644 --- a/engine/src/api.cpp +++ b/engine/src/api.cpp @@ -1,5 +1,6 @@ #include "api.h" - +ENGINE_API Module engine_module{ engine(), true }; +ENGINE_API inline Module engine_module_hello{ "engine_module_hello", true }; const char* engine() { return "engine"; diff --git a/engine/xmake.lua b/engine/xmake.lua index 3b0351b..9250172 100644 --- a/engine/xmake.lua +++ b/engine/xmake.lua @@ -7,8 +7,8 @@ target("engine") 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") + add_deps("asset", "zlib", "core", { inherit = false}) + add_rules("engine.api", {inherit = false}) includes("xmake/xmake.lua") includes("modules/*/xmake.lua") \ No newline at end of file diff --git a/engine/xmake/rule_api/rule_api.lua b/engine/xmake/rule_api/rule_api.lua index 1db47c1..b1f4c96 100644 --- a/engine/xmake/rule_api/rule_api.lua +++ b/engine/xmake/rule_api/rule_api.lua @@ -1,10 +1,22 @@ +import("core.project.project") function add_define(target, name, is_static) local api = string.upper(name) .. "_API" if is_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}) + target:add("defines", api.."=__declspec(dllexport)", api .. "_VAL", {public=false}) + end +end +function add_packages(target, deptarget) + local packs = deptarget:get("packages") + if packs and #packs > 0 then + local packages = {} + for _,v in ipairs(packs) do + table.insert(packages, v) + end + table.insert(packages, {public = true}) + target:add("packages", unpack(packages)) end end function main(target) @@ -12,12 +24,38 @@ function main(target) local is_static = target:kind() == "static" add_define(target, name, is_static) local deps = target:get("deps") - if not deps then return end - import("core.project.project") + if not deps then return end + local inherit = target:extraconf("rules", "engine.api", "inherit") + local linkdirs = {} for _,dep in ipairs(deps) do local deptarget = project.target(dep) if deptarget:kind() == "static" then add_define(target, dep, is_static) + add_packages(target, deptarget) + if inherit == false then + target:add("links", dep) + local dir = deptarget:targetdir() + if not linkdirs[dir] then + target:add("linkdirs", dir) + linkdirs[dir] = true + end + end end end + -- local real_deps = {} + -- local links = {} + -- for _,dep in ipairs(deps) do + -- local deptarget = project.target(dep) + -- if deptarget:kind() == "static" then + -- add_define(target, dep, is_static) + -- --add_packages(target, deptarget) + -- table.insert(links, dep) + -- elseif is_link then + -- table.insert(real_deps, dep) + -- end + -- end + -- if is_link then + -- --target:add("links", links) + -- --target:set("deps", real_deps) + -- end end \ No newline at end of file diff --git a/game/vulkan/include/vulkan.h b/game/vulkan/include/vulkan.h index 0980798..4d43d61 100644 --- a/game/vulkan/include/vulkan.h +++ b/game/vulkan/include/vulkan.h @@ -1,5 +1,6 @@ #pragma once #include "zlib.h" #include "core.h" +#include "api.h" VULKAN_API const char* vulkan(); inline Module vulkan_module{vulkan(), true}; diff --git a/game/vulkan/src/vulkan.cpp b/game/vulkan/src/vulkan.cpp index 75cfedf..ec3c06b 100644 --- a/game/vulkan/src/vulkan.cpp +++ b/game/vulkan/src/vulkan.cpp @@ -2,5 +2,7 @@ const char* vulkan() { + auto c1 = engine_module_hello.name.c_str(); + auto c2 = zlib_module.name.c_str(); return "vulkan"; }