2 # This file and its contents are supplied under the terms of the
3 # Common Development and Distribution License ("CDDL"), version 1.0.
4 # You may only use this file in accordance with the terms of version
7 # A full copy of the text of the CDDL should have accompanied this
8 # source. A copy of the CDDL is also available via the Internet at
9 # http://www.illumos.org/license/CDDL.
13 # Copyright 2024 Marcel Telka
19 # Cargo is the Rust package manager used to download, compile, and install Rust
20 # packages and their dependencies.
23 # Common Cargo home used as a cache for downloaded crates
24 CARGO_ARCHIVES ?
= $(USERLAND_ARCHIVES
)/.cargo
26 # The full path to the cargo binary. It lives in the rustc package.
27 CARGO
= /usr
/bin
/cargo
28 USERLAND_REQUIRED_PACKAGES
+= developer
/lang
/rustc
30 # Fetch all dependencies and vendor them locally
31 CARGO_VENDOR_DIR
= $(BUILD_DIR
)/cargo-vendor
32 COMPONENT_PREP_ACTION
+= [ -f
$(SOURCE_DIR
)/Cargo.toml
] || exit
1 ;
33 COMPONENT_PREP_ACTION
+= $(ENV
) CARGO_HOME
=$(CARGO_ARCHIVES
) \
34 $(CARGO
) fetch
--manifest-path
$(SOURCE_DIR
)/Cargo.toml || exit
1 ;
35 COMPONENT_PREP_ACTION
+= $(MKDIR
) $(SOURCE_DIR
)/.cargo
;
36 COMPONENT_PREP_ACTION
+= $(ENV
) CARGO_HOME
=$(CARGO_ARCHIVES
) \
37 $(CARGO
) vendor
--manifest-path
$(SOURCE_DIR
)/Cargo.toml \
38 --versioned-dirs
--offline
$(CARGO_VENDOR_DIR
) \
39 |
$(TEE
) $(SOURCE_DIR
)/.cargo
/config.toml
;
41 # Common cargo environment
42 CARGO_ENV
+= CARGO_HOME
=$(@D
)/.cargo
43 CARGO_ENV
+= PKG_CONFIG_PATH
="$(PKG_CONFIG_PATH)"
45 # Some tests fails with the default symlink cloney mode
49 COMPONENT_BUILD_CMD
= $(CARGO
) build
50 COMPONENT_BUILD_ARGS
+= --release
51 COMPONENT_BUILD_ARGS
+= --offline
52 COMPONENT_BUILD_ENV
+= $(CARGO_ENV
)
54 # https://www.illumos.org/issues/15767
58 COMPONENT_INSTALL_CMD
= $(CARGO
) install
59 COMPONENT_INSTALL_ARGS
+= --path .
60 COMPONENT_INSTALL_ARGS
+= --root
$(PROTOUSRDIR
)
61 COMPONENT_INSTALL_ARGS
+= --force
62 COMPONENT_INSTALL_ARGS
+= --no-track
63 COMPONENT_INSTALL_ARGS
+= --offline
64 COMPONENT_INSTALL_ARGS
+= --locked
65 COMPONENT_INSTALL_ENV
+= $(CARGO_ENV
)
68 COMPONENT_TEST_CMD
= $(CARGO
) test
69 COMPONENT_TEST_ARGS
+= --release
70 COMPONENT_TEST_ARGS
+= --offline
71 COMPONENT_TEST_TARGETS
=
72 COMPONENT_TEST_ENV
+= $(CARGO_ENV
)
75 COMPONENT_TEST_TRANSFORMS
+= "-e '0,/Finished/d'"
77 COMPONENT_TEST_TRANSFORMS
+= "-e 's/\(finished\) in [0-9]\{1,\}\.[0-9]\{2\}s\$$/\1/g'"
79 COMPONENT_TEST_TRANSFORMS
+= "| ( while true ; do \
80 $(GSED) -u -e '/^running [0-9]\{1,\} tests\$$/q1' && break ; \
81 $(GSED) -u -e '/^\$$/Q' | $(SORT) ; \
83 done ) | $(COMPONENT_TEST_TRANSFORMER) -e ''"
87 $(RM
) -r
$(SOURCE_DIR
) $(BUILD_DIR
)
90 USE_COMMON_RULES
= yes