summaryrefslogtreecommitdiff
path: root/tests/projects/c++/modules
diff options
context:
space:
mode:
authorruki <[email protected]>2022-08-16 12:33:47 +0800
committerGitHub <[email protected]>2022-08-16 12:33:47 +0800
commit81aca6fbe9149b377cdd88e8ee4b8f045d5a46da (patch)
tree0f138f960ab9fd95265ecbffca7c6ae27d65f4a3 /tests/projects/c++/modules
parentd46b16f8c40493bfc78764931bf7c3209442696b (diff)
parentd9f82e1bba29adc8b11dc1f7b3887717f03137d6 (diff)
Merge pull request #2641 from xmake-io/cxxmodules
Improve C++20 modules support
Diffstat (limited to 'tests/projects/c++/modules')
-rw-r--r--tests/projects/c++/modules/class/test.lua1
-rw-r--r--tests/projects/c++/modules/cpp_with_moduledeps/src/main.cpp8
-rw-r--r--tests/projects/c++/modules/cpp_with_moduledeps/src/mod.cpp4
-rw-r--r--tests/projects/c++/modules/cpp_with_moduledeps/src/mod.mpp2
-rw-r--r--tests/projects/c++/modules/cpp_with_moduledeps/test.lua1
-rw-r--r--tests/projects/c++/modules/cpp_with_moduledeps/xmake.lua10
-rw-r--r--tests/projects/c++/modules/dependence/test.lua1
-rw-r--r--tests/projects/c++/modules/dependence2/test.lua1
-rw-r--r--tests/projects/c++/modules/hello with spaces/test.lua1
-rw-r--r--tests/projects/c++/modules/hello/test.lua1
-rw-r--r--tests/projects/c++/modules/impl_unit/test.lua1
-rw-r--r--tests/projects/c++/modules/inline_and_template/test.lua1
-rw-r--r--tests/projects/c++/modules/staticlib/test.lua1
-rw-r--r--tests/projects/c++/modules/stl_headerunit/src/hello.mpp11
-rw-r--r--tests/projects/c++/modules/stl_headerunit/src/main.cpp6
-rw-r--r--tests/projects/c++/modules/stl_headerunit/test.lua1
-rw-r--r--tests/projects/c++/modules/stl_headerunit/xmake.lua4
-rw-r--r--tests/projects/c++/modules/submodules/test.lua1
-rw-r--r--tests/projects/c++/modules/submodules2/test.lua1
-rw-r--r--tests/projects/c++/modules/test_base.lua30
-rw-r--r--tests/projects/c++/modules/test_headerunits.lua34
-rw-r--r--tests/projects/c++/modules/user_headerunit/src/header.hpp5
-rw-r--r--tests/projects/c++/modules/user_headerunit/src/hello.mpp10
-rw-r--r--tests/projects/c++/modules/user_headerunit/src/main.cpp7
-rw-r--r--tests/projects/c++/modules/user_headerunit/test.lua1
-rw-r--r--tests/projects/c++/modules/user_headerunit/xmake.lua5
26 files changed, 149 insertions, 0 deletions
diff --git a/tests/projects/c++/modules/class/test.lua b/tests/projects/c++/modules/class/test.lua
new file mode 100644
index 000000000..7717f8049
--- /dev/null
+++ b/tests/projects/c++/modules/class/test.lua
@@ -0,0 +1 @@
+inherit(".test_base")
diff --git a/tests/projects/c++/modules/cpp_with_moduledeps/src/main.cpp b/tests/projects/c++/modules/cpp_with_moduledeps/src/main.cpp
new file mode 100644
index 000000000..b943e786a
--- /dev/null
+++ b/tests/projects/c++/modules/cpp_with_moduledeps/src/main.cpp
@@ -0,0 +1,8 @@
+// main.cpp
+import mod;
+
+int main()
+{
+ f();
+ return 0;
+}
diff --git a/tests/projects/c++/modules/cpp_with_moduledeps/src/mod.cpp b/tests/projects/c++/modules/cpp_with_moduledeps/src/mod.cpp
new file mode 100644
index 000000000..bedf48a6c
--- /dev/null
+++ b/tests/projects/c++/modules/cpp_with_moduledeps/src/mod.cpp
@@ -0,0 +1,4 @@
+module mod;
+void f()
+{
+}
diff --git a/tests/projects/c++/modules/cpp_with_moduledeps/src/mod.mpp b/tests/projects/c++/modules/cpp_with_moduledeps/src/mod.mpp
new file mode 100644
index 000000000..0f77aa62b
--- /dev/null
+++ b/tests/projects/c++/modules/cpp_with_moduledeps/src/mod.mpp
@@ -0,0 +1,2 @@
+export module mod;
+export void f();
diff --git a/tests/projects/c++/modules/cpp_with_moduledeps/test.lua b/tests/projects/c++/modules/cpp_with_moduledeps/test.lua
new file mode 100644
index 000000000..7717f8049
--- /dev/null
+++ b/tests/projects/c++/modules/cpp_with_moduledeps/test.lua
@@ -0,0 +1 @@
+inherit(".test_base")
diff --git a/tests/projects/c++/modules/cpp_with_moduledeps/xmake.lua b/tests/projects/c++/modules/cpp_with_moduledeps/xmake.lua
new file mode 100644
index 000000000..5c7a8a6f7
--- /dev/null
+++ b/tests/projects/c++/modules/cpp_with_moduledeps/xmake.lua
@@ -0,0 +1,10 @@
+set_languages("c++20")
+
+target("mod")
+ set_kind("static")
+ add_files("src/mod.mpp", "src/mod.cpp")
+
+target("main")
+ set_kind("binary")
+ add_deps("mod")
+ add_files("src/main.cpp")
diff --git a/tests/projects/c++/modules/dependence/test.lua b/tests/projects/c++/modules/dependence/test.lua
new file mode 100644
index 000000000..7717f8049
--- /dev/null
+++ b/tests/projects/c++/modules/dependence/test.lua
@@ -0,0 +1 @@
+inherit(".test_base")
diff --git a/tests/projects/c++/modules/dependence2/test.lua b/tests/projects/c++/modules/dependence2/test.lua
new file mode 100644
index 000000000..7717f8049
--- /dev/null
+++ b/tests/projects/c++/modules/dependence2/test.lua
@@ -0,0 +1 @@
+inherit(".test_base")
diff --git a/tests/projects/c++/modules/hello with spaces/test.lua b/tests/projects/c++/modules/hello with spaces/test.lua
new file mode 100644
index 000000000..7717f8049
--- /dev/null
+++ b/tests/projects/c++/modules/hello with spaces/test.lua
@@ -0,0 +1 @@
+inherit(".test_base")
diff --git a/tests/projects/c++/modules/hello/test.lua b/tests/projects/c++/modules/hello/test.lua
new file mode 100644
index 000000000..7717f8049
--- /dev/null
+++ b/tests/projects/c++/modules/hello/test.lua
@@ -0,0 +1 @@
+inherit(".test_base")
diff --git a/tests/projects/c++/modules/impl_unit/test.lua b/tests/projects/c++/modules/impl_unit/test.lua
new file mode 100644
index 000000000..7717f8049
--- /dev/null
+++ b/tests/projects/c++/modules/impl_unit/test.lua
@@ -0,0 +1 @@
+inherit(".test_base")
diff --git a/tests/projects/c++/modules/inline_and_template/test.lua b/tests/projects/c++/modules/inline_and_template/test.lua
new file mode 100644
index 000000000..7717f8049
--- /dev/null
+++ b/tests/projects/c++/modules/inline_and_template/test.lua
@@ -0,0 +1 @@
+inherit(".test_base")
diff --git a/tests/projects/c++/modules/staticlib/test.lua b/tests/projects/c++/modules/staticlib/test.lua
new file mode 100644
index 000000000..7717f8049
--- /dev/null
+++ b/tests/projects/c++/modules/staticlib/test.lua
@@ -0,0 +1 @@
+inherit(".test_base")
diff --git a/tests/projects/c++/modules/stl_headerunit/src/hello.mpp b/tests/projects/c++/modules/stl_headerunit/src/hello.mpp
new file mode 100644
index 000000000..d45c5759e
--- /dev/null
+++ b/tests/projects/c++/modules/stl_headerunit/src/hello.mpp
@@ -0,0 +1,11 @@
+module;
+
+export module hello;
+
+import <iostream>;
+
+export namespace hello {
+ void say(const char* str) {
+ std::cout << str << std::endl;
+ }
+}
diff --git a/tests/projects/c++/modules/stl_headerunit/src/main.cpp b/tests/projects/c++/modules/stl_headerunit/src/main.cpp
new file mode 100644
index 000000000..1e5cc698f
--- /dev/null
+++ b/tests/projects/c++/modules/stl_headerunit/src/main.cpp
@@ -0,0 +1,6 @@
+import hello;
+
+int main() {
+ hello::say("hello module!");
+ return 0;
+}
diff --git a/tests/projects/c++/modules/stl_headerunit/test.lua b/tests/projects/c++/modules/stl_headerunit/test.lua
new file mode 100644
index 000000000..c18e5a1d0
--- /dev/null
+++ b/tests/projects/c++/modules/stl_headerunit/test.lua
@@ -0,0 +1 @@
+inherit(".test_headerunits")
diff --git a/tests/projects/c++/modules/stl_headerunit/xmake.lua b/tests/projects/c++/modules/stl_headerunit/xmake.lua
new file mode 100644
index 000000000..e85378c46
--- /dev/null
+++ b/tests/projects/c++/modules/stl_headerunit/xmake.lua
@@ -0,0 +1,4 @@
+set_languages("c++20")
+target("stl_headerunit")
+ set_kind("binary")
+ add_files("src/*.cpp", "src/*.mpp")
diff --git a/tests/projects/c++/modules/submodules/test.lua b/tests/projects/c++/modules/submodules/test.lua
new file mode 100644
index 000000000..7717f8049
--- /dev/null
+++ b/tests/projects/c++/modules/submodules/test.lua
@@ -0,0 +1 @@
+inherit(".test_base")
diff --git a/tests/projects/c++/modules/submodules2/test.lua b/tests/projects/c++/modules/submodules2/test.lua
new file mode 100644
index 000000000..7717f8049
--- /dev/null
+++ b/tests/projects/c++/modules/submodules2/test.lua
@@ -0,0 +1 @@
+inherit(".test_base")
diff --git a/tests/projects/c++/modules/test_base.lua b/tests/projects/c++/modules/test_base.lua
new file mode 100644
index 000000000..4aee9f8e7
--- /dev/null
+++ b/tests/projects/c++/modules/test_base.lua
@@ -0,0 +1,30 @@
+import("lib.detect.find_tool")
+import("core.base.semver")
+
+function _build()
+ local ci = (os.getenv("CI") or os.getenv("GITHUB_ACTIONS") or ""):lower()
+ if ci == "true" then
+ os.exec("xmake -rvD")
+ else
+ os.exec("xmake -r")
+ end
+end
+
+function main(t)
+ if is_subhost("windows") then
+ os.exec("xmake f -c")
+ _build()
+ elseif is_host("linux") then
+ local gcc = find_tool("gcc", {version = true})
+ if gcc and gcc.version and semver.compare(gcc.version, "11.0") >= 0 then
+ os.exec("xmake f -c")
+ _build()
+ end
+ local clang = find_tool("clang", {version = true})
+ if clang and clang.version and semver.compare(clang.version, "14.0") >= 0 then
+ os.exec("xmake clean -a")
+ os.exec("xmake f --toolchain=clang -c")
+ _build()
+ end
+ end
+end
diff --git a/tests/projects/c++/modules/test_headerunits.lua b/tests/projects/c++/modules/test_headerunits.lua
new file mode 100644
index 000000000..905812c14
--- /dev/null
+++ b/tests/projects/c++/modules/test_headerunits.lua
@@ -0,0 +1,34 @@
+import("lib.detect.find_tool")
+import("core.base.semver")
+import("detect.sdks.find_vstudio")
+
+function _build()
+ local ci = (os.getenv("CI") or os.getenv("GITHUB_ACTIONS") or ""):lower()
+ if ci == "true" then
+ os.exec("xmake -rvD")
+ else
+ os.exec("xmake -r")
+ end
+end
+
+function main(t)
+ if is_subhost("windows") then
+ local vs = find_vstudio()
+ if vs and vs["2022"] then
+ os.exec("xmake f -c")
+ _build()
+ end
+ elseif is_host("linux") then
+ local gcc = find_tool("gcc", {version = true})
+ if gcc and gcc.version and semver.compare(gcc.version, "11.0") >= 0 then
+ os.exec("xmake f -c")
+ _build()
+ end
+ local clang = find_tool("clang", {version = true})
+ if clang and clang.version and semver.compare(clang.version, "16.0") >= 0 then
+ os.exec("xmake clean -a")
+ os.exec("xmake f --toolchain=clang -c")
+ _build()
+ end
+ end
+end
diff --git a/tests/projects/c++/modules/user_headerunit/src/header.hpp b/tests/projects/c++/modules/user_headerunit/src/header.hpp
new file mode 100644
index 000000000..840c3da80
--- /dev/null
+++ b/tests/projects/c++/modules/user_headerunit/src/header.hpp
@@ -0,0 +1,5 @@
+#pragma once
+
+namespace hello {
+ constexpr auto FOO = "Hello";
+}
diff --git a/tests/projects/c++/modules/user_headerunit/src/hello.mpp b/tests/projects/c++/modules/user_headerunit/src/hello.mpp
new file mode 100644
index 000000000..5b2f434ad
--- /dev/null
+++ b/tests/projects/c++/modules/user_headerunit/src/hello.mpp
@@ -0,0 +1,10 @@
+module;
+#include <cstdio>
+
+export module hello;
+
+export namespace hello {
+ void say(const char *arg) {
+ printf("%s\n", arg);
+ }
+}
diff --git a/tests/projects/c++/modules/user_headerunit/src/main.cpp b/tests/projects/c++/modules/user_headerunit/src/main.cpp
new file mode 100644
index 000000000..ad786367e
--- /dev/null
+++ b/tests/projects/c++/modules/user_headerunit/src/main.cpp
@@ -0,0 +1,7 @@
+import hello;
+import "header.hpp";
+
+int main() {
+ hello::say(hello::FOO);
+ return 0;
+}
diff --git a/tests/projects/c++/modules/user_headerunit/test.lua b/tests/projects/c++/modules/user_headerunit/test.lua
new file mode 100644
index 000000000..c18e5a1d0
--- /dev/null
+++ b/tests/projects/c++/modules/user_headerunit/test.lua
@@ -0,0 +1 @@
+inherit(".test_headerunits")
diff --git a/tests/projects/c++/modules/user_headerunit/xmake.lua b/tests/projects/c++/modules/user_headerunit/xmake.lua
new file mode 100644
index 000000000..dae91d11f
--- /dev/null
+++ b/tests/projects/c++/modules/user_headerunit/xmake.lua
@@ -0,0 +1,5 @@
+set_languages("c++20")
+target("user_headerunit")
+ set_kind("binary")
+ add_headerfiles("src/*.hpp")
+ add_files("src/*.cpp", "src/*.mpp")