Skip to content

Commit 8fe7c16

Browse files
committed
fix link objectfiles conflicts
1 parent a68eff4 commit 8fe7c16

File tree

3 files changed

+16
-20
lines changed

3 files changed

+16
-20
lines changed

xmake/core/project/target.lua

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2375,11 +2375,16 @@ function _instance:sourcebatches()
23752375
sourcebatch.sourcekind = sourcekind
23762376

23772377
-- insert object files to source batches
2378-
sourcebatch.objectfiles = sourcebatch.objectfiles or {}
2379-
sourcebatch.dependfiles = sourcebatch.dependfiles or {}
2380-
local objectfile = self:objectfile(sourcefile, sourcekind)
2381-
table.insert(sourcebatch.objectfiles, objectfile)
2382-
table.insert(sourcebatch.dependfiles, self:dependfile(objectfile))
2378+
-- and we need to avoid duplication with object files, which may cause some conflicts.
2379+
-- e.g. c++.build, c++ module and unity_build rules
2380+
-- @see https://github.com/xmake-io/xmake/issues/6420
2381+
if filerule:extraconf("sourcekinds", sourcekind, "objectfiles") ~= false then
2382+
sourcebatch.objectfiles = sourcebatch.objectfiles or {}
2383+
sourcebatch.dependfiles = sourcebatch.dependfiles or {}
2384+
local objectfile = self:objectfile(sourcefile, sourcekind)
2385+
table.insert(sourcebatch.objectfiles, objectfile)
2386+
table.insert(sourcebatch.dependfiles, self:dependfile(objectfile))
2387+
end
23832388
end
23842389
end
23852390
end

xmake/rules/c++/modules/support.lua

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,7 @@ function has_module_extension(sourcefile, opt)
158158
opt = opt or {}
159159
local modulexts = _g.modulexts
160160
if modulexts == nil then
161-
modulexts = hashset.of(".mpp", ".mxx", ".cppm", ".ixx")
161+
modulexts = hashset.of(".cppm", ".ccm", ".cxxm", ".c++m", ".mpp", ".mxx", ".ixx")
162162
_g.modulexts = modulexts
163163
end
164164
local extension = opt.extension or path.extension(sourcefile)

xmake/rules/c++/modules/xmake.lua

Lines changed: 5 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020

2121
-- define rule: c++.build.modules
2222
rule("c++.build.modules")
23-
2423
-- @note support.contains_modules() need it
2524
set_extensions(".cppm", ".ccm", ".cxxm", ".c++m", ".mpp", ".mxx", ".ixx")
2625

@@ -35,38 +34,30 @@ rule("c++.build.modules")
3534

3635
-- scan modules
3736
rule("c++.build.modules.scanner")
38-
set_sourcekinds("cxx")
39-
set_extensions(".mpp", ".mxx", ".cppm", ".ixx")
40-
41-
-- generate module dependencies
37+
set_sourcekinds("cxx", {objectfiles = false})
38+
set_extensions(".cppm", ".ccm", ".cxxm", ".c++m", ".mpp", ".mxx", ".ixx")
4239
on_prepare_files("scanner", {jobgraph = true})
43-
44-
-- insert objectfiles
4540
after_prepare_files("scanner.after_scan")
4641

4742
-- build modules
4843
rule("c++.build.modules.builder")
49-
set_sourcekinds("cxx")
50-
set_extensions(".mpp", ".mxx", ".cppm", ".ixx")
51-
44+
set_sourcekinds("cxx", {objectfiles = false})
45+
set_extensions(".cppm", ".ccm", ".cxxm", ".c++m", ".mpp", ".mxx", ".ixx")
5246
add_orders("c++.build.modules.scanner", "c++.build.modules.builder")
5347

5448
-- parallel build support to accelerate `xmake build` to build modules
5549
before_build_files("builder.build_bmis", {jobgraph = true, batch = true})
56-
5750
on_build_files("builder.build_objectfiles", {jobgraph = true, batch = true})
5851

5952
-- serial compilation only, usually used to support project generator
6053
before_buildcmd_files("builder.build_bmis")
61-
6254
on_buildcmd_files("builder.build_objectfiles")
6355

6456
after_clean("builder.clean")
6557

6658
-- install modules
6759
rule("c++.build.modules.install")
68-
set_extensions(".mpp", ".mxx", ".cppm", ".ixx")
60+
set_extensions(".cppm", ".ccm", ".cxxm", ".c++m", ".mpp", ".mxx", ".ixx")
6961

7062
before_install("install.install")
71-
7263
before_uninstall("install.uninstall")

0 commit comments

Comments
 (0)