summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--xmake/modules/async/jobgraph.lua14
1 files changed, 13 insertions, 1 deletions
diff --git a/xmake/modules/async/jobgraph.lua b/xmake/modules/async/jobgraph.lua
index bfeee3863..31a041911 100644
--- a/xmake/modules/async/jobgraph.lua
+++ b/xmake/modules/async/jobgraph.lua
@@ -32,8 +32,20 @@ function jobqueue:_build()
local graph = self._jobgraph
local dag = graph._dag
local queue = self._queue
+
+ -- check circular dependencies
+ local cycle = dag:find_cycle()
+ if cycle then
+ local names = {}
+ for _, job in ipairs(cycle) do
+ table.insert(names, job.name)
+ end
+ table.insert(names, names[1])
+ raise("%s: circular job dependency detected!\n%s", graph, table.concat(names, "\n -> "))
+ end
+
+ -- build job queue
queue:clear()
- -- TODO find cycle
for _, job in ipairs(dag:topological_sort()) do
print("build job", job.name)
queue:insert(job)