diff options
| author | DawnManget <[email protected]> | 2022-05-10 10:45:43 +0800 |
|---|---|---|
| committer | DawnManget <[email protected]> | 2022-05-10 10:45:43 +0800 |
| commit | 8d0fb42d11874dd59bac82b45d1ca81e0df01780 (patch) | |
| tree | fd0e8c7db3ee43fc434fe089cf56f0eeed261fa6 | |
| parent | a0a57a74cc301468d21f11cd5d78a272cce561b5 (diff) | |
review: add keil-c51 toolchain & rules
| -rw-r--r-- | xmake/modules/core/tools/bl51.lua | 24 | ||||
| -rw-r--r-- | xmake/modules/core/tools/c51.lua | 93 | ||||
| -rw-r--r-- | xmake/modules/core/tools/oh51.lua | 61 | ||||
| -rw-r--r-- | xmake/modules/detect/tools/find_bl51.lua | 25 | ||||
| -rw-r--r-- | xmake/modules/detect/tools/find_c51.lua | 28 | ||||
| -rw-r--r-- | xmake/modules/detect/tools/find_oh51.lua | 33 | ||||
| -rw-r--r-- | xmake/rules/c51/xmake.lua | 8 | ||||
| -rw-r--r-- | xmake/toolchains/c51/xmake.lua | 41 |
8 files changed, 57 insertions, 256 deletions
diff --git a/xmake/modules/core/tools/bl51.lua b/xmake/modules/core/tools/bl51.lua index 3b49bf0e3..70c04385b 100644 --- a/xmake/modules/core/tools/bl51.lua +++ b/xmake/modules/core/tools/bl51.lua @@ -25,29 +25,7 @@ import("utils.progress") function init(self) end --- ----- make the link flag ---function nf_link(self, lib) --- return "lib" .. lib .. ".a" ---end --- ----- make the syslink flag ---function nf_syslink(self, lib) --- return nf_link(self, lib) ---end --- ----- make the linkdir flag ---function nf_linkdir(self, dir) --- return {"--userlibpath", dir} ---end --- ----- make runtime flag ---function nf_runtime(self, runtime) --- if runtime == "microlib" then --- return "--library_type=microlib" --- end ---end --- + -- make the link arguments list function linkargv(self, objectfiles, targetkind, targetfile, flags) return self:program(), table.join(objectfiles, "TO", targetfile) diff --git a/xmake/modules/core/tools/c51.lua b/xmake/modules/core/tools/c51.lua index 31f09188c..1c87bbb28 100644 --- a/xmake/modules/core/tools/c51.lua +++ b/xmake/modules/core/tools/c51.lua @@ -27,98 +27,13 @@ import("utils.progress") -- init it function init(self) end --- ----- make the symbol flag ---function nf_symbol(self, level) --- -- only for source kind --- local kind = self:kind() --- if language.sourcekinds()[kind] then --- local maps = _g.symbol_maps --- if not maps then --- maps = --- { --- debug = "-g" --- } --- _g.symbol_maps = maps --- end --- return maps[level .. '_' .. kind] or maps[level] --- end ---end --- ----- make the optimize flag ---function nf_optimize(self, level) --- local maps = --- { --- none = "-O0" --- , fast = "-O1" --- , faster = "-O2" --- , fastest = "-O3" --- , smallest = "-Os" --- , aggressive = "-Ofast" --- } --- return maps[level] ---end --- ----- make the language flag ---function nf_language(self, stdname) --- --- -- the stdc maps --- if _g.cmaps == nil then --- _g.cmaps = --- { --- ansi = "-c89" --- , c89 = "-c89" --- , gnu89 = "-c89" --- , c99 = "-c99" --- , gnu99 = "-c99" --- , c11 = "-c11" --- , gnu11 = "-c11" --- , clatest = {"-c11", "-c99", "-c89"} --- , gnulatest = {"-c11", "-c99", "-c89"} --- } --- end --- local maps = _g.cmaps --- local result = maps[stdname] --- if type(result) == "table" then --- for _, v in ipairs(result) do --- if self:has_flags(v, "cxflags") then --- result = v --- maps[stdname] = result --- return result --- end --- end --- else --- return result --- end ---end --- ----- make the define flag ---function nf_define(self, macro) --- return "-D" .. macro ---end --- ----- make the undefine flag ---function nf_undefine(self, macro) --- return "-U" .. macro ---end --- ----- make the includedir flag ---function nf_includedir(self, dir) --- return {"-I" .. dir} ---end --- ----- make the sysincludedir flag ---function nf_sysincludedir(self, dir) --- return nf_includedir(self, dir) ---end --- - --- compile the source file ----- make the compile arguments list +-- make the compile arguments list function compargv(self, sourcefile, objectfile, flags) return self:program(), table.join(sourcefile, flags) end + +-- compile the source file function compile(self, sourcefile, objectfile, dependinfo, flags) -- ensure the object directory @@ -128,7 +43,7 @@ function compile(self, sourcefile, objectfile, dependinfo, flags) try { function () - local realsourcefile = string.gsub(objectfile, "\\.obj$", "") + local realsourcefile = objectfile:gsub("\\.obj$", "") os.cp(sourcefile, realsourcefile) local outdata, errdata = os.iorunv(compargv(self, realsourcefile, objectfile, dependinfo, flags)) return (outdata or "") .. (errdata or "") diff --git a/xmake/modules/core/tools/oh51.lua b/xmake/modules/core/tools/oh51.lua deleted file mode 100644 index 2db696488..000000000 --- a/xmake/modules/core/tools/oh51.lua +++ /dev/null @@ -1,61 +0,0 @@ ---!A cross-platform build utility based on Lua --- --- Licensed under the Apache License, Version 2.0 (the "License"); --- you may not use this file except in compliance with the License. --- You may obtain a copy of the License at --- --- http://www.apache.org/licenses/LICENSE-2.0 --- --- Unless required by applicable law or agreed to in writing, software --- distributed under the License is distributed on an "AS IS" BASIS, --- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. --- See the License for the specific language governing permissions and --- limitations under the License. --- --- Copyright (C) 2015-present, TBOOX Open Source Group. --- --- @author DawnMagnet --- @file oh51.lua --- OBJECT TO HEX FILE CONVERTER OH51 V2.7.0.0 - --- imports -import("core.tool.compiler") -import("utils.progress") - --- init it -function init(self) -end - --- make the strip flag -function strip(self, level) - local maps = - { - debug = "-S" - , all = "-s" - } - return maps[level] -end - --- make the link arguments list -function linkargv(self, objectfiles, targetkind, targetfile, flags, opt) - opt = opt or {} - local argv = table.join(flags, targetfile, objectfiles) - if is_host("windows") and not opt.rawargs then - argv = winos.cmdargv(argv, {escape = true}) - end - return self:program(), argv -end - --- link the library file -function link(self, objectfiles, targetkind, targetfile, flags) - os.mkdir(path.directory(targetfile)) - - -- @note remove the previous archived file first to force recreating a new file - os.tryrm(targetfile) - - -- link it - local program, argv = linkargv(self, objectfiles, targetkind, targetfile, flags) - os.runv(program, argv, {envs = self:runenvs()}) -end - - diff --git a/xmake/modules/detect/tools/find_bl51.lua b/xmake/modules/detect/tools/find_bl51.lua index d44a1eb3c..001d1ed13 100644 --- a/xmake/modules/detect/tools/find_bl51.lua +++ b/xmake/modules/detect/tools/find_bl51.lua @@ -21,30 +21,23 @@ import("lib.detect.find_program") import("lib.detect.find_programver") import("detect.sdks.find_c51") +import("lib.detect.find_tool") function _check(program) - import("detect.tools.find_c51") + local c51 = assert(find_tool("c51"), "c51 not found") -- make temp source file - local c51 = assert(find_c51()) - local temp_prefix = os.tmpfile() - local cfile = temp_prefix .. ".c" - local objfile = temp_prefix .. ".obj" - local lstfile = temp_prefix .. ".lst" - local tmpfile = "." .. temp_prefix .. ".un~" - local binfile = temp_prefix .. "" - local m51file = temp_prefix .. ".m51" + local tmpdir = os.tmpfile() + os.mkdir(tmpdir) + local cfile = path.join(tmpdir, "test.c") + local objfile = path.join(tmpdir, "test.obj") + local binfile = path.join(tmpdir, "test") -- write test code io.writefile(cfile, "void main() {}") -- archive it - os.runv(c51, {cfile}) + os.runv(c51.program, {cfile}) os.runv(program, {objfile, "TO", binfile}) -- remove files - os.rm(cfile) - os.rm(objfile) - os.rm(lstfile) - os.rm(tmpfile) - os.rm(binfile) - os.rm(m51file) + os.rmdir(tmpdir) end -- find bl51 -- diff --git a/xmake/modules/detect/tools/find_c51.lua b/xmake/modules/detect/tools/find_c51.lua index 954f03df6..616b81a4d 100644 --- a/xmake/modules/detect/tools/find_c51.lua +++ b/xmake/modules/detect/tools/find_c51.lua @@ -21,23 +21,19 @@ -- imports import("lib.detect.find_program") import("lib.detect.find_programver") -local c51_module = import("detect.sdks.find_c51") +import("detect.sdks.find_c51") function _check(program) -- make temp source file - local cfile = os.tmpfile() .. ".c" - local objfile = os.tmpfile() .. ".obj" - local lstfile = os.tmpfile() .. ".c" - local tmpfile = "." .. os.tmpfile() .. ".un~" + local tmpdir = os.tmpfile() + os.mkdir(tmpdir) + local cfile = path.join(tmpdir, "test.c") -- write test code io.writefile(cfile, "void main() {}") -- archive it os.runv(program, {cfile}) -- remove files - os.rm(cfile) - os.rm(objfile) - os.rm(lstfile) - os.rm(tmpfile) + os.rmdir(tmpdir) end -- find c51 -- @@ -57,15 +53,15 @@ function main(opt) -- init options opt = opt or {} opt.check = opt.check or _check - local program = find_program(opt.program or "c51.exe", opt) + local program = find_program(opt.program or "c51", opt) if not program then - local c51_module = c51_module.find_c51() - if c51_module then - if c51_module.sdkdir_c51 then - program = find_program(path.join(c51_module.sdkdir_c51, "bin", "c51.exe"), opt) + local c51 = find_c51() + if c51 then + if c51.sdkdir_c51 then + program = find_program(path.join(c51.sdkdir_c51, "bin", "c51"), opt) end - if not program and c51_module.sdkdir_a51 then - program = find_program(path.join(c51_module.sdkdir_a51, "bin", "c51.exe"), opt) + if not program and c51.sdkdir_a51 then + program = find_program(path.join(c51.sdkdir_a51, "bin", "c51"), opt) end end end diff --git a/xmake/modules/detect/tools/find_oh51.lua b/xmake/modules/detect/tools/find_oh51.lua index df2a985b8..dc3310efe 100644 --- a/xmake/modules/detect/tools/find_oh51.lua +++ b/xmake/modules/detect/tools/find_oh51.lua @@ -22,36 +22,25 @@ import("lib.detect.find_program") import("lib.detect.find_programver") import("detect.sdks.find_c51") +import("lib.detect.find_tool") function _check(program) - import("detect.tools.find_c51") - import("detect.tools.find_bl51") - + local c51 = assert(find_tool("c51"), "c51 not found") + local bl51 = assert(find_tool("bl51"), "bl51 not found") -- make temp source file - local c51 = assert(find_c51()) - local bl51 = assert(find_bl51()) - local temp_prefix = os.tmpfile() - local cfile = temp_prefix .. ".c" - local objfile = temp_prefix .. ".obj" - local lstfile = temp_prefix .. ".lst" - local tmpfile = "." .. temp_prefix .. ".un~" - local binfile = temp_prefix .. "" - local m51file = temp_prefix .. ".m51" - local hexfile = temp_prefix .. ".hex" + local tmpdir = os.tmpfile() + os.mkdir(tmpdir) + local cfile = path.join(tmpdir, "test.c") + local objfile = path.join(tmpdir, "test.obj") + local binfile = path.join(tmpdir, "test") -- write test code io.writefile(cfile, "void main() {}") -- archive it - os.runv(c51, {cfile}) - os.runv(bl51, {objfile, "TO", binfile}) + os.runv(c51.program, {cfile}) + os.runv(bl51.program, {objfile, "TO", binfile}) os.runv(program, {binfile}) -- remove files - os.rm(cfile) - os.rm(objfile) - os.rm(lstfile) - os.rm(tmpfile) - os.rm(binfile) - os.rm(m51file) - os.rm(hexfile) + os.rmdir(tmpdir) end -- find oh51 -- diff --git a/xmake/rules/c51/xmake.lua b/xmake/rules/c51/xmake.lua index 5f47de159..c274b2333 100644 --- a/xmake/rules/c51/xmake.lua +++ b/xmake/rules/c51/xmake.lua @@ -1,7 +1,5 @@ rule("c51.static") on_load(function (target) - - -- we disable checking flags for cross toolchain automatically target:set("policy", "check.auto_ignore_flags", false) target:set("policy", "check.auto_map_flags", false) @@ -14,8 +12,8 @@ rule("c51.static") end) after_link(function(target) - import("detect.tools.find_oh51") - oh = find_oh51() - os.iorunv(oh, {target:targetfile()}) + import("lib.detect.find_tool") + local oh = assert(find_tool("oh51"), "oh51 not found") + os.iorunv(oh.program, {target:targetfile()}) cprint("${color.warning} hex file generated %s", target:targetfile() .. ".hex") end)
\ No newline at end of file diff --git a/xmake/toolchains/c51/xmake.lua b/xmake/toolchains/c51/xmake.lua index fd6ef11dd..dc24b02ac 100644 --- a/xmake/toolchains/c51/xmake.lua +++ b/xmake/toolchains/c51/xmake.lua @@ -20,31 +20,24 @@ toolchain("c51") -set_homepage("https://www.keil.com/c51/") -set_description("Keil development tools for the 8051 Microcontroller Architecture") + set_homepage("https://www.keil.com/c51/") + set_description("Keil development tools for the 8051 Microcontroller Architecture") -set_kind("cross") -set_kind("standalone") + set_kind("cross") + set_kind("standalone") -set_toolset("cc", "c51") -set_toolset("cxx", "c51") -set_toolset("ld", "bl51") ---set_toolset("ar", "oh51") ---set_toolset("ex", "armar") ---set_toolset("as", "a51") + set_toolset("cc", "c51") + set_toolset("cxx", "c51") + set_toolset("ld", "bl51") -on_check(function (toolchain) - --import("lib.detect.find_tool") - import("detect.sdks.find_c51") - local c51_module = find_c51() - import("detect.tools.find_c51") - if c51_module and c51_module.sdkdir and find_c51() then - toolchain:config_set("sdkdir", c51_module.sdkdir) - toolchain:configs_save() - return true - end -end) + on_check(function (toolchain) + import("lib.detect.find_tool") + import("detect.sdks.find_c51") + local c51 = find_c51() - -on_load(function (toolchain) -end)
\ No newline at end of file + if c51 and c51.sdkdir and find_tool("c51") then + toolchain:config_set("sdkdir", c51.sdkdir) + toolchain:configs_save() + return true + end + end)
\ No newline at end of file |
