* [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 a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox