summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2022-08-04 00:45:46 +0800
committerruki <[email protected]>2022-08-04 00:45:46 +0800
commit110a916cfc9e9a95bc2c3784725cb47c3fd1c762 (patch)
tree473570de557c437670bf76f59607af6ef2bd935a
parent553bb39bd9a0394a19e0c23706611533ef2f8fa3 (diff)
add stl headers
-rw-r--r--xmake/rules/c++/modules/modules_support/common.lua110
-rw-r--r--xmake/rules/c++/modules/modules_support/stl_headers.lua122
-rw-r--r--xmake/rules/c++/modules/xmake.lua3
3 files changed, 145 insertions, 90 deletions
diff --git a/xmake/rules/c++/modules/modules_support/common.lua b/xmake/rules/c++/modules/modules_support/common.lua
index 176d89c4b..b86ad8f1f 100644
--- a/xmake/rules/c++/modules/modules_support/common.lua
+++ b/xmake/rules/c++/modules/modules_support/common.lua
@@ -1,3 +1,24 @@
+--!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 Arthapz, ruki
+-- @file common.lua
+--
+
+-- imports
import("core.base.json")
import("core.base.hashset")
import("core.project.config")
@@ -5,95 +26,6 @@ import("core.tool.compiler")
import("core.project.project")
import("lib.detect.find_file")
-_g.stl_headers = {
- "algorithm",
- "forward_list",
- "numbers",
- "stop_token",
- "any",
- "fstream",
- "numeric",
- "streambuf",
- "array",
- "functional",
- "optional",
- "string",
- "atomic",
- "future",
- "ostream",
- "string_view",
- "barrier",
- "initializer_list",
- "queue",
- "bit",
- "iomanip",
- "random",
- "syncstream",
- "bitset",
- "ios",
- "ranges",
- "system_error",
- "charconv",
- "iosfwd",
- "ratio",
- "thread",
- "chrono",
- "iostream",
- "regex",
- "tuple",
- "codecvt",
- "istream",
- "scoped_allocator",
- "typeindex",
- "compare",
- "iterator",
- "semaphore",
- "typeinfo",
- "complex",
- "latch",
- "set",
- "type_traits",
- "concepts",
- "limits",
- "shared_mutex",
- "unordered_map",
- "condition_variable",
- "list",
- "source_location",
- "unordered_set",
- "coroutine",
- "locale",
- "span",
- "utility",
- "deque",
- "map",
- "spanstream",
- "valarray",
- "exception",
- "memory",
- "sstream",
- "variant",
- "execution",
- "memory_resource",
- "stack",
- "vector",
- "filesystem",
- "mutex",
- "version",
- "format",
- "new",
- "type_traits",
- "string_view",
- "stdexcept"}
-
-function get_stl_headers()
- return hashset.from(_g.stl_headers)
-end
-
-function is_stl_header(header)
- return get_stl_headers():has(header)
-end
-
function get_stlcache_dir(target)
local stlcachedir = path.join(target:autogendir(), "stlmodules", "cache")
if target:has_tool("cxx", "clang", "clangxx") then
diff --git a/xmake/rules/c++/modules/modules_support/stl_headers.lua b/xmake/rules/c++/modules/modules_support/stl_headers.lua
new file mode 100644
index 000000000..aa5cb497c
--- /dev/null
+++ b/xmake/rules/c++/modules/modules_support/stl_headers.lua
@@ -0,0 +1,122 @@
+--!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 Arthapz, ruki
+-- @file stl_headers.lua
+--
+
+-- imports
+import("core.base.hashset")
+
+-- the stl headers list
+function _stl_headers()
+ return {
+ "algorithm",
+ "forward_list",
+ "numbers",
+ "stop_token",
+ "any",
+ "fstream",
+ "numeric",
+ "streambuf",
+ "array",
+ "functional",
+ "optional",
+ "string",
+ "atomic",
+ "future",
+ "ostream",
+ "string_view",
+ "barrier",
+ "initializer_list",
+ "queue",
+ "bit",
+ "iomanip",
+ "random",
+ "syncstream",
+ "bitset",
+ "ios",
+ "ranges",
+ "system_error",
+ "charconv",
+ "iosfwd",
+ "ratio",
+ "thread",
+ "chrono",
+ "iostream",
+ "regex",
+ "tuple",
+ "codecvt",
+ "istream",
+ "scoped_allocator",
+ "typeindex",
+ "compare",
+ "iterator",
+ "semaphore",
+ "typeinfo",
+ "complex",
+ "latch",
+ "set",
+ "type_traits",
+ "concepts",
+ "limits",
+ "shared_mutex",
+ "unordered_map",
+ "condition_variable",
+ "list",
+ "source_location",
+ "unordered_set",
+ "coroutine",
+ "locale",
+ "span",
+ "utility",
+ "deque",
+ "map",
+ "spanstream",
+ "valarray",
+ "exception",
+ "memory",
+ "sstream",
+ "variant",
+ "execution",
+ "memory_resource",
+ "stack",
+ "vector",
+ "filesystem",
+ "mutex",
+ "version",
+ "format",
+ "new",
+ "type_traits",
+ "string_view",
+ "stdexcept"}
+end
+
+-- get all stl headers
+function get_stl_headers()
+ local stl_headers = _g.stl_headers
+ if stl_headers == nil then
+ stl_headers = hashset.from(_stl_headers())
+ _g.stl_headers = stl_headers or false
+ end
+ return stl_headers or nil
+end
+
+-- is stl header?
+function is_stl_header(header)
+ return get_stl_headers():has(header)
+end
+
diff --git a/xmake/rules/c++/modules/xmake.lua b/xmake/rules/c++/modules/xmake.lua
index a46947a53..7b6697eeb 100644
--- a/xmake/rules/c++/modules/xmake.lua
+++ b/xmake/rules/c++/modules/xmake.lua
@@ -87,6 +87,7 @@ rule("c++.build.modules.builder")
-- patch sourcebatch
import("modules_support.common")
+ import("modules_support.stl_headers")
sourcebatch.objectfiles = {}
sourcebatch.dependfiles = {}
common.patch_sourcebatch(target, sourcebatch, opt)
@@ -101,7 +102,7 @@ rule("c++.build.modules.builder")
if r.method ~= "by-name" then
headerunits = headerunits or {}
local unittype = r.method == "include-angle" and ":angle" or ":quote"
- table.append(headerunits, {name = name, path = r.path, type = unittype, stl = common.is_stl_header(name)})
+ table.append(headerunits, {name = name, path = r.path, type = unittype, stl = stl_headers.is_stl_header(name)})
end
end
break