All of lore.kernel.org
 help / color / mirror / Atom feed
* [Buildroot] [PATCH 1/1] pkg-rust: new infrastructure
@ 2021-06-10  2:06 James Hilliard
  2021-06-10 20:11 ` [Buildroot] [External] " Voss, Samuel M Collins
  2022-01-06 21:09 ` [Buildroot] " Thomas Petazzoni
  0 siblings, 2 replies; 5+ messages in thread
From: James Hilliard @ 2021-06-10  2:06 UTC (permalink / raw)
  To: buildroot

Add a new infrastructure to ease the development of packages that use
rust's cargo as their build system.

Signed-off-by: James Hilliard <james.hilliard1@gmail.com>
---
 package/Makefile.in |   1 +
 package/pkg-rust.mk | 113 ++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 114 insertions(+)
 create mode 100644 package/pkg-rust.mk

diff --git a/package/Makefile.in b/package/Makefile.in
index 955e6a8e8c..c4fb6a3cb1 100644
--- a/package/Makefile.in
+++ b/package/Makefile.in
@@ -434,3 +434,4 @@ include package/pkg-waf.mk
 include package/pkg-golang.mk
 include package/pkg-meson.mk
 include package/pkg-qmake.mk
+include package/pkg-rust.mk
diff --git a/package/pkg-rust.mk b/package/pkg-rust.mk
new file mode 100644
index 0000000000..3906fc12b4
--- /dev/null
+++ b/package/pkg-rust.mk
@@ -0,0 +1,113 @@
+################################################################################
+# Rust package infrastructure
+#
+# This file implements an infrastructure that eases development of
+# package .mk files for Rust packages. It should be used for all
+# packages that use Rust as their build system.
+#
+# See the Buildroot documentation for details on the usage of this
+# infrastructure
+#
+# In terms of implementation, this Rust infrastructure requires
+# the .mk file to only specify metadata information about the
+# package: name, version, download URL, etc.
+#
+# We still allow the package .mk file to override what the different
+# steps are doing, if needed. For example, if <PKG>_BUILD_CMDS is
+# already defined, it is used as the list of commands to perform to
+# build the package, instead of the default Rust behaviour. The
+# package can also define some post operation hooks.
+#
+################################################################################
+
+CARGO = $(HOST_DIR)/bin/cargo
+
+RUSTC_TARGET_TRIPLE = $(subst -,_,$(call UPPERCASE,$(RUSTC_TARGET_NAME)))
+
+PKG_RUST_CARGO_ENV = \
+	CARGO_HOME=$(HOST_DIR)/share/cargo \
+	CARGO_BUILD_TARGET=$(RUSTC_TARGET_NAME) \
+	CARGO_INSTALL_ROOT=$(TARGET_DIR)/usr \
+	CARGO_TARGET_$(RUSTC_TARGET_TRIPLE)_LINKER=$(notdir $(TARGET_CROSS))gcc
+
+HOST_PKG_RUST_CARGO_ENV = \
+	CARGO_HOME=$(HOST_DIR)/share/cargo \
+	CARGO_INSTALL_ROOT=$(HOST_DIR) \
+	RUSTFLAGS="$(addprefix -C link-args=,$(HOST_LDFLAGS))"
+
+ifeq ($(BR2_ENABLE_RUNTIME_DEBUG),y)
+PKG_RUST_CARGO_OPTS = --debug
+else
+PKG_RUST_CARGO_OPTS = --release
+endif
+
+################################################################################
+# inner-rust-package -- defines how the configuration, compilation and
+# installation of a Rust package should be done, implements a few hooks to
+# tune the build process and calls the generic package infrastructure to
+# generate the necessary make targets
+#
+#  argument 1 is the lowercase package name
+#  argument 2 is the uppercase package name, including a HOST_ prefix
+#             for host packages
+#  argument 3 is the uppercase package name, without the HOST_ prefix
+#             for host packages
+#  argument 4 is the type (target or host)
+################################################################################
+
+define inner-rust-package
+
+$(2)_DEPENDENCIES += host-rustc
+
+#
+# Build step. Only define it if not already defined by the package .mk
+# file.
+#
+ifndef $(2)_BUILD_CMDS
+ifeq ($(4),target)
+define $(2)_BUILD_CMDS
+	$$(TARGET_MAKE_ENV) $$(PKG_RUST_CARGO_ENV) \
+		$$(CARGO) build $$(PKG_RUST_CARGO_OPTS) $$($$(PKG)_RUST_CARGO_OPTS) --manifest-path=$$($$(PKG)_BUILDDIR)/Cargo.toml
+endef
+else
+define $(2)_BUILD_CMDS
+	$$(HOST_MAKE_ENV) $$(HOST_PKG_RUST_CARGO_ENV) \
+		$$(CARGO) build $$(PKG_RUST_CARGO_OPTS) $$($$(PKG)_RUST_CARGO_OPTS) --manifest-path=$$($$(PKG)_BUILDDIR)/Cargo.toml
+endef
+endif
+endif
+
+#
+# Host installation step. Only define it if not already defined by the
+# package .mk file.
+#
+ifndef $(2)_INSTALL_CMDS
+define $(2)_INSTALL_CMDS
+	$$(HOST_MAKE_ENV) $$(HOST_PKG_RUST_CARGO_ENV) \
+		$$(CARGO) install --offline --frozen --path $$($$(PKG)_BUILDDIR)
+endef
+endif
+
+#
+# Target installation step. Only define it if not already defined by
+# the package .mk file.
+#
+ifndef $(2)_INSTALL_TARGET_CMDS
+define $(2)_INSTALL_TARGET_CMDS
+	$$(TARGET_MAKE_ENV) $$(PKG_RUST_CARGO_ENV) \
+		$$(CARGO) install --offline --frozen --path $$($$(PKG)_BUILDDIR)
+endef
+endif
+
+# Call the generic package infrastructure to generate the necessary
+# make targets
+$(call inner-generic-package,$(1),$(2),$(3),$(4))
+
+endef
+
+################################################################################
+# rust-package -- the target generator macro for Rust packages
+################################################################################
+
+rust-package = $(call inner-rust-package,$(pkgname),$(call UPPERCASE,$(pkgname)),$(call UPPERCASE,$(pkgname)),target)
+host-rust-package = $(call inner-rust-package,host-$(pkgname),$(call UPPERCASE,host-$(pkgname)),$(call UPPERCASE,$(pkgname)),host)
-- 
2.25.1

