package/pkg-cargo: allow building in a sub-directory

Some packages have their rust sources as a sub-directory, rather
than at the root of the source tree.

Do like we do for autotools-package, and use the package's _SRCDIR
rather than the top-level directory $(@D).

Additionally, in such a situation, it is more than probable that
the Cargo.toml is also present in that sub-directory, so use that
when vendoring the package.

Signed-off-by: Yann E. MORIN <yann.morin@orange.com>
Cc: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
This commit is contained in:
Yann E. MORIN 2022-02-10 16:29:25 +01:00 committed by Peter Korsgaard
parent 6d508d8e45
commit 6b59ed35a2
2 changed files with 14 additions and 4 deletions

View File

@ -73,6 +73,11 @@ A few additional variables, specific to the Cargo infrastructure, can
also be defined. Many of them are only useful in very specific cases, also be defined. Many of them are only useful in very specific cases,
typical packages will therefore only use a few of them. typical packages will therefore only use a few of them.
* +FOO_SUBDIR+ may contain the name of a subdirectory inside the package
that contains the Cargo.toml file. This is useful, if for example, it
is not at the root of the tree extracted by the tarball. If
+HOST_FOO_SUBDIR+ is not specified, it defaults to +FOO_SUBDIR+.
* +FOO_CARGO_ENV+ can be used to pass additional variables in the * +FOO_CARGO_ENV+ can be used to pass additional variables in the
environment of +cargo+ invocations. It used at both build and environment of +cargo+ invocations. It used at both build and
installation time installation time

View File

@ -71,6 +71,11 @@ $(2)_DOWNLOAD_DEPENDENCIES += host-rustc
$(2)_DOWNLOAD_POST_PROCESS = cargo $(2)_DOWNLOAD_POST_PROCESS = cargo
$(2)_DL_ENV += CARGO_HOME=$$(HOST_DIR)/share/cargo $(2)_DL_ENV += CARGO_HOME=$$(HOST_DIR)/share/cargo
# If building in a sub directory, use that to find the Cargo.toml
ifneq ($$($(2)_SUBDIR),)
$(2)_DL_ENV += BR_CARGO_MANIFEST_PATH=$$($(2)_SUBDIR)/Cargo.toml
endif
# Due to vendoring, it is pretty likely that not all licenses are # Due to vendoring, it is pretty likely that not all licenses are
# listed in <pkg>_LICENSE. # listed in <pkg>_LICENSE.
$(2)_LICENSE += , vendored dependencies licenses probably not listed $(2)_LICENSE += , vendored dependencies licenses probably not listed
@ -97,7 +102,7 @@ $(2)_LICENSE += , vendored dependencies licenses probably not listed
ifndef $(2)_BUILD_CMDS ifndef $(2)_BUILD_CMDS
ifeq ($(4),target) ifeq ($(4),target)
define $(2)_BUILD_CMDS define $(2)_BUILD_CMDS
cd $$(@D) && \ cd $$($$(PKG)_SRCDIR) && \
$$(TARGET_MAKE_ENV) \ $$(TARGET_MAKE_ENV) \
$$(TARGET_CONFIGURE_OPTS) \ $$(TARGET_CONFIGURE_OPTS) \
$$(PKG_CARGO_ENV) \ $$(PKG_CARGO_ENV) \
@ -111,7 +116,7 @@ define $(2)_BUILD_CMDS
endef endef
else # ifeq ($(4),target) else # ifeq ($(4),target)
define $(2)_BUILD_CMDS define $(2)_BUILD_CMDS
cd $$(@D) && \ cd $$($$(PKG)_SRCDIR) && \
$$(HOST_MAKE_ENV) \ $$(HOST_MAKE_ENV) \
RUSTFLAGS="$$(addprefix -C link-args=,$$(HOST_LDFLAGS))" \ RUSTFLAGS="$$(addprefix -C link-args=,$$(HOST_LDFLAGS))" \
$$(HOST_CONFIGURE_OPTS) \ $$(HOST_CONFIGURE_OPTS) \
@ -133,7 +138,7 @@ endif # ifndef $(2)_BUILD_CMDS
# #
ifndef $(2)_INSTALL_TARGET_CMDS ifndef $(2)_INSTALL_TARGET_CMDS
define $(2)_INSTALL_TARGET_CMDS define $(2)_INSTALL_TARGET_CMDS
cd $$(@D) && \ cd $$($$(PKG)_SRCDIR) && \
$$(TARGET_MAKE_ENV) \ $$(TARGET_MAKE_ENV) \
$$(TARGET_CONFIGURE_OPTS) \ $$(TARGET_CONFIGURE_OPTS) \
$$(PKG_CARGO_ENV) \ $$(PKG_CARGO_ENV) \
@ -152,7 +157,7 @@ endif
ifndef $(2)_INSTALL_CMDS ifndef $(2)_INSTALL_CMDS
define $(2)_INSTALL_CMDS define $(2)_INSTALL_CMDS
cd $$(@D) && \ cd $$($$(PKG)_SRCDIR) && \
$$(HOST_MAKE_ENV) \ $$(HOST_MAKE_ENV) \
RUSTFLAGS="$$(addprefix -C link-args=,$$(HOST_LDFLAGS))" \ RUSTFLAGS="$$(addprefix -C link-args=,$$(HOST_LDFLAGS))" \
$$(HOST_CONFIGURE_OPTS) \ $$(HOST_CONFIGURE_OPTS) \