diff options
| author | ruki <[email protected]> | 2023-02-08 16:29:32 +0800 |
|---|---|---|
| committer | GitHub <[email protected]> | 2023-02-08 16:29:32 +0800 |
| commit | 90959a037de19905aee76e24a0028b4e407969ff (patch) | |
| tree | a6a7d57fe0d99f276ae1f1b1f28ab50e17448262 | |
| parent | 1d61e87f3c869a7e33884fa0edc01c4110ddb72d (diff) | |
| parent | 99e671bf5659f24696ae1baf23de6b593c702f9c (diff) | |
Merge pull request #3346 from xmake-io/lld
add some linkers
| -rw-r--r-- | xmake/modules/detect/tools/find_ld64_lld.lua | 46 | ||||
| -rw-r--r-- | xmake/modules/detect/tools/find_ld_lld.lua | 46 | ||||
| -rw-r--r-- | xmake/modules/detect/tools/find_lld_link.lua | 46 | ||||
| -rw-r--r-- | xmake/modules/detect/tools/find_mold.lua | 46 | ||||
| -rw-r--r-- | xmake/modules/detect/tools/find_wasm_ld.lua | 46 | ||||
| -rw-r--r-- | xmake/modules/lib/detect/find_toolname.lua | 22 |
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 |