^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [Buildroot] [External] [PATCH 1/1] pkg-rust: new infrastructure
  2021-06-10  2:06 [Buildroot] [PATCH 1/1] pkg-rust: new infrastructure James Hilliard
@ 2021-06-10 20:11 ` Voss, Samuel M Collins
  2021-06-12 18:37   ` James Hilliard
  2022-01-06 21:09 ` [Buildroot] " Thomas Petazzoni
  1 sibling, 1 reply; 5+ messages in thread
From: Voss, Samuel M Collins @ 2021-06-10 20:11 UTC (permalink / raw)
  To: buildroot

Hi James,

>-----Original Message-----
>From: buildroot <buildroot-bounces@busybox.net> On Behalf Of James Hilliard
>Sent: Wednesday, June 09, 2021 9:07 PM
>To: buildroot at buildroot.org
>Cc: James Hilliard <james.hilliard1@gmail.com>
>Subject: [External] [Buildroot] [PATCH 1/1] pkg-rust: new infrastructure
>
>Add a new infrastructure to ease the development of packages that use
>rust's cargo as their build system.

Thanks for digging into this, great to see more interest in bringing rust into the ecosystem. There has been some previous efforts[1] which are in differing levels of readiness.

You may wish to look into these, as I believe there is some overlap between the patch sets. I linked the latest, but there are more to be found too.

Sam

1: http://patchwork.ozlabs.org/project/buildroot/list/?series=221371&state=*

>
>Signed-off-by: James Hilliard <james.hilliard1@gmail.com>
>---
> package/Makefile.in |   1 +
> package/pkg-rust.mk | 113 ++++++++++++++++++++++++++++++++++++++++++++
> 2 files changed, 114 insertions(+)
> create mode 100644 package/pkg-rust.mk
>
>diff --git a/package/Makefile.in b/package/Makefile.in
>index 955e6a8e8c..c4fb6a3cb1 100644
>--- a/package/Makefile.in
>+++ b/package/Makefile.in
>@@ -434,3 +434,4 @@ include package/pkg-waf.mk
> include package/pkg-golang.mk
> include package/pkg-meson.mk
> include package/pkg-qmake.mk
>+include package/pkg-rust.mk
>diff --git a/package/pkg-rust.mk b/package/pkg-rust.mk
>new file mode 100644
>index 0000000000..3906fc12b4
>--- /dev/null
>+++ b/package/pkg-rust.mk
>@@ -0,0 +1,113 @@
>+################################################################################
>+# Rust package infrastructure
>+#
>+# This file implements an infrastructure that eases development of
>+# package .mk files for Rust packages. It should be used for all
>+# packages that use Rust as their build system.
>+#
>+# See the Buildroot documentation for details on the usage of this
>+# infrastructure
>+#
>+# In terms of implementation, this Rust infrastructure requires
>+# the .mk file to only specify metadata information about the
>+# package: name, version, download URL, etc.
>+#
>+# We still allow the package .mk file to override what the different
>+# steps are doing, if needed. For example, if <PKG>_BUILD_CMDS is
>+# already defined, it is used as the list of commands to perform to
>+# build the package, instead of the default Rust behaviour. The
>+# package can also define some post operation hooks.
>+#
>+################################################################################
>+
>+CARGO = $(HOST_DIR)/bin/cargo
>+
>+RUSTC_TARGET_TRIPLE = $(subst -,_,$(call UPPERCASE,$(RUSTC_TARGET_NAME)))
>+
>+PKG_RUST_CARGO_ENV = \
>+??????CARGO_HOME=$(HOST_DIR)/share/cargo \
>+??????CARGO_BUILD_TARGET=$(RUSTC_TARGET_NAME) \
>+??????CARGO_INSTALL_ROOT=$(TARGET_DIR)/usr \
>+??????CARGO_TARGET_$(RUSTC_TARGET_TRIPLE)_LINKER=$(notdir $(TARGET_CROSS))gcc
>+
>+HOST_PKG_RUST_CARGO_ENV = \
>+??????CARGO_HOME=$(HOST_DIR)/share/cargo \
>+??????CARGO_INSTALL_ROOT=$(HOST_DIR) \
>+??????RUSTFLAGS="$(addprefix -C link-args=,$(HOST_LDFLAGS))"
>+
>+ifeq ($(BR2_ENABLE_RUNTIME_DEBUG),y)
>+PKG_RUST_CARGO_OPTS = --debug
>+else
>+PKG_RUST_CARGO_OPTS = --release
>+endif
>+
>+################################################################################
>+# inner-rust-package -- defines how the configuration, compilation and
>+# installation of a Rust package should be done, implements a few hooks to
>+# tune the build process and calls the generic package infrastructure to
>+# generate the necessary make targets
>+#
>+#  argument 1 is the lowercase package name
>+#  argument 2 is the uppercase package name, including a HOST_ prefix
>+#             for host packages
>+#  argument 3 is the uppercase package name, without the HOST_ prefix
>+#             for host packages
>+#  argument 4 is the type (target or host)
>+################################################################################
>+
>+define inner-rust-package
>+
>+$(2)_DEPENDENCIES += host-rustc
>+
>+#
>+# Build step. Only define it if not already defined by the package .mk
>+# file.
>+#
>+ifndef $(2)_BUILD_CMDS
>+ifeq ($(4),target)
>+define $(2)_BUILD_CMDS
>+??????$$(TARGET_MAKE_ENV) $$(PKG_RUST_CARGO_ENV) \
>+??????????????$$(CARGO) build $$(PKG_RUST_CARGO_OPTS) $$($$(PKG)_RUST_CARGO_OPTS) --manifest-path=$$($$(PKG)_BUILDDIR)/Cargo.toml
>+endef
>+else
>+define $(2)_BUILD_CMDS
>+??????$$(HOST_MAKE_ENV) $$(HOST_PKG_RUST_CARGO_ENV) \
>+??????????????$$(CARGO) build $$(PKG_RUST_CARGO_OPTS) $$($$(PKG)_RUST_CARGO_OPTS) --manifest-path=$$($$(PKG)_BUILDDIR)/Cargo.toml
>+endef
>+endif
>+endif
>+
>+#
>+# Host installation step. Only define it if not already defined by the
>+# package .mk file.
>+#
>+ifndef $(2)_INSTALL_CMDS
>+define $(2)_INSTALL_CMDS
>+??????$$(HOST_MAKE_ENV) $$(HOST_PKG_RUST_CARGO_ENV) \
>+??????????????$$(CARGO) install --offline --frozen --path $$($$(PKG)_BUILDDIR)
>+endef
>+endif
>+
>+#
>+# Target installation step. Only define it if not already defined by
>+# the package .mk file.
>+#
>+ifndef $(2)_INSTALL_TARGET_CMDS
>+define $(2)_INSTALL_TARGET_CMDS
>+??????$$(TARGET_MAKE_ENV) $$(PKG_RUST_CARGO_ENV) \
>+??????????????$$(CARGO) install --offline --frozen --path $$($$(PKG)_BUILDDIR)
>+endef
>+endif
>+
>+# Call the generic package infrastructure to generate the necessary
>+# make targets
>+$(call inner-generic-package,$(1),$(2),$(3),$(4))
>+
>+endef
>+
>+################################################################################
>+# rust-package -- the target generator macro for Rust packages
>+################################################################################
>+
>+rust-package = $(call inner-rust-package,$(pkgname),$(call UPPERCASE,$(pkgname)),$(call UPPERCASE,$(pkgname)),target)
>+host-rust-package = $(call inner-rust-package,host-$(pkgname),$(call UPPERCASE,host-$(pkgname)),$(call UPPERCASE,$(pkgname)),host)
>--
>2.25.1
>
>_______________________________________________
>buildroot mailing list
>buildroot at busybox.net
>https://urldefense.com/v3/__http://lists.busybox.net/mailman/listinfo/buildroot__;!!MvWE!QexAynmm9OiOcSWKCv_ttzGuz9LcnLCGjz_R7rvmHVags54BwN2Zs8i4d7t2LN4$
> 

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [Buildroot] [External] [PATCH 1/1] pkg-rust: new infrastructure
  2021-06-10 20:11 ` [Buildroot] [External] " Voss, Samuel M Collins
