From a2567f628ae0c4bef643e9c53b735a6d01f61099 Mon Sep 17 00:00:00 2001 From: fogsong233 Date: Thu, 26 Mar 2026 16:17:41 +0800 Subject: [PATCH 1/5] feat: export merged eventide static library --- src/eventide.cpp | 5 +++++ xmake.lua | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 51 insertions(+) create mode 100644 src/eventide.cpp diff --git a/src/eventide.cpp b/src/eventide.cpp new file mode 100644 index 0000000..b72b352 --- /dev/null +++ b/src/eventide.cpp @@ -0,0 +1,5 @@ +namespace eventide { + +void archive_anchor() {} + +} diff --git a/xmake.lua b/xmake.lua index d98e8ab..f20c121 100644 --- a/xmake.lua +++ b/xmake.lua @@ -227,6 +227,52 @@ if has_config("async") and has_config("serde") and has_config("serde_simdjson") end) end +target("eventide", function() + set_default(false) + set_kind("static") + add_rules("utils.merge.archive") + set_policy("build.merge_archive", true) + add_files("src/eventide.cpp") + add_includedirs("include", { public = true }) + add_headerfiles("include/(eventide/**)") + + add_deps("common", "reflection", { public = true }) + + if has_config("serde") then + add_deps("serde", { public = true }) + if has_config("serde_simdjson") then + add_deps("serde_json", { public = true }) + add_packages("simdjson", "yyjson", { public = true }) + end + if has_config("serde_flatbuffers") then + add_deps("serde_flatbuffers", { public = true }) + add_packages("flatbuffers", { public = true }) + end + if has_config("serde_toml") then + add_deps("serde_toml", { public = true }) + add_packages("toml++", { public = true }) + end + end + + if has_config("option") then + add_deps("option", { public = true }) + end + if has_config("deco") and has_config("option") then + add_deps("deco", { public = true }) + end + if has_config("ztest") then + add_deps("ztest", { public = true }) + add_packages("cpptrace", { public = true }) + end + if has_config("async") then + add_deps("async", { public = true }) + add_packages("libuv", { public = true }) + end + if has_config("async") and has_config("serde") and has_config("serde_simdjson") then + add_deps("ipc", "language", { public = true }) + end +end) + if has_config("test") and has_config("ztest") then target("unit_tests", function() set_default(false) From 491c27d2508441dd04b184e96796dbf24d173b6e Mon Sep 17 00:00:00 2001 From: fogsong233 Date: Thu, 26 Mar 2026 17:30:23 +0800 Subject: [PATCH 2/5] fix xmake deps --- src/eventide.cpp | 5 ----- xmake.lua | 1 - 2 files changed, 6 deletions(-) delete mode 100644 src/eventide.cpp diff --git a/src/eventide.cpp b/src/eventide.cpp deleted file mode 100644 index b72b352..0000000 --- a/src/eventide.cpp +++ /dev/null @@ -1,5 +0,0 @@ -namespace eventide { - -void archive_anchor() {} - -} diff --git a/xmake.lua b/xmake.lua index f20c121..a62eeb4 100644 --- a/xmake.lua +++ b/xmake.lua @@ -232,7 +232,6 @@ target("eventide", function() set_kind("static") add_rules("utils.merge.archive") set_policy("build.merge_archive", true) - add_files("src/eventide.cpp") add_includedirs("include", { public = true }) add_headerfiles("include/(eventide/**)") From 1df44eac24dea05428eba3f8aeff7375169fa38d Mon Sep 17 00:00:00 2001 From: fogsong233 Date: Thu, 26 Mar 2026 17:44:38 +0800 Subject: [PATCH 3/5] fix(xmake): merge eventide archive without mutating dep links --- xmake.lua | 35 +++++++++++++++++++++++++++++++++-- 1 file changed, 33 insertions(+), 2 deletions(-) diff --git a/xmake.lua b/xmake.lua index a62eeb4..8589eba 100644 --- a/xmake.lua +++ b/xmake.lua @@ -230,8 +230,6 @@ end target("eventide", function() set_default(false) set_kind("static") - add_rules("utils.merge.archive") - set_policy("build.merge_archive", true) add_includedirs("include", { public = true }) add_headerfiles("include/(eventide/**)") @@ -270,6 +268,39 @@ target("eventide", function() if has_config("async") and has_config("serde") and has_config("serde_simdjson") then add_deps("ipc", "language", { public = true }) end + + -- `utils.merge.archive` mutates dependency link inheritance globally in after_load, + -- which breaks sibling targets such as `unit_tests`. + -- Merge static deps locally after linking this target instead. + after_link(function (target, opt) + import("utils.archive.merge_staticlib") + import("core.project.depend") + import("utils.progress") + + local libraryfiles = {} + for _, dep in ipairs(target:orderdeps()) do + if dep:is_static() then + table.insert(libraryfiles, dep:targetfile()) + end + end + if #libraryfiles > 0 then + table.insert(libraryfiles, target:targetfile()) + end + + depend.on_changed(function () + progress.show(opt.progress, "${color.build.target}merging.$(mode) %s", path.filename(target:targetfile())) + if #libraryfiles > 0 then + local tmpfile = os.tmpfile() .. path.extension(target:targetfile()) + merge_staticlib(target, tmpfile, libraryfiles) + os.cp(tmpfile, target:targetfile()) + os.rm(tmpfile) + end + end, { + dependfile = target:dependfile(target:targetfile() .. ".eventide.merge"), + files = libraryfiles, + changed = target:is_rebuilt() + }) + end) end) if has_config("test") and has_config("ztest") then From 6bb5adfeaa91bae21a87c08030d89aad16ca3836 Mon Sep 17 00:00:00 2001 From: fogsong233 Date: Thu, 26 Mar 2026 17:49:44 +0800 Subject: [PATCH 4/5] refactor(xmake): enable merged archive only for export builds --- xmake.lua | 39 ++++++--------------------------------- 1 file changed, 6 insertions(+), 33 deletions(-) diff --git a/xmake.lua b/xmake.lua index 8589eba..97c8fb7 100644 --- a/xmake.lua +++ b/xmake.lua @@ -230,6 +230,12 @@ end target("eventide", function() set_default(false) set_kind("static") + -- Use xmake's official merge-archive rule only for export/package builds. + -- It mutates dep-link inheritance in after_load, which can break in-tree unit test linking. + if not has_config("test") then + add_rules("utils.merge.archive") + set_policy("build.merge_archive", true) + end add_includedirs("include", { public = true }) add_headerfiles("include/(eventide/**)") @@ -268,39 +274,6 @@ target("eventide", function() if has_config("async") and has_config("serde") and has_config("serde_simdjson") then add_deps("ipc", "language", { public = true }) end - - -- `utils.merge.archive` mutates dependency link inheritance globally in after_load, - -- which breaks sibling targets such as `unit_tests`. - -- Merge static deps locally after linking this target instead. - after_link(function (target, opt) - import("utils.archive.merge_staticlib") - import("core.project.depend") - import("utils.progress") - - local libraryfiles = {} - for _, dep in ipairs(target:orderdeps()) do - if dep:is_static() then - table.insert(libraryfiles, dep:targetfile()) - end - end - if #libraryfiles > 0 then - table.insert(libraryfiles, target:targetfile()) - end - - depend.on_changed(function () - progress.show(opt.progress, "${color.build.target}merging.$(mode) %s", path.filename(target:targetfile())) - if #libraryfiles > 0 then - local tmpfile = os.tmpfile() .. path.extension(target:targetfile()) - merge_staticlib(target, tmpfile, libraryfiles) - os.cp(tmpfile, target:targetfile()) - os.rm(tmpfile) - end - end, { - dependfile = target:dependfile(target:targetfile() .. ".eventide.merge"), - files = libraryfiles, - changed = target:is_rebuilt() - }) - end) end) if has_config("test") and has_config("ztest") then From e6ef9158662adf110c48f2d23a0b9fe0bfa20fc7 Mon Sep 17 00:00:00 2001 From: fogsong233 Date: Thu, 26 Mar 2026 17:54:17 +0800 Subject: [PATCH 5/5] fix --- xmake.lua | 2 -- 1 file changed, 2 deletions(-) diff --git a/xmake.lua b/xmake.lua index 97c8fb7..4744fe8 100644 --- a/xmake.lua +++ b/xmake.lua @@ -230,8 +230,6 @@ end target("eventide", function() set_default(false) set_kind("static") - -- Use xmake's official merge-archive rule only for export/package builds. - -- It mutates dep-link inheritance in after_load, which can break in-tree unit test linking. if not has_config("test") then add_rules("utils.merge.archive") set_policy("build.merge_archive", true)