summaryrefslogtreecommitdiff
path: root/xmake/plugins/project
diff options
context:
space:
mode:
authorruki <[email protected]>2023-10-11 22:40:57 +0800
committerruki <[email protected]>2023-10-11 22:40:57 +0800
commit9449c51bf2e709ba7807093a6876cf4eadf9fbac (patch)
tree11b0808d2597a671319a30a2d7c3414b9a34c33a /xmake/plugins/project
parent8de7e001caabfefddfdec8f0e7bfd941764079f2 (diff)
improve flags for vsxmake #4268
Diffstat (limited to 'xmake/plugins/project')
-rw-r--r--xmake/plugins/project/cmake/cmakelists.lua45
-rw-r--r--xmake/plugins/project/vsxmake/getinfo.lua13
2 files changed, 12 insertions, 46 deletions
diff --git a/xmake/plugins/project/cmake/cmakelists.lua b/xmake/plugins/project/cmake/cmakelists.lua
index 7dcabd2a4..9d66cba48 100644
--- a/xmake/plugins/project/cmake/cmakelists.lua
+++ b/xmake/plugins/project/cmake/cmakelists.lua
@@ -29,6 +29,7 @@ import("core.project.rule")
import("lib.detect.find_tool")
import("private.utils.batchcmds")
import("private.utils.rule_groups")
+import("private.utils.target", {alias = "target_utils"})
import("plugins.project.utils.target_cmds", {rootdir = os.programdir()})
-- get minimal cmake version
@@ -201,49 +202,7 @@ end
-- @see https://github.com/xmake-io/xmake/issues/3594
function _get_flags_from_target(target, flagkind)
local flags = _get_configs_from_target(target, flagkind)
- local extraconf = target:extraconf(flagkind)
- local sourcekind
- if flagkind == "cflags" then
- sourcekind = "cc"
- elseif flagkind == "cxxflags" or flagkind == "cxflags" then
- sourcekind = "cxx"
- elseif flagkind == "asflags" then
- sourcekind = "as"
- elseif flagkind == "cuflags" then
- sourcekind = "cu"
- else
- raise("unknown flag kind %s", flagkind)
- end
- local toolinst = target:compiler(sourcekind)
-
- -- 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 result = {}
- for _, flag in ipairs(flags) do
- local for_this_tool = true
- local flagconf = extraconf and extraconf[flag]
- if type(flag) == "string" and flag:find("::", 1, true) then
- for_this_tool = false
- local splitinfo = flag:split("::", {plain = true})
- local toolname = splitinfo[1]
- if toolname == toolinst: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), toolinst:name())
- end
- if for_this_tool then
- table.insert(result, flag)
- end
- end
- return result
+ return target_utils.translate_flags_in_tool(target, flagkind, flags)
end
-- add project info
diff --git a/xmake/plugins/project/vsxmake/getinfo.lua b/xmake/plugins/project/vsxmake/getinfo.lua
index 4e318fdcf..eaa671ac3 100644
--- a/xmake/plugins/project/vsxmake/getinfo.lua
+++ b/xmake/plugins/project/vsxmake/getinfo.lua
@@ -31,6 +31,7 @@ import("core.tool.toolchain")
import("core.cache.memcache")
import("core.cache.localcache")
import("lib.detect.find_tool")
+import("private.utils.target", {alias = "target_utils"})
import("private.action.run.runenvs")
import("private.action.require.install", {alias = "install_requires"})
import("actions.config.configfiles", {alias = "generate_configfiles", rootdir = os.programdir()})
@@ -96,6 +97,12 @@ function _get_values_from_target(target, name)
return table.unique(values)
end
+-- get flags from target
+function _get_flags_from_target(target, name)
+ local flags = _get_values_from_target(target, name)
+ return target_utils.translate_flags_in_tool(target, name, flags)
+end
+
-- make target info
function _make_targetinfo(mode, arch, target)
@@ -137,9 +144,9 @@ function _make_targetinfo(mode, arch, target)
targetinfo.defines = _make_arrs(_get_values_from_target(target, "defines"))
-- save flags
- targetinfo.cflags = _make_arrs(_get_values_from_target(target, "cflags"), " ")
- targetinfo.cxflags = _make_arrs(_get_values_from_target(target, "cxflags"), " ")
- targetinfo.cxxflags = _make_arrs(_get_values_from_target(target, "cxxflags"), " ")
+ targetinfo.cflags = _make_arrs(_get_flags_from_target(target, "cflags"), " ")
+ targetinfo.cxflags = _make_arrs(_get_flags_from_target(target, "cxflags"), " ")
+ targetinfo.cxxflags = _make_arrs(_get_flags_from_target(target, "cxxflags"), " ")
-- save languages
targetinfo.languages = _make_arrs(_get_values_from_target(target, "languages"))