@ 2021-06-12 18:37   ` James Hilliard
  2021-06-12 19:23     ` Juergen Stuber
  0 siblings, 1 reply; 5+ messages in thread
From: James Hilliard @ 2021-06-12 18:37 UTC (permalink / raw)
  To: buildroot

On Thu, Jun 10, 2021 at 2:11 PM Voss, Samuel M Collins
<sam.voss@collins.com> wrote:
>
> Hi James,
>
> >-----Original Message-----
> >From: buildroot <buildroot-bounces@busybox.net> On Behalf Of James Hilliard
> >Sent: Wednesday, June 09, 2021 9:07 PM
> >To: buildroot at buildroot.org
> >Cc: James Hilliard <james.hilliard1@gmail.com>
> >Subject: [External] [Buildroot] [PATCH 1/1] pkg-rust: new infrastructure
> >
> >Add a new infrastructure to ease the development of packages that use
> >rust's cargo as their build system.
>
> Thanks for digging into this, great to see more interest in bringing rust into the ecosystem. There has been some previous efforts[1] which are in differing levels of readiness.
>
> You may wish to look into these, as I believe there is some overlap between the patch sets. I linked the latest, but there are more to be found too.

Yeah, probably best to get those merged first, I'll rebase this after,
I was mostly testing to see if just using env variables instead of a
cargo config file was a viable approach for configuring cargo
properly. From my understanding cargo can generally be configured with
env variables alone.

