diff options
| author | ruki <[email protected]> | 2023-03-10 23:17:07 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2023-03-10 23:17:07 +0800 |
| commit | 4e10f9b8a793b4bd1b16683b958e1c250cc1c3f3 (patch) | |
| tree | fe018d94d1bd0b95d9428bbe6d1f27b20b876c5b | |
| parent | 828030f000c92ac8e0c8c725b1205e18f3d7b84a (diff) | |
translate flags for ninja
| -rw-r--r-- | xmake/plugins/project/ninja/build_ninja.lua | 46 | ||||
| -rw-r--r-- | xmake/plugins/project/vstudio/impl/vs201x_vcxproj.lua | 6 |
2 files changed, 39 insertions, 13 deletions
diff --git a/xmake/plugins/project/ninja/build_ninja.lua b/xmake/plugins/project/ninja/build_ninja.lua index 6d54f015c..a97aac804 100644 --- a/xmake/plugins/project/ninja/build_ninja.lua +++ b/xmake/plugins/project/ninja/build_ninja.lua @@ -70,6 +70,36 @@ function _get_relative_unix_path(filepath, outputdir) return os.args(filepath) end +-- translate compiler flags +function _translate_compflags(compflags, outputdir) + local flags = {} + for _, flag in ipairs(compflags) do + for _, pattern in ipairs({"[%-](I)(.*)", "[%-](isystem)(.*)"}) do + flag = flag:gsub(pattern, function (flag, dir) + dir = _get_relative_unix_path(dir, outputdir) + return "-" .. flag .. dir + end) + end + table.insert(flags, flag) + end + return flags +end + +-- translate linker flags +function _translate_linkflags(linkflags, outputdir) + local flags = {} + for _, flag in ipairs(linkflags) do + for _, pattern in ipairs({"[%-](L)(.*)", "[%-](F)(.*)"}) do + flag = flag:gsub(pattern, function (flag, dir) + dir = _get_relative_unix_path(dir, outputdir) + return "-" .. flag .. dir + end) + end + table.insert(flags, flag) + end + return flags +end + -- add header function _add_header(ninjafile) ninjafile:print([[# this is the build file for project %s @@ -81,9 +111,10 @@ function _add_header(ninjafile) end -- add rules for generator -function _add_rules_for_generator(ninjafile) +function _add_rules_for_generator(ninjafile, outputdir) + local projectdir = _get_relative_unix_path(os.projectdir(), outputdir) ninjafile:print("rule gen") - ninjafile:print(" command = xmake project -k ninja") + ninjafile:print(" command = xmake project -P %s -k ninja", projectdir) ninjafile:print(" description = regenerating ninja files") ninjafile:print("") end @@ -235,10 +266,10 @@ function _add_rules_for_linker(ninjafile) end -- add rules -function _add_rules(ninjafile) +function _add_rules(ninjafile, outputdir) -- add rules for generator - _add_rules_for_generator(ninjafile) + _add_rules_for_generator(ninjafile, outputdir) -- add rules for complier _add_rules_for_compiler(ninjafile) @@ -256,8 +287,9 @@ end function _add_build_for_object(ninjafile, target, sourcekind, sourcefile, objectfile, outputdir) objectfile = _get_relative_unix_path(objectfile, outputdir) sourcefile = _get_relative_unix_path(sourcefile, outputdir) + local compflags = compiler.compflags(sourcefile, {target = target}) ninjafile:print("build %s: %s %s", objectfile, sourcekind, sourcefile) - ninjafile:print(" ARGS = %s", os.args(compiler.compflags(sourcefile, {target = target}))) + ninjafile:print(" ARGS = %s", os.args(_translate_compflags(compflags, outputdir))) ninjafile:print("") end @@ -305,7 +337,7 @@ function _add_build_for_target(ninjafile, target, outputdir) end end ninjafile:print("") - ninjafile:print(" ARGS = %s", os.args(target:linkflags())) + ninjafile:print(" ARGS = %s", os.args(_translate_linkflags(target:linkflags(), outputdir))) ninjafile:print("") -- build target objects @@ -384,7 +416,7 @@ function make(outputdir) _add_header(ninjafile) -- add rules - _add_rules(ninjafile) + _add_rules(ninjafile, outputdir) -- add build rules for targets _add_build_for_targets(ninjafile, outputdir) diff --git a/xmake/plugins/project/vstudio/impl/vs201x_vcxproj.lua b/xmake/plugins/project/vstudio/impl/vs201x_vcxproj.lua index ad0c6df5f..64a6f5419 100644 --- a/xmake/plugins/project/vstudio/impl/vs201x_vcxproj.lua +++ b/xmake/plugins/project/vstudio/impl/vs201x_vcxproj.lua @@ -168,8 +168,6 @@ function _make_compflags(sourcefile, targetinfo, vcxprojdir) -- translate path for -Idir or /Idir local flags = {} for _, flag in ipairs(targetinfo.compflags[sourcefile]) do - - -- handle external includes as well for _, pattern in ipairs({"[%-/](I)(.*)", "[%-/](external:I)(.*)"}) do -- -Idir or /Idir @@ -178,16 +176,12 @@ function _make_compflags(sourcefile, targetinfo, vcxprojdir) return "/" .. flag .. dir end) end - - -- save flag table.insert(flags, flag) end -- add -D__config_$(mode)__ and -D__config_$(arch)__ for the config header table.insert(flags, "-D__config_" .. targetinfo.mode .. "__") table.insert(flags, "-D__config_" .. targetinfo.arch .. "__") - - -- ok? return flags end |
