diff options
| author | SirLynix <[email protected]> | 2025-05-10 07:40:01 +0200 |
|---|---|---|
| committer | SirLynix <[email protected]> | 2025-05-10 07:40:01 +0200 |
| commit | 2f886d8133855895229d3ce958e17fbfa86d2bca (patch) | |
| tree | 201ba938c2a17c54f0f6d7c1a6613e768ad97931 /xmake/modules/core | |
| parent | 5e3c763b1ace6ab5e03dfa997cf681857de9993a (diff) | |
Make rustc target_triple public
from private.tools.rust.target_triple to core.tools.rustc.target_triple
Diffstat (limited to 'xmake/modules/core')
| -rw-r--r-- | xmake/modules/core/tools/rustc/target_triple.lua | 96 |
1 files changed, 96 insertions, 0 deletions
diff --git a/xmake/modules/core/tools/rustc/target_triple.lua b/xmake/modules/core/tools/rustc/target_triple.lua new file mode 100644 index 000000000..3a83aed7e --- /dev/null +++ b/xmake/modules/core/tools/rustc/target_triple.lua @@ -0,0 +1,96 @@ +--!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 SirLynix +-- @file target_triple.lua +-- + +-- get arch part +function _translate_arch(arch, opt) + local maps = + { + ["aarch64"] = "aarch64" + , ["arm"] = "arm" + , ["armv5te"] = "arm" + , ["armeabi"] = "arm" + , ["armeabi-v7a"] = "armv7" + , ["armv7-a"] = "armv7" + , ["arm64"] = "aarch64" + , ["arm64-v8a"] = "aarch64" + , ["i386"] = "i686" + , ["i686"] = "i686" + , ["x86"] = "i686" + , ["x86_64"] = "x86_64" + , ["x64"] = "x86_64" + , ["wasm32"] = "wasm32" + , ["wasm64"] = "wasm64" + } + return maps[arch] or arch +end + +-- get platform part +function _translate_plat(plat, arch, opt) + if plat == "windows" then + return "-pc-windows-msvc" + elseif plat == "mingw" then + return "-pc-windows-gnu" + elseif plat == "linux" then + return "-unknown-linux-gnu" + elseif plat == "macosx" then + return "-apple-darwin" + elseif plat == "android" then + if arch == "armeabi-v7a" or arch == "armeabi" or arch == "armv7-a" or arch == "armv5te" then + return "-linux-androideabi" + else + return "-linux-android" + end + elseif plat == "iphoneos" or plat == "appletvos" or plat == "watchos" then + local suffix = opt and opt.apple_sim and "-sim" or "" + if plat == "iphoneos" then + return "-apple-ios" .. suffix + elseif plat == "appletvos" then + return "-apple-tvos" .. suffix + elseif plat == "watchos" then + return "-apple-watchos" .. suffix + end + elseif plat == "bsd" then + return "-unknown-freebsd" + elseif plat == "wasm" then + return "-unknown-unknown" + end +end + +-- gets the rustc compatible target triple (e.g. x86_64-pc-windows-msvc) for a set plat/arch +-- +-- @param plat the target plat, e.g. windows, android, macosx, ... +-- @param arch the target name, e.g. arm64, x86_64, wasm64, ... +-- @param opt the options, e.g. {apple_sim = true) +-- +-- @return a valid rustc triple if plat and arch are recognized, nil otherwise +function main(plat, arch, opt) + + local target_arch = _translate_arch(arch, opt) + if not target_arch then + return + end + + local target_plat = _translate_plat(plat, arch, opt) + if not target_plat then + return + end + + return target_arch .. target_plat +end |