>
> Sam
>
> 1: http://patchwork.ozlabs.org/project/buildroot/list/?series=221371&state=*
>
> >
> >Signed-off-by: James Hilliard <james.hilliard1@gmail.com>
> >---
> > package/Makefile.in |   1 +
> > package/pkg-rust.mk | 113 ++++++++++++++++++++++++++++++++++++++++++++
> > 2 files changed, 114 insertions(+)
> > create mode 100644 package/pkg-rust.mk
> >
> >diff --git a/package/Makefile.in b/package/Makefile.in
> >index 955e6a8e8c..c4fb6a3cb1 100644
> >--- a/package/Makefile.in
> >+++ b/package/Makefile.in
> >@@ -434,3 +434,4 @@ include package/pkg-waf.mk
> > include package/pkg-golang.mk
> > include package/pkg-meson.mk
> > include package/pkg-qmake.mk
> >+include package/pkg-rust.mk
> >diff --git a/package/pkg-rust.mk b/package/pkg-rust.mk
> >new file mode 100644
> >index 0000000000..3906fc12b4
> >--- /dev/null
> >+++ b/package/pkg-rust.mk
> >@@ -0,0 +1,113 @@
> >+################################################################################
> >+# Rust package infrastructure
> >+#
> >+# This file implements an infrastructure that eases development of
> >+# package .mk files for Rust packages. It should be used for all
> >+# packages that use Rust as their build system.
> >+#
> >+# See the Buildroot documentation for details on the usage of this
> >+# infrastructure
> >+#
> >+# In terms of implementation, this Rust infrastructure requires
> >+# the .mk file to only specify metadata information about the
> >+# package: name, version, download URL, etc.
> >+#
> >+# We still allow the package .mk file to override what the different
> >+# steps are doing, if needed. For example, if <PKG>_BUILD_CMDS is
> >+# already defined, it is used as the list of commands to perform to
> >+# build the package, instead of the default Rust behaviour. The
> >+# package can also define some post operation hooks.
> >+#
> >+################################################################################
> >+
> >+CARGO = $(HOST_DIR)/bin/cargo
> >+
> >+RUSTC_TARGET_TRIPLE = $(subst -,_,$(call UPPERCASE,$(RUSTC_TARGET_NAME)))
> >+
> >+PKG_RUST_CARGO_ENV = \
> >+??????CARGO_HOME=$(HOST_DIR)/share/cargo \
> >+??????CARGO_BUILD_TARGET=$(RUSTC_TARGET_NAME) \
> >+??????CARGO_INSTALL_ROOT=$(TARGET_DIR)/usr \
> >+??????CARGO_TARGET_$(RUSTC_TARGET_TRIPLE)_LINKER=$(notdir $(TARGET_CROSS))gcc
> >+
> >+HOST_PKG_RUST_CARGO_ENV = \
> >+??????CARGO_HOME=$(HOST_DIR)/share/cargo \
> >+??????CARGO_INSTALL_ROOT=$(HOST_DIR) \
> >+??????RUSTFLAGS="$(addprefix -C link-args=,$(HOST_LDFLAGS))"
> >+
> >+ifeq ($(BR2_ENABLE_RUNTIME_DEBUG),y)
> >+PKG_RUST_CARGO_OPTS = --debug
> >+else
> >+PKG_RUST_CARGO_OPTS = --release
> >+endif
> >+
> >+################################################################################
> >+# inner-rust-package -- defines how the configuration, compilation and
> >+# installation of a Rust package should be done, implements a few hooks to
> >+# tune the build process and calls the generic package infrastructure to
> >+# generate the necessary make targets
> >+#
> >+#  argument 1 is the lowercase package name
> >+#  argument 2 is the uppercase package name, including a HOST_ prefix
> >+#             for host packages
> >+#  argument 3 is the uppercase package name, without the HOST_ prefix
> >+#             for host packages
> >+#  argument 4 is the type (target or host)
> >+################################################################################
> >+
> >+define inner-rust-package
> >+
> >+$(2)_DEPENDENCIES += host-rustc
> >+
> >+#
> >+# Build step. Only define it if not already defined by the package .mk
> >+# file.
> >+#
> >+ifndef $(2)_BUILD_CMDS
> >+ifeq ($(4),target)
> >+define $(2)_BUILD_CMDS
> >+??????$$(TARGET_MAKE_ENV) $$(PKG_RUST_CARGO_ENV) \
> >+??????????????$$(CARGO) build $$(PKG_RUST_CARGO_OPTS) $$($$(PKG)_RUST_CARGO_OPTS) --manifest-path=$$($$(PKG)_BUILDDIR)/Cargo.toml
> >+endef
> >+else
> >+define $(2)_BUILD_CMDS
> >+??????$$(HOST_MAKE_ENV) $$(HOST_PKG_RUST_CARGO_ENV) \
> >+??????????????$$(CARGO) build $$(PKG_RUST_CARGO_OPTS) $$($$(PKG)_RUST_CARGO_OPTS) --manifest-path=$$($$(PKG)_BUILDDIR)/Cargo.toml
> >+endef
> >+endif
> >+endif
> >+
> >+#
> >+# Host installation step. Only define it if not already defined by the
> >+# package .mk file.
> >+#
> >+ifndef $(2)_INSTALL_CMDS
> >+define $(2)_INSTALL_CMDS
> >+??????$$(HOST_MAKE_ENV) $$(HOST_PKG_RUST_CARGO_ENV) \
> >+??????????????$$(CARGO) install --offline --frozen --path $$($$(PKG)_BUILDDIR)
> >+endef
> >+endif
> >+
> >+#
> >+# Target installation step. Only define it if not already defined by
> >+# the package .mk file.
> >+#
> >+ifndef $(2)_INSTALL_TARGET_CMDS
> >+define $(2)_INSTALL_TARGET_CMDS
> >+??????$$(TARGET_MAKE_ENV) $$(PKG_RUST_CARGO_ENV) \
> >+??????????????$$(CARGO) install --offline --frozen --path $$($$(PKG)_BUILDDIR)
> >+endef
> >+endif
> >+
> >+# Call the generic package infrastructure to generate the necessary
> >+# make targets
> >+$(call inner-generic-package,$(1),$(2),$(3),$(4))
> >+
> >+endef
> >+
> >+################################################################################
> >+# rust-package -- the target generator macro for Rust packages
> >+################################################################################
> >+
> >+rust-package = $(call inner-rust-package,$(pkgname),$(call UPPERCASE,$(pkgname)),$(call UPPERCASE,$(pkgname)),target)
> >+host-rust-package = $(call inner-rust-package,host-$(pkgname),$(call UPPERCASE,host-$(pkgname)),$(call UPPERCASE,$(pkgname)),host)
> >--
> >2.25.1
> >
> >_______________________________________________
> >buildroot mailing list
> >buildroot at busybox.net
> >https://urldefense.com/v3/__http://lists.busybox.net/mailman/listinfo/buildroot__;!!MvWE!QexAynmm9OiOcSWKCv_ttzGuz9LcnLCGjz_R7rvmHVags54BwN2Zs8i4d7t2LN4$
> >

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [Buildroot] [External] [PATCH 1/1] pkg-rust: new infrastructure
  2021-06-12 18:37   ` James Hilliard
@ 2021-06-12 19:23     ` Juergen Stuber
  0 siblings, 0 replies; 5+ messages in thread
