From f2ea9f6021fcb21ad0f8fc42d3bc78a3ae7d2283 Mon Sep 17 00:00:00 2001 From: ruki Date: Thu, 3 Nov 2022 22:52:10 +0800 Subject: improve clang to support std modules --- tests/projects/c++/modules/stdmodules/test/test.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 tests/projects/c++/modules/stdmodules/test/test.cpp (limited to 'tests/projects/c++/modules/stdmodules/test/test.cpp') diff --git a/tests/projects/c++/modules/stdmodules/test/test.cpp b/tests/projects/c++/modules/stdmodules/test/test.cpp new file mode 100644 index 000000000..c23ef7efa --- /dev/null +++ b/tests/projects/c++/modules/stdmodules/test/test.cpp @@ -0,0 +1,10 @@ +// Copyright 2022 Ângelo Andrade Cirino + +#define DOCTEST_CONFIG_IMPLEMENT_WITH_MAIN +#include + +import std; + +import my_module; + +TEST_CASE("Test sum") { CHECK(my_sum(1, 1) == 2); } -- cgit v1.3.1 From baa927b93ae6c9dfa30be5bc0d15d958fb37a74a Mon Sep 17 00:00:00 2001 From: ruki Date: Thu, 3 Nov 2022 22:52:50 +0800 Subject: improve tests --- tests/projects/c++/modules/stdmodules/test/test.cpp | 11 ++++------- tests/projects/c++/modules/stdmodules/xmake.lua | 3 --- tests/projects/c++/modules/stdmodules/xonga.cpp | 2 -- 3 files changed, 4 insertions(+), 12 deletions(-) delete mode 100644 tests/projects/c++/modules/stdmodules/xonga.cpp (limited to 'tests/projects/c++/modules/stdmodules/test/test.cpp') diff --git a/tests/projects/c++/modules/stdmodules/test/test.cpp b/tests/projects/c++/modules/stdmodules/test/test.cpp index c23ef7efa..050715c4f 100644 --- a/tests/projects/c++/modules/stdmodules/test/test.cpp +++ b/tests/projects/c++/modules/stdmodules/test/test.cpp @@ -1,10 +1,7 @@ -// Copyright 2022 Ângelo Andrade Cirino - -#define DOCTEST_CONFIG_IMPLEMENT_WITH_MAIN -#include - +#include import std; - import my_module; -TEST_CASE("Test sum") { CHECK(my_sum(1, 1) == 2); } +int main(int argc, char** argv) { + printf("sum: %d\n", my_sum(1, 1)); +} diff --git a/tests/projects/c++/modules/stdmodules/xmake.lua b/tests/projects/c++/modules/stdmodules/xmake.lua index e62141e28..5370a5b9a 100644 --- a/tests/projects/c++/modules/stdmodules/xmake.lua +++ b/tests/projects/c++/modules/stdmodules/xmake.lua @@ -1,8 +1,6 @@ add_rules("mode.debug", "mode.release") set_languages("c++20") -add_requires("doctest", { alias = "doctest" }) - add_cxxflags("-stdlib=libc++") target("trouble") set_kind("shared") @@ -12,4 +10,3 @@ target("test") set_kind("binary") add_files("test/*.cpp") add_deps("trouble") - add_packages("doctest") diff --git a/tests/projects/c++/modules/stdmodules/xonga.cpp b/tests/projects/c++/modules/stdmodules/xonga.cpp deleted file mode 100644 index bb6a32b1b..000000000 --- a/tests/projects/c++/modules/stdmodules/xonga.cpp +++ /dev/null @@ -1,2 +0,0 @@ -#include - -- cgit v1.3.1 From 181a337b4092af6691d8e2e135d21dae4a03556a Mon Sep 17 00:00:00 2001 From: ruki Date: Sat, 5 Nov 2022 00:38:31 +0800 Subject: improve std modules for msvc --- .../c++/modules/stdmodules/src/my_module.cpp | 6 +++++- .../c++/modules/stdmodules/src/my_module.mpp | 6 +++++- .../projects/c++/modules/stdmodules/test/test.cpp | 6 ++++++ tests/projects/c++/modules/stdmodules/xmake.lua | 1 + xmake/rules/c++/modules/modules_support/msvc.lua | 25 +++++++++++++--------- 5 files changed, 32 insertions(+), 12 deletions(-) (limited to 'tests/projects/c++/modules/stdmodules/test/test.cpp') diff --git a/tests/projects/c++/modules/stdmodules/src/my_module.cpp b/tests/projects/c++/modules/stdmodules/src/my_module.cpp index 829be43e3..5264da821 100644 --- a/tests/projects/c++/modules/stdmodules/src/my_module.cpp +++ b/tests/projects/c++/modules/stdmodules/src/my_module.cpp @@ -1,5 +1,9 @@ module my_module; +#ifdef _MSC_VER +import std.core; +#else import std; +#endif -auto my_sum(size_t a, size_t b) -> size_t { return a + b; } \ No newline at end of file +auto my_sum(size_t a, size_t b) -> size_t { return a + b; } diff --git a/tests/projects/c++/modules/stdmodules/src/my_module.mpp b/tests/projects/c++/modules/stdmodules/src/my_module.mpp index 196b33381..5c0e44bc9 100644 --- a/tests/projects/c++/modules/stdmodules/src/my_module.mpp +++ b/tests/projects/c++/modules/stdmodules/src/my_module.mpp @@ -1,5 +1,9 @@ export module my_module; +#ifdef _MSC_VER +import std.core; +#else import std; +#endif -export auto my_sum(size_t a, size_t b) -> size_t; \ No newline at end of file +export auto my_sum(size_t a, size_t b) -> size_t; diff --git a/tests/projects/c++/modules/stdmodules/test/test.cpp b/tests/projects/c++/modules/stdmodules/test/test.cpp index 050715c4f..380f02838 100644 --- a/tests/projects/c++/modules/stdmodules/test/test.cpp +++ b/tests/projects/c++/modules/stdmodules/test/test.cpp @@ -1,5 +1,11 @@ #include + +#ifdef _MSC_VER +import std.core; +#else import std; +#endif + import my_module; int main(int argc, char** argv) { diff --git a/tests/projects/c++/modules/stdmodules/xmake.lua b/tests/projects/c++/modules/stdmodules/xmake.lua index 1c699bb80..b3521e74b 100644 --- a/tests/projects/c++/modules/stdmodules/xmake.lua +++ b/tests/projects/c++/modules/stdmodules/xmake.lua @@ -2,6 +2,7 @@ add_rules("mode.debug", "mode.release") set_languages("c++20") add_cxxflags("clang::-stdlib=libc++") +set_values("msvc.modules.stdifcdir", true) target("mod") set_kind("shared") add_files("src/*.cpp", "src/*.mpp") diff --git a/xmake/rules/c++/modules/modules_support/msvc.lua b/xmake/rules/c++/modules/modules_support/msvc.lua index 04ab2bf7a..b57ac4520 100644 --- a/xmake/rules/c++/modules/modules_support/msvc.lua +++ b/xmake/rules/c++/modules/modules_support/msvc.lua @@ -126,25 +126,30 @@ end -- load module support for the current target function load(target) - -- get flags - local modulesflag = get_modulesflag(target) -- add modules flags + local modulesflag = get_modulesflag(target) target:add("cxxflags", modulesflag) -- add stdifcdir in case of if the user ask for it - if target:values("msvc.modules.stdifcdir") then - local stdifcdirflag = get_stdifcdirflag(target) - for _, toolchain_inst in ipairs(target:toolchains()) do - if toolchain_inst:name() == "msvc" then - local vcvars = toolchain_inst:config("vcvars") - if vcvars.VCInstallDir and vcvars.VCToolsVersion then - local stdifcdir = path.join(vcvars.VCInstallDir, "Tools", "MSVC", vcvars.VCToolsVersion, "ifc", target:is_arch("x64") and "x64" or "x86") + local stdifcdirflag = get_stdifcdirflag(target) + if stdifcdirflag then + local msvc = target:toolchain("msvc") + if msvc then + local vcvars = msvc:config("vcvars") + if vcvars.VCInstallDir and vcvars.VCToolsVersion then + local arch + if target:is_arch("x64", "x86_64") then + arch = "x64" + elseif target:is_arch("x86", "i386") then + arch = "x86" + end + if arch then + local stdifcdir = path.join(vcvars.VCInstallDir, "Tools", "MSVC", vcvars.VCToolsVersion, "ifc", arch) if os.isdir(stdifcdir) then target:add("cxxflags", {stdifcdirflag, winos.short_path(stdifcdir)}, {force = true, expand = false}) end end - break end end end -- cgit v1.3.1 From 0fdefd2f7280db640ed09df068e09f98649ce7ec Mon Sep 17 00:00:00 2001 From: ruki Date: Sat, 5 Nov 2022 00:39:52 +0800 Subject: fix clang c++ --- tests/projects/c++/modules/stdmodules/test/test.cpp | 6 +++--- xmake/rules/c++/modules/modules_support/clang.lua | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) (limited to 'tests/projects/c++/modules/stdmodules/test/test.cpp') diff --git a/tests/projects/c++/modules/stdmodules/test/test.cpp b/tests/projects/c++/modules/stdmodules/test/test.cpp index 380f02838..a12813c24 100644 --- a/tests/projects/c++/modules/stdmodules/test/test.cpp +++ b/tests/projects/c++/modules/stdmodules/test/test.cpp @@ -1,5 +1,3 @@ -#include - #ifdef _MSC_VER import std.core; #else @@ -8,6 +6,8 @@ import std; import my_module; +using namespace std; + int main(int argc, char** argv) { - printf("sum: %d\n", my_sum(1, 1)); + cout << my_sum(1, 1) << endl; } diff --git a/xmake/rules/c++/modules/modules_support/clang.lua b/xmake/rules/c++/modules/modules_support/clang.lua index 0727cb6d5..a3cf06e79 100644 --- a/xmake/rules/c++/modules/modules_support/clang.lua +++ b/xmake/rules/c++/modules/modules_support/clang.lua @@ -97,7 +97,7 @@ function load(target) -- on ubuntu: -- sudo apt install libc++-dev libc++abi-15-dev -- - target:data_set("cxx.modules.use_libc++", table.contains(target:get("cxxflags"), "-stdlib=libc++")) + target:data_set("cxx.modules.use_libc++", table.contains(target:get("cxxflags"), "-stdlib=libc++", "clang::-stdlib=libc++")) if target:data("cxx.modules.use_libc++") then target:add("syslinks", "c++") end -- cgit v1.3.1