summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2023-08-09 00:45:21 +0800
committerruki <[email protected]>2023-08-09 00:45:21 +0800
commitd56fd4e78dd1d5a64409df3b8c889a54a4f740eb (patch)
treefa70ae50d2aca8f0b198a7d4c3ad3360da8acfee
parent04ff2a200ba3be2334827b3fe0385038aee9c090 (diff)
use arch to select target
-rw-r--r--tests/projects/rust/cargo_deps_cross_build/xmake.lua3
-rw-r--r--xmake/modules/package/manager/cargo/install_package.lua18
-rw-r--r--xmake/toolchains/rust/xmake.lua17
-rw-r--r--xmake/toolchains/xcode/load_macosx.lua3
4 files changed, 22 insertions, 19 deletions
diff --git a/tests/projects/rust/cargo_deps_cross_build/xmake.lua b/tests/projects/rust/cargo_deps_cross_build/xmake.lua
index 36a0e73c7..e02e14f82 100644
--- a/tests/projects/rust/cargo_deps_cross_build/xmake.lua
+++ b/tests/projects/rust/cargo_deps_cross_build/xmake.lua
@@ -1,6 +1,7 @@
-- rustup target add aarch64-unknown-none
--- xmake f -p cross --cross=aarch64-unknown-none
+-- xmake f -a aarch64-unknown-none
+set_arch("aarch64-unknown-none")
add_rules("mode.release", "mode.debug")
add_requires("cargo::test", {configs = {
std = false,
diff --git a/xmake/modules/package/manager/cargo/install_package.lua b/xmake/modules/package/manager/cargo/install_package.lua
index 60c059f40..7d58553e6 100644
--- a/xmake/modules/package/manager/cargo/install_package.lua
+++ b/xmake/modules/package/manager/cargo/install_package.lua
@@ -52,6 +52,15 @@ function main(name, opt)
require_version = "*"
end
+ -- get target
+ -- e.g. x86_64-pc-windows-msvc, aarch64-unknown-none
+ -- @see https://github.com/xmake-io/xmake/issues/4049
+ local target
+ local arch = opt.arch
+ if arch and #arch:split("%-") > 1 then
+ target = arch
+ end
+
-- generate Cargo.toml
local sourcedir = path.join(opt.cachedir, "source")
local cargotoml = path.join(sourcedir, "Cargo.toml")
@@ -88,11 +97,11 @@ function main(name, opt)
-- generate .cargo/config.toml
local configtoml = path.join(sourcedir, ".cargo", "config.toml")
- if configs.build_target then
+ if target then
io.writefile(configtoml, format([[
[build]
target = "%s"
-]], configs.build_target))
+]], target))
end
-- generate main.rs
@@ -132,9 +141,8 @@ target = "%s"
-- do install
local installdir = opt.installdir
os.tryrm(path.join(installdir, "lib"))
- local cross = get_config("cross")
- if cross then
- os.vcp(path.join(sourcedir, "target", cross, opt.mode == "debug" and "debug" or "release", "deps"), path.join(installdir, "lib"))
+ if target then
+ os.vcp(path.join(sourcedir, "target", target, opt.mode == "debug" and "debug" or "release", "deps"), path.join(installdir, "lib"))
else
os.vcp(path.join(sourcedir, "target", opt.mode == "debug" and "debug" or "release", "deps"), path.join(installdir, "lib"))
end
diff --git a/xmake/toolchains/rust/xmake.lua b/xmake/toolchains/rust/xmake.lua
index 0bb6ad36f..e997eaa21 100644
--- a/xmake/toolchains/rust/xmake.lua
+++ b/xmake/toolchains/rust/xmake.lua
@@ -23,24 +23,17 @@ toolchain("rust")
set_homepage("https://www.rust-lang.org/")
set_description("Rust Programming Language Compiler")
--- set_kind("standalone")
-
set_toolset("rc", "$(env RC)", "rustc")
set_toolset("rcld", "$(env RC)", "rustc")
set_toolset("rcsh", "$(env RC)", "rustc")
set_toolset("rcar", "$(env RC)", "rustc")
- on_check(function (toolchain)
- import("lib.detect.find_tool")
- return find_tool("rustc")
- end)
-
on_load(function (toolchain)
- -- for cross-compilation, e.g. xmake f -p cross --cross=aarch64-unknown-none
- local cross = toolchain:cross()
- if toolchain:is_cross() and cross then
- toolchain:add("rcshflags", "--target=" .. cross)
- toolchain:add("rcldflags", "--target=" .. cross)
+ -- e.g. x86_64-pc-windows-msvc, aarch64-unknown-none
+ local arch = toolchain:arch()
+ if arch and #arch:split("%-") > 1 then
+ toolchain:add("rcshflags", "--target=" .. arch)
+ toolchain:add("rcldflags", "--target=" .. arch)
else
toolchain:set("rcshflags", "")
toolchain:set("rcldflags", "")
diff --git a/xmake/toolchains/xcode/load_macosx.lua b/xmake/toolchains/xcode/load_macosx.lua
index 69afce0e9..fb7c3d615 100644
--- a/xmake/toolchains/xcode/load_macosx.lua
+++ b/xmake/toolchains/xcode/load_macosx.lua
@@ -78,7 +78,8 @@ function main(toolchain)
-- init flags for c/c++
toolchain:add("ldflags", "-stdlib=libc++")
toolchain:add("shflags", "-stdlib=libc++")
- toolchain:add("syslinks", "z")
+ toolchain:add("ldflags", "-lz")
+ toolchain:add("shflags", "-lz")
-- init flags for objc/c++ (with ldflags and shflags)
-- we can use `add_mxflags("-fno-objc-arc")` to override it in xmake.lua