From: Juergen Stuber @ 2021-06-12 19:23 UTC (permalink / raw)
  To: buildroot

Hi James, all,

On Sat, 12 Jun 2021 12:37:29 -0600
James Hilliard <james.hilliard1@gmail.com> wrote:
> On Thu, Jun 10, 2021 at 2:11 PM Voss, Samuel M Collins
> <sam.voss@collins.com> wrote:
> >
> > Hi James,
> >  
> > >-----Original Message-----
> > >From: buildroot <buildroot-bounces@busybox.net> On Behalf Of James
> > >Hilliard Sent: Wednesday, June 09, 2021 9:07 PM
> > >To: buildroot at buildroot.org
> > >Cc: James Hilliard <james.hilliard1@gmail.com>
> > >Subject: [External] [Buildroot] [PATCH 1/1] pkg-rust: new
> > >infrastructure
> > >
> > >Add a new infrastructure to ease the development of packages that
> > >use rust's cargo as their build system.  
> >
> > Thanks for digging into this, great to see more interest in
> > bringing rust into the ecosystem. There has been some previous
> > efforts[1] which are in differing levels of readiness.
> >
> > You may wish to look into these, as I believe there is some overlap
> > between the patch sets. I linked the latest, but there are more to
> > be found too.  
> 
> Yeah, probably best to get those merged first, I'll rebase this after,
> I was mostly testing to see if just using env variables instead of a
> cargo config file was a viable approach for configuring cargo
> properly. From my understanding cargo can generally be configured with
> env variables alone.

