summaryrefslogtreecommitdiff
path: root/xmake/rules/c++/modules/xmake.lua
diff options
context:
space:
mode:
authorruki <[email protected]>2024-07-25 12:47:50 +0800
committerGitHub <[email protected]>2024-07-25 12:47:50 +0800
commitdeef593df0fc604b0da9fe735edf30e31c82af8c (patch)
tree4be14639a997cdae2ce2da0fad7b36159ec119db /xmake/rules/c++/modules/xmake.lua
parent2eac22e42e4ebeebbcdd5e241fea4fcaf7a92e59 (diff)
parent626b80e46c371a2723f204e2412339e73d6cbece (diff)
Merge pull request #5376 from Arthapz/fix-module-objectfiles-handling
Improve module objectfiles handling and moduleonly package
Diffstat (limited to 'xmake/rules/c++/modules/xmake.lua')
-rw-r--r--xmake/rules/c++/modules/xmake.lua20
1 files changed, 8 insertions, 12 deletions
diff --git a/xmake/rules/c++/modules/xmake.lua b/xmake/rules/c++/modules/xmake.lua
index d658815aa..4874082cf 100644
--- a/xmake/rules/c++/modules/xmake.lua
+++ b/xmake/rules/c++/modules/xmake.lua
@@ -87,8 +87,6 @@ rule("c++.build.modules.builder")
local std_modules = compiler_support.get_stdmodules(target)
if std_modules then
table.join2(sourcebatch.sourcefiles, std_modules)
- target:fileconfig_set(std_modules[1], {external = true})
- target:fileconfig_set(std_modules[2], {external = true})
end
-- extract packages modules dependencies
@@ -97,7 +95,7 @@ rule("c++.build.modules.builder")
-- append to sourcebatch
for _, package_module_data in table.orderpairs(package_modules_data) do
table.insert(sourcebatch.sourcefiles, package_module_data.file)
- target:fileconfig_set(package_module_data.file, {external = true, defines = package_module_data.metadata.defines})
+ target:fileconfig_set(package_module_data.file, {external = package_module_data.external, defines = package_module_data.metadata.defines})
end
end
@@ -109,7 +107,8 @@ rule("c++.build.modules.builder")
if not target:is_moduleonly() then
-- avoid building non referenced modules
- sourcebatch.objectfiles = dependency_scanner.sort_modules_by_dependencies(target, sourcebatch.objectfiles, modules)
+ local build_objectfiles, link_objectfiles = dependency_scanner.sort_modules_by_dependencies(target, sourcebatch.objectfiles, modules)
+ sourcebatch.objectfiles = build_objectfiles
-- build modules
builder.build_modules_for_batchjobs(target, batchjobs, sourcebatch, modules, opt)
@@ -117,8 +116,7 @@ rule("c++.build.modules.builder")
-- build headerunits and we need to do it before building modules
builder.build_headerunits_for_batchjobs(target, batchjobs, sourcebatch, modules, opt)
- -- cull external modules objectfile
- compiler_support.cull_objectfiles(target, modules, sourcebatch)
+ sourcebatch.objectfiles = link_objectfiles
else
sourcebatch.objectfiles = {}
end
@@ -150,8 +148,6 @@ rule("c++.build.modules.builder")
local std_modules = compiler_support.get_stdmodules(target)
if std_modules then
table.join2(sourcebatch.sourcefiles, std_modules)
- target:fileconfig_set(std_modules[1], {external = true})
- target:fileconfig_set(std_modules[2], {external = true})
end
-- extract packages modules dependencies
@@ -160,7 +156,7 @@ rule("c++.build.modules.builder")
-- append to sourcebatch
for _, package_module_data in table.orderpairs(package_modules_data) do
table.insert(sourcebatch.sourcefiles, package_module_data.file)
- target:fileconfig_set(package_module_data.file, {external = true, defines = package_module_data.metadata.defines})
+ target:fileconfig_set(package_module_data.file, {external = package_module_data.external, defines = package_module_data.metadata.defines})
end
end
@@ -172,7 +168,8 @@ rule("c++.build.modules.builder")
if not target:is_moduleonly() then
-- avoid building non referenced modules
- sourcebatch.objectfiles = dependency_scanner.sort_modules_by_dependencies(target, sourcebatch.objectfiles, modules)
+ local build_objectfiles, link_objectfiles = dependency_scanner.sort_modules_by_dependencies(target, sourcebatch.objectfiles, modules)
+ sourcebatch.objectfiles = build_objectfiles
-- build headerunits
builder.build_headerunits_for_batchcmds(target, batchcmds, sourcebatch, modules, opt)
@@ -180,8 +177,7 @@ rule("c++.build.modules.builder")
-- build modules
builder.build_modules_for_batchcmds(target, batchcmds, sourcebatch, modules, opt)
- -- cull external modules objectfile
- compiler_support.cull_objectfiles(target, modules, sourcebatch)
+ sourcebatch.objectfiles = link_objectfiles
else
-- avoid duplicate linking of object files of non-module programs
sourcebatch.objectfiles = {}