summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2023-08-08 23:52:48 +0800
committerruki <[email protected]>2023-08-08 23:52:48 +0800
commit6ace9d5ab4735767b35d22cefd980e5f447db95c (patch)
treeff48025d851bedd4d18385b1405edf476574cff6
parent1494182a09187cf49edc9a19badc3be287e8a327 (diff)
add cross build
-rw-r--r--tests/projects/rust/cargo_deps_cross_build/xmake.lua4
-rw-r--r--xmake/modules/package/manager/cargo/configurations.lua1
-rw-r--r--xmake/modules/package/manager/cargo/install_package.lua5
-rw-r--r--xmake/platforms/cross/xmake.lua2
-rw-r--r--xmake/toolchains/rust/xmake.lua22
5 files changed, 23 insertions, 11 deletions
diff --git a/tests/projects/rust/cargo_deps_cross_build/xmake.lua b/tests/projects/rust/cargo_deps_cross_build/xmake.lua
index 6327b2e17..36a0e73c7 100644
--- a/tests/projects/rust/cargo_deps_cross_build/xmake.lua
+++ b/tests/projects/rust/cargo_deps_cross_build/xmake.lua
@@ -1,8 +1,10 @@
+-- rustup target add aarch64-unknown-none
+-- xmake f -p cross --cross=aarch64-unknown-none
+
add_rules("mode.release", "mode.debug")
add_requires("cargo::test", {configs = {
std = false,
main = false,
- build_target = "aarch64-unknown-none",
cargo_toml = path.join(os.projectdir(), "Cargo.toml")}})
target("test")
diff --git a/xmake/modules/package/manager/cargo/configurations.lua b/xmake/modules/package/manager/cargo/configurations.lua
index a233e7ccf..f151c1802 100644
--- a/xmake/modules/package/manager/cargo/configurations.lua
+++ b/xmake/modules/package/manager/cargo/configurations.lua
@@ -26,7 +26,6 @@ function main()
default_features = {description = "Enable or disable any defaults provided by the dependency.", default = true},
std = {description = "Enable or disable std module."},
main = {description = "Enable or disable main entry function."},
- build_target = {description = "Set build target. e.g. aarch64-unknown-none"},
cargo_toml = {description = "Set Cargo.toml file path"}
}
end
diff --git a/xmake/modules/package/manager/cargo/install_package.lua b/xmake/modules/package/manager/cargo/install_package.lua
index 5bc28498b..60c059f40 100644
--- a/xmake/modules/package/manager/cargo/install_package.lua
+++ b/xmake/modules/package/manager/cargo/install_package.lua
@@ -132,8 +132,9 @@ target = "%s"
-- do install
local installdir = opt.installdir
os.tryrm(path.join(installdir, "lib"))
- if configs.build_target then
- os.vcp(path.join(sourcedir, "target", configs.build_target, opt.mode == "debug" and "debug" or "release", "deps"), 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"))
else
os.vcp(path.join(sourcedir, "target", opt.mode == "debug" and "debug" or "release", "deps"), path.join(installdir, "lib"))
end
diff --git a/xmake/platforms/cross/xmake.lua b/xmake/platforms/cross/xmake.lua
index a5bbdc0d2..6257c6459 100644
--- a/xmake/platforms/cross/xmake.lua
+++ b/xmake/platforms/cross/xmake.lua
@@ -34,6 +34,6 @@ platform("cross")
set_formats("symbol", "$(name).sym")
-- set toolchains
- set_toolchains("envs", "cross")
+ set_toolchains("envs", "rust", "cross")
diff --git a/xmake/toolchains/rust/xmake.lua b/xmake/toolchains/rust/xmake.lua
index 3329b73b7..0bb6ad36f 100644
--- a/xmake/toolchains/rust/xmake.lua
+++ b/xmake/toolchains/rust/xmake.lua
@@ -18,21 +18,31 @@
-- @file xmake.lua
--
--- define toolchain
toolchain("rust")
- -- set homepage
set_homepage("https://www.rust-lang.org/")
set_description("Rust Programming Language Compiler")
- -- set toolset
+-- 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 load
+ on_check(function (toolchain)
+ import("lib.detect.find_tool")
+ return find_tool("rustc")
+ end)
+
on_load(function (toolchain)
- toolchain:set("rcshflags", "")
- toolchain:set("rcldflags", "")
+ -- 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)
+ else
+ toolchain:set("rcshflags", "")
+ toolchain:set("rcldflags", "")
+ end
end)