[vlc-commits] contrib: add rust rules

Thomas Guillem git at videolan.org
Thu Sep 10 12:43:20 CEST 2020


vlc | branch: master | Thomas Guillem <thomas at gllm.fr> | Tue Aug 25 15:07:35 2020 +0200| [ac229130f207cb35b2601a0feb3baa2ab778311f] | committer: Thomas Guillem

contrib: add rust rules

This adds CARGO_INSTALL and CARGOC_INSTALL, using the correct cargo path (from
contribs) and using the correct install arguments.

cf. https://doc.rust-lang.org/cargo/commands/cargo-vendor.html
'cargo vendor' fetch all dependencies required by a Rust project.

Administrators will be able to create an archive (via the upcoming
cargo-vendor-archive.sh script) containing all dependencies of a Rust project
and upload it to the VideoLAN FTP.

*-vendor packages will try to use such archive as the only crates source. In
case of failure (checksum failed, archive not uploaded), CARGO_INSTALL will
fallback to crates.io (by not using the --frozen --offline arguments).

A warning is displayed when the crates.io source is used. This is like our
download_pkg mechanism (try first VideoLAN FTP, or print a warning and use the
original source).

Co-Authored-By: Kartik Ohri <kartikohri13 at gmail.com>

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=ac229130f207cb35b2601a0feb3baa2ab778311f
---

 contrib/src/main-rust.mak | 46 ++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 46 insertions(+)

diff --git a/contrib/src/main-rust.mak b/contrib/src/main-rust.mak
index ea32e69029..e31629dea6 100644
--- a/contrib/src/main-rust.mak
+++ b/contrib/src/main-rust.mak
@@ -37,3 +37,49 @@ endif
 ifneq ($(RUST_TARGET),)
 BUILD_RUST="1"
 endif
+
+RUSTUP_HOME= $(BUILDBINDIR)/.rustup
+CARGO_HOME = $(BUILDBINDIR)/.cargo
+
+CARGO = . $(CARGO_HOME)/env && RUSTUP_HOME=$(RUSTUP_HOME) CARGO_HOME=$(CARGO_HOME) cargo
+
+CARGO_INSTALL_ARGS = --target=$(RUST_TARGET) --prefix=$(PREFIX) \
+	--library-type staticlib --release
+
+# Use the .cargo-vendor source if present, otherwise use crates.io
+CARGO_INSTALL_ARGS += \
+	$(shell test -d $<-vendor && echo --frozen --offline || echo --locked)
+
+CARGO_INSTALL = $(CARGO) install $(CARGO_INSTALL_ARGS)
+
+CARGOC_INSTALL = export TARGET_CC=$(CC) && export TARGET_AR=$(AR) && \
+	export TARGET_CFLAGS="$(CFLAGS)" && \
+	export RUSTFLAGS="-C lto -C panic=abort -C opt-level=z" && \
+	$(CARGO) capi install $(CARGO_INSTALL_ARGS)
+
+download_vendor = \
+	$(call download,$(CONTRIB_VIDEOLAN)/$(2)/$(1)) || (\
+               echo "" && \
+               echo "WARNING: cargo vendor archive for $(1) not found" && \
+               echo "" && \
+               touch $@);
+
+# Extract and move the vendor archive if the checksum is valid. Succeed even in
+# case of error (download or checksum failed). In that case, the cargo-vendor
+# archive won't be used (crates.io will be used directly).
+.%-vendor: $(SRC)/%-vendor/SHA512SUMS
+	$(RM) -R $(patsubst .%,%,$@)
+	-$(call checksum,$(SHA512SUM),SHA512,.) \
+		$(foreach f,$(filter %.tar.bz2,$^), && tar xvjfo $(f) && \
+		  mv $(patsubst %.tar.bz2,%,$(notdir $(f))) $(patsubst .%,%,$@))
+	touch $@
+
+CARGO_VENDOR_SETUP = \
+	if test -d $@-vendor; then \
+		mkdir -p $(UNPACK_DIR)/.cargo; \
+		echo "[source.crates-io]" > $(UNPACK_DIR)/.cargo/config.toml; \
+		echo "replace-with = \"vendored-sources\"" >> $(UNPACK_DIR)/.cargo/config.toml; \
+		echo "[source.vendored-sources]" >> $(UNPACK_DIR)/.cargo/config.toml; \
+		echo "directory = \"../$@-vendor\"" >> $(UNPACK_DIR)/.cargo/config.toml; \
+		echo "Using cargo vendor archive for $(UNPACK_DIR)"; \
+	fi;



More information about the vlc-commits mailing list