From f2ea9f6021fcb21ad0f8fc42d3bc78a3ae7d2283 Mon Sep 17 00:00:00 2001 From: ruki Date: Thu, 3 Nov 2022 22:52:10 +0800 Subject: [PATCH 1/9] improve clang to support std modules --- .../c++/modules/stdmodules/.gitignore | 8 +++++++ .../c++/modules/stdmodules/src/my_module.cpp | 5 ++++ .../c++/modules/stdmodules/src/my_module.mpp | 5 ++++ .../c++/modules/stdmodules/test/test.cpp | 10 ++++++++ .../projects/c++/modules/stdmodules/xmake.lua | 15 ++++++++++++ .../projects/c++/modules/stdmodules/xonga.cpp | 2 ++ .../c++/modules/modules_support/clang.lua | 23 +++++++++++++++---- 7 files changed, 63 insertions(+), 5 deletions(-) create mode 100644 tests/projects/c++/modules/stdmodules/.gitignore create mode 100644 tests/projects/c++/modules/stdmodules/src/my_module.cpp create mode 100644 tests/projects/c++/modules/stdmodules/src/my_module.mpp create mode 100644 tests/projects/c++/modules/stdmodules/test/test.cpp create mode 100644 tests/projects/c++/modules/stdmodules/xmake.lua create mode 100644 tests/projects/c++/modules/stdmodules/xonga.cpp diff --git a/tests/projects/c++/modules/stdmodules/.gitignore b/tests/projects/c++/modules/stdmodules/.gitignore new file mode 100644 index 0000000000..1521057612 --- /dev/null +++ b/tests/projects/c++/modules/stdmodules/.gitignore @@ -0,0 +1,8 @@ +# Xmake cache +.xmake/ +build/ + +# MacOS Cache +.DS_Store + + diff --git a/tests/projects/c++/modules/stdmodules/src/my_module.cpp b/tests/projects/c++/modules/stdmodules/src/my_module.cpp new file mode 100644 index 0000000000..829be43e32 --- /dev/null +++ b/tests/projects/c++/modules/stdmodules/src/my_module.cpp @@ -0,0 +1,5 @@ +module my_module; + +import std; + +auto my_sum(size_t a, size_t b) -> size_t { return a + b; } \ No newline at end of file diff --git a/tests/projects/c++/modules/stdmodules/src/my_module.mpp b/tests/projects/c++/modules/stdmodules/src/my_module.mpp new file mode 100644 index 0000000000..196b333817 --- /dev/null +++ b/tests/projects/c++/modules/stdmodules/src/my_module.mpp @@ -0,0 +1,5 @@ +export module my_module; + +import std; + +export auto my_sum(size_t a, size_t b) -> size_t; \ No newline at end of file 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 0000000000..c23ef7efa5 --- /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); } diff --git a/tests/projects/c++/modules/stdmodules/xmake.lua b/tests/projects/c++/modules/stdmodules/xmake.lua new file mode 100644 index 0000000000..e62141e284 --- /dev/null +++ b/tests/projects/c++/modules/stdmodules/xmake.lua @@ -0,0 +1,15 @@ +add_rules("mode.debug", "mode.release") +set_languages("c++20") + +add_requires("doctest", { alias = "doctest" }) + +add_cxxflags("-stdlib=libc++") +target("trouble") + set_kind("shared") + add_files("src/*.cpp", "src/*.mpp") + +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 new file mode 100644 index 0000000000..bb6a32b1b8 --- /dev/null +++ b/tests/projects/c++/modules/stdmodules/xonga.cpp @@ -0,0 +1,2 @@ +#include + diff --git a/xmake/rules/c++/modules/modules_support/clang.lua b/xmake/rules/c++/modules/modules_support/clang.lua index 100830046c..e0a7b0228a 100644 --- a/xmake/rules/c++/modules/modules_support/clang.lua +++ b/xmake/rules/c++/modules/modules_support/clang.lua @@ -66,21 +66,30 @@ end -- load module support for the current target function load(target) - -- get module and module cache flags local modulesflag = get_modulesflag(target) local builtinmodulemapflag = get_builtinmodulemapflag(target) local implicitmodulesflag = get_implicitmodulesflag(target) - local noimplicitmodulemapsflag = get_noimplicitmodulemapsflag(target) -- add module flags target:add("cxxflags", modulesflag) - - -- add the module cache directory target:add("cxxflags", builtinmodulemapflag, {force = true}) target:add("cxxflags", implicitmodulesflag, {force = true}) - target:add("cxxflags", noimplicitmodulemapsflag, {force = true}) + -- TODO fix default visibility for functions and variables [-fvisibility] differs in PCH file vs. current file + -- module.pcm cannot be loaded due to a configuration mismatch with the current compilation. + -- + -- it will happen in binary target depend ont shared target with modules, and enable release mode at same time. + target:set("symbols", "none") + + -- if use libc++, we need install libc++ and libc++abi + -- + -- 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++")) + if target:data("cxx.modules.use_libc++") then + target:add("syslinks", "c++") + end end -- get includedirs for stl headers @@ -93,6 +102,10 @@ end function _get_toolchain_includedirs_for_stlheaders(includedirs, clang) local tmpfile = os.tmpfile() .. ".cc" io.writefile(tmpfile, "#include ") + local argv = {"-E", "-x", "c++", tmpfile} + if target:data("cxx.modules.use_libc++") then + table.insert(argv, 1, "-stdlib=libc++") + end local result = try {function () return os.iorunv(clang, {"-E", "-x", "c++", tmpfile}) end} if result then for _, line in ipairs(result:split("\n", {plain = true})) do From baa927b93ae6c9dfa30be5bc0d15d958fb37a74a Mon Sep 17 00:00:00 2001 From: ruki Date: Thu, 3 Nov 2022 22:52:50 +0800 Subject: [PATCH 2/9] 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 diff --git a/tests/projects/c++/modules/stdmodules/test/test.cpp b/tests/projects/c++/modules/stdmodules/test/test.cpp index c23ef7efa5..050715c4f1 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 e62141e284..5370a5b9a7 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 bb6a32b1b8..0000000000 --- a/tests/projects/c++/modules/stdmodules/xonga.cpp +++ /dev/null @@ -1,2 +0,0 @@ -#include - From d0fc528d4bfa6a526055dad72bdc9942333a2d9c Mon Sep 17 00:00:00 2001 From: ruki Date: Thu, 3 Nov 2022 22:54:01 +0800 Subject: [PATCH 3/9] improve tests --- tests/projects/c++/modules/stdmodules/xmake.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/projects/c++/modules/stdmodules/xmake.lua b/tests/projects/c++/modules/stdmodules/xmake.lua index 5370a5b9a7..1f814337d9 100644 --- a/tests/projects/c++/modules/stdmodules/xmake.lua +++ b/tests/projects/c++/modules/stdmodules/xmake.lua @@ -2,11 +2,11 @@ add_rules("mode.debug", "mode.release") set_languages("c++20") add_cxxflags("-stdlib=libc++") -target("trouble") +target("mod") set_kind("shared") add_files("src/*.cpp", "src/*.mpp") target("test") set_kind("binary") add_files("test/*.cpp") - add_deps("trouble") + add_deps("mod") From e72b3d194ec9398f52f4bcef14e2e1478b3a5956 Mon Sep 17 00:00:00 2001 From: ruki Date: Fri, 4 Nov 2022 23:05:57 +0800 Subject: [PATCH 4/9] improve symbols for clang --- xmake/rules/c++/modules/modules_support/clang.lua | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/xmake/rules/c++/modules/modules_support/clang.lua b/xmake/rules/c++/modules/modules_support/clang.lua index e0a7b0228a..0727cb6d5c 100644 --- a/xmake/rules/c++/modules/modules_support/clang.lua +++ b/xmake/rules/c++/modules/modules_support/clang.lua @@ -75,11 +75,22 @@ function load(target) target:add("cxxflags", builtinmodulemapflag, {force = true}) target:add("cxxflags", implicitmodulesflag, {force = true}) - -- TODO fix default visibility for functions and variables [-fvisibility] differs in PCH file vs. current file + -- fix default visibility for functions and variables [-fvisibility] differs in PCH file vs. current file -- module.pcm cannot be loaded due to a configuration mismatch with the current compilation. -- -- it will happen in binary target depend ont shared target with modules, and enable release mode at same time. - target:set("symbols", "none") + local dep_symbols + local has_shared_deps = false + for _, dep in ipairs(target:orderdeps()) do + if dep:is_shared() then + dep_symbols = dep:get("symbols") + has_shared_deps = true + break + end + end + if has_shared_deps then + target:set("symbols", dep_symbols and dep_symbols or "none") + end -- if use libc++, we need install libc++ and libc++abi -- From 6936036c0ea4baff2f4f472313be959a433a8614 Mon Sep 17 00:00:00 2001 From: ruki Date: Fri, 4 Nov 2022 23:34:06 +0800 Subject: [PATCH 5/9] add flags for specific compilers and linkers #3022 --- .../projects/c++/modules/stdmodules/xmake.lua | 2 +- xmake/core/tool/builder.lua | 66 +++++++++++++++---- 2 files changed, 53 insertions(+), 15 deletions(-) diff --git a/tests/projects/c++/modules/stdmodules/xmake.lua b/tests/projects/c++/modules/stdmodules/xmake.lua index 1f814337d9..1c699bb80f 100644 --- a/tests/projects/c++/modules/stdmodules/xmake.lua +++ b/tests/projects/c++/modules/stdmodules/xmake.lua @@ -1,7 +1,7 @@ add_rules("mode.debug", "mode.release") set_languages("c++20") -add_cxxflags("-stdlib=libc++") +add_cxxflags("clang::-stdlib=libc++") target("mod") set_kind("shared") add_files("src/*.cpp", "src/*.mpp") diff --git a/xmake/core/tool/builder.lua b/xmake/core/tool/builder.lua index ff792325a8..f86b8a9bdc 100644 --- a/xmake/core/tool/builder.lua +++ b/xmake/core/tool/builder.lua @@ -49,8 +49,8 @@ function builder:_targetkind() return self._TARGETKIND end --- map gcc flag to the given builder flag -function builder:_mapflag(flag, flagkind, mapflags, auto_ignore_flags) +-- map flag implementation +function builder:_mapflag_impl(flag, flagkind, mapflags, auto_ignore_flags) -- attempt to map it directly local flag_mapped = mapflags[flag] @@ -76,9 +76,24 @@ function builder:_mapflag(flag, flagkind, mapflags, auto_ignore_flags) end end --- map gcc flags to the given builder flags -function builder:_mapflags(flags, flagkind, target) +-- map flag +function builder:_mapflag(flag, flagkind, target) + local mapflags = self:get("mapflags") + local auto_map_flags = target and target.policy and target:policy("check.auto_map_flags") + local auto_ignore_flags = target and target.policy and target:policy("check.auto_ignore_flags") + if mapflags and (auto_map_flags ~= false) then + return self:_mapflag_impl(flag, flagkind, mapflags, auto_ignore_flags) + else + if auto_ignore_flags == false or self:has_flags(flag, flagkind) then + return flag + else + utils.warning("add_%s(\"%s\") is ignored, please pass `{force = true}` or call `set_policy(\"check.auto_ignore_flags\", false)` if you want to set it.", flagkind, flag) + end + end +end +-- map flags +function builder:_mapflags(flags, flagkind, target) local results = {} local mapflags = self:get("mapflags") local auto_map_flags = target and target.policy and target:policy("check.auto_map_flags") @@ -86,7 +101,7 @@ function builder:_mapflags(flags, flagkind, target) flags = table.wrap(flags) if mapflags and (auto_map_flags ~= false) then for _, flag in pairs(flags) do - local flag_mapped = self:_mapflag(flag, flagkind, mapflags, auto_ignore_flags) + local flag_mapped = self:_mapflag_impl(flag, flagkind, mapflags, auto_ignore_flags) if flag_mapped then table.insert(results, flag_mapped) end @@ -132,19 +147,42 @@ end function builder:_add_flags_from_flagkind(flags, target, flagkind, opt) local targetflags = target:get(flagkind, opt) local extraconf = target:extraconf(flagkind) - if extraconf then - for _, flag in ipairs(table.wrap(targetflags)) do - -- @note we need join the single flag with shallow mode, aboid expand table values - -- e.g. add_cflags({"-I", "/tmp/xxx foo"}, {force = true, expand = false}) - local flagconf = extraconf[flag] - if flagconf and flagconf.force then - table.shallow_join2(flags, flag) + for _, flag in ipairs(table.wrap(targetflags)) do + -- does this flag belong to this tool? + -- @see https://github.com/xmake-io/xmake/issues/3022 + -- + -- e.g. + -- for all: add_cxxflags("-g") + -- only for clang: add_cxxflags("clang::-stdlib=libc++") + -- only for clang and multiple flags: add_cxxflags("-stdlib=libc++", "-DFOO", {tools = "clang"}) + -- + local for_this_tool = true + local flagconf = extraconf[flag] + if flag:find("::", 1, true) then + for_this_tool = false + local splitinfo = flag:split("::", {plain = true}) + local toolname = splitinfo[1] + if toolname == self:name() then + flag = splitinfo[2] + for_this_tool = true + end + elseif flagconf and flagconf.tools then + for_this_tool = table.contains(table.wrap(flagconf.tools), self:name()) + end + + if for_this_tool then + if extraconf then + -- @note we need join the single flag with shallow mode, aboid expand table values + -- e.g. add_cflags({"-I", "/tmp/xxx foo"}, {force = true, expand = false}) + if flagconf and flagconf.force then + table.shallow_join2(flags, flag) + else + table.shallow_join2(flags, self:_mapflag(flag, flagkind, target)) + end else table.shallow_join2(flags, self:_mapflag(flag, flagkind, target)) end end - else - table.join2(flags, self:_mapflags(targetflags, flagkind, target)) end end From 6744d49caefb927499af57546c87f36e673f993e Mon Sep 17 00:00:00 2001 From: ruki Date: Fri, 4 Nov 2022 23:38:17 +0800 Subject: [PATCH 6/9] fix extraconf --- xmake/core/tool/builder.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xmake/core/tool/builder.lua b/xmake/core/tool/builder.lua index f86b8a9bdc..67acf15a25 100644 --- a/xmake/core/tool/builder.lua +++ b/xmake/core/tool/builder.lua @@ -157,7 +157,7 @@ function builder:_add_flags_from_flagkind(flags, target, flagkind, opt) -- only for clang and multiple flags: add_cxxflags("-stdlib=libc++", "-DFOO", {tools = "clang"}) -- local for_this_tool = true - local flagconf = extraconf[flag] + local flagconf = extraconf and extraconf[flag] if flag:find("::", 1, true) then for_this_tool = false local splitinfo = flag:split("::", {plain = true}) From b9c18ddfd99ca4d2bb3d5dec76a8bc1b24394bf2 Mon Sep 17 00:00:00 2001 From: ruki Date: Fri, 4 Nov 2022 23:45:50 +0800 Subject: [PATCH 7/9] fix find flag --- xmake/core/tool/builder.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xmake/core/tool/builder.lua b/xmake/core/tool/builder.lua index 67acf15a25..9fa225155e 100644 --- a/xmake/core/tool/builder.lua +++ b/xmake/core/tool/builder.lua @@ -158,7 +158,7 @@ function builder:_add_flags_from_flagkind(flags, target, flagkind, opt) -- local for_this_tool = true local flagconf = extraconf and extraconf[flag] - if flag:find("::", 1, true) then + if type(flag) == "string" and flag:find("::", 1, true) then for_this_tool = false local splitinfo = flag:split("::", {plain = true}) local toolname = splitinfo[1] From 181a337b4092af6691d8e2e135d21dae4a03556a Mon Sep 17 00:00:00 2001 From: ruki Date: Sat, 5 Nov 2022 00:38:31 +0800 Subject: [PATCH 8/9] improve std modules for msvc --- .../c++/modules/stdmodules/src/my_module.cpp | 6 ++++- .../c++/modules/stdmodules/src/my_module.mpp | 6 ++++- .../c++/modules/stdmodules/test/test.cpp | 6 +++++ .../projects/c++/modules/stdmodules/xmake.lua | 1 + .../c++/modules/modules_support/msvc.lua | 25 +++++++++++-------- 5 files changed, 32 insertions(+), 12 deletions(-) diff --git a/tests/projects/c++/modules/stdmodules/src/my_module.cpp b/tests/projects/c++/modules/stdmodules/src/my_module.cpp index 829be43e32..5264da8216 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 196b333817..5c0e44bc9a 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 050715c4f1..380f02838d 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 1c699bb80f..b3521e74bf 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 04ab2bf7af..b57ac4520d 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 From 0fdefd2f7280db640ed09df068e09f98649ce7ec Mon Sep 17 00:00:00 2001 From: ruki Date: Sat, 5 Nov 2022 00:39:52 +0800 Subject: [PATCH 9/9] 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(-) diff --git a/tests/projects/c++/modules/stdmodules/test/test.cpp b/tests/projects/c++/modules/stdmodules/test/test.cpp index 380f02838d..a12813c248 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 0727cb6d5c..a3cf06e79f 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