summaryrefslogtreecommitdiff
path: root/xmake/rules/c++/modules/scanner.lua
diff options
context:
space:
mode:
authorArthur LAURENT <[email protected]>2025-05-13 21:54:34 +0200
committerArthur LAURENT <[email protected]>2025-05-18 15:36:37 +0200
commit30b5faead0483fe632eb4482f9222dec6b5cd4d0 (patch)
treed56cd74780dd8b0e601047e765c22f422c3dd252 /xmake/rules/c++/modules/scanner.lua
parent9e7cafac7c9fb93137761cfc880b762a32b01b7f (diff)
(C++ modules support) parallelize when possible C++ module scanner
Diffstat (limited to 'xmake/rules/c++/modules/scanner.lua')
-rw-r--r--xmake/rules/c++/modules/scanner.lua17
1 files changed, 12 insertions, 5 deletions
diff --git a/xmake/rules/c++/modules/scanner.lua b/xmake/rules/c++/modules/scanner.lua
index 3ce09e1bf..a73e15597 100644
--- a/xmake/rules/c++/modules/scanner.lua
+++ b/xmake/rules/c++/modules/scanner.lua
@@ -24,6 +24,7 @@ import("core.base.hashset")
import("core.base.graph")
import("core.base.option")
import("core.base.profiler")
+import("private.async.jobpool")
import("async.runjobs")
import("support")
import("mapper")
@@ -237,16 +238,22 @@ function _get_package_modules(target, package, opt)
local package_modules
local modulesdir = path.join(package:installdir(), "modules")
local metafiles = os.files(path.join(modulesdir, "*", "*.meta-info"))
+ local jobs = jobpool.new()
for _, metafile in ipairs(metafiles) do
package_modules = package_modules or {}
local modulefile, _, metadata = _parse_meta_info(target, metafile)
+ jobs:addjob("job/parse_meta_file/" .. metafile, function()
+ package_modules = package_modules or {}
+ local modulefile, _, metadata = _parse_meta_info(metafile)
- local bmionly = package:libraryfiles() and true or false
- package_modules[path.join(modulesdir, modulefile)] = {defines = metadata.defines,
- undefines = metadata.undefines,
- bmionly = bmionly,
- external = opt.external and target:fullname()}
+ local bmionly = package:libraryfiles() and true or false
+ package_modules[path.join(modulesdir, modulefile)] = {defines = metadata.defines,
+ undefines = metadata.undefines,
+ bmionly = bmionly,
+ external = opt.external and target:fullname()}
+ end)
end
+ runjobs(format("parsing package %s module metafiles", package:name()), jobs, {comax = option.get("jobs") or os.default_njob()})
profiler.leave(target:fullname(), "c++ modules", "scanner", "get modules from package", package:name())
return package_modules
end