summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2023-02-08 16:29:32 +0800
committerGitHub <[email protected]>2023-02-08 16:29:32 +0800
commit90959a037de19905aee76e24a0028b4e407969ff (patch)
treea6a7d57fe0d99f276ae1f1b1f28ab50e17448262
parent1d61e87f3c869a7e33884fa0edc01c4110ddb72d (diff)
parent99e671bf5659f24696ae1baf23de6b593c702f9c (diff)
Merge pull request #3346 from xmake-io/lld
add some linkers
-rw-r--r--xmake/modules/detect/tools/find_ld64_lld.lua46
-rw-r--r--xmake/modules/detect/tools/find_ld_lld.lua46
-rw-r--r--xmake/modules/detect/tools/find_lld_link.lua46
-rw-r--r--xmake/modules/detect/tools/find_mold.lua46
-rw-r--r--xmake/modules/detect/tools/find_wasm_ld.lua46
-rw-r--r--xmake/modules/lib/detect/find_toolname.lua22
6 files changed, 249 insertions, 3 deletions
diff --git a/xmake/modules/detect/tools/find_ld64_lld.lua b/xmake/modules/detect/tools/find_ld64_lld.lua
new file mode 100644
index 000000000..eacfe3899
--- /dev/null
+++ b/xmake/modules/detect/tools/find_ld64_lld.lua
@@ -0,0 +1,46 @@
+--!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 find_ld64_lld.lua
+--
+
+-- imports
+import("core.tool.compiler")
+import("lib.detect.find_program")
+
+-- find ar
+--
+-- @param opt the argument options, e.g. {version = true}
+--
+-- @return program, version
+--
+-- @code
+--
+-- local ar = find_ld64_lld()
+-- local ar, version = find_ld64_lld({program = "ld64.lld", version = true})
+--
+-- @endcode
+--
+function main(opt)
+ opt = opt or {}
+ local program = find_program(opt.program or "ld64.lld", opt)
+ local version = nil
+ if program and opt and opt.version then
+ version = find_programver(program, opt)
+ end
+ return program, version
+end
diff --git a/xmake/modules/detect/tools/find_ld_lld.lua b/xmake/modules/detect/tools/find_ld_lld.lua
new file mode 100644
index 000000000..d7078e1d2
--- /dev/null
+++ b/xmake/modules/detect/tools/find_ld_lld.lua
@@ -0,0 +1,46 @@
+--!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 find_ld_lld.lua
+--
+
+-- imports
+import("core.tool.compiler")
+import("lib.detect.find_program")
+
+-- find ar
+--
+-- @param opt the argument options, e.g. {version = true}
+--
+-- @return program, version
+--
+-- @code
+--
+-- local ar = find_ld_lld()
+-- local ar, version = find_ld_lld({program = "ld.lld", version = true})
+--
+-- @endcode
+--
+function main(opt)
+ opt = opt or {}
+ local program = find_program(opt.program or "ld.lld", opt)
+ local version = nil
+ if program and opt and opt.version then
+ version = find_programver(program, opt)
+ end
+ return program, version
+end
diff --git a/xmake/modules/detect/tools/find_lld_link.lua b/xmake/modules/detect/tools/find_lld_link.lua
new file mode 100644
index 000000000..73f6f5694
--- /dev/null
+++ b/xmake/modules/detect/tools/find_lld_link.lua
@@ -0,0 +1,46 @@
+--!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 find_lld_link.lua
+--
+
+-- imports
+import("core.tool.compiler")
+import("lib.detect.find_program")
+
+-- find ar
+--
+-- @param opt the argument options, e.g. {version = true}
+--
+-- @return program, version
+--
+-- @code
+--
+-- local ar = find_lld_link()
+-- local ar, version = find_lld_link({program = "lld.link", version = true})
+--
+-- @endcode
+--
+function main(opt)
+ opt = opt or {}
+ local program = find_program(opt.program or "lld.link", opt)
+ local version = nil
+ if program and opt and opt.version then
+ version = find_programver(program, opt)
+ end
+ return program, version
+end
diff --git a/xmake/modules/detect/tools/find_mold.lua b/xmake/modules/detect/tools/find_mold.lua
new file mode 100644
index 000000000..bcba774c3
--- /dev/null
+++ b/xmake/modules/detect/tools/find_mold.lua
@@ -0,0 +1,46 @@
+--!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 find_mold.lua
+--
+
+-- imports
+import("core.tool.compiler")
+import("lib.detect.find_program")
+
+-- find ar
+--
+-- @param opt the argument options, e.g. {version = true}
+--
+-- @return program, version
+--
+-- @code
+--
+-- local ar = find_mold()
+-- local ar, version = find_mold({program = "mold", version = true})
+--
+-- @endcode
+--
+function main(opt)
+ opt = opt or {}
+ local program = find_program(opt.program or "mold", opt)
+ local version = nil
+ if program and opt and opt.version then
+ version = find_programver(program, opt)
+ end
+ return program, version
+end
diff --git a/xmake/modules/detect/tools/find_wasm_ld.lua b/xmake/modules/detect/tools/find_wasm_ld.lua
new file mode 100644
index 000000000..ca16a6e73
--- /dev/null
+++ b/xmake/modules/detect/tools/find_wasm_ld.lua
@@ -0,0 +1,46 @@
+--!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 find_wasm_ld.lua
+--
+
+-- imports
+import("core.tool.compiler")
+import("lib.detect.find_program")
+
+-- find ar
+--
+-- @param opt the argument options, e.g. {version = true}
+--
+-- @return program, version
+--
+-- @code
+--
+-- local ar = find_wasm_ld()
+-- local ar, version = find_wasm_ld({program = "wasm.ld", version = true})
+--
+-- @endcode
+--
+function main(opt)
+ opt = opt or {}
+ local program = find_program(opt.program or "wasm.ld", opt)
+ local version = nil
+ if program and opt and opt.version then
+ version = find_programver(program, opt)
+ end
+ return program, version
+end
diff --git a/xmake/modules/lib/detect/find_toolname.lua b/xmake/modules/lib/detect/find_toolname.lua
index 912f0ee8a..77ed776d2 100644
--- a/xmake/modules/lib/detect/find_toolname.lua
+++ b/xmake/modules/lib/detect/find_toolname.lua
@@ -19,8 +19,24 @@
--
-- imports
+import("core.base.hashset")
import("core.sandbox.module")
+-- remove some suffix
+--
+-- we just remove some known extension, because we need reverse others, e.g. ld.lld, ld64.lld
+--
+function _remove_suffix(name)
+ local exts = hashset.of("exe", "bat", "sh", "ps1", "ps")
+ name = name:gsub("%.(%w+)", function (ext)
+ ext = ext:lower()
+ if exts:has(ext) then
+ return ""
+ end
+ end)
+ return name
+end
+
-- find the the whole name
function _find_with_whole_name(program)
@@ -34,7 +50,7 @@ function _find_with_whole_name(program)
local names = path.filename(program):lower():split("%s")
for _, name in ipairs(names) do
-- remove suffix: ".exe", e.g. "zig.exe cc"
- name = name:gsub("%.%w+", "")
+ name = _remove_suffix(name)
-- "zig c++" -> zig_cxx
name = name:gsub("%+", "x")
-- skip -arguments
@@ -70,8 +86,8 @@ function _find(program)
end
-- remove suffix: ".xxx"
- name = name:gsub("%.%w+", "")
- toolname = name:gsub("[%+%-]", function (ch) return (ch == "+" and "x" or "_") end)
+ name = _remove_suffix(name)
+ toolname = name:gsub("[%+%-%.]", function (ch) return (ch == "+" and "x" or "_") end)
if module.find("detect.tools.find_" .. toolname) then
return toolname
end