diff options
Diffstat (limited to 'xmake/core/tool/builder.lua')
| -rw-r--r-- | xmake/core/tool/builder.lua | 28 |
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 |
