summaryrefslogtreecommitdiff
path: root/xmake/plugins/project/cmake/cmakelists.lua
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/cmake/cmakelists.lua
parent8de7e001caabfefddfdec8f0e7bfd941764079f2 (diff)
improve flags for vsxmake #4268
Diffstat (limited to 'xmake/plugins/project/cmake/cmakelists.lua')
-rw-r--r--xmake/plugins/project/cmake/cmakelists.lua45
1 files changed, 2 insertions, 43 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