summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2024-10-24 23:50:21 +0800
committerruki <[email protected]>2024-10-24 23:50:21 +0800
commit82aafe2ab3822f8f1228cb6f2f06368ecc09ef87 (patch)
treea05a4e10d051d16ada1aa2956eb2d1f172e8c188
parent13c88acff1ee187c5df4382b0f9f603552fefc94 (diff)
improve to object target #5729
-rw-r--r--xmake/actions/build/kinds/binary.lua4
-rw-r--r--xmake/actions/build/kinds/object.lua17
-rw-r--r--xmake/actions/build/kinds/shared.lua4
-rw-r--r--xmake/actions/build/kinds/static.lua4
4 files changed, 22 insertions, 7 deletions
diff --git a/xmake/actions/build/kinds/binary.lua b/xmake/actions/build/kinds/binary.lua
index e9607707d..3acc3bcd9 100644
--- a/xmake/actions/build/kinds/binary.lua
+++ b/xmake/actions/build/kinds/binary.lua
@@ -26,7 +26,7 @@ import("core.tool.compiler")
import("core.project.depend")
import("utils.progress")
import("private.utils.batchcmds")
-import("object", {alias = "add_batchjobs_for_object"})
+import("object", {alias = "object_target"})
import("linkdepfiles", {alias = "get_linkdepfiles"})
-- do link target
@@ -143,6 +143,6 @@ function main(batchjobs, rootjob, target)
--
-- unless call set_policy("build.across_targets_in_parallel", false) to disable to build across targets in parallel.
--
- local job_objects = add_batchjobs_for_object(batchjobs, job_link, target)
+ local job_objects = object_target.add_batchjobs_for_object(batchjobs, job_link, target)
return target:policy("build.across_targets_in_parallel") == false and job_objects or job_link, job_objects
end
diff --git a/xmake/actions/build/kinds/object.lua b/xmake/actions/build/kinds/object.lua
index ab7f3b149..b5359f79e 100644
--- a/xmake/actions/build/kinds/object.lua
+++ b/xmake/actions/build/kinds/object.lua
@@ -252,7 +252,22 @@ function add_batchjobs_for_sourcefiles(batchjobs, rootjob, target, sourcebatches
end
-- add batch jobs for building object files
-function main(batchjobs, rootjob, target)
+function add_batchjobs_for_object(batchjobs, rootjob, target)
return add_batchjobs_for_sourcefiles(batchjobs, rootjob, target, target:sourcebatches())
end
+-- add batch jobs for building object target
+function main(batchjobs, rootjob, target)
+
+ -- add a fake link job
+ local job_link = batchjobs:addjob(target:name() .. "/fakelink", function (index, total, opt)
+ end, {rootjob = rootjob})
+
+ -- we only need to return and depend the link job for each target,
+ -- so we can compile the source files for each target in parallel
+ --
+ -- unless call set_policy("build.across_targets_in_parallel", false) to disable to build across targets in parallel.
+ --
+ local job_objects = add_batchjobs_for_object(batchjobs, job_link, target)
+ return target:policy("build.across_targets_in_parallel") == false and job_objects or job_link, job_objects
+end
diff --git a/xmake/actions/build/kinds/shared.lua b/xmake/actions/build/kinds/shared.lua
index 9b65381e6..1b7065766 100644
--- a/xmake/actions/build/kinds/shared.lua
+++ b/xmake/actions/build/kinds/shared.lua
@@ -26,7 +26,7 @@ import("core.tool.compiler")
import("core.project.depend")
import("utils.progress")
import("private.utils.batchcmds")
-import("object", {alias = "add_batchjobs_for_object"})
+import("object", {alias = "object_target"})
import("linkdepfiles", {alias = "get_linkdepfiles"})
-- do link target
@@ -144,6 +144,6 @@ function main(batchjobs, rootjob, target)
--
-- unless call set_policy("build.across_targets_in_parallel", false) to disable to build across targets in parallel.
--
- local job_objects = add_batchjobs_for_object(batchjobs, job_link, target)
+ local job_objects = object_target.add_batchjobs_for_object(batchjobs, job_link, target)
return target:policy("build.across_targets_in_parallel") == false and job_objects or job_link, job_objects
end
diff --git a/xmake/actions/build/kinds/static.lua b/xmake/actions/build/kinds/static.lua
index 6b28eb4e1..7a1161849 100644
--- a/xmake/actions/build/kinds/static.lua
+++ b/xmake/actions/build/kinds/static.lua
@@ -26,7 +26,7 @@ import("core.tool.compiler")
import("core.project.depend")
import("utils.progress")
import("private.utils.batchcmds")
-import("object", {alias = "add_batchjobs_for_object"})
+import("object", {alias = "object_target"})
import("linkdepfiles", {alias = "get_linkdepfiles"})
-- do link target
@@ -144,6 +144,6 @@ function main(batchjobs, rootjob, target)
--
-- unless call set_policy("build.across_targets_in_parallel", false) to disable to build across targets in parallel.
--
- local job_objects = add_batchjobs_for_object(batchjobs, job_link, target)
+ local job_objects = object_target.add_batchjobs_for_object(batchjobs, job_link, target)
return target:policy("build.across_targets_in_parallel") == false and job_objects or job_link, job_objects
end