summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2020-02-23 10:28:51 +0800
committerruki <[email protected]>2020-02-23 10:28:51 +0800
commite5401a8399708b91f501d03b83f635a71bb23f5a (patch)
tree171e7c4029722800044d9f37d25a8e4ee43a465e
parent77ba31a49108211d65181cffb96a1bd179095c53 (diff)
support msvc for ninja
-rw-r--r--xmake/plugins/project/ninja/build_ninja.lua43
1 files changed, 40 insertions, 3 deletions
diff --git a/xmake/plugins/project/ninja/build_ninja.lua b/xmake/plugins/project/ninja/build_ninja.lua
index 1fe10c860..84fc87144 100644
--- a/xmake/plugins/project/ninja/build_ninja.lua
+++ b/xmake/plugins/project/ninja/build_ninja.lua
@@ -42,6 +42,8 @@ function _add_rules_for_compiler_gcc(ninjafile, sourcekind, program)
local ccache = find_tool("ccache")
ninjafile:print("rule %s", sourcekind)
ninjafile:print(" command = %s%s $ARGS -MMD -MF $out.d -o $out -c $in", ccache and (ccache.program .. " ") or "", program)
+ ninjafile:print(" deps = gcc")
+ ninjafile:print(" depfile = $out.d")
ninjafile:print(" description = %scompiling.%s $in", ccache and "ccache " or "", config.mode())
ninjafile:print("")
end
@@ -51,13 +53,39 @@ function _add_rules_for_compiler_clang(ninjafile, sourcekind, program)
return _add_rules_for_compiler_gcc(ninjafile, sourcekind, program)
end
+-- add rules for complier (msvc/cl)
+function _add_rules_for_compiler_msvc_cl(ninjafile, sourcekind, program)
+ ninjafile:print("rule %s", sourcekind)
+ ninjafile:print(" command = %s -showIncludes -c $ARGS $in -Fo$out", program)
+ ninjafile:print(" deps = msvc")
+ ninjafile:print(" description = compiling.%s $in", config.mode())
+ ninjafile:print("")
+end
+
+-- add rules for complier (msvc/ml)
+function _add_rules_for_compiler_msvc_ml(ninjafile, sourcekind, program)
+ ninjafile:print("rule %s", sourcekind)
+ ninjafile:print(" command = %s -c $ARGS -Fo$out $in", program)
+ ninjafile:print(" deps = msvc")
+ ninjafile:print(" description = compiling.%s $in", config.mode())
+ ninjafile:print("")
+end
+
-- add rules for complier
function _add_rules_for_compiler(ninjafile)
ninjafile:print("# rules for compiler")
+ if is_plat("windows") then
+ ninjafile:print("msvc_deps_prefix = Note: including file:")
+ end
local add_compiler_rules =
{
- gcc = _add_rules_for_compiler_gcc,
- clang = _add_rules_for_compiler_clang
+ gcc = _add_rules_for_compiler_gcc,
+ gxx = _add_rules_for_compiler_gcc,
+ clang = _add_rules_for_compiler_clang,
+ clangxx = _add_rules_for_compiler_clang,
+ cl = _add_rules_for_compiler_msvc_cl,
+ ml = _add_rules_for_compiler_msvc_ml,
+ ml64 = _add_rules_for_compiler_msvc_ml
}
for sourcekind, _ in pairs(language.sourcekinds()) do
local program, toolname = platform.tool(sourcekind)
@@ -92,6 +120,14 @@ function _add_rules_for_linker_clang(ninjafile, linkerkind, program)
return _add_rules_for_linker_gcc(ninjafile, linkerkind, program)
end
+-- add rules for linker (msvc)
+function _add_rules_for_linker_msvc(ninjafile, linkerkind, program)
+ ninjafile:print("rule %s", linkerkind)
+ ninjafile:print(" command = %s $ARGS -out:$out $in", program)
+ ninjafile:print(" description = linking.%s $out", config.mode())
+ ninjafile:print("")
+end
+
-- add rules for linker
function _add_rules_for_linker(ninjafile)
ninjafile:print("# rules for linker")
@@ -105,7 +141,8 @@ function _add_rules_for_linker(ninjafile)
gcc = _add_rules_for_linker_gcc,
gxx = _add_rules_for_linker_gcc,
clang = _add_rules_for_linker_clang,
- clangxx = _add_rules_for_linker_clang
+ clangxx = _add_rules_for_linker_clang,
+ link = _add_rules_for_linker_msvc
}
for _, linkerkind in ipairs(table.unique(linkerkinds)) do
local program, toolname = platform.tool(linkerkind)