summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2021-10-19 00:06:00 +0800
committerruki <[email protected]>2021-10-19 00:06:00 +0800
commit1ec16d7882188dd817ccb23be43359aa4d045d24 (patch)
tree30fc66266beb67ffef78d0079ffaf11613e3a047
parent7f5c18288cf287abe44e57046a80ef7db0c0b0da (diff)
add uniqueid
-rw-r--r--tests/projects/c++/unity_build/src/bar/test4.cpp6
-rw-r--r--tests/projects/c++/unity_build/src/bar/test5.cpp7
-rw-r--r--tests/projects/c++/unity_build/xmake.lua2
-rw-r--r--xmake/rules/c++/unity_build/unity_build.lua11
4 files changed, 23 insertions, 3 deletions
diff --git a/tests/projects/c++/unity_build/src/bar/test4.cpp b/tests/projects/c++/unity_build/src/bar/test4.cpp
index a92803eb7..8fe732964 100644
--- a/tests/projects/c++/unity_build/src/bar/test4.cpp
+++ b/tests/projects/c++/unity_build/src/bar/test4.cpp
@@ -2,7 +2,11 @@
// main.cpp
#include "header.h"
+namespace MY_UNITY_ID {
+ int i = 42;
+}
+
int test4()
{
- return 0;
+ return MY_UNITY_ID::i;
}
diff --git a/tests/projects/c++/unity_build/src/bar/test5.cpp b/tests/projects/c++/unity_build/src/bar/test5.cpp
index 2a3e7066c..afff0b46c 100644
--- a/tests/projects/c++/unity_build/src/bar/test5.cpp
+++ b/tests/projects/c++/unity_build/src/bar/test5.cpp
@@ -2,7 +2,12 @@
// main.cpp
#include "header.h"
+namespace MY_UNITY_ID {
+ int i = 42;
+}
+
int test5()
{
- return 0;
+ return MY_UNITY_ID::i;
}
+
diff --git a/tests/projects/c++/unity_build/xmake.lua b/tests/projects/c++/unity_build/xmake.lua
index ce38ae9ec..a881c5c36 100644
--- a/tests/projects/c++/unity_build/xmake.lua
+++ b/tests/projects/c++/unity_build/xmake.lua
@@ -1,7 +1,7 @@
target("test")
set_kind("binary")
add_includedirs("src")
- add_rules("c++.unity_build", {batchsize = 2})
+ add_rules("c++.unity_build", {batchsize = 2, uniqueid = "MY_UNITY_ID"})
add_files("src/*.c", "src/*.cpp")
add_files("src/foo/*.cpp", {unity_group = "foo"})
add_files("src/bar/*.cpp", {unity_group = "bar"})
diff --git a/xmake/rules/c++/unity_build/unity_build.lua b/xmake/rules/c++/unity_build/unity_build.lua
index d73a3adf4..2d8e69d5d 100644
--- a/xmake/rules/c++/unity_build/unity_build.lua
+++ b/xmake/rules/c++/unity_build/unity_build.lua
@@ -29,12 +29,21 @@ function _merge_unityfile(target, sourcefile_unity, sourcefiles, opt)
vprint("generating.unityfile %s", sourcefile_unity)
-- do merge
+ local uniqueid = target:data("unity_build.uniqueid")
local unityfile = io.open(sourcefile_unity, "w")
for _, sourcefile in ipairs(sourcefiles) do
sourcefile = path.absolute(sourcefile)
sourcefile_unity = path.absolute(sourcefile_unity)
sourcefile = path.relative(sourcefile, path.directory(sourcefile_unity))
+ if uniqueid then
+ unityfile:print("#ifndef %s", uniqueid)
+ unityfile:print("#define %s %s", uniqueid, "unity_" .. hash.uuid():split("-", {plain = true})[1])
+ unityfile:print("#endif")
+ end
unityfile:print("#include \"%s\"", sourcefile)
+ if uniqueid then
+ unityfile:print("#undef %s", uniqueid)
+ end
end
unityfile:close()
@@ -69,6 +78,7 @@ function main(target, sourcebatch)
-- get unit batch sources
local extraconf = target:extraconf("rules", sourcebatch.sourcekind == "cxx" and "c++.unity_build" or "c.unity_build")
local batchsize = extraconf and extraconf.batchsize
+ local uniqueid = extraconf and extraconf.uniqueid
local id = 1
local count = 0
local unity_batch = {}
@@ -126,5 +136,6 @@ function main(target, sourcebatch)
sourcebatch.dependfiles = dependfiles
-- save unit batch
+ target:data_set("unity_build.uniqueid", uniqueid)
target:data_set("unity_build.unity_batch." .. sourcebatch.rulename, unity_batch)
end