The advantage of env variables is that they take precedence over config
files.  I had some trouble with a config file in my home directory that
specified a different linker, and was found before the buildroot one.


J?rgen


> >
> > Sam
> >
> > 1:
> > http://patchwork.ozlabs.org/project/buildroot/list/?series=221371&state=* 
> > >
> > >Signed-off-by: James Hilliard <james.hilliard1@gmail.com>
> > >---
> > > package/Makefile.in |   1 +
> > > package/pkg-rust.mk | 113
> > > ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 114
> > > insertions(+) create mode 100644 package/pkg-rust.mk
> > >
> > >diff --git a/package/Makefile.in b/package/Makefile.in
> > >index 955e6a8e8c..c4fb6a3cb1 100644
> > >--- a/package/Makefile.in
> > >+++ b/package/Makefile.in
> > >@@ -434,3 +434,4 @@ include package/pkg-waf.mk
> > > include package/pkg-golang.mk
> > > include package/pkg-meson.mk
> > > include package/pkg-qmake.mk
> > >+include package/pkg-rust.mk
> > >diff --git a/package/pkg-rust.mk b/package/pkg-rust.mk
> > >new file mode 100644
> > >index 0000000000..3906fc12b4
> > >--- /dev/null
> > >+++ b/package/pkg-rust.mk
> > >@@ -0,0 +1,113 @@
> > >+################################################################################
> > >+# Rust package infrastructure
> > >+#
> > >+# This file implements an infrastructure that eases development of
> > >+# package .mk files for Rust packages. It should be used for all
> > >+# packages that use Rust as their build system.
> > >+#
> > >+# See the Buildroot documentation for details on the usage of this
> > >+# infrastructure
> > >+#
> > >+# In terms of implementation, this Rust infrastructure requires
> > >+# the .mk file to only specify metadata information about the
> > >+# package: name, version, download URL, etc.
> > >+#
> > >+# We still allow the package .mk file to override what the
> > >different +# steps are doing, if needed. For example, if
> > ><PKG>_BUILD_CMDS is +# already defined, it is used as the list of
> > >commands to perform to +# build the package, instead of the
> > >default Rust behaviour. The +# package can also define some post
> > >operation hooks. +#
> > >+################################################################################
> > >+
> > >+CARGO = $(HOST_DIR)/bin/cargo
> > >+
> > >+RUSTC_TARGET_TRIPLE = $(subst -,_,$(call
> > >UPPERCASE,$(RUSTC_TARGET_NAME))) +
> > >+PKG_RUST_CARGO_ENV = \
> > >+??????CARGO_HOME=$(HOST_DIR)/share/cargo \
> > >+??????CARGO_BUILD_TARGET=$(RUSTC_TARGET_NAME) \
> > >+??????CARGO_INSTALL_ROOT=$(TARGET_DIR)/usr \
> > >+??????CARGO_TARGET_$(RUSTC_TARGET_TRIPLE)_LINKER=$(notdir
> > >$(TARGET_CROSS))gcc +
> > >+HOST_PKG_RUST_CARGO_ENV = \
> > >+??????CARGO_HOME=$(HOST_DIR)/share/cargo \
> > >+??????CARGO_INSTALL_ROOT=$(HOST_DIR) \
> > >+??????RUSTFLAGS="$(addprefix -C link-args=,$(HOST_LDFLAGS))"
> > >+
> > >+ifeq ($(BR2_ENABLE_RUNTIME_DEBUG),y)
> > >+PKG_RUST_CARGO_OPTS = --debug
> > >+else
> > >+PKG_RUST_CARGO_OPTS = --release
> > >+endif
> > >+
> > >+################################################################################
> > >+# inner-rust-package -- defines how the configuration,
> > >compilation and +# installation of a Rust package should be done,
> > >implements a few hooks to +# tune the build process and calls the
> > >generic package infrastructure to +# generate the necessary make
> > >targets +#
> > >+#  argument 1 is the lowercase package name
> > >+#  argument 2 is the uppercase package name, including a HOST_
> > >prefix +#             for host packages
> > >+#  argument 3 is the uppercase package name, without the HOST_
> > >prefix +#             for host packages
> > >+#  argument 4 is the type (target or host)
> > >+################################################################################
> > >+
> > >+define inner-rust-package
> > >+
> > >+$(2)_DEPENDENCIES += host-rustc
> > >+
> > >+#
> > >+# Build step. Only define it if not already defined by the
> > >package .mk +# file.
> > >+#
> > >+ifndef $(2)_BUILD_CMDS
> > >+ifeq ($(4),target)
> > >+define $(2)_BUILD_CMDS
> > >+??????$$(TARGET_MAKE_ENV) $$(PKG_RUST_CARGO_ENV) \
> > >+??????????????$$(CARGO) build $$(PKG_RUST_CARGO_OPTS)
> > >$$($$(PKG)_RUST_CARGO_OPTS)
> > >--manifest-path=$$($$(PKG)_BUILDDIR)/Cargo.toml +endef +else
> > >+define $(2)_BUILD_CMDS
> > >+??????$$(HOST_MAKE_ENV) $$(HOST_PKG_RUST_CARGO_ENV) \
> > >+??????????????$$(CARGO) build $$(PKG_RUST_CARGO_OPTS)
> > >$$($$(PKG)_RUST_CARGO_OPTS)
> > >--manifest-path=$$($$(PKG)_BUILDDIR)/Cargo.toml +endef +endif
> > >+endif
> > >+
> > >+#
> > >+# Host installation step. Only define it if not already defined
> > >by the +# package .mk file.
> > >+#
> > >+ifndef $(2)_INSTALL_CMDS
> > >+define $(2)_INSTALL_CMDS
> > >+??????$$(HOST_MAKE_ENV) $$(HOST_PKG_RUST_CARGO_ENV) \
> > >+??????????????$$(CARGO) install --offline --frozen --path
> > >$$($$(PKG)_BUILDDIR) +endef
> > >+endif
> > >+
> > >+#
> > >+# Target installation step. Only define it if not already defined
> > >by +# the package .mk file.
> > >+#
> > >+ifndef $(2)_INSTALL_TARGET_CMDS
> > >+define $(2)_INSTALL_TARGET_CMDS
> > >+??????$$(TARGET_MAKE_ENV) $$(PKG_RUST_CARGO_ENV) \
> > >+??????????????$$(CARGO) install --offline --frozen --path
> > >$$($$(PKG)_BUILDDIR) +endef
> > >+endif
> > >+
> > >+# Call the generic package infrastructure to generate the
> > >necessary +# make targets
> > >+$(call inner-generic-package,$(1),$(2),$(3),$(4))
> > >+
> > >+endef
> > >+
> > >+################################################################################
> > >+# rust-package -- the target generator macro for Rust packages
> > >+################################################################################
> > >+
> > >+rust-package = $(call inner-rust-package,$(pkgname),$(call
> > >UPPERCASE,$(pkgname)),$(call UPPERCASE,$(pkgname)),target)
> > >+host-rust-package = $(call
> > >inner-rust-package,host-$(pkgname),$(call
> > >UPPERCASE,host-$(pkgname)),$(call UPPERCASE,$(pkgname)),host) --
> > >2.25.1

