summaryrefslogtreecommitdiff
path: root/xmake/core/tool/builder.lua
diff options
context:
space:
mode:
Diffstat (limited to 'xmake/core/tool/builder.lua')
-rw-r--r--xmake/core/tool/builder.lua28
1 files changed, 26 insertions, 2 deletions
diff --git a/xmake/core/tool/builder.lua b/xmake/core/tool/builder.lua
index 920897576..cca77b7a9 100644
--- a/xmake/core/tool/builder.lua
+++ b/xmake/core/tool/builder.lua
@@ -475,6 +475,7 @@ function builder:_add_flags_from_language(flags, opt)
self:_add_items_from_toolchain(items, flagname, opt_)
end
end
+
end
-- sort links
@@ -591,12 +592,35 @@ function builder:_sort_links_of_items(items, opt)
local extra = self:_extraconf(extras, value)
local key = extra and extra.name or tostring(value)
table.insert(links, "linkgroup::" .. key)
- linkgroups_map[key] = value
extras_map[key] = extras
+ local oldvalue = linkgroups_map[key]
+ if oldvalue == nil then
+ linkgroups_map[key] = value
+ else
+ -- merge linkgroups if multiple groups have same group name
+ -- @see https://github.com/xmake-io/xmake/issues/5806
+ local oldvalue_wrap_unlock = table.clone(oldvalue)
+ table.wrap_unlock(oldvalue_wrap_unlock)
+ local value_wrap_unlock = table.clone(value)
+ table.wrap_unlock(value_wrap_unlock)
+ local newvalue = table.join(oldvalue_wrap_unlock, value_wrap_unlock)
+ table.wrap_lock(newvalue)
+ linkgroups_map[key] = newvalue
+
+ -- merge linkgroups extras
+ local extra_merged = {}
+ local group_name = extra.name
+ for k, v in pairs(extras) do
+ if v.name == group_name then
+ table.join2(extra_merged, v)
+ end
+ end
+ local newgroup_name = table.concat(newvalue, "_")
+ extras[newgroup_name] = extra_merged
+ end
end
end
end
-
links = table.reverse_unique(links)
end