summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2022-12-18 14:01:31 +0800
committerruki <[email protected]>2022-12-18 14:01:31 +0800
commitcd725062f43a77d8919ccc29d751ad3763fc80b8 (patch)
tree8f4d63455c7e2c6650d4de42a6eb352c1b547df8
parent66991f330fcfe08630fd2c028f45d7a54b5fd7be (diff)
fix link
-rw-r--r--tests/apis/clone_target/test.lua2
-rw-r--r--xmake/core/base/private/instance_deps.lua13
2 files changed, 12 insertions, 3 deletions
diff --git a/tests/apis/clone_target/test.lua b/tests/apis/clone_target/test.lua
index a4a38b0ce..83c0a9546 100644
--- a/tests/apis/clone_target/test.lua
+++ b/tests/apis/clone_target/test.lua
@@ -1,3 +1,3 @@
function main()
- os.exec("xmake")
+ os.exec("xmake -vD")
end
diff --git a/xmake/core/base/private/instance_deps.lua b/xmake/core/base/private/instance_deps.lua
index 535b2d2bb..2473a4c3f 100644
--- a/xmake/core/base/private/instance_deps.lua
+++ b/xmake/core/base/private/instance_deps.lua
@@ -32,11 +32,19 @@ local table = require("base/table")
--
-- a.deps = b
-- b.deps = c
+-- foo.deps = a d
--
--- orderdeps: c -> b -> a
+-- orderdeps: c -> b -> d -> a -> foo
+--
+-- if they're target, their links order is reverse(orderdeps), e.g. foo-> a -> d -> b -> c
--
function instance_deps.load_deps(instance, instances, deps, orderdeps, depspath)
- for _, dep in ipairs(table.wrap(instance:get("deps"))) do
+ local deps = table.wrap(instance:get("deps"))
+ local total = #deps
+ for idx, _ in ipairs(deps) do
+ -- we reverse to get the flat dependencies in order to ensure the correct linking order
+ -- @see https://github.com/xmake-io/xmake/issues/3144
+ local dep = deps[total + 1 - idx]
local depinst = instances[dep]
if depinst then
local depspath_sub
@@ -75,3 +83,4 @@ end
-- return module
return instance_deps
+