diff options
| author | ruki <[email protected]> | 2023-08-08 23:52:48 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2023-08-08 23:52:48 +0800 |
| commit | 6ace9d5ab4735767b35d22cefd980e5f447db95c (patch) | |
| tree | ff48025d851bedd4d18385b1405edf476574cff6 | |
| parent | 1494182a09187cf49edc9a19badc3be287e8a327 (diff) | |
add cross build
| -rw-r--r-- | tests/projects/rust/cargo_deps_cross_build/xmake.lua | 4 | ||||
| -rw-r--r-- | xmake/modules/package/manager/cargo/configurations.lua | 1 | ||||
| -rw-r--r-- | xmake/modules/package/manager/cargo/install_package.lua | 5 | ||||
| -rw-r--r-- | xmake/platforms/cross/xmake.lua | 2 | ||||
| -rw-r--r-- | xmake/toolchains/rust/xmake.lua | 22 |
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) |
