diff options
| author | ruki <[email protected]> | 2022-08-16 12:33:47 +0800 |
|---|---|---|
| committer | GitHub <[email protected]> | 2022-08-16 12:33:47 +0800 |
| commit | 81aca6fbe9149b377cdd88e8ee4b8f045d5a46da (patch) | |
| tree | 0f138f960ab9fd95265ecbffca7c6ae27d65f4a3 /tests/projects/c++/modules | |
| parent | d46b16f8c40493bfc78764931bf7c3209442696b (diff) | |
| parent | d9f82e1bba29adc8b11dc1f7b3887717f03137d6 (diff) | |
Merge pull request #2641 from xmake-io/cxxmodules
Improve C++20 modules support
Diffstat (limited to 'tests/projects/c++/modules')
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") |
