The cargo config file is much like the cmake and meson configuration
files, something that tells the cargo build system how the
cross-toolchain is configured.
It is currently installed by the cargo package, but this package is
about to be removed as cargo is now built as part of rust
itself. Therefore, install the cargo config file as a toolchain
post-install hook, just like we do for cmake and meson.
However, we don't have a pkg-cargo infrastructure (yet) so we can't
put it there. Therefore, put it in the rustc package - any cargo
package will need rustc.
Signed-off-by: Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be>
Tested-by: David Pierret <david.pierret@smile.fr>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
define HOST_CARGO_INSTALL_CMDS
$(INSTALL) -D -m 0755 $(@D)/target/release/cargo $(HOST_DIR)/bin/cargo
- $(INSTALL) -D package/cargo/config.in \
- $(HOST_DIR)/share/cargo/config
- $(SED) 's/@RUSTC_TARGET_NAME@/$(RUSTC_TARGET_NAME)/' \
- $(HOST_DIR)/share/cargo/config
- $(SED) 's/@CROSS_PREFIX@/$(notdir $(TARGET_CROSS))/' \
- $(HOST_DIR)/share/cargo/config
endef
$(eval $(host-generic-package))
+++ /dev/null
-[target.@RUSTC_TARGET_NAME@]
-linker = "@CROSS_PREFIX@gcc"
--- /dev/null
+[target.@RUSTC_TARGET_NAME@]
+linker = "@CROSS_PREFIX@gcc"
RUSTC_HOST_NAME = $(RUSTC_HOST_ARCH)-unknown-linux-gnu
$(eval $(host-virtual-package))
+
+ifeq ($(BR2_PACKAGE_HOST_RUSTC_TARGET_ARCH_SUPPORTS),y)
+define RUSTC_INSTALL_CARGO_CONFIG
+ mkdir -p $(HOST_DIR)/share/cargo
+ sed -e 's/@RUSTC_TARGET_NAME@/$(RUSTC_TARGET_NAME)/' \
+ -e 's/@CROSS_PREFIX@/$(notdir $(TARGET_CROSS))/' \
+ package/rustc/cargo-config.in \
+ > $(HOST_DIR)/share/cargo/config
+endef
+# check-package disable TypoInPackageVariable - TOOLCHAIN intended
+TOOLCHAIN_POST_INSTALL_STAGING_HOOKS += RUSTC_INSTALL_CARGO_CONFIG
+endif