From 30b5faead0483fe632eb4482f9222dec6b5cd4d0 Mon Sep 17 00:00:00 2001 From: Arthur LAURENT Date: Tue, 13 May 2025 21:54:34 +0200 Subject: (C++ modules support) parallelize when possible C++ module scanner --- xmake/rules/c++/modules/support.lua | 28 +++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-) (limited to 'xmake/rules/c++/modules/support.lua') diff --git a/xmake/rules/c++/modules/support.lua b/xmake/rules/c++/modules/support.lua index faaa57369..ec2bb53e0 100644 --- a/xmake/rules/c++/modules/support.lua +++ b/xmake/rules/c++/modules/support.lua @@ -23,6 +23,8 @@ import("core.base.json") import("core.base.hashset") import("core.cache.memcache", {alias = "_memcache"}) import("core.cache.localcache", {alias = "_localcache"}) +import("private.async.jobpool") +import("async.runjobs") import("lib.detect.find_file") import("core.project.project") import("core.project.config") @@ -236,21 +238,25 @@ end -- load module infos function load_moduleinfos(target, sourcebatch) local moduleinfos + local jobs = jobpool.new() for _, sourcefile in ipairs(sourcebatch.sourcefiles) do - local reused, from = is_reused(target, sourcefile) - local dependfile = reused and from:dependfile(sourcefile) or target:dependfile(sourcefile) - if os.isfile(dependfile) then - local data = io.load(dependfile) - if data then - moduleinfos = moduleinfos or {} - local moduleinfo = json.decode(data.moduleinfo) - moduleinfo.sourcefile = sourcefile - if moduleinfo then - table.insert(moduleinfos, moduleinfo) + jobs:addjob("job/load_moduleinfo/" .. sourcefile, function() + local reused, from = is_reused(target, sourcefile) + local dependfile = reused and from:dependfile(sourcefile) or target:dependfile(sourcefile) + if os.isfile(dependfile) then + local data = io.load(dependfile) + if data then + moduleinfos = moduleinfos or {} + local moduleinfo = json.decode(data.moduleinfo) + moduleinfo.sourcefile = sourcefile + if moduleinfo then + table.insert(moduleinfos, moduleinfo) + end end end - end + end) end + runjobs(format("loading module infos for target %s", target:fullname()), jobs, {comax = option.get("jobs") or os.default_njob()}) return moduleinfos end -- cgit v1.3.1