summaryrefslogtreecommitdiff
path: root/xmake/modules/core/tools/bisheng.lua
diff options
context:
space:
mode:
Diffstat (limited to 'xmake/modules/core/tools/bisheng.lua')
-rw-r--r--xmake/modules/core/tools/bisheng.lua71
1 files changed, 71 insertions, 0 deletions
diff --git a/xmake/modules/core/tools/bisheng.lua b/xmake/modules/core/tools/bisheng.lua
new file mode 100644
index 000000000..5d3726e66
--- /dev/null
+++ b/xmake/modules/core/tools/bisheng.lua
@@ -0,0 +1,71 @@
+--!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, Xmake Open Source Community.
+--
+-- @author wuzhenqing
+-- @file bisheng.lua
+--
+
+inherit("clang")
+
+function init(self)
+ _super.init(self)
+ self:add("shared.ascflags", "-fPIC")
+ self:add("shared.aicpuflags", "-fPIC")
+ self:add("ascflags", "-Qunused-arguments")
+ self:add("aicpuflags", "-Qunused-arguments")
+ self:set("ascshflags", "-shared")
+end
+
+-- make the language flag
+function nf_language(self, stdname)
+ if _g.cxxmaps == nil then
+ _g.cxxmaps =
+ {
+ cxx03 = "-std=c++03"
+ , cxx11 = "-std=c++11"
+ , cxx14 = "-std=c++14"
+ , cxx17 = "-std=c++17"
+ , cxx20 = "-std=c++20"
+ , cxxlatest = {"-std=c++20", "-std=c++17", "-std=c++14", "-std=c++11", "-std=c++03"}
+ }
+ local cxxmaps2 = {}
+ for k, v in pairs(_g.cxxmaps) do
+ cxxmaps2[k:gsub("xx", "++")] = v
+ end
+ table.join2(_g.cxxmaps, cxxmaps2)
+ end
+ local result = _g.cxxmaps[stdname]
+ if type(result) == "table" then
+ local flagkind = self:kind() == "aicpu" and "aicpuflags" or "ascflags"
+ for _, flag in ipairs(result) do
+ if self:has_flags(flag, flagkind) then
+ result = flag
+ _g.cxxmaps[stdname] = result
+ break
+ end
+ end
+ end
+ return result
+end
+
+-- add source kind override flags (e.g. for .cce files compiled as asc)
+function add_sourceflags(self, sourcefile, fileconfig, target, targetkind)
+ local sourcekind = fileconfig.sourcekind
+ if sourcekind then
+ local maps = {asc = "-x asc", aicpu = "-x aicpu"}
+ return maps[sourcekind]
+ end
+end