summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2023-07-10 23:05:50 +0800
committerruki <[email protected]>2023-07-10 23:05:50 +0800
commita4b10bb067a5f13708f5ceec469ab862e5f8ea7f (patch)
treebc3c8f0e62fa733a24175c3aeebff3b9941ad7f1
parent7bd90133902bc03bbc6b10f20a6aa7149f626caa (diff)
add swift-frontend tool
-rw-r--r--xmake/modules/core/tools/swift_frontend.lua178
-rw-r--r--xmake/modules/core/tools/swiftc.lua32
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