This new package provides Cargo, the Rust official package manager. Cargo is written in Rust and uses Cargo as its build system. It also depends on other Rust packages. Normally, a previously installed version of Cargo would be used to: 1. Fetch the dependencies. 2. Build the new version of Cargo, using the available Rust compiler. But the fetching step prevents offline builds. So instead two features of Cargo are leveraged: vendoring [1] and local registry. First, a tarball of the build dependencies generated using `cargo vendor` is fetched along with Cargo source code. Then, the build process is as follows: 1. The tarball of the build dependencies is uncompressed in a local registry. 2. A snapshot of Cargo, provided by cargo-bin, builds the final version of Cargo. 3. A configuration file telling Cargo how to cross-compile programs for the target is generated and installed. Currently, only the host variant is provided. [1] https://github.com/alexcrichton/cargo-vendor [Peter: use src.fedoraproject.org, fix comment] Signed-off-by: Eric Le Bihan <eric.le.bihan.dev@free.fr> Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
92 lines
2.9 KiB
Makefile
92 lines
2.9 KiB
Makefile
################################################################################
|
|
#
|
|
# cargo
|
|
#
|
|
################################################################################
|
|
|
|
CARGO_VERSION = 0.24.0
|
|
CARGO_SITE = $(call github,rust-lang,cargo,$(CARGO_VERSION))
|
|
CARGO_LICENSE = Apache-2.0 or MIT
|
|
CARGO_LICENSE_FILES = LICENSE-APACHE LICENSE-MIT
|
|
|
|
CARGO_DEPS_SHA512 = 60c12ce49a53cf986490f5a5fdf606f0374677902edfdc4d48ab1ba6094f3f23efc59626cd3776649c9386a9cab2a60332e5693aad6acbcbb92132efdcf9fe21
|
|
CARGO_DEPS_SITE = https://src.fedoraproject.org/repo/pkgs/cargo/$(CARGO_DEPS_SOURCE)/sha512/$(CARGO_DEPS_SHA512)
|
|
CARGO_DEPS_SOURCE = cargo-$(CARGO_VERSION)-vendor.tar.xz
|
|
|
|
CARGO_INSTALLER_VERSION = 4f994850808a572e2cc8d43f968893c8e942e9bf
|
|
CARGO_INSTALLER_SITE = $(call github,rust-lang,rust-installer,$(CARGO_INSTALLER_VERSION))
|
|
CARGO_INSTALLER_SOURCE = rust-installer-$(CARGO_INSTALLER_VERSION).tar.gz
|
|
|
|
HOST_CARGO_EXTRA_DOWNLOADS = \
|
|
$(CARGO_DEPS_SITE)/$(CARGO_DEPS_SOURCE) \
|
|
$(CARGO_INSTALLER_SITE)/$(CARGO_INSTALLER_SOURCE)
|
|
|
|
HOST_CARGO_DEPENDENCIES = \
|
|
$(BR2_CMAKE_HOST_DEPENDENCY) \
|
|
host-pkgconf \
|
|
host-openssl \
|
|
host-libhttpparser \
|
|
host-libssh2 \
|
|
host-libcurl \
|
|
host-rustc \
|
|
host-cargo-bin
|
|
|
|
HOST_CARGO_SNAP_BIN = $(HOST_CARGO_BIN_DIR)/cargo/bin/cargo
|
|
HOST_CARGO_HOME = $(HOST_DIR)/share/cargo
|
|
|
|
define HOST_CARGO_EXTRACT_DEPS
|
|
@mkdir -p $(@D)/vendor
|
|
$(call suitable-extractor,$(CARGO_DEPS_SOURCE)) \
|
|
$(DL_DIR)/$(CARGO_DEPS_SOURCE) | \
|
|
$(TAR) --strip-components=1 -C $(@D)/vendor $(TAR_OPTIONS) -
|
|
endef
|
|
|
|
HOST_CARGO_POST_EXTRACT_HOOKS += HOST_CARGO_EXTRACT_DEPS
|
|
|
|
define HOST_CARGO_EXTRACT_INSTALLER
|
|
@mkdir -p $(@D)/src/rust-installer
|
|
$(call suitable-extractor,$(CARGO_INSTALLER_SOURCE)) \
|
|
$(DL_DIR)/$(CARGO_INSTALLER_SOURCE) | \
|
|
$(TAR) --strip-components=1 -C $(@D)/src/rust-installer $(TAR_OPTIONS) -
|
|
endef
|
|
|
|
HOST_CARGO_POST_EXTRACT_HOOKS += HOST_CARGO_EXTRACT_INSTALLER
|
|
|
|
define HOST_CARGO_SETUP_DEPS
|
|
mkdir -p $(@D)/.cargo
|
|
( \
|
|
echo "[source.crates-io]"; \
|
|
echo "registry = 'https://github.com/rust-lang/crates.io-index'"; \
|
|
echo "replace-with = 'vendored-sources'"; \
|
|
echo "[source.vendored-sources]"; \
|
|
echo "directory = '$(@D)/vendor'"; \
|
|
) > $(@D)/.cargo/config
|
|
endef
|
|
|
|
HOST_CARGO_PRE_CONFIGURE_HOOKS += HOST_CARGO_SETUP_DEPS
|
|
|
|
HOST_CARGO_SNAP_OPTS = \
|
|
--release \
|
|
$(if $(VERBOSE),--verbose)
|
|
|
|
HOST_CARGO_ENV = \
|
|
RUSTFLAGS="-Clink-arg=-Wl,-rpath,$(HOST_DIR)/lib" \
|
|
CARGO_HOME=$(HOST_CARGO_HOME)
|
|
|
|
define HOST_CARGO_BUILD_CMDS
|
|
(cd $(@D); $(HOST_MAKE_ENV) $(HOST_CARGO_ENV) $(HOST_CARGO_SNAP_BIN) \
|
|
build $(HOST_CARGO_SNAP_OPTS))
|
|
endef
|
|
|
|
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/@RUST_TARGET_NAME@/$(RUST_TARGET_NAME)/' \
|
|
$(HOST_DIR)/share/cargo/config
|
|
$(SED) 's/@CROSS_PREFIX@/$(notdir $(TARGET_CROSS))/' \
|
|
$(HOST_DIR)/share/cargo/config
|
|
endef
|
|
|
|
$(eval $(host-generic-package))
|