diff options
| author | ruki <[email protected]> | 2023-07-10 23:05:50 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2023-07-10 23:05:50 +0800 |
| commit | a4b10bb067a5f13708f5ceec469ab862e5f8ea7f (patch) | |
| tree | bc3c8f0e62fa733a24175c3aeebff3b9941ad7f1 | |
| parent | 7bd90133902bc03bbc6b10f20a6aa7149f626caa (diff) | |
add swift-frontend tool
| -rw-r--r-- | xmake/modules/core/tools/swift_frontend.lua | 178 | ||||
| -rw-r--r-- | xmake/modules/core/tools/swiftc.lua | 32 |
2 files changed, 184 insertions, 26 deletions
diff --git a/xmake/modules/core/tools/swift_frontend.lua b/xmake/modules/core/tools/swift_frontend.lua new file mode 100644 index 000000000..e6c720aad --- /dev/null +++ b/xmake/modules/core/tools/swift_frontend.lua @@ -0,0 +1,178 @@ +--!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 ruki +-- @file swift_frontend.lua +-- + +-- imports +import("core.project.config") +import("core.language.language") + +-- init it +function init(self) + + -- init flags map + self:set("mapflags", { + + -- symbols + ["-fvisibility=hidden"] = "" + + -- warnings + , ["-w"] = "-suppress-warnings" + , ["-W%d*"] = "-warn-swift3-objc-inference-minimal" + , ["-Wall"] = "-warn-swift3-objc-inference-complete" + , ["-Wextra"] = "-warn-swift3-objc-inference-complete" + , ["-Weverything"] = "-warn-swift3-objc-inference-complete" + , ["-Werror"] = "-warnings-as-errors" + + -- optimize + , ["-O0"] = "-Onone" + , ["-Ofast"] = "-Ounchecked" + , ["-O.*"] = "-O" + + -- vectorexts + , ["-m.*"] = "" + + -- strip + , ["-s"] = "" + , ["-S"] = "" + + -- others + , ["-ftrapv"] = "" + , ["-fsanitize=address"] = "" + }) +end + +-- make the strip flag +function nf_strip(self, level) + local maps = { + debug = "-Xlinker -S" + , all = "-Xlinker -s" + } + return maps[level] +end + +-- make the symbol flag +function nf_symbol(self, level) + local maps = { + debug = "-g" + } + return maps[level] +end + +-- make the warning flag +function nf_warning(self, level) + local maps = { + none = "-suppress-warnings" + , less = "-warn-swift3-objc-inference-minimal" + , more = "-warn-swift3-objc-inference-minimal" + , all = "-warn-swift3-objc-inference-complete" + , everything = "-warn-swift3-objc-inference-complete" + , error = "-warnings-as-errors" + } + return maps[level] +end + +-- make the optimize flag +function nf_optimize(self, level) + -- only for source kind + local kind = self:kind() + if language.sourcekinds()[kind] then + local maps = { + none = "-Onone" + , fast = "-O" + , faster = "-O" + , fastest = "-O" + , smallest = "-O" + , aggressive = "-Ounchecked" + } + return maps[level] + end +end + +-- make the vector extension flag +function nf_vectorext(self, extension) + local maps = { + mmx = "-mmmx" + , sse = "-msse" + , sse2 = "-msse2" + , sse3 = "-msse3" + , ssse3 = "-mssse3" + , avx = "-mavx" + , avx2 = "-mavx2" + , neon = "-mfpu=neon" + } + return maps[extension] +end + +-- make the define flag +function nf_define(self, macro) + return {"-Xcc", "-D" .. macro} +end + +-- make the undefine flag +function nf_undefine(self, macro) + return {"-Xcc", "-U" .. macro} +end + +-- make the framework flag +function nf_framework(self, framework) + return {"-framework", framework} +end + +-- make the frameworkdir flag +function nf_frameworkdir(self, frameworkdir) + return {"-F", frameworkdir} +end + +-- make the link flag +function nf_link(self, lib) + return "-l" .. lib +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 {"-L", dir} +end + +-- make the link arguments list +function linkargv(self, objectfiles, targetkind, targetfile, flags) + return self:program(), table.join("-o", targetfile, objectfiles, flags) +end + +-- link the target file +function link(self, objectfiles, targetkind, targetfile, flags) + os.mkdir(path.directory(targetfile)) + os.runv(linkargv(self, objectfiles, targetkind, targetfile, flags)) +end + +-- make the compile arguments list +function compargv(self, sourcefile, objectfile, flags) + return self:program(), table.join("-c", flags, "-o", objectfile, sourcefile) +end + +-- compile the source file +function compile(self, sourcefile, objectfile, dependinfo, flags) + os.mkdir(path.directory(objectfile)) + os.runv(compargv(self, sourcefile, objectfile, flags)) +end + diff --git a/xmake/modules/core/tools/swiftc.lua b/xmake/modules/core/tools/swiftc.lua index 948e408ab..888cbb2e0 100644 --- a/xmake/modules/core/tools/swiftc.lua +++ b/xmake/modules/core/tools/swiftc.lua @@ -26,8 +26,8 @@ import("core.language.language") function init(self) -- init flags map - self:set("mapflags", - { + self:set("mapflags", { + -- symbols ["-fvisibility=hidden"] = "" @@ -59,37 +59,24 @@ end -- make the strip flag function nf_strip(self, level) - - -- the maps - local maps = - { + local maps = { debug = "-Xlinker -S" , all = "-Xlinker -s" } - - -- make it return maps[level] end -- make the symbol flag function nf_symbol(self, level) - - -- the maps - local maps = - { + local maps = { debug = "-g" } - - -- make it return maps[level] end -- make the warning flag function nf_warning(self, level) - - -- the maps - local maps = - { + local maps = { none = "-suppress-warnings" , less = "-warn-swift3-objc-inference-minimal" , more = "-warn-swift3-objc-inference-minimal" @@ -97,8 +84,6 @@ function nf_warning(self, level) , everything = "-warn-swift3-objc-inference-complete" , error = "-warnings-as-errors" } - - -- make it return maps[level] end @@ -122,10 +107,7 @@ end -- make the vector extension flag function nf_vectorext(self, extension) - - -- the maps - local maps = - { + local maps = { mmx = "-mmmx" , sse = "-msse" , sse2 = "-msse2" @@ -135,8 +117,6 @@ function nf_vectorext(self, extension) , avx2 = "-mavx2" , neon = "-mfpu=neon" } - - -- make it return maps[extension] end |
