diff options
| author | ruki <[email protected]> | 2025-11-06 09:20:52 +0800 |
|---|---|---|
| committer | GitHub <[email protected]> | 2025-11-06 09:20:52 +0800 |
| commit | 169c7ddce5a07c82b5aa60fbc6fcb37e4593fb7d (patch) | |
| tree | 2f2b90ec77ff0cf6093f2e534e69d9e9eda116dc | |
| parent | c5d08dcde1187fbf3903d51d63af8e15e28650c1 (diff) | |
| parent | ce723897432dad8d8f94ddf831e3a8d7db6e2700 (diff) | |
Merge pull request #6993 from Arthapz/fix-xmake_tests_modules
Fix xmake tests modules
| -rw-r--r-- | tests/projects/c++/modules/test_dependency_scanner.lua | 2 | ||||
| -rw-r--r-- | tests/projects/c++/modules/test_xmake_test.lua | 22 | ||||
| -rw-r--r-- | tests/projects/c++/modules/xmake_tests1/src/foo.cppm | 3 | ||||
| -rw-r--r-- | tests/projects/c++/modules/xmake_tests1/src/main.cpp | 3 | ||||
| -rw-r--r-- | tests/projects/c++/modules/xmake_tests1/test.lua | 1 | ||||
| -rw-r--r-- | tests/projects/c++/modules/xmake_tests1/xmake.lua | 15 | ||||
| -rw-r--r-- | tests/projects/c++/modules/xmake_tests2/src/foo.cppm | 3 | ||||
| -rw-r--r-- | tests/projects/c++/modules/xmake_tests2/src/main.cpp | 3 | ||||
| -rw-r--r-- | tests/projects/c++/modules/xmake_tests2/test.lua | 1 | ||||
| -rw-r--r-- | tests/projects/c++/modules/xmake_tests2/xmake.lua | 21 | ||||
| -rw-r--r-- | xmake/rules/c++/modules/builder.lua | 11 | ||||
| -rw-r--r-- | xmake/rules/c++/modules/scanner.lua | 13 |
12 files changed, 84 insertions, 14 deletions
diff --git a/tests/projects/c++/modules/test_dependency_scanner.lua b/tests/projects/c++/modules/test_dependency_scanner.lua index 406ac76f4..450a53084 100644 --- a/tests/projects/c++/modules/test_dependency_scanner.lua +++ b/tests/projects/c++/modules/test_dependency_scanner.lua @@ -8,7 +8,7 @@ MSVC_MIN_VER = "14.29" function _build(platform, toolchain_name, runtimes, policies, flags) local flags = "" if ci_is_running() then - flags = "-vD" + flags = "-vD" end os.exec("xmake f" .. platform .. "--toolchain=" .. toolchain_name .. runtimes .. "-c --yes " .. policies .. " --foo=n" .. " " .. flags) local outdata diff --git a/tests/projects/c++/modules/test_xmake_test.lua b/tests/projects/c++/modules/test_xmake_test.lua new file mode 100644 index 000000000..2d0b0a2d1 --- /dev/null +++ b/tests/projects/c++/modules/test_xmake_test.lua @@ -0,0 +1,22 @@ +inherit("test_base") +import("utils.ci.is_running", {alias = "ci_is_running"}) + +CLANG_MIN_VER = is_subhost("windows") and "19" or "17" +GCC_MIN_VER = "11" +MSVC_MIN_VER = "14.29" + +function run_xmake_test(...) + local flags = "" + if ci_is_running() then + flags = "-vD" + end + local outdata, errdata = os.iorun("xmake test " .. flags) + assert(outdata, errdata) +end + +function main(t) + local clang_options = {compiler = "clang", version = CLANG_MIN_VER, after_build = run_xmake_test} + local gcc_options = {compiler = "gcc", version = GCC_MIN_VER, after_build = run_xmake_test} + local msvc_options = {version = MSVC_MIN_VER, after_build = run_xmake_test} + run_tests(clang_options, gcc_options, msvc_options) +end diff --git a/tests/projects/c++/modules/xmake_tests1/src/foo.cppm b/tests/projects/c++/modules/xmake_tests1/src/foo.cppm new file mode 100644 index 000000000..d0cb72703 --- /dev/null +++ b/tests/projects/c++/modules/xmake_tests1/src/foo.cppm @@ -0,0 +1,3 @@ +export module Foo; + +export inline int foo() { return 0; } diff --git a/tests/projects/c++/modules/xmake_tests1/src/main.cpp b/tests/projects/c++/modules/xmake_tests1/src/main.cpp new file mode 100644 index 000000000..7a7488a3b --- /dev/null +++ b/tests/projects/c++/modules/xmake_tests1/src/main.cpp @@ -0,0 +1,3 @@ +import Foo; + +int main() { return foo(); } diff --git a/tests/projects/c++/modules/xmake_tests1/test.lua b/tests/projects/c++/modules/xmake_tests1/test.lua new file mode 100644 index 000000000..25ca8a7a3 --- /dev/null +++ b/tests/projects/c++/modules/xmake_tests1/test.lua @@ -0,0 +1 @@ +inherit(".test_xmake_test") diff --git a/tests/projects/c++/modules/xmake_tests1/xmake.lua b/tests/projects/c++/modules/xmake_tests1/xmake.lua new file mode 100644 index 000000000..64198ec69 --- /dev/null +++ b/tests/projects/c++/modules/xmake_tests1/xmake.lua @@ -0,0 +1,15 @@ +add_rules('mode.debug', 'mode.release') + set_languages('c++23') + set_policy('build.c++.modules.std', false) + +target('module_dep') + set_kind('moduleonly') + add_files('src/*.cppm') + +target('module_target') + set_kind('moduleonly') + add_files('src/*.cppm') + +add_deps('module_dep') + add_tests('test', { kind = 'binary', files = 'src/main.cpp', build_should_pass = true }) + add_tests('test2', { kind = 'binary', files = 'src/main.cpp', build_should_pass = true }) diff --git a/tests/projects/c++/modules/xmake_tests2/src/foo.cppm b/tests/projects/c++/modules/xmake_tests2/src/foo.cppm new file mode 100644 index 000000000..d0cb72703 --- /dev/null +++ b/tests/projects/c++/modules/xmake_tests2/src/foo.cppm @@ -0,0 +1,3 @@ +export module Foo; + +export inline int foo() { return 0; } diff --git a/tests/projects/c++/modules/xmake_tests2/src/main.cpp b/tests/projects/c++/modules/xmake_tests2/src/main.cpp new file mode 100644 index 000000000..7a7488a3b --- /dev/null +++ b/tests/projects/c++/modules/xmake_tests2/src/main.cpp @@ -0,0 +1,3 @@ +import Foo; + +int main() { return foo(); } diff --git a/tests/projects/c++/modules/xmake_tests2/test.lua b/tests/projects/c++/modules/xmake_tests2/test.lua new file mode 100644 index 000000000..25ca8a7a3 --- /dev/null +++ b/tests/projects/c++/modules/xmake_tests2/test.lua @@ -0,0 +1 @@ +inherit(".test_xmake_test") diff --git a/tests/projects/c++/modules/xmake_tests2/xmake.lua b/tests/projects/c++/modules/xmake_tests2/xmake.lua new file mode 100644 index 000000000..e5326b36d --- /dev/null +++ b/tests/projects/c++/modules/xmake_tests2/xmake.lua @@ -0,0 +1,21 @@ +add_rules("mode.debug", "mode.release") +set_languages("c++23") +set_policy("build.c++.modules.std", false) + +target("module_dep") + set_kind("moduleonly") + add_files("src/*.cppm") + +target("module_target1") + set_kind("moduleonly") + add_files("src/*.cppm") + + add_deps("module_dep") + add_tests("tests", {kind = "binary", files = "src/main.cpp", build_should_pass = true}) + +target("module_target2") + set_kind("moduleonly") + add_files("src/*.cppm") + + add_deps("module_dep") + add_tests("tests", {kind = "binary", files = "src/main.cpp", build_should_pass = true}) diff --git a/xmake/rules/c++/modules/builder.lua b/xmake/rules/c++/modules/builder.lua index a1c93a35f..87cd143f0 100644 --- a/xmake/rules/c++/modules/builder.lua +++ b/xmake/rules/c++/modules/builder.lua @@ -121,13 +121,15 @@ function _get_jobdeps(target, module, jobgraph, buildfilejob) return jobdeps end -function _get_saved_jobdeps_for(buildfilejob) +function _get_saved_jobdeps_for(jobgraph, buildfilejob) local memcache = support.memcache() local dependent_jobs = memcache:get2("dependent_jobs", buildfilejob) local jobdeps = {} for _, dependent_job in ipairs(dependent_jobs) do - jobdeps[dependent_job] = jobdeps[dependent_job] or {} - table.insert(jobdeps[dependent_job], buildfilejob) + if jobgraph:has(dependent_job) then + jobdeps[dependent_job] = jobdeps[dependent_job] or {} + table.insert(jobdeps[dependent_job], buildfilejob) + end end return jobdeps end @@ -266,7 +268,7 @@ function build_modules_for_jobgraph(target, jobgraph, built_modules) -- insert saved jobdeps for _, buildfilejob in ipairs(buildfilejobs) do - table.join2(jobdeps, _get_saved_jobdeps_for(buildfilejob)) + table.join2(jobdeps, _get_saved_jobdeps_for(jobgraph, buildfilejob)) end -- apply jobdeps @@ -756,4 +758,3 @@ function build_objectfiles(target, jobgraph, _, opt) profiler.leave(target:fullname(), "c++ modules", "builder", "objectfiles") end end - diff --git a/xmake/rules/c++/modules/scanner.lua b/xmake/rules/c++/modules/scanner.lua index 818e37aa2..3c7a04aa4 100644 --- a/xmake/rules/c++/modules/scanner.lua +++ b/xmake/rules/c++/modules/scanner.lua @@ -234,7 +234,6 @@ function _get_packages_for(target) for name, dep in pairs(target:orderdeps()) do local dep_packages = _get_packages_for(dep) for pkgname, package in pairs(dep_packages) do - -- print(package) packages[pkgname] = {pkg = package.pkg, from_dep = package.from_dep or dep, from_package = true} end end @@ -377,13 +376,13 @@ function _patch_sourcebatch(target, sourcebatch) local localcache = support.localcache() local reuse = target:policy("build.c++.modules.reuse") or - target:policy("build.c++.modules.tryreuse") + target:policy("build.c++.modules.tryreuse") local reused = {} for sourcefile, fileconfig in pairs(from_depmodules) do if reuse and fileconfig.from_dep then local nocheck = target:policy("build.c++.modules.reuse.nocheck") local strict = target:policy("build.c++.modules.reuse.strict") or - target:policy("build.c++.modules.tryreuse.discriminate_on_defines") + target:policy("build.c++.modules.tryreuse.discriminate_on_defines") local dep = target:dep(fileconfig.from_dep) assert(dep, "dep target <%s> for <%s> not found", fileconfig.from_dep, target:fullname()) local can_reuse = nocheck or _are_flags_compatible(target, dep, sourcefile, {strict = strict}) @@ -415,7 +414,7 @@ function _patch_sourcebatch(target, sourcebatch) end table.sort(sourcebatch.sourcefiles) - memcache:set2(target:fullname(), "cached_sourcebatch", sourcebatch) + memcache:set2(target:fullname(), "cached_sourcebatch", table.clone(sourcebatch)) local keys = #sourcebatch.sourcefiles > 0 and table.concat(sourcebatch.sourcefiles) or "_" local sum = hash.strhash64(keys) @@ -566,7 +565,7 @@ function _schedule_module_dependencies_scan(target, jobgraph, sourcebatch) modules[name].alias = true end end - end) + end) local reused, from = support.is_reused(target, sourcefile) if reused then local scanfilejob = get_scanfilejob_for(from, sourcefile) @@ -886,9 +885,7 @@ function after_scan(target) local sourcebatches = target:sourcebatches() local sourcebatch_builder = sourcebatches and sourcebatches["c++.build.modules.builder"] local sourcebatch_scanner = sourcebatches and sourcebatches["c++.build.modules.scanner"] - if sourcebatch_scanner then - sourcebatch_scanner.sourcefiles = {} - end + support.memcache():set2(target:fullname(), "jobdeps", nil) if sourcebatch_builder then sourcebatch_builder.sourcefiles = {} sourcebatch_builder.dependfiles = {} |
