aboutsummaryrefslogtreecommitdiff
path: root/Mk/Uses/cargo.mk
diff options
context:
space:
mode:
Diffstat (limited to 'Mk/Uses/cargo.mk')
-rw-r--r--Mk/Uses/cargo.mk48
1 files changed, 31 insertions, 17 deletions
diff --git a/Mk/Uses/cargo.mk b/Mk/Uses/cargo.mk
index 92a0f4b45c88..c4ef05268ef6 100644
--- a/Mk/Uses/cargo.mk
+++ b/Mk/Uses/cargo.mk
@@ -25,12 +25,24 @@ CARGO_CRATES?=
# features by passing it to cargo build/install/test.
CARGO_FEATURES?=
+# The subdirectory in the source tree where the cargo project
+# is located. By default the whole project is in Rust, but
+# the Rust part can be at any location.
+# Multiple Rust subprojects are not yet supported.
+CARGO_SRC_SUBDIR?=
+
+# Is the Rust project top-level?
+CARGO_RUST_TOPLEVEL= ${CARGO_SRC_SUBDIR:C/^.+$/no/:C/^$/yes/}
+
+# WRKSRC of the Rust project.
+CARGO_WRKSRC= ${WRKSRC}/${CARGO_SRC_SUBDIR}
+
# Name of the local directory for vendoring crates.
-CARGO_VENDOR_DIR?= ${WRKSRC}/cargo-crates
+CARGO_VENDOR_DIR?= ${CARGO_WRKSRC}/cargo-crates
# Default path for cargo manifest.
-CARGO_CARGOTOML?= ${WRKSRC}/Cargo.toml
-CARGO_CARGOLOCK?= ${WRKSRC}/Cargo.lock
+CARGO_CARGOTOML?= ${CARGO_WRKSRC}/Cargo.toml
+CARGO_CARGOLOCK?= ${CARGO_WRKSRC}/Cargo.lock
# Save crates inside ${DISTDIR}/rust/crates by default.
CARGO_DIST_SUBDIR?= rust/crates
@@ -69,7 +81,7 @@ WRKSRC_crate_${_crate}= ${CARGO_VENDOR_DIR}/${_crate}
_CARGO_AWK= ${AWK} -vCP="${CP}" -vFIND="${FIND}" -vGREP="${GREP}" \
-vCARGO_VENDOR_DIR="${CARGO_VENDOR_DIR}" \
-vGIT_SOURCES="${_CARGO_GIT_SOURCES}" \
- -vWRKDIR="${WRKDIR}" -vWRKSRC="${WRKSRC}" \
+ -vWRKDIR="${WRKDIR}" -vWRKSRC="${CARGO_WRKSRC}" \
-f${SCRIPTSDIR}/split-url.awk \
-f${SCRIPTSDIR}/cargo-crates-git-common.awk -f
@@ -97,7 +109,7 @@ WRKSRC_crate_${_crate}= ${WRKDIR}/${_wrksrc}
CARGO_BUILDDEP?= yes
. if ${CARGO_BUILDDEP:tl} == "yes"
-BUILD_DEPENDS+= ${RUST_DEFAULT}>=1.89.0:lang/${RUST_DEFAULT}
+BUILD_DEPENDS+= ${RUST_DEFAULT}>=1.90.0:lang/${RUST_DEFAULT}
. elif ${CARGO_BUILDDEP:tl} == "any-version"
BUILD_DEPENDS+= ${RUST_DEFAULT}>=0:lang/${RUST_DEFAULT}
. endif
@@ -152,7 +164,7 @@ RUSTFLAGS+= ${CFLAGS:M-mcpu=*:S/-mcpu=/-C target-cpu=/}
# Helper to shorten cargo calls.
_CARGO_RUN= ${SETENVI} ${WRK_ENV} ${MAKE_ENV} ${CARGO_ENV} ${CARGO}
-CARGO_CARGO_RUN= cd ${WRKSRC}; ${SETENVI} ${WRK_ENV} ${MAKE_ENV} ${CARGO_ENV} \
+CARGO_CARGO_RUN= cd ${CARGO_WRKSRC} && ${SETENVI} ${WRK_ENV} ${MAKE_ENV} ${CARGO_ENV} \
CARGO_FREEBSD_PORTS_SKIP_GIT_UPDATE=1 ${CARGO}
# User arguments for cargo targets.
@@ -163,10 +175,10 @@ CARGO_TEST_ARGS?=
CARGO_UPDATE_ARGS?=
# Use module targets ?
-CARGO_BUILD?= yes
+CARGO_BUILD?= ${CARGO_RUST_TOPLEVEL}
CARGO_CONFIGURE?= yes
-CARGO_INSTALL?= yes
-CARGO_TEST?= yes
+CARGO_INSTALL?= ${CARGO_RUST_TOPLEVEL}
+CARGO_TEST?= ${CARGO_RUST_TOPLEVEL}
# rustc stashes intermediary files in TMPDIR (default /tmp) which
# might cause issues for users that for some reason space limit
@@ -292,6 +304,8 @@ cargo-extract:
. if ${CARGO_CONFIGURE:tl} == "yes"
_USES_configure+= 250:cargo-configure
+CARGO_DOT_DIR= ${WRKSRC}/${CARGO_SRC_SUBDIR}/../.cargo
+
# configure hook. Place a config file for overriding crates-io index
# by local source directory.
cargo-configure:
@@ -302,17 +316,17 @@ cargo-configure:
@${ECHO_MSG} ${_CARGO_MSG}
. endif
@${ECHO_MSG} "===> Cargo config:"
- @${MKDIR} ${WRKDIR}/.cargo
- @: > ${WRKDIR}/.cargo/config.toml
- @${ECHO_CMD} "[source.cargo]" >> ${WRKDIR}/.cargo/config.toml
- @${ECHO_CMD} "directory = '${CARGO_VENDOR_DIR}'" >> ${WRKDIR}/.cargo/config.toml
- @${ECHO_CMD} "[source.crates-io]" >> ${WRKDIR}/.cargo/config.toml
- @${ECHO_CMD} "replace-with = 'cargo'" >> ${WRKDIR}/.cargo/config.toml
+ @${MKDIR} ${CARGO_DOT_DIR}
+ @: > ${CARGO_DOT_DIR}/config.toml
+ @${ECHO_CMD} "[source.cargo]" >> ${CARGO_DOT_DIR}/config.toml
+ @${ECHO_CMD} "directory = '${CARGO_VENDOR_DIR}'" >> ${CARGO_DOT_DIR}/config.toml
+ @${ECHO_CMD} "[source.crates-io]" >> ${CARGO_DOT_DIR}/config.toml
+ @${ECHO_CMD} "replace-with = 'cargo'" >> ${CARGO_DOT_DIR}/config.toml
. if !empty(_CARGO_GIT_SOURCES)
@${_CARGO_AWK} ${SCRIPTSDIR}/cargo-crates-git-configure.awk \
- /dev/null >> ${WRKDIR}/.cargo/config.toml
+ /dev/null >> ${CARGO_DOT_DIR}/config.toml
. endif
- @${CAT} ${WRKDIR}/.cargo/config.toml
+ @${CAT} ${CARGO_DOT_DIR}/config.toml
@if ! ${GREP} -qF '[profile.release]' ${CARGO_CARGOTOML}; then \
${ECHO_CMD} "" >> ${CARGO_CARGOTOML}; \
${ECHO_CMD} "[profile.release]" >> ${CARGO_CARGOTOML}; \