-- 
J?rgen Stuber <juergen@jstuber.net>
http://www.jstuber.net/
Tel: +49-208-304 20 50
Mobil: +49-178-39 39 628
1B78 A579 E159 2A85 67BB  1314 C083 224B 0F9C DA21

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [Buildroot] [PATCH 1/1] pkg-rust: new infrastructure
  2021-06-10  2:06 [Buildroot] [PATCH 1/1] pkg-rust: new infrastructure James Hilliard
  2021-06-10 20:11 ` [Buildroot] [External] " Voss, Samuel M Collins
@ 2022-01-06 21:09 ` Thomas Petazzoni
  1 sibling, 0 replies; 5+ messages in thread
From: Thomas Petazzoni @ 2022-01-06 21:09 UTC (permalink / raw)
  To: James Hilliard; +Cc: buildroot

Hello James,

On Wed,  9 Jun 2021 20:06:32 -0600
James Hilliard <james.hilliard1@gmail.com> wrote:

> Add a new infrastructure to ease the development of packages that use
> rust's cargo as their build system.
> 
> Signed-off-by: James Hilliard <james.hilliard1@gmail.com>
> ---
>  package/Makefile.in |   1 +
>  package/pkg-rust.mk | 113 ++++++++++++++++++++++++++++++++++++++++++++
>  2 files changed, 114 insertions(+)
>  create mode 100644 package/pkg-rust.mk

I have re-submitted a new version of the Cargo package infrastructure,
which I had submitted a long time ago. I think it's very close to what
you have done, but also supports vendoring thanks to additional logic,
also shared with the Go package infrastructure.

Could you have a look at the series I just posted?

Thanks!

Thomas
-- 
Thomas Petazzoni, CTO, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2022-01-06 21:09 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-06-10  2:06 [Buildroot] [PATCH 1/1] pkg-rust: new infrastructure James Hilliard
2021-06-10 20:11 ` [Buildroot] [External] " Voss, Samuel M Collins
2021-06-12 18:37   ` James Hilliard
2021-06-12 19:23     ` Juergen Stuber
2022-01-06 21:09 ` [Buildroot] " Thomas Petazzoni

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.