diff options
| author | Arthur LAURENT <[email protected]> | 2025-05-13 21:54:34 +0200 |
|---|---|---|
| committer | Arthur LAURENT <[email protected]> | 2025-05-18 15:36:37 +0200 |
| commit | 30b5faead0483fe632eb4482f9222dec6b5cd4d0 (patch) | |
| tree | d56cd74780dd8b0e601047e765c22f422c3dd252 /xmake/rules/c++/modules/scanner.lua | |
| parent | 9e7cafac7c9fb93137761cfc880b762a32b01b7f (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.lua | 17 |
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 |
