From 475734e6f4a27a3e3f2cdab3d3a93a5e949b7b0e Mon Sep 17 00:00:00 2001 From: Arthur LAURENT Date: Wed, 15 Feb 2023 18:15:06 +0100 Subject: use -fmodule-file== for named module on clang --- xmake/rules/c++/modules/modules_support/clang.lua | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/xmake/rules/c++/modules/modules_support/clang.lua b/xmake/rules/c++/modules/modules_support/clang.lua index 06425ff40..df3cd066b 100644 --- a/xmake/rules/c++/modules/modules_support/clang.lua +++ b/xmake/rules/c++/modules/modules_support/clang.lua @@ -79,15 +79,21 @@ end -- -fmodule-file=build/.gens/Foo/rules/modules/cache/foo.pcm -- -fmodule-file=build/.gens/Foo/rules/modules/cache/iostream.pcm -- -fmodule-file=build/.gens/Foo/rules/modules/cache/bar.hpp.pcm +-- on LLVM >= 16 +-- -fmodule-file=foo=build/.gens/Foo/rules/modules/cache/foo.pcm +-- -fmodule-file=build/.gens/Foo/rules/modules/cache/iostream.pcm +-- -fmodule-file=build/.gens/Foo/rules/modules/cache/bar.hpp.pcm -- -function _add_module_to_mapper(target, name, bmifile, deps) +function _add_module_to_mapper(target, name, bmifile, deps, namedmodule) local modulemap = _get_modulemap_from_mapper(target, name) if modulemap then return end + local clang_version = _get_clang_version(target) + namedmodule = namedmodule and semver.compare(clang_version, "16.0") >= 0 local modulefileflag = get_modulefileflag(target) - local mapflag = modulefileflag .. bmifile + local mapflag = namedmodule and format("%s%s=%s", modulefileflag, name, bmifile) or modulefileflag .. bmifile modulemap = {flag = mapflag, deps = deps} common.localcache():set2(_mapper_cachekey(target), "modulemap" .. name, modulemap) end @@ -596,7 +602,7 @@ function build_modules_for_batchjobs(target, batchjobs, objectfiles, modules, op target:add("objectfiles", objectfile) if provide then - _add_module_to_mapper(target, name, bmifile, requiresflags) + _add_module_to_mapper(target, name, bmifile, requiresflags, true) end elseif requiresflags then local cxxflags = {} @@ -658,7 +664,7 @@ function build_modules_for_batchcmds(target, batchcmds, objectfiles, modules, op if provide then _batchcmds_compile(batchcmds, target, table.join(flags, {"-x", "c++-module", "--precompile", "-c", path(cppfile), "-o", path(provide.bmi)})) - _add_module_to_mapper(target, name, provide.bmi) + _add_module_to_mapper(target, name, provide.bmi, nil, true) end _batchcmds_compile(batchcmds, target, file, table.join(flags, not provide and {"-x", "c++"} or {}, {"-c", file, "-o", path(objectfile)})) -- cgit v1.3.1