All of lore.kernel.org
 help / color / mirror / Atom feed
* [Buildroot] [Patch v4 0/3] Add support for the Rust programming language
@ 2017-04-02 19:46 Eric Le Bihan
  2017-04-02 19:46 ` [Buildroot] [Patch v4 1/3] rust-bootstrap: new package Eric Le Bihan
                   ` (2 more replies)
  0 siblings, 3 replies; 21+ messages in thread
From: Eric Le Bihan @ 2017-04-02 19:46 UTC (permalink / raw)
  To: buildroot

This series adds support for the Rust programming language by providing a
package for the host variant of the Rust compiler, able to cross-compile code
for ARM, MIPS, PowerPC and x86_64 architectures.

As the Rust compiler is written in Rust and uses Cargo, the Rust package
manager, as build system, two additional packages are provided: rust-bootstrap
and cargo-bootstrap.

v3 -> v4:

 - bump rust to 1.16.0
 - bump rust-bootstrap to 1.15.1
 - add cargo-bootstrap
 - use built-in target specifications
 - drop external Python script to generate target specifications
 - enable support for PowerPC
 - expose host variant in menuconfig

v2 -> v3:

 - bump rust to 1.10.0
 - rework and bump rust-bootstrap to 1.9.0
 - host-rust requires at least GCC 4.7 because of LLVM (suggested by R. Naour)
 - rust requires a glibc-based cross-compiler
 - rust requires GCC 5.x or above for Aarch64

v1 -> v2:

 - bump rust to version 1.9.0.
 - drop patch for bzip2 support in host-python.
 - add package for jemalloc.
 - add dependency on host being a x86 machine.
 - add dependency on toolchain.
 - use dedicated package to provide bootstrapping binary: rust-bootstrap.
 - let ./configure find out host/build on its own.
 - remove entry from configuration menu.
 - clarify some comments.

Eric Le Bihan (3):
  rust-bootstrap: new package
  cargo-bootstrap: new package
  rust: new package

 DEVELOPERS                                   |  3 +
 package/Config.in.host                       |  1 +
 package/cargo-bootstrap/cargo-bootstrap.hash |  3 +
 package/cargo-bootstrap/cargo-bootstrap.mk   | 14 +++++
 package/rust-bootstrap/rust-bootstrap.hash   |  5 ++
 package/rust-bootstrap/rust-bootstrap.mk     | 37 ++++++++++++
 package/rust/Config.in.host                  | 33 +++++++++++
 package/rust/rust.hash                       |  2 +
 package/rust/rust.mk                         | 85 ++++++++++++++++++++++++++++
 9 files changed, 183 insertions(+)
 create mode 100644 package/cargo-bootstrap/cargo-bootstrap.hash
 create mode 100644 package/cargo-bootstrap/cargo-bootstrap.mk
 create mode 100644 package/rust-bootstrap/rust-bootstrap.hash
 create mode 100644 package/rust-bootstrap/rust-bootstrap.mk
 create mode 100644 package/rust/Config.in.host
 create mode 100644 package/rust/rust.hash
 create mode 100644 package/rust/rust.mk

--
2.9.3

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

* [Buildroot] [Patch v4 1/3] rust-bootstrap: new package
  2017-04-02 19:46 [Buildroot] [Patch v4 0/3] Add support for the Rust programming language Eric Le Bihan
@ 2017-04-02 19:46 ` Eric Le Bihan
  2017-04-07  7:03   ` Jörg Krause
  2017-04-02 19:46 ` [Buildroot] [Patch v4 2/3] cargo-bootstrap: " Eric Le Bihan
  2017-04-02 19:46 ` [Buildroot] [Patch v4 3/3] rust: " Eric Le Bihan
  2 siblings, 1 reply; 21+ messages in thread
From: Eric Le Bihan @ 2017-04-02 19:46 UTC (permalink / raw)
  To: buildroot

This new package fetches a binary snapshot of the Rust compiler,
suitable for the host, in order to bootstrap the Rust compiler.

Signed-off-by: Eric Le Bihan <eric.le.bihan.dev@free.fr>
---
 DEVELOPERS                                 |  1 +
 package/rust-bootstrap/rust-bootstrap.hash |  5 ++++
 package/rust-bootstrap/rust-bootstrap.mk   | 37 ++++++++++++++++++++++++++++++
 3 files changed, 43 insertions(+)
 create mode 100644 package/rust-bootstrap/rust-bootstrap.hash
 create mode 100644 package/rust-bootstrap/rust-bootstrap.mk

diff --git a/DEVELOPERS b/DEVELOPERS
index c89468b..863d5aa 100644
--- a/DEVELOPERS
+++ b/DEVELOPERS
@@ -448,6 +448,7 @@ F:	package/execline/
 F:	package/hicolor-icon-theme/
 F:	package/jemalloc/
 F:	package/ninja/
+F:	package/rust-bootstrap
 F:	package/s6/
 F:	package/s6-dns/
 F:	package/s6-linux-init/
diff --git a/package/rust-bootstrap/rust-bootstrap.hash b/package/rust-bootstrap/rust-bootstrap.hash
new file mode 100644
index 0000000..b418ea0
--- /dev/null
+++ b/package/rust-bootstrap/rust-bootstrap.hash
@@ -0,0 +1,5 @@
+# Locally calculated
+sha256 a833304f99071600c72ecd868c1c7bd5ce49d1102332637a8eb7adb942f349ab  rustc-1.15.1-i686-unknown-linux-gnu.tar.gz
+sha256 33ff44672b731fc71145974ce84194a1a9bafe6da3a74fd1e7543f12467f8894  rustc-1.15.1-x86_64-unknown-linux-gnu.tar.gz
+sha256 eff452a54b208a83b35432f226cb7de046d27b5e43edfc31d71ff340af686db0  rust-std-1.15.1-i686-unknown-linux-gnu.tar.gz
+sha256 69b251b478e284dfcaefc1153183f26f41d504ae213a81224f2101d8dbd52bb0  rust-std-1.15.1-x86_64-unknown-linux-gnu.tar.gz
diff --git a/package/rust-bootstrap/rust-bootstrap.mk b/package/rust-bootstrap/rust-bootstrap.mk
new file mode 100644
index 0000000..1098423
--- /dev/null
+++ b/package/rust-bootstrap/rust-bootstrap.mk
@@ -0,0 +1,37 @@
+################################################################################
+#
+# rust-bootstrap
+#
+################################################################################
+
+RUST_BOOTSTRAP_VERSION = 1.15.1
+RUST_BOOTSTRAP_DATE = 2017-02-09
+RUST_BOOTSTRAP_TRIPLE = $(RUST_BOOTSTRAP_ARCH)-unknown-linux-gnu
+RUST_BOOTSTRAP_LABEL = $(RUST_BOOTSTRAP_VERSION)-$(RUST_BOOTSTRAP_TRIPLE)
+
+ifeq ($(HOSTARCH),x86_64)
+RUST_BOOTSTRAP_ARCH = x86_64
+else ifeq ($(HOSTARCH),x86)
+RUST_BOOTSTRAP_ARCH = i686
+endif
+
+RUST_BOOTSTRAP_SITE = https://static.rust-lang.org/dist/$(RUST_BOOTSTRAP_DATE)
+
+RUST_BOOTSTRAP_SOURCE = rustc-$(RUST_BOOTSTRAP_LABEL).tar.gz
+RUST_BOOTSTRAP_LICENSE = Apache-2.0 or MIT
+RUST_BOOTSTRAP_LICENSE_FILES = LICENSE-APACHE LICENSE-MIT
+RUST_BOOTSTRAP_LIBSTD_SOURCE= rust-std-$(RUST_BOOTSTRAP_LABEL).tar.gz
+RUST_BOOTSTRAP_LIBSTD_ROOT = rust-std-$(RUST_BOOTSTRAP_LABEL)/rust-std-$(RUST_BOOTSTRAP_TRIPLE)
+RUST_BOOTSTRAP_EXTRA_DOWNLOADS = $(RUST_BOOTSTRAP_SITE)/$(RUST_BOOTSTRAP_LIBSTD_SOURCE)
+
+define RUST_BOOTSTRAP_LIBSTD_EXTRACT
+	$(call suitable-extractor,$(RUST_BOOTSTRAP_LIBSTD_SOURCE)) \
+		$(DL_DIR)/$(RUST_BOOTSTRAP_LIBSTD_SOURCE) | \
+		$(TAR) --strip-components=2 -C $(@D)/rustc $(TAR_OPTIONS) - \
+			$(RUST_BOOTSTRAP_LIBSTD_ROOT)/lib
+endef
+
+HOST_RUST_BOOTSTRAP_EXTRA_DOWNLOADS = $(RUST_BOOTSTRAP_EXTRA_DOWNLOADS)
+HOST_RUST_BOOTSTRAP_POST_EXTRACT_HOOKS += RUST_BOOTSTRAP_LIBSTD_EXTRACT
+
+$(eval $(host-generic-package))
-- 
2.9.3

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

* [Buildroot] [Patch v4 2/3] cargo-bootstrap: new package
  2017-04-02 19:46 [Buildroot] [Patch v4 0/3] Add support for the Rust programming language Eric Le Bihan
  2017-04-02 19:46 ` [Buildroot] [Patch v4 1/3] rust-bootstrap: new package Eric Le Bihan
@ 2017-04-02 19:46 ` Eric Le Bihan
  2017-04-07  7:06   ` Jörg Krause
  2017-04-02 19:46 ` [Buildroot] [Patch v4 3/3] rust: " Eric Le Bihan
  2 siblings, 1 reply; 21+ messages in thread
From: Eric Le Bihan @ 2017-04-02 19:46 UTC (permalink / raw)
  To: buildroot

This new package fetches a binary snapshot of Cargo, suitable for the
host, in order to bootstrap the Rust compiler and Cargo, the package
manager.

Signed-off-by: Eric Le Bihan <eric.le.bihan.dev@free.fr>
---
 DEVELOPERS                                   |  1 +
 package/cargo-bootstrap/cargo-bootstrap.hash |  3 +++
 package/cargo-bootstrap/cargo-bootstrap.mk   | 14 ++++++++++++++
 3 files changed, 18 insertions(+)
 create mode 100644 package/cargo-bootstrap/cargo-bootstrap.hash
 create mode 100644 package/cargo-bootstrap/cargo-bootstrap.mk

diff --git a/DEVELOPERS b/DEVELOPERS
index 863d5aa..1fed408 100644
--- a/DEVELOPERS
+++ b/DEVELOPERS
@@ -442,6 +442,7 @@ F:	package/xxhash/
 
 N:	Eric Le Bihan <eric.le.bihan.dev@free.fr>
 F:	package/adwaita-icon-theme/
+F:	package/cargo-bootstrap
 F:	package/darkhttpd/
 F:	package/eudev/
 F:	package/execline/
diff --git a/package/cargo-bootstrap/cargo-bootstrap.hash b/package/cargo-bootstrap/cargo-bootstrap.hash
new file mode 100644
index 0000000..b193c6f
--- /dev/null
+++ b/package/cargo-bootstrap/cargo-bootstrap.hash
@@ -0,0 +1,3 @@
+# Locally generated
+sha256 0655713cacab054e8e5a33e742081eebec8531a8c77d28a4294e6496123e8ab1  cargo-nightly-x86_64-unknown-linux-gnu.tar.gz
+sha256 f20adfdcd6fb61c1252034e998998ec349c8a6b05c0320e47a539b0f6d1c76fa  cargo-nightly-i686-unknown-linux-gnu.tar.gz
diff --git a/package/cargo-bootstrap/cargo-bootstrap.mk b/package/cargo-bootstrap/cargo-bootstrap.mk
new file mode 100644
index 0000000..8a11e6e
--- /dev/null
+++ b/package/cargo-bootstrap/cargo-bootstrap.mk
@@ -0,0 +1,14 @@
+################################################################################
+#
+# cargo-bootstrap
+#
+################################################################################
+
+CARGO_BOOTSTRAP_VERSION = 6e0c18cccc8b0c06fba8a8d76486f81a792fb420
+CARGO_BOOTSTRAP_SITE = https://s3.amazonaws.com/rust-lang-ci/cargo-builds/$(CARGO_BOOTSTRAP_VERSION)
+CARGO_BOOTSTRAP_SOURCE = cargo-nightly-$(HOSTARCH)-unknown-linux-gnu.tar.gz
+CARGO_BOOTSTRAP_LICENSE = Apache-2.0 or MIT
+CARGO_BOOTSTRAP_LICENSE_FILES = LICENSE-APACHE LICENSE-MIT
+CARGO_BOOTSTRAP_STRIP_COMPONENTS = 1
+
+$(eval $(host-generic-package))
-- 
2.9.3

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

* [Buildroot] [Patch v4 3/3] rust: new package
  2017-04-02 19:46 [Buildroot] [Patch v4 0/3] Add support for the Rust programming language Eric Le Bihan
  2017-04-02 19:46 ` [Buildroot] [Patch v4 1/3] rust-bootstrap: new package Eric Le Bihan
  2017-04-02 19:46 ` [Buildroot] [Patch v4 2/3] cargo-bootstrap: " Eric Le Bihan
@ 2017-04-02 19:46 ` Eric Le Bihan
  2017-04-07  7:18   ` Jörg Krause
  2 siblings, 1 reply; 21+ messages in thread
From: Eric Le Bihan @ 2017-04-02 19:46 UTC (permalink / raw)
  To: buildroot

This new package provides the compiler for the Rust programming language.

Currently, only the host variant is built.

The Rust compiler uses LLVM as its backend: a copy of LLVM source code
is provided and CMake is used to build it. It is possible to use a
pre-built external copy. When LLVM/clang will be available in Buildroot,
it would be possible to benefit from this feature and thus decrease
build time.

LLVM is configured to generate code for x86, ARM, PowerPC and MIPS
architectures.

The Rust compiler uses Cargo as its build system and is written in Rust.
Therefore this package depends on cargo-bootstrap and rust-bootstrap.

The internal build process is as follows:

 1. rustc-stage0, provided by rust-bootstrap, is used to build
    rustc-stage1.
 2. rust-stage1 builds the final Rust compiler (rust-stage2)
    and the standard library for the host architecture.
 3. the standard library for the target architecture is built.

The target architecture to support is given by the GNU/LLVM target
triple. Rust supports some predefined targets [1]. As the build system
expects the triple to be in the form of <arch>-unknown-<system> and
Buildroot toolchain wrapper uses <arch>-buildroot-<system>, the package
Makefile defines the $(RUST_TARGET_NAME) and uses it instead of
$(GNU_TARGET_NAME).

When compiling Rust code with this compiler, the generated program only
depends on the target C library, as it is statically linked to the Rust
standard library and any other code from Rust packages (a.k.a.
"crates").

If the jemalloc package is selected, support for this memory allocator
will be enabled in the target standard library.

[1] https://forge.rust-lang.org/platform-support.html

Signed-off-by: Eric Le Bihan <eric.le.bihan.dev@free.fr>
---
 DEVELOPERS                  |  1 +
 package/Config.in.host      |  1 +
 package/rust/Config.in.host | 33 ++++++++++++++++++
 package/rust/rust.hash      |  2 ++
 package/rust/rust.mk        | 85 +++++++++++++++++++++++++++++++++++++++++++++
 5 files changed, 122 insertions(+)
 create mode 100644 package/rust/Config.in.host
 create mode 100644 package/rust/rust.hash
 create mode 100644 package/rust/rust.mk

diff --git a/DEVELOPERS b/DEVELOPERS
index 1fed408..c0e7833 100644
--- a/DEVELOPERS
+++ b/DEVELOPERS
@@ -450,6 +450,7 @@ F:	package/hicolor-icon-theme/
 F:	package/jemalloc/
 F:	package/ninja/
 F:	package/rust-bootstrap
+F:	package/rust
 F:	package/s6/
 F:	package/s6-dns/
 F:	package/s6-linux-init/
diff --git a/package/Config.in.host b/package/Config.in.host
index 38f919a..ef5f23f 100644
--- a/package/Config.in.host
+++ b/package/Config.in.host
@@ -39,6 +39,7 @@ menu "Host utilities"
 	source "package/python-lxml/Config.in.host"
 	source "package/qemu/Config.in.host"
 	source "package/raspberrypi-usbboot/Config.in.host"
+	source "package/rust/Config.in.host"
 	source "package/s6-rc/Config.in.host"
 	source "package/sam-ba/Config.in.host"
 	source "package/squashfs/Config.in.host"
diff --git a/package/rust/Config.in.host b/package/rust/Config.in.host
new file mode 100644
index 0000000..384a071
--- /dev/null
+++ b/package/rust/Config.in.host
@@ -0,0 +1,33 @@
+config BR2_PACKAGE_HOST_RUST_ARCH_SUPPORTS
+	bool
+	default y
+	depends on BR2_HOSTARCH = "x86_64" || BR2_HOSTARCH = "x86"
+	depends on  BR2_i386 || BR2_x86_64 \
+		|| BR2_arm  || BR2_aarch64 \
+		|| BR2_powerpc  || BR2_powerpc64 \
+		|| BR2_mips || BR2_mipsel || BR2_mips64 || BR2_mips64el
+	depends on !BR2_ARM_CPU_ARMV4 && !BR2_ARM_CPU_ARMV5
+	depends on !BR2_MIPS_NABI32
+	depends on BR2_TOOLCHAIN_USES_GLIBC
+	depends on BR2_HOST_GCC_AT_LEAST_4_7 # required by LLVM
+	# triggers ICE on trunc_int_for_mode, at explow.c:56
+	depends on BR2_TOOLCHAIN_GCC_AT_LEAST_5 || !BR2_aarch64
+
+comment "host-rust needs a toolchain w/ gcc >= 5"
+	depends on !BR2_TOOLCHAIN_GCC_AT_LEAST_5 && BR2_aarch64
+
+config BR2_PACKAGE_HOST_RUST
+	bool "host rust"
+	depends on BR2_PACKAGE_HOST_RUST_ARCH_SUPPORTS
+	help
+	  Compiler for the Rust programming language.
+
+	  This package will build the compiler for the host as well as
+	  a cross-compiled version of the Rust standard library for the
+	  target.
+
+	  Note that the target standard library does not need to be
+	  present on the target root filesystem, as it is statically
+	  linked to the program.
+
+	  http://www.rust-lang.org
diff --git a/package/rust/rust.hash b/package/rust/rust.hash
new file mode 100644
index 0000000..3b04dfd
--- /dev/null
+++ b/package/rust/rust.hash
@@ -0,0 +1,2 @@
+# Locally calculated
+sha256 f966b31eb1cd9bd2df817c391a338eeb5b9253ae0a19bf8a11960c560f96e8b4  rustc-1.16.0-src.tar.gz
diff --git a/package/rust/rust.mk b/package/rust/rust.mk
new file mode 100644
index 0000000..12f4428
--- /dev/null
+++ b/package/rust/rust.mk
@@ -0,0 +1,85 @@
+################################################################################
+#
+# rust
+#
+################################################################################
+
+RUST_VERSION = 1.16.0
+RUST_SOURCE = rustc-$(RUST_VERSION)-src.tar.gz
+RUST_SITE = https://static.rust-lang.org/dist
+RUST_LICENSE = Apache-2.0 or MIT
+RUST_LICENSE_FILES = LICENSE-APACHE LICENSE-MIT
+
+HOST_RUST_DEPENDENCIES = \
+	toolchain \
+	host-rust-bootstrap \
+	host-cargo-bootstrap \
+	host-python \
+	host-cmake
+
+ifeq ($(BR2_PACKAGE_JEMALLOC),y)
+HOST_RUST_DEPENDENCIES += jemalloc
+HOST_RUST_JEMALLOC_ENABLED = true
+HOST_RUST_JEMALLOC_CONF = 'jemalloc = "$(STAGING_DIR)/usr/lib/libjemalloc_pic.a"'
+else
+HOST_RUST_JEMALLOC_ENABLED = false
+endif
+
+HOST_RUST_BUILD_OPTS = $(if $(VERBOSE),--verbose)
+
+RUST_TARGET_NAME := $(subst buildroot,unknown,$(GNU_TARGET_NAME))
+
+ifeq ($(BR2_ARM_CPU_ARMV7A),y)
+RUST_TARGET_NAME := $(subst arm-,armv7-,$(RUST_TARGET_NAME))
+endif
+
+ifeq ($(BR2_MIPS_NABI64),y)
+RUST_TARGET_NAME := $(subst -gnu,-gnuabi64,$(RUST_TARGET_NAME))
+endif
+
+define HOST_RUST_CONFIGURE_CMDS
+	(cd $(@D); \
+		echo '[build]' > config.toml; \
+		echo 'target = ["$(RUST_TARGET_NAME)"]' >> config.toml; \
+		echo 'cargo = "$(HOST_CARGO_BOOTSTRAP_DIR)/cargo/bin/cargo"' >> config.toml; \
+		echo 'rustc = "$(HOST_RUST_BOOTSTRAP_DIR)/rustc/bin/rustc"' >> config.toml; \
+		echo 'python = "$(HOST_DIR)/usr/bin/python2"' >> config.toml; \
+		echo 'submodules = false' >> config.toml; \
+		echo 'vendor = true' >> config.toml; \
+		echo 'compiler-docs = false' >> config.toml; \
+		echo 'docs = false' >> config.toml; \
+		echo '[install]' >> config.toml; \
+		echo 'prefix = "$(HOST_DIR)/usr"' >> config.toml; \
+		echo '[rust]' >> config.toml; \
+		echo 'use-jemalloc = $(HOST_RUST_JEMALLOC_ENABLED)' >> config.toml; \
+		echo '[target.$(RUST_TARGET_NAME)]' >> config.toml; \
+		echo 'cc = "$(TARGET_CROSS)gcc"' >> config.toml; \
+		echo 'cxx = "$(TARGET_CROSS)g++"' >> config.toml; \
+		echo $(HOST_RUST_JEMALLOC_CONF) >> config.toml; \
+	)
+endef
+
+define HOST_RUST_BUILD_CMDS
+	(cd $(@D); $(HOST_MAKE_ENV) $(HOST_RUST_MAKE_ENV) python2 x.py \
+		build $(HOST_RUST_BUILD_OPTS))
+endef
+
+define HOST_RUST_INSTALL_LIBSTD_TARGET
+	(cd $(@D)/build/tmp/dist/rust-std-$(RUST_VERSION)-dev-$(RUST_TARGET_NAME); \
+		./install.sh \
+			--prefix=$(HOST_DIR)/usr \
+			--docdir=$(HOST_DIR)/usr/share/doc/rust \
+			--libdir=$(HOST_DIR)/usr/lib \
+			--mandir=$(HOST_DIR)/usr/share/man \
+			--disable-ldconfig)
+endef
+
+define HOST_RUST_INSTALL_CMDS
+	(cd $(@D); $(HOST_MAKE_ENV) $(HOST_RUST_MAKE_ENV) python2 x.py \
+		dist $(HOST_RUST_BUILD_OPTS))
+	(cd $(@D); $(HOST_MAKE_ENV) $(HOST_RUST_MAKE_ENV) python2 x.py \
+		dist --install $(HOST_RUST_BUILD_OPTS))
+	$(HOST_RUST_INSTALL_LIBSTD_TARGET)
+endef
+
+$(eval $(host-generic-package))
-- 
2.9.3

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

* [Buildroot] [Patch v4 1/3] rust-bootstrap: new package
  2017-04-02 19:46 ` [Buildroot] [Patch v4 1/3] rust-bootstrap: new package Eric Le Bihan
@ 2017-04-07  7:03   ` Jörg Krause
  2017-04-07  8:26     ` Thomas Petazzoni
  2017-04-08  9:23     ` Eric Le Bihan
  0 siblings, 2 replies; 21+ messages in thread
From: Jörg Krause @ 2017-04-07  7:03 UTC (permalink / raw)
  To: buildroot

On Sun, 2017-04-02 at 21:46 +0200, Eric Le Bihan wrote:
> This new package fetches a binary snapshot of the Rust compiler,
> suitable for the host, in order to bootstrap the Rust compiler.
> 
> Signed-off-by: Eric Le Bihan <eric.le.bihan.dev@free.fr>
> ---
> ?DEVELOPERS?????????????????????????????????|??1 +
> ?package/rust-bootstrap/rust-bootstrap.hash |??5 ++++
> ?package/rust-bootstrap/rust-bootstrap.mk???| 37
> ++++++++++++++++++++++++++++++
> ?3 files changed, 43 insertions(+)
> ?create mode 100644 package/rust-bootstrap/rust-bootstrap.hash
> ?create mode 100644 package/rust-bootstrap/rust-bootstrap.mk
> 
> diff --git a/DEVELOPERS b/DEVELOPERS
> index c89468b..863d5aa 100644
> --- a/DEVELOPERS
> +++ b/DEVELOPERS
> @@ -448,6 +448,7 @@ F:	package/execline/
> ?F:	package/hicolor-icon-theme/
> ?F:	package/jemalloc/
> ?F:	package/ninja/
> +F:	package/rust-bootstrap
> ?F:	package/s6/
> ?F:	package/s6-dns/
> ?F:	package/s6-linux-init/
> diff --git a/package/rust-bootstrap/rust-bootstrap.hash
> b/package/rust-bootstrap/rust-bootstrap.hash
> new file mode 100644
> index 0000000..b418ea0
> --- /dev/null
> +++ b/package/rust-bootstrap/rust-bootstrap.hash
> @@ -0,0 +1,5 @@
> +# Locally calculated
> +sha256
> a833304f99071600c72ecd868c1c7bd5ce49d1102332637a8eb7adb942f349ab??rus
> tc-1.15.1-i686-unknown-linux-gnu.tar.gz
> +sha256
> 33ff44672b731fc71145974ce84194a1a9bafe6da3a74fd1e7543f12467f8894??rus
> tc-1.15.1-x86_64-unknown-linux-gnu.tar.gz
> +sha256
> eff452a54b208a83b35432f226cb7de046d27b5e43edfc31d71ff340af686db0??rus
> t-std-1.15.1-i686-unknown-linux-gnu.tar.gz
> +sha256
> 69b251b478e284dfcaefc1153183f26f41d504ae213a81224f2101d8dbd52bb0??rus
> t-std-1.15.1-x86_64-unknown-linux-gnu.tar.gz
> diff --git a/package/rust-bootstrap/rust-bootstrap.mk b/package/rust-
> bootstrap/rust-bootstrap.mk
> new file mode 100644
> index 0000000..1098423
> --- /dev/null
> +++ b/package/rust-bootstrap/rust-bootstrap.mk
> @@ -0,0 +1,37 @@
> +####################################################################
> ############
> +#
> +# rust-bootstrap
> +#
> +####################################################################
> ############
> +
> +RUST_BOOTSTRAP_VERSION = 1.15.1
> +RUST_BOOTSTRAP_DATE = 2017-02-09
> +RUST_BOOTSTRAP_TRIPLE = $(RUST_BOOTSTRAP_ARCH)-unknown-linux-gnu
> +RUST_BOOTSTRAP_LABEL = $(RUST_BOOTSTRAP_VERSION)-
> $(RUST_BOOTSTRAP_TRIPLE)
> +
> +ifeq ($(HOSTARCH),x86_64)
> +RUST_BOOTSTRAP_ARCH = x86_64
> +else ifeq ($(HOSTARCH),x86)
> +RUST_BOOTSTRAP_ARCH = i686
> +endif

Is there any necessity to limit the bootstrap compiler to those host
archs only?

> +RUST_BOOTSTRAP_SITE = https://static.rust-
> lang.org/dist/$(RUST_BOOTSTRAP_DATE)

Why use a date and not https://static.rust-lang.org/dist solely. Since
I can fetch https://static.rust-lang.org/dist/rust-1.15.1-x86_64-unknow
n-linux-gnu.tar.gz.

> +RUST_BOOTSTRAP_SOURCE = rustc-$(RUST_BOOTSTRAP_LABEL).tar.gz
> +RUST_BOOTSTRAP_LICENSE = Apache-2.0 or MIT
> +RUST_BOOTSTRAP_LICENSE_FILES = LICENSE-APACHE LICENSE-MIT
> +RUST_BOOTSTRAP_LIBSTD_SOURCE= rust-std-
> $(RUST_BOOTSTRAP_LABEL).tar.gz
> +RUST_BOOTSTRAP_LIBSTD_ROOT = rust-std-$(RUST_BOOTSTRAP_LABEL)/rust-
> std-$(RUST_BOOTSTRAP_TRIPLE)

Why not make a seperate package?

> +RUST_BOOTSTRAP_EXTRA_DOWNLOADS =
> $(RUST_BOOTSTRAP_SITE)/$(RUST_BOOTSTRAP_LIBSTD_SOURCE)
> +
> +define RUST_BOOTSTRAP_LIBSTD_EXTRACT
> +	$(call suitable-extractor,$(RUST_BOOTSTRAP_LIBSTD_SOURCE)) \
> +		$(DL_DIR)/$(RUST_BOOTSTRAP_LIBSTD_SOURCE) | \
> +		$(TAR) --strip-components=2 -C $(@D)/rustc
> $(TAR_OPTIONS) - \
> +			$(RUST_BOOTSTRAP_LIBSTD_ROOT)/lib
> +endef
> +
> +HOST_RUST_BOOTSTRAP_EXTRA_DOWNLOADS =
> $(RUST_BOOTSTRAP_EXTRA_DOWNLOADS)
> +HOST_RUST_BOOTSTRAP_POST_EXTRACT_HOOKS +=
> RUST_BOOTSTRAP_LIBSTD_EXTRACT
> +
> +$(eval $(host-generic-package))

J?rg

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

* [Buildroot] [Patch v4 2/3] cargo-bootstrap: new package
  2017-04-02 19:46 ` [Buildroot] [Patch v4 2/3] cargo-bootstrap: " Eric Le Bihan
@ 2017-04-07  7:06   ` Jörg Krause
  2017-04-08  9:34     ` Eric Le Bihan
  0 siblings, 1 reply; 21+ messages in thread
From: Jörg Krause @ 2017-04-07  7:06 UTC (permalink / raw)
  To: buildroot

Hi Eric,

On Sun, 2017-04-02 at 21:46 +0200, Eric Le Bihan wrote:
> This new package fetches a binary snapshot of Cargo, suitable for the
> host, in order to bootstrap the Rust compiler and Cargo, the package
> manager.

Why not build it from source?

> Signed-off-by: Eric Le Bihan <eric.le.bihan.dev@free.fr>
> ---
> ?DEVELOPERS???????????????????????????????????|??1 +
> ?package/cargo-bootstrap/cargo-bootstrap.hash |??3 +++
> ?package/cargo-bootstrap/cargo-bootstrap.mk???| 14 ++++++++++++++
> ?3 files changed, 18 insertions(+)
> ?create mode 100644 package/cargo-bootstrap/cargo-bootstrap.hash
> ?create mode 100644 package/cargo-bootstrap/cargo-bootstrap.mk
> 
> diff --git a/DEVELOPERS b/DEVELOPERS
> index 863d5aa..1fed408 100644
> --- a/DEVELOPERS
> +++ b/DEVELOPERS
> @@ -442,6 +442,7 @@ F:	package/xxhash/
> ?
> ?N:	Eric Le Bihan <eric.le.bihan.dev@free.fr>
> ?F:	package/adwaita-icon-theme/
> +F:	package/cargo-bootstrap
> ?F:	package/darkhttpd/
> ?F:	package/eudev/
> ?F:	package/execline/
> diff --git a/package/cargo-bootstrap/cargo-bootstrap.hash
> b/package/cargo-bootstrap/cargo-bootstrap.hash
> new file mode 100644
> index 0000000..b193c6f
> --- /dev/null
> +++ b/package/cargo-bootstrap/cargo-bootstrap.hash
> @@ -0,0 +1,3 @@
> +# Locally generated
> +sha256
> 0655713cacab054e8e5a33e742081eebec8531a8c77d28a4294e6496123e8ab1??car
> go-nightly-x86_64-unknown-linux-gnu.tar.gz
> +sha256
> f20adfdcd6fb61c1252034e998998ec349c8a6b05c0320e47a539b0f6d1c76fa??car
> go-nightly-i686-unknown-linux-gnu.tar.gz
> diff --git a/package/cargo-bootstrap/cargo-bootstrap.mk
> b/package/cargo-bootstrap/cargo-bootstrap.mk
> new file mode 100644
> index 0000000..8a11e6e
> --- /dev/null
> +++ b/package/cargo-bootstrap/cargo-bootstrap.mk
> @@ -0,0 +1,14 @@
> +####################################################################
> ############
> +#
> +# cargo-bootstrap
> +#
> +####################################################################
> ############
> +
> +CARGO_BOOTSTRAP_VERSION = 6e0c18cccc8b0c06fba8a8d76486f81a792fb420
> +CARGO_BOOTSTRAP_SITE = https://s3.amazonaws.com/rust-lang-ci/cargo-b
> uilds/$(CARGO_BOOTSTRAP_VERSION)
> +CARGO_BOOTSTRAP_SOURCE = cargo-nightly-$(HOSTARCH)-unknown-linux-
> gnu.tar.gz
> +CARGO_BOOTSTRAP_LICENSE = Apache-2.0 or MIT
> +CARGO_BOOTSTRAP_LICENSE_FILES = LICENSE-APACHE LICENSE-MIT
> +CARGO_BOOTSTRAP_STRIP_COMPONENTS = 1
> +
> +$(eval $(host-generic-package))

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

* [Buildroot] [Patch v4 3/3] rust: new package
  2017-04-02 19:46 ` [Buildroot] [Patch v4 3/3] rust: " Eric Le Bihan
@ 2017-04-07  7:18   ` Jörg Krause
  2017-04-08 10:09     ` Eric Le Bihan
  0 siblings, 1 reply; 21+ messages in thread
From: Jörg Krause @ 2017-04-07  7:18 UTC (permalink / raw)
  To: buildroot

Hi Eric,

On Sun, 2017-04-02 at 21:46 +0200, Eric Le Bihan wrote:
> This new package provides the compiler for the Rust programming
> language.
> 
> Currently, only the host variant is built.
> 
> The Rust compiler uses LLVM as its backend: a copy of LLVM source
> code
> is provided and CMake is used to build it. It is possible to use a
> pre-built external copy. When LLVM/clang will be available in
> Buildroot,
> it would be possible to benefit from this feature and thus decrease
> build time.
> 
> LLVM is configured to generate code for x86, ARM, PowerPC and MIPS
> architectures.
> 
> The Rust compiler uses Cargo as its build system and is written in
> Rust.
> Therefore this package depends on cargo-bootstrap and rust-bootstrap.
> 
> The internal build process is as follows:
> 
> ?1. rustc-stage0, provided by rust-bootstrap, is used to build
> ????rustc-stage1.
> ?2. rust-stage1 builds the final Rust compiler (rust-stage2)
> ????and the standard library for the host architecture.
> ?3. the standard library for the target architecture is built.

So, we are doing the following: fetch the predecessor rust version
1.15.1 as binary to use it as stage0 compiler for building the latest
rust stable version 1.16.0. Why not just fetch the latest stable
version and install it into the host dir? The same goes with libstd and
cargo. I mean, we have to fetch some binaries anyway, so why do the
time-consuming build steps anyway? Shouldn't there be at least the
option just to fetch the latest stable version?

> The target architecture to support is given by the GNU/LLVM target
> triple. Rust supports some predefined targets [1]. As the build
> system
> expects the triple to be in the form of <arch>-unknown-<system> and
> Buildroot toolchain wrapper uses <arch>-buildroot-<system>, the
> package
> Makefile defines the $(RUST_TARGET_NAME) and uses it instead of
> $(GNU_TARGET_NAME).
> 
> When compiling Rust code with this compiler, the generated program
> only
> depends on the target C library, as it is statically linked to the
> Rust
> standard library and any other code from Rust packages (a.k.a.
> "crates").
> 
> If the jemalloc package is selected, support for this memory
> allocator
> will be enabled in the target standard library.
> 
> [1] https://forge.rust-lang.org/platform-support.html
> 
> Signed-off-by: Eric Le Bihan <eric.le.bihan.dev@free.fr>
> ---
> ?DEVELOPERS??????????????????|??1 +
> ?package/Config.in.host??????|??1 +
> ?package/rust/Config.in.host | 33 ++++++++++++++++++
> ?package/rust/rust.hash??????|??2 ++
> ?package/rust/rust.mk????????| 85
> +++++++++++++++++++++++++++++++++++++++++++++
> ?5 files changed, 122 insertions(+)
> ?create mode 100644 package/rust/Config.in.host
> ?create mode 100644 package/rust/rust.hash
> ?create mode 100644 package/rust/rust.mk
> 
> diff --git a/DEVELOPERS b/DEVELOPERS
> index 1fed408..c0e7833 100644
> --- a/DEVELOPERS
> +++ b/DEVELOPERS
> @@ -450,6 +450,7 @@ F:	package/hicolor-icon-theme/
> ?F:	package/jemalloc/
> ?F:	package/ninja/
> ?F:	package/rust-bootstrap
> +F:	package/rust
> ?F:	package/s6/
> ?F:	package/s6-dns/
> ?F:	package/s6-linux-init/
> diff --git a/package/Config.in.host b/package/Config.in.host
> index 38f919a..ef5f23f 100644
> --- a/package/Config.in.host
> +++ b/package/Config.in.host
> @@ -39,6 +39,7 @@ menu "Host utilities"
> ?	source "package/python-lxml/Config.in.host"
> ?	source "package/qemu/Config.in.host"
> ?	source "package/raspberrypi-usbboot/Config.in.host"
> +	source "package/rust/Config.in.host"
> ?	source "package/s6-rc/Config.in.host"
> ?	source "package/sam-ba/Config.in.host"
> ?	source "package/squashfs/Config.in.host"
> diff --git a/package/rust/Config.in.host
> b/package/rust/Config.in.host
> new file mode 100644
> index 0000000..384a071
> --- /dev/null
> +++ b/package/rust/Config.in.host
> @@ -0,0 +1,33 @@
> +config BR2_PACKAGE_HOST_RUST_ARCH_SUPPORTS
> +	bool
> +	default y
> +	depends on BR2_HOSTARCH = "x86_64" || BR2_HOSTARCH = "x86"
> +	depends on??BR2_i386 || BR2_x86_64 \
> +		|| BR2_arm??|| BR2_aarch64 \
> +		|| BR2_powerpc??|| BR2_powerpc64 \
> +		|| BR2_mips || BR2_mipsel || BR2_mips64 ||
> BR2_mips64el
> +	depends on !BR2_ARM_CPU_ARMV4 && !BR2_ARM_CPU_ARMV5
> +	depends on !BR2_MIPS_NABI32
> +	depends on BR2_TOOLCHAIN_USES_GLIBC
> +	depends on BR2_HOST_GCC_AT_LEAST_4_7 # required by LLVM
> +	# triggers ICE on trunc_int_for_mode, at explow.c:56
> +	depends on BR2_TOOLCHAIN_GCC_AT_LEAST_5 || !BR2_aarch64
> +
> +comment "host-rust needs a toolchain w/ gcc >= 5"
> +	depends on !BR2_TOOLCHAIN_GCC_AT_LEAST_5 && BR2_aarch64
> +
> +config BR2_PACKAGE_HOST_RUST
> +	bool "host rust"
> +	depends on BR2_PACKAGE_HOST_RUST_ARCH_SUPPORTS
> +	help
> +	??Compiler for the Rust programming language.
> +
> +	??This package will build the compiler for the host as well
> as
> +	??a cross-compiled version of the Rust standard library for
> the
> +	??target.
> +
> +	??Note that the target standard library does not need to be
> +	??present on the target root filesystem, as it is statically
> +	??linked to the program.
> +
> +	??http://www.rust-lang.org
> diff --git a/package/rust/rust.hash b/package/rust/rust.hash
> new file mode 100644
> index 0000000..3b04dfd
> --- /dev/null
> +++ b/package/rust/rust.hash
> @@ -0,0 +1,2 @@
> +# Locally calculated
> +sha256
> f966b31eb1cd9bd2df817c391a338eeb5b9253ae0a19bf8a11960c560f96e8b4??rus
> tc-1.16.0-src.tar.gz
> diff --git a/package/rust/rust.mk b/package/rust/rust.mk
> new file mode 100644
> index 0000000..12f4428
> --- /dev/null
> +++ b/package/rust/rust.mk
> @@ -0,0 +1,85 @@
> +####################################################################
> ############
> +#
> +# rust
> +#
> +####################################################################
> ############
> +
> +RUST_VERSION = 1.16.0
> +RUST_SOURCE = rustc-$(RUST_VERSION)-src.tar.gz
> +RUST_SITE = https://static.rust-lang.org/dist
> +RUST_LICENSE = Apache-2.0 or MIT
> +RUST_LICENSE_FILES = LICENSE-APACHE LICENSE-MIT
> +
> +HOST_RUST_DEPENDENCIES = \
> +	toolchain \
> +	host-rust-bootstrap \
> +	host-cargo-bootstrap \
> +	host-python \
> +	host-cmake
> +
> +ifeq ($(BR2_PACKAGE_JEMALLOC),y)
> +HOST_RUST_DEPENDENCIES += jemalloc
> +HOST_RUST_JEMALLOC_ENABLED = true
> +HOST_RUST_JEMALLOC_CONF = 'jemalloc =
> "$(STAGING_DIR)/usr/lib/libjemalloc_pic.a"'
> +else
> +HOST_RUST_JEMALLOC_ENABLED = false
> +endif
> +
> +HOST_RUST_BUILD_OPTS = $(if $(VERBOSE),--verbose)
> +
> +RUST_TARGET_NAME := $(subst buildroot,unknown,$(GNU_TARGET_NAME))
> +
> +ifeq ($(BR2_ARM_CPU_ARMV7A),y)
> +RUST_TARGET_NAME := $(subst arm-,armv7-,$(RUST_TARGET_NAME))
> +endif
> +
> +ifeq ($(BR2_MIPS_NABI64),y)
> +RUST_TARGET_NAME := $(subst -gnu,-gnuabi64,$(RUST_TARGET_NAME))
> +endif
> +
> +define HOST_RUST_CONFIGURE_CMDS
> +	(cd $(@D); \
> +		echo '[build]' > config.toml; \
> +		echo 'target = ["$(RUST_TARGET_NAME)"]' >>
> config.toml; \
> +		echo 'cargo =
> "$(HOST_CARGO_BOOTSTRAP_DIR)/cargo/bin/cargo"' >> config.toml; \
> +		echo 'rustc =
> "$(HOST_RUST_BOOTSTRAP_DIR)/rustc/bin/rustc"' >> config.toml; \
> +		echo 'python = "$(HOST_DIR)/usr/bin/python2"' >>
> config.toml; \
> +		echo 'submodules = false' >> config.toml; \
> +		echo 'vendor = true' >> config.toml; \
> +		echo 'compiler-docs = false' >> config.toml; \
> +		echo 'docs = false' >> config.toml; \
> +		echo '[install]' >> config.toml; \
> +		echo 'prefix = "$(HOST_DIR)/usr"' >> config.toml; \
> +		echo '[rust]' >> config.toml; \
> +		echo 'use-jemalloc = $(HOST_RUST_JEMALLOC_ENABLED)'
> >> config.toml; \
> +		echo '[target.$(RUST_TARGET_NAME)]' >> config.toml;
> \
> +		echo 'cc = "$(TARGET_CROSS)gcc"' >> config.toml; \
> +		echo 'cxx = "$(TARGET_CROSS)g++"' >> config.toml; \
> +		echo $(HOST_RUST_JEMALLOC_CONF) >> config.toml; \
> +	)
> +endef
> +
> +define HOST_RUST_BUILD_CMDS
> +	(cd $(@D); $(HOST_MAKE_ENV) $(HOST_RUST_MAKE_ENV) python2
> x.py \
> +		build $(HOST_RUST_BUILD_OPTS))
> +endef
> +
> +define HOST_RUST_INSTALL_LIBSTD_TARGET
> +	(cd $(@D)/build/tmp/dist/rust-std-$(RUST_VERSION)-dev-
> $(RUST_TARGET_NAME); \
> +		./install.sh \
> +			--prefix=$(HOST_DIR)/usr \
> +			--docdir=$(HOST_DIR)/usr/share/doc/rust \
> +			--libdir=$(HOST_DIR)/usr/lib \
> +			--mandir=$(HOST_DIR)/usr/share/man \
> +			--disable-ldconfig)
> +endef
> +
> +define HOST_RUST_INSTALL_CMDS
> +	(cd $(@D); $(HOST_MAKE_ENV) $(HOST_RUST_MAKE_ENV) python2
> x.py \
> +		dist $(HOST_RUST_BUILD_OPTS))
> +	(cd $(@D); $(HOST_MAKE_ENV) $(HOST_RUST_MAKE_ENV) python2
> x.py \
> +		dist --install $(HOST_RUST_BUILD_OPTS))
> +	$(HOST_RUST_INSTALL_LIBSTD_TARGET)
> +endef
> +
> +$(eval $(host-generic-package))

Best regards,
J?rg Krause

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

* [Buildroot] [Patch v4 1/3] rust-bootstrap: new package
  2017-04-07  7:03   ` Jörg Krause
@ 2017-04-07  8:26     ` Thomas Petazzoni
  2017-04-07  8:54       ` Jörg Krause
  2017-04-08  9:23     ` Eric Le Bihan
  1 sibling, 1 reply; 21+ messages in thread
From: Thomas Petazzoni @ 2017-04-07  8:26 UTC (permalink / raw)
  To: buildroot

Hello,

On Fri, 07 Apr 2017 09:03:34 +0200, J?rg Krause wrote:
> On Sun, 2017-04-02 at 21:46 +0200, Eric Le Bihan wrote:
> > This new package fetches a binary snapshot of the Rust compiler,
> > suitable for the host, in order to bootstrap the Rust compiler.
> > 
> > Signed-off-by: Eric Le Bihan <eric.le.bihan.dev@free.fr>
> > ---
> > ?DEVELOPERS?????????????????????????????????|??1 +
> > ?package/rust-bootstrap/rust-bootstrap.hash |??5 ++++
> > ?package/rust-bootstrap/rust-bootstrap.mk???| 37
> > ++++++++++++++++++++++++++++++
> > ?3 files changed, 43 insertions(+)

It would be nice if you could fix your e-mail client to not rewrap the
text you are replying to :)

> > +ifeq ($(HOSTARCH),x86_64)
> > +RUST_BOOTSTRAP_ARCH = x86_64
> > +else ifeq ($(HOSTARCH),x86)
> > +RUST_BOOTSTRAP_ARCH = i686
> > +endif  
> 
> Is there any necessity to limit the bootstrap compiler to those host
> archs only?

The bootstrap compiler is provided as a binary only thing,
pre-compiled. So it works only on the architectures it was compiled
for. At least, that's why I remember from previous series on this topic.

> > +RUST_BOOTSTRAP_SOURCE = rustc-$(RUST_BOOTSTRAP_LABEL).tar.gz
> > +RUST_BOOTSTRAP_LICENSE = Apache-2.0 or MIT
> > +RUST_BOOTSTRAP_LICENSE_FILES = LICENSE-APACHE LICENSE-MIT
> > +RUST_BOOTSTRAP_LIBSTD_SOURCE= rust-std-
> > $(RUST_BOOTSTRAP_LABEL).tar.gz
> > +RUST_BOOTSTRAP_LIBSTD_ROOT = rust-std-$(RUST_BOOTSTRAP_LABEL)/rust-
> > std-$(RUST_BOOTSTRAP_TRIPLE)  
> 
> Why not make a seperate package?

It apparently needs to be extracted within the bootstrap compiler tree,
i.e in $(@D)/rustc, I guess that's why. But Eric can give more details
here.

Thomas
-- 
Thomas Petazzoni, CTO, Free Electrons
Embedded Linux and Kernel engineering
http://free-electrons.com

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

* [Buildroot] [Patch v4 1/3] rust-bootstrap: new package
  2017-04-07  8:26     ` Thomas Petazzoni
@ 2017-04-07  8:54       ` Jörg Krause
  2017-04-07  9:03         ` Thomas Petazzoni
  0 siblings, 1 reply; 21+ messages in thread
From: Jörg Krause @ 2017-04-07  8:54 UTC (permalink / raw)
  To: buildroot

Hi,

On Fri, 2017-04-07 at 10:26 +0200, Thomas Petazzoni wrote:
> Hello,
> 
> On Fri, 07 Apr 2017 09:03:34 +0200, J?rg Krause wrote:
> > On Sun, 2017-04-02 at 21:46 +0200, Eric Le Bihan wrote:
> > > This new package fetches a binary snapshot of the Rust compiler,
> > > suitable for the host, in order to bootstrap the Rust compiler.
> > > 
> > > Signed-off-by: Eric Le Bihan <eric.le.bihan.dev@free.fr>
> > > ---
> > > ?DEVELOPERS?????????????????????????????????|??1 +
> > > ?package/rust-bootstrap/rust-bootstrap.hash |??5 ++++
> > > ?package/rust-bootstrap/rust-bootstrap.mk???| 37
> > > ++++++++++++++++++++++++++++++
> > > ?3 files changed, 43 insertions(+)
> 
> It would be nice if you could fix your e-mail client to not rewrap the
> text you are replying to :)

Naughty mail client. Told him not do such bad things anymore :-)

> > > +ifeq ($(HOSTARCH),x86_64)
> > > +RUST_BOOTSTRAP_ARCH = x86_64
> > > +else ifeq ($(HOSTARCH),x86)
> > > +RUST_BOOTSTRAP_ARCH = i686
> > > +endif  
> > 
> > Is there any necessity to limit the bootstrap compiler to those host
> > archs only?
> 
> The bootstrap compiler is provided as a binary only thing,
> pre-compiled. So it works only on the architectures it was compiled
> for. At least, that's why I remember from previous series on this topic.

But, if I am running Buildroot on a PowerPC it should be able to fetch
and run the binary for PowerPC, right?

> > > +RUST_BOOTSTRAP_SOURCE = rustc-$(RUST_BOOTSTRAP_LABEL).tar.gz
> > > +RUST_BOOTSTRAP_LICENSE = Apache-2.0 or MIT
> > > +RUST_BOOTSTRAP_LICENSE_FILES = LICENSE-APACHE LICENSE-MIT
> > > +RUST_BOOTSTRAP_LIBSTD_SOURCE= rust-std-
> > > $(RUST_BOOTSTRAP_LABEL).tar.gz
> > > +RUST_BOOTSTRAP_LIBSTD_ROOT = rust-std-$(RUST_BOOTSTRAP_LABEL)/rust-
> > > std-$(RUST_BOOTSTRAP_TRIPLE)  
> > 
> > Why not make a seperate package?
> 
> It apparently needs to be extracted within the bootstrap compiler tree,
> i.e in $(@D)/rustc, I guess that's why. But Eric can give more details
> here.

Maybe the path to the rust libraries could be added to LD_LIBRARY_PATH?

J?rg

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

* [Buildroot] [Patch v4 1/3] rust-bootstrap: new package
  2017-04-07  8:54       ` Jörg Krause
@ 2017-04-07  9:03         ` Thomas Petazzoni
  2017-04-07  9:22           ` Jörg Krause
  0 siblings, 1 reply; 21+ messages in thread
From: Thomas Petazzoni @ 2017-04-07  9:03 UTC (permalink / raw)
  To: buildroot

Hello,

On Fri, 07 Apr 2017 10:54:04 +0200, J?rg Krause wrote:

> > > Is there any necessity to limit the bootstrap compiler to those host
> > > archs only?  
> > 
> > The bootstrap compiler is provided as a binary only thing,
> > pre-compiled. So it works only on the architectures it was compiled
> > for. At least, that's why I remember from previous series on this topic.  
> 
> But, if I am running Buildroot on a PowerPC it should be able to fetch
> and run the binary for PowerPC, right?

If there's no prebuilt Rust compiler for PowerPC, then no, it will
simply not be possible.

We have already lots of things in Buildroot that depend on x86 or
x86-64. Check all packages/options that use BR2_HOSTARCH.

So, it's fine for Rust to also require a x86/x86-64 machine, as long as
the proper BR2_HOSTARCH dependency is present in the Config.in.

Best regards,

Thomas
-- 
Thomas Petazzoni, CTO, Free Electrons
Embedded Linux and Kernel engineering
http://free-electrons.com

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

* [Buildroot] [Patch v4 1/3] rust-bootstrap: new package
  2017-04-07  9:03         ` Thomas Petazzoni
@ 2017-04-07  9:22           ` Jörg Krause
  2017-04-07 10:26             ` Thomas Petazzoni
  0 siblings, 1 reply; 21+ messages in thread
From: Jörg Krause @ 2017-04-07  9:22 UTC (permalink / raw)
  To: buildroot

On Fri, 2017-04-07 at 11:03 +0200, Thomas Petazzoni wrote:
> Hello,
> 
> On Fri, 07 Apr 2017 10:54:04 +0200, J?rg Krause wrote:
> 
> > > > Is there any necessity to limit the bootstrap compiler to those host
> > > > archs only?  
> > > 
> > > The bootstrap compiler is provided as a binary only thing,
> > > pre-compiled. So it works only on the architectures it was compiled
> > > for. At least, that's why I remember from previous series on this topic.  
> > 
> > But, if I am running Buildroot on a PowerPC it should be able to fetch
> > and run the binary for PowerPC, right?
> 
> If there's no prebuilt Rust compiler for PowerPC, then no, it will
> simply not be possible.

Fetching and extracting the PowerPC release tarball [1]:

[joerg at nzxt rust-1.16.0-powerpc64-unknown-linux-gnu]$ file
rustc/bin/rustc?
rustc/bin/rustc: ELF 64-bit MSB shared object, 64-bit PowerPC or cisco
7500, version 1 (SYSV), dynamically linked, interpreter
/lib64/ld64.so.1, for GNU/Linux 3.2.0,
BuildID[sha1]=39357ec02406358be73f28d80dabfdd9e9816de9, not stripped,
with debug_info

> We have already lots of things in Buildroot that depend on x86 or
> x86-64. Check all packages/options that use BR2_HOSTARCH.
> 
> So, it's fine for Rust to also require a x86/x86-64 machine, as long as
> the proper BR2_HOSTARCH dependency is present in the Config.in.

As I am running x64 it is fine for me, too. Just wondered why to limit
the hosts archs if there are binaries available.

[1] https://static.rust-lang.org/dist/rust-1.16.0-powerpc64-unknown-lin
ux-gnu.tar.gz

J?rg

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

* [Buildroot] [Patch v4 1/3] rust-bootstrap: new package
  2017-04-07  9:22           ` Jörg Krause
@ 2017-04-07 10:26             ` Thomas Petazzoni
  0 siblings, 0 replies; 21+ messages in thread
From: Thomas Petazzoni @ 2017-04-07 10:26 UTC (permalink / raw)
  To: buildroot

Hello,

On Fri, 07 Apr 2017 11:22:01 +0200, J?rg Krause wrote:

> As I am running x64 it is fine for me, too. Just wondered why to limit
> the hosts archs if there are binaries available.

I guess simply because Eric could only test those host architectures.

Thomas
-- 
Thomas Petazzoni, CTO, Free Electrons
Embedded Linux and Kernel engineering
http://free-electrons.com

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

* [Buildroot] [Patch v4 1/3] rust-bootstrap: new package
  2017-04-07  7:03   ` Jörg Krause
  2017-04-07  8:26     ` Thomas Petazzoni
@ 2017-04-08  9:23     ` Eric Le Bihan
  1 sibling, 0 replies; 21+ messages in thread
From: Eric Le Bihan @ 2017-04-08  9:23 UTC (permalink / raw)
  To: buildroot

Hi!

On 17-04-07 09:03:34, J?rg Krause wrote:
> On Sun, 2017-04-02 at 21:46 +0200, Eric Le Bihan wrote:
> > This new package fetches a binary snapshot of the Rust compiler,
> > suitable for the host, in order to bootstrap the Rust compiler.
> >
> > Signed-off-by: Eric Le Bihan <eric.le.bihan.dev@free.fr>
> > ---
> > ?DEVELOPERS?????????????????????????????????|??1 +
> > ?package/rust-bootstrap/rust-bootstrap.hash |??5 ++++
> > ?package/rust-bootstrap/rust-bootstrap.mk???| 37
> > ++++++++++++++++++++++++++++++
> > ?3 files changed, 43 insertions(+)
> > ?create mode 100644 package/rust-bootstrap/rust-bootstrap.hash
> > ?create mode 100644 package/rust-bootstrap/rust-bootstrap.mk
> >
> > diff --git a/DEVELOPERS b/DEVELOPERS
> > index c89468b..863d5aa 100644
> > --- a/DEVELOPERS
> > +++ b/DEVELOPERS
> > @@ -448,6 +448,7 @@ F:	package/execline/
> > ?F:	package/hicolor-icon-theme/
> > ?F:	package/jemalloc/
> > ?F:	package/ninja/
> > +F:	package/rust-bootstrap
> > ?F:	package/s6/
> > ?F:	package/s6-dns/
> > ?F:	package/s6-linux-init/
> > diff --git a/package/rust-bootstrap/rust-bootstrap.hash
> > b/package/rust-bootstrap/rust-bootstrap.hash
> > new file mode 100644
> > index 0000000..b418ea0
> > --- /dev/null
> > +++ b/package/rust-bootstrap/rust-bootstrap.hash
> > @@ -0,0 +1,5 @@
> > +# Locally calculated
> > +sha256
> > a833304f99071600c72ecd868c1c7bd5ce49d1102332637a8eb7adb942f349ab??rus
> > tc-1.15.1-i686-unknown-linux-gnu.tar.gz
> > +sha256
> > 33ff44672b731fc71145974ce84194a1a9bafe6da3a74fd1e7543f12467f8894??rus
> > tc-1.15.1-x86_64-unknown-linux-gnu.tar.gz
> > +sha256
> > eff452a54b208a83b35432f226cb7de046d27b5e43edfc31d71ff340af686db0??rus
> > t-std-1.15.1-i686-unknown-linux-gnu.tar.gz
> > +sha256
> > 69b251b478e284dfcaefc1153183f26f41d504ae213a81224f2101d8dbd52bb0??rus
> > t-std-1.15.1-x86_64-unknown-linux-gnu.tar.gz
> > diff --git a/package/rust-bootstrap/rust-bootstrap.mk b/package/rust-
> > bootstrap/rust-bootstrap.mk
> > new file mode 100644
> > index 0000000..1098423
> > --- /dev/null
> > +++ b/package/rust-bootstrap/rust-bootstrap.mk
> > @@ -0,0 +1,37 @@
> > +####################################################################
> > ############
> > +#
> > +# rust-bootstrap
> > +#
> > +####################################################################
> > ############
> > +
> > +RUST_BOOTSTRAP_VERSION = 1.15.1
> > +RUST_BOOTSTRAP_DATE = 2017-02-09
> > +RUST_BOOTSTRAP_TRIPLE = $(RUST_BOOTSTRAP_ARCH)-unknown-linux-gnu
> > +RUST_BOOTSTRAP_LABEL = $(RUST_BOOTSTRAP_VERSION)-
> > $(RUST_BOOTSTRAP_TRIPLE)
> > +
> > +ifeq ($(HOSTARCH),x86_64)
> > +RUST_BOOTSTRAP_ARCH = x86_64
> > +else ifeq ($(HOSTARCH),x86)
> > +RUST_BOOTSTRAP_ARCH = i686
> > +endif
>
> Is there any necessity to limit the bootstrap compiler to those host
> archs only?

I've limited the bootstrap compiler to i686 and x86_64 as these
architectures are listed as tier 1 of the Rust platform support [1].

PowerPC is in tier 2. If some Buildroot users are using pre-2005 Macs,
I can add it.

[1] https://forge.rust-lang.org/platform-support.html
>
> > +RUST_BOOTSTRAP_SITE = https://static.rust-
> > lang.org/dist/$(RUST_BOOTSTRAP_DATE)
>
> Why use a date and not https://static.rust-lang.org/dist solely. Since
> I can fetch https://static.rust-lang.org/dist/rust-1.15.1-x86_64-unknow
> n-linux-gnu.tar.gz.

Good catch! This part is a leftover from the early versions of this
patch series when Rust compiler version N could not be bootstrapped from
version N-1 but an obscure nightly one. I'll change this.

>
> > +RUST_BOOTSTRAP_SOURCE = rustc-$(RUST_BOOTSTRAP_LABEL).tar.gz
> > +RUST_BOOTSTRAP_LICENSE = Apache-2.0 or MIT
> > +RUST_BOOTSTRAP_LICENSE_FILES = LICENSE-APACHE LICENSE-MIT
> > +RUST_BOOTSTRAP_LIBSTD_SOURCE= rust-std-
> > $(RUST_BOOTSTRAP_LABEL).tar.gz
> > +RUST_BOOTSTRAP_LIBSTD_ROOT = rust-std-$(RUST_BOOTSTRAP_LABEL)/rust-
> > std-$(RUST_BOOTSTRAP_TRIPLE)
>
> Why not make a seperate package?

I though about making it a separate package to clarify the Makefile, but
the library on its own is useless, so why expose it? This is just an
internal build dependency, like perl-cross in package/perl/perl.mk.

> > +RUST_BOOTSTRAP_EXTRA_DOWNLOADS =
> > $(RUST_BOOTSTRAP_SITE)/$(RUST_BOOTSTRAP_LIBSTD_SOURCE)
> > +
> > +define RUST_BOOTSTRAP_LIBSTD_EXTRACT
> > +	$(call suitable-extractor,$(RUST_BOOTSTRAP_LIBSTD_SOURCE)) \
> > +		$(DL_DIR)/$(RUST_BOOTSTRAP_LIBSTD_SOURCE) | \
> > +		$(TAR) --strip-components=2 -C $(@D)/rustc
> > $(TAR_OPTIONS) - \
> > +			$(RUST_BOOTSTRAP_LIBSTD_ROOT)/lib
> > +endef
> > +
> > +HOST_RUST_BOOTSTRAP_EXTRA_DOWNLOADS =
> > $(RUST_BOOTSTRAP_EXTRA_DOWNLOADS)
> > +HOST_RUST_BOOTSTRAP_POST_EXTRACT_HOOKS +=
> > RUST_BOOTSTRAP_LIBSTD_EXTRACT
> > +
> > +$(eval $(host-generic-package))
>
> J?rg

--
ELB

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

* [Buildroot] [Patch v4 2/3] cargo-bootstrap: new package
  2017-04-07  7:06   ` Jörg Krause
@ 2017-04-08  9:34     ` Eric Le Bihan
  2017-04-08 13:20       ` Thomas Petazzoni
  0 siblings, 1 reply; 21+ messages in thread
From: Eric Le Bihan @ 2017-04-08  9:34 UTC (permalink / raw)
  To: buildroot

Hi!

On 17-04-07 09:06:39, J?rg Krause wrote:
> Hi Eric,
>
> On Sun, 2017-04-02 at 21:46 +0200, Eric Le Bihan wrote:
> > This new package fetches a binary snapshot of Cargo, suitable for the
> > host, in order to bootstrap the Rust compiler and Cargo, the package
> > manager.
>
> Why not build it from source?

Cargo uses Cargo as its build system, so you need to have a working
version of Cargo on the host system to build a new version from the
source code.

To build the Rust compiler a binary snapshot is enough.

I'll send a patch to add a package for the real Cargo soon.

> > Signed-off-by: Eric Le Bihan <eric.le.bihan.dev@free.fr>
> > ---
> > ?DEVELOPERS???????????????????????????????????|??1 +
> > ?package/cargo-bootstrap/cargo-bootstrap.hash |??3 +++
> > ?package/cargo-bootstrap/cargo-bootstrap.mk???| 14 ++++++++++++++
> > ?3 files changed, 18 insertions(+)
> > ?create mode 100644 package/cargo-bootstrap/cargo-bootstrap.hash
> > ?create mode 100644 package/cargo-bootstrap/cargo-bootstrap.mk
> >
> > diff --git a/DEVELOPERS b/DEVELOPERS
> > index 863d5aa..1fed408 100644
> > --- a/DEVELOPERS
> > +++ b/DEVELOPERS
> > @@ -442,6 +442,7 @@ F:	package/xxhash/
> > ?
> > ?N:	Eric Le Bihan <eric.le.bihan.dev@free.fr>
> > ?F:	package/adwaita-icon-theme/
> > +F:	package/cargo-bootstrap
> > ?F:	package/darkhttpd/
> > ?F:	package/eudev/
> > ?F:	package/execline/
> > diff --git a/package/cargo-bootstrap/cargo-bootstrap.hash
> > b/package/cargo-bootstrap/cargo-bootstrap.hash
> > new file mode 100644
> > index 0000000..b193c6f
> > --- /dev/null
> > +++ b/package/cargo-bootstrap/cargo-bootstrap.hash
> > @@ -0,0 +1,3 @@
> > +# Locally generated
> > +sha256
> > 0655713cacab054e8e5a33e742081eebec8531a8c77d28a4294e6496123e8ab1??car
> > go-nightly-x86_64-unknown-linux-gnu.tar.gz
> > +sha256
> > f20adfdcd6fb61c1252034e998998ec349c8a6b05c0320e47a539b0f6d1c76fa??car
> > go-nightly-i686-unknown-linux-gnu.tar.gz
> > diff --git a/package/cargo-bootstrap/cargo-bootstrap.mk
> > b/package/cargo-bootstrap/cargo-bootstrap.mk
> > new file mode 100644
> > index 0000000..8a11e6e
> > --- /dev/null
> > +++ b/package/cargo-bootstrap/cargo-bootstrap.mk
> > @@ -0,0 +1,14 @@
> > +####################################################################
> > ############
> > +#
> > +# cargo-bootstrap
> > +#
> > +####################################################################
> > ############
> > +
> > +CARGO_BOOTSTRAP_VERSION = 6e0c18cccc8b0c06fba8a8d76486f81a792fb420
> > +CARGO_BOOTSTRAP_SITE = https://s3.amazonaws.com/rust-lang-ci/cargo-b
> > uilds/$(CARGO_BOOTSTRAP_VERSION)
> > +CARGO_BOOTSTRAP_SOURCE = cargo-nightly-$(HOSTARCH)-unknown-linux-
> > gnu.tar.gz
> > +CARGO_BOOTSTRAP_LICENSE = Apache-2.0 or MIT
> > +CARGO_BOOTSTRAP_LICENSE_FILES = LICENSE-APACHE LICENSE-MIT
> > +CARGO_BOOTSTRAP_STRIP_COMPONENTS = 1
> > +
> > +$(eval $(host-generic-package))

--
ELB

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

* [Buildroot] [Patch v4 3/3] rust: new package
  2017-04-07  7:18   ` Jörg Krause
@ 2017-04-08 10:09     ` Eric Le Bihan
  2017-04-10 19:02       ` Jörg Krause
  0 siblings, 1 reply; 21+ messages in thread
From: Eric Le Bihan @ 2017-04-08 10:09 UTC (permalink / raw)
  To: buildroot

Hi!

On 17-04-07 09:18:42, J?rg Krause wrote:
> Hi Eric,
>
> On Sun, 2017-04-02 at 21:46 +0200, Eric Le Bihan wrote:
> > This new package provides the compiler for the Rust programming
> > language.
> >
> > Currently, only the host variant is built.
> >
> > The Rust compiler uses LLVM as its backend: a copy of LLVM source
> > code
> > is provided and CMake is used to build it. It is possible to use a
> > pre-built external copy. When LLVM/clang will be available in
> > Buildroot,
> > it would be possible to benefit from this feature and thus decrease
> > build time.
> >
> > LLVM is configured to generate code for x86, ARM, PowerPC and MIPS
> > architectures.
> >
> > The Rust compiler uses Cargo as its build system and is written in
> > Rust.
> > Therefore this package depends on cargo-bootstrap and rust-bootstrap.
> >
> > The internal build process is as follows:
> >
> > ?1. rustc-stage0, provided by rust-bootstrap, is used to build
> > ????rustc-stage1.
> > ?2. rust-stage1 builds the final Rust compiler (rust-stage2)
> > ????and the standard library for the host architecture.
> > ?3. the standard library for the target architecture is built.
>
> So, we are doing the following: fetch the predecessor rust version
> 1.15.1 as binary to use it as stage0 compiler for building the latest
> rust stable version 1.16.0. Why not just fetch the latest stable
> version and install it into the host dir? The same goes with libstd and
> cargo. I mean, we have to fetch some binaries anyway, so why do the
> time-consuming build steps anyway? Shouldn't there be at least the
> option just to fetch the latest stable version?
>
It is true that building the Rust compiler is time consuming. As stated
in the comment, this can be decreased if LLVM was already available. But
if LLVM itself is built from source and not fetched as binary from
Internet, then the issue is still there.

Currently Buildroot only offers downloading binary versions of the C/C++
cross-compilers. It does not take into account alternative C/C++
cross-compilers like LLVM/Clang or compilers for new languages like
Rust, D, or Haskell (though I do not know if Haskell is useful on
embedded systems).

So, would it help to have a "Programming Languages" section in
menuconfig where you can select Rust (or any other language) and choose
between a using a pre-built compiler or build it from source?

And where shoud LLVM/clang be exposed?

Note: Building a cross-compiler for D can be done via a patch to GCC
thanks to GDC [1], but IIRC cross-compiling libphobos, the standard
library, is another matter.

[1] https://github.com/D-Programming-GDC/GDC/releases

> > The target architecture to support is given by the GNU/LLVM target
> > triple. Rust supports some predefined targets [1]. As the build
> > system
> > expects the triple to be in the form of <arch>-unknown-<system> and
> > Buildroot toolchain wrapper uses <arch>-buildroot-<system>, the
> > package
> > Makefile defines the $(RUST_TARGET_NAME) and uses it instead of
> > $(GNU_TARGET_NAME).
> >
> > When compiling Rust code with this compiler, the generated program
> > only
> > depends on the target C library, as it is statically linked to the
> > Rust
> > standard library and any other code from Rust packages (a.k.a.
> > "crates").
> >
> > If the jemalloc package is selected, support for this memory
> > allocator
> > will be enabled in the target standard library.
> >
> > [1] https://forge.rust-lang.org/platform-support.html
> >
> > Signed-off-by: Eric Le Bihan <eric.le.bihan.dev@free.fr>
> > ---
> > ?DEVELOPERS??????????????????|??1 +
> > ?package/Config.in.host??????|??1 +
> > ?package/rust/Config.in.host | 33 ++++++++++++++++++
> > ?package/rust/rust.hash??????|??2 ++
> > ?package/rust/rust.mk????????| 85
> > +++++++++++++++++++++++++++++++++++++++++++++
> > ?5 files changed, 122 insertions(+)
> > ?create mode 100644 package/rust/Config.in.host
> > ?create mode 100644 package/rust/rust.hash
> > ?create mode 100644 package/rust/rust.mk
> >
> > diff --git a/DEVELOPERS b/DEVELOPERS
> > index 1fed408..c0e7833 100644
> > --- a/DEVELOPERS
> > +++ b/DEVELOPERS
> > @@ -450,6 +450,7 @@ F:	package/hicolor-icon-theme/
> > ?F:	package/jemalloc/
> > ?F:	package/ninja/
> > ?F:	package/rust-bootstrap
> > +F:	package/rust
> > ?F:	package/s6/
> > ?F:	package/s6-dns/
> > ?F:	package/s6-linux-init/
> > diff --git a/package/Config.in.host b/package/Config.in.host
> > index 38f919a..ef5f23f 100644
> > --- a/package/Config.in.host
> > +++ b/package/Config.in.host
> > @@ -39,6 +39,7 @@ menu "Host utilities"
> > ?	source "package/python-lxml/Config.in.host"
> > ?	source "package/qemu/Config.in.host"
> > ?	source "package/raspberrypi-usbboot/Config.in.host"
> > +	source "package/rust/Config.in.host"
> > ?	source "package/s6-rc/Config.in.host"
> > ?	source "package/sam-ba/Config.in.host"
> > ?	source "package/squashfs/Config.in.host"
> > diff --git a/package/rust/Config.in.host
> > b/package/rust/Config.in.host
> > new file mode 100644
> > index 0000000..384a071
> > --- /dev/null
> > +++ b/package/rust/Config.in.host
> > @@ -0,0 +1,33 @@
> > +config BR2_PACKAGE_HOST_RUST_ARCH_SUPPORTS
> > +	bool
> > +	default y
> > +	depends on BR2_HOSTARCH = "x86_64" || BR2_HOSTARCH = "x86"
> > +	depends on??BR2_i386 || BR2_x86_64 \
> > +		|| BR2_arm??|| BR2_aarch64 \
> > +		|| BR2_powerpc??|| BR2_powerpc64 \
> > +		|| BR2_mips || BR2_mipsel || BR2_mips64 ||
> > BR2_mips64el
> > +	depends on !BR2_ARM_CPU_ARMV4 && !BR2_ARM_CPU_ARMV5
> > +	depends on !BR2_MIPS_NABI32
> > +	depends on BR2_TOOLCHAIN_USES_GLIBC
> > +	depends on BR2_HOST_GCC_AT_LEAST_4_7 # required by LLVM
> > +	# triggers ICE on trunc_int_for_mode, at explow.c:56
> > +	depends on BR2_TOOLCHAIN_GCC_AT_LEAST_5 || !BR2_aarch64
> > +
> > +comment "host-rust needs a toolchain w/ gcc >= 5"
> > +	depends on !BR2_TOOLCHAIN_GCC_AT_LEAST_5 && BR2_aarch64
> > +
> > +config BR2_PACKAGE_HOST_RUST
> > +	bool "host rust"
> > +	depends on BR2_PACKAGE_HOST_RUST_ARCH_SUPPORTS
> > +	help
> > +	??Compiler for the Rust programming language.
> > +
> > +	??This package will build the compiler for the host as well
> > as
> > +	??a cross-compiled version of the Rust standard library for
> > the
> > +	??target.
> > +
> > +	??Note that the target standard library does not need to be
> > +	??present on the target root filesystem, as it is statically
> > +	??linked to the program.
> > +
> > +	??http://www.rust-lang.org
> > diff --git a/package/rust/rust.hash b/package/rust/rust.hash
> > new file mode 100644
> > index 0000000..3b04dfd
> > --- /dev/null
> > +++ b/package/rust/rust.hash
> > @@ -0,0 +1,2 @@
> > +# Locally calculated
> > +sha256
> > f966b31eb1cd9bd2df817c391a338eeb5b9253ae0a19bf8a11960c560f96e8b4??rus
> > tc-1.16.0-src.tar.gz
> > diff --git a/package/rust/rust.mk b/package/rust/rust.mk
> > new file mode 100644
> > index 0000000..12f4428
> > --- /dev/null
> > +++ b/package/rust/rust.mk
> > @@ -0,0 +1,85 @@
> > +####################################################################
> > ############
> > +#
> > +# rust
> > +#
> > +####################################################################
> > ############
> > +
> > +RUST_VERSION = 1.16.0
> > +RUST_SOURCE = rustc-$(RUST_VERSION)-src.tar.gz
> > +RUST_SITE = https://static.rust-lang.org/dist
> > +RUST_LICENSE = Apache-2.0 or MIT
> > +RUST_LICENSE_FILES = LICENSE-APACHE LICENSE-MIT
> > +
> > +HOST_RUST_DEPENDENCIES = \
> > +	toolchain \
> > +	host-rust-bootstrap \
> > +	host-cargo-bootstrap \
> > +	host-python \
> > +	host-cmake
> > +
> > +ifeq ($(BR2_PACKAGE_JEMALLOC),y)
> > +HOST_RUST_DEPENDENCIES += jemalloc
> > +HOST_RUST_JEMALLOC_ENABLED = true
> > +HOST_RUST_JEMALLOC_CONF = 'jemalloc =
> > "$(STAGING_DIR)/usr/lib/libjemalloc_pic.a"'
> > +else
> > +HOST_RUST_JEMALLOC_ENABLED = false
> > +endif
> > +
> > +HOST_RUST_BUILD_OPTS = $(if $(VERBOSE),--verbose)
> > +
> > +RUST_TARGET_NAME := $(subst buildroot,unknown,$(GNU_TARGET_NAME))
> > +
> > +ifeq ($(BR2_ARM_CPU_ARMV7A),y)
> > +RUST_TARGET_NAME := $(subst arm-,armv7-,$(RUST_TARGET_NAME))
> > +endif
> > +
> > +ifeq ($(BR2_MIPS_NABI64),y)
> > +RUST_TARGET_NAME := $(subst -gnu,-gnuabi64,$(RUST_TARGET_NAME))
> > +endif
> > +
> > +define HOST_RUST_CONFIGURE_CMDS
> > +	(cd $(@D); \
> > +		echo '[build]' > config.toml; \
> > +		echo 'target = ["$(RUST_TARGET_NAME)"]' >>
> > config.toml; \
> > +		echo 'cargo =
> > "$(HOST_CARGO_BOOTSTRAP_DIR)/cargo/bin/cargo"' >> config.toml; \
> > +		echo 'rustc =
> > "$(HOST_RUST_BOOTSTRAP_DIR)/rustc/bin/rustc"' >> config.toml; \
> > +		echo 'python = "$(HOST_DIR)/usr/bin/python2"' >>
> > config.toml; \
> > +		echo 'submodules = false' >> config.toml; \
> > +		echo 'vendor = true' >> config.toml; \
> > +		echo 'compiler-docs = false' >> config.toml; \
> > +		echo 'docs = false' >> config.toml; \
> > +		echo '[install]' >> config.toml; \
> > +		echo 'prefix = "$(HOST_DIR)/usr"' >> config.toml; \
> > +		echo '[rust]' >> config.toml; \
> > +		echo 'use-jemalloc = $(HOST_RUST_JEMALLOC_ENABLED)'
> > >> config.toml; \
> > +		echo '[target.$(RUST_TARGET_NAME)]' >> config.toml;
> > \
> > +		echo 'cc = "$(TARGET_CROSS)gcc"' >> config.toml; \
> > +		echo 'cxx = "$(TARGET_CROSS)g++"' >> config.toml; \
> > +		echo $(HOST_RUST_JEMALLOC_CONF) >> config.toml; \
> > +	)
> > +endef
> > +
> > +define HOST_RUST_BUILD_CMDS
> > +	(cd $(@D); $(HOST_MAKE_ENV) $(HOST_RUST_MAKE_ENV) python2
> > x.py \
> > +		build $(HOST_RUST_BUILD_OPTS))
> > +endef
> > +
> > +define HOST_RUST_INSTALL_LIBSTD_TARGET
> > +	(cd $(@D)/build/tmp/dist/rust-std-$(RUST_VERSION)-dev-
> > $(RUST_TARGET_NAME); \
> > +		./install.sh \
> > +			--prefix=$(HOST_DIR)/usr \
> > +			--docdir=$(HOST_DIR)/usr/share/doc/rust \
> > +			--libdir=$(HOST_DIR)/usr/lib \
> > +			--mandir=$(HOST_DIR)/usr/share/man \
> > +			--disable-ldconfig)
> > +endef
> > +
> > +define HOST_RUST_INSTALL_CMDS
> > +	(cd $(@D); $(HOST_MAKE_ENV) $(HOST_RUST_MAKE_ENV) python2
> > x.py \
> > +		dist $(HOST_RUST_BUILD_OPTS))
> > +	(cd $(@D); $(HOST_MAKE_ENV) $(HOST_RUST_MAKE_ENV) python2
> > x.py \
> > +		dist --install $(HOST_RUST_BUILD_OPTS))
> > +	$(HOST_RUST_INSTALL_LIBSTD_TARGET)
> > +endef
> > +
> > +$(eval $(host-generic-package))
>
> Best regards,
> J?rg Krause

--
ELB

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

* [Buildroot] [Patch v4 2/3] cargo-bootstrap: new package
  2017-04-08  9:34     ` Eric Le Bihan
@ 2017-04-08 13:20       ` Thomas Petazzoni
  0 siblings, 0 replies; 21+ messages in thread
From: Thomas Petazzoni @ 2017-04-08 13:20 UTC (permalink / raw)
  To: buildroot

Hello,

On Sat, 8 Apr 2017 11:34:06 +0200, Eric Le Bihan wrote:
> Hi!
> 
> On 17-04-07 09:06:39, J?rg Krause wrote:
> > Hi Eric,
> >
> > On Sun, 2017-04-02 at 21:46 +0200, Eric Le Bihan wrote:  
> > > This new package fetches a binary snapshot of Cargo, suitable for the
> > > host, in order to bootstrap the Rust compiler and Cargo, the package
> > > manager.  
> >
> > Why not build it from source?  
> 
> Cargo uses Cargo as its build system, so you need to have a working
> version of Cargo on the host system to build a new version from the
> source code.
> 
> To build the Rust compiler a binary snapshot is enough.

Can you update the commit log to make it clearer? I guess whenever
there's a question on a patch, it often indicates that the commit log
was not detailed enough.

Thanks!

Thomas
-- 
Thomas Petazzoni, CTO, Free Electrons
Embedded Linux and Kernel engineering
http://free-electrons.com

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

* [Buildroot] [Patch v4 3/3] rust: new package
  2017-04-08 10:09     ` Eric Le Bihan
@ 2017-04-10 19:02       ` Jörg Krause
  2017-04-10 21:43         ` Arnout Vandecappelle
  0 siblings, 1 reply; 21+ messages in thread
From: Jörg Krause @ 2017-04-10 19:02 UTC (permalink / raw)
  To: buildroot

Hi,

On Sat, 2017-04-08 at 12:09 +0200, Eric Le Bihan wrote:
> Hi!
> 
> On 17-04-07 09:18:42, J?rg Krause wrote:
> > Hi Eric,
> > 
> > On Sun, 2017-04-02 at 21:46 +0200, Eric Le Bihan wrote:
> > > This new package provides the compiler for the Rust programming
> > > language.
> > > 
> > > Currently, only the host variant is built.
> > > 
> > > The Rust compiler uses LLVM as its backend: a copy of LLVM source
> > > code
> > > is provided and CMake is used to build it. It is possible to use a
> > > pre-built external copy. When LLVM/clang will be available in
> > > Buildroot,
> > > it would be possible to benefit from this feature and thus decrease
> > > build time.
> > > 
> > > LLVM is configured to generate code for x86, ARM, PowerPC and MIPS
> > > architectures.
> > > 
> > > The Rust compiler uses Cargo as its build system and is written in
> > > Rust.
> > > Therefore this package depends on cargo-bootstrap and rust-bootstrap.
> > > 
> > > The internal build process is as follows:
> > > 
> > > ?1. rustc-stage0, provided by rust-bootstrap, is used to build
> > > ????rustc-stage1.
> > > ?2. rust-stage1 builds the final Rust compiler (rust-stage2)
> > > ????and the standard library for the host architecture.
> > > ?3. the standard library for the target architecture is built.
> > 
> > So, we are doing the following: fetch the predecessor rust version
> > 1.15.1 as binary to use it as stage0 compiler for building the latest
> > rust stable version 1.16.0. Why not just fetch the latest stable
> > version and install it into the host dir? The same goes with libstd and
> > cargo. I mean, we have to fetch some binaries anyway, so why do the
> > time-consuming build steps anyway? Shouldn't there be at least the
> > option just to fetch the latest stable version?
> > 
> 
> It is true that building the Rust compiler is time consuming. As stated
> in the comment, this can be decreased if LLVM was already available. But
> if LLVM itself is built from source and not fetched as binary from
> Internet, then the issue is still there.
> 
> Currently Buildroot only offers downloading binary versions of the C/C++
> cross-compilers. It does not take into account alternative C/C++
> cross-compilers like LLVM/Clang or compilers for new languages like
> Rust, D, or Haskell (though I do not know if Haskell is useful on
> embedded systems).

For now, we could use the host rustc package to fetch the latest stable
binary for the host architecture. Additionally, we could add the option
to build the Rust compiler within Buildroot. In my opinion, this option
only makes sense if the compiler can be configured meaningfully.

> So, would it help to have a "Programming Languages" section in
> menuconfig where you can select Rust (or any other language) and choose
> between a using a pre-built compiler or build it from source?

In my opinion it would make more sense to have a menu "Toolchains" with
the submenus "C/C++ Toolchain", "Rust Toolchain", ...

> And where shoud LLVM/clang be exposed?

I would put it into "C/C++ Toolchain" (if we had such a menu).

> Note: Building a cross-compiler for D can be done via a patch to GCC
> thanks to GDC [1], but IIRC cross-compiling libphobos, the standard
> library, is another matter.
> 
> [1] https://github.com/D-Programming-GDC/GDC/releases

J?rg

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

* [Buildroot] [Patch v4 3/3] rust: new package
  2017-04-10 19:02       ` Jörg Krause
@ 2017-04-10 21:43         ` Arnout Vandecappelle
  2017-04-13  6:05           ` Jörg Krause
  0 siblings, 1 reply; 21+ messages in thread
From: Arnout Vandecappelle @ 2017-04-10 21:43 UTC (permalink / raw)
  To: buildroot



On 10-04-17 21:02, J?rg Krause wrote:
> Hi,
> 
> On Sat, 2017-04-08 at 12:09 +0200, Eric Le Bihan wrote:
[snip]
>> Currently Buildroot only offers downloading binary versions of the C/C++
>> cross-compilers. It does not take into account alternative C/C++
>> cross-compilers like LLVM/Clang or compilers for new languages like
>> Rust, D, or Haskell (though I do not know if Haskell is useful on
>> embedded systems).

 There's a huge difference between alternative C/C++ compilers and compilers for
other languages.

 Compilers for other languages we already have: python, mono, erlang. These are
just normal packages, and any package in that language depends on the host-xxx
package to provide the compiler. Similar to how packages that use the cmake
buildsystem depend on the host-cmake package.

 Alternative C/C++ compilers are something else entirely, because they replace
the special 'toolchain' target.

 Only when you can build an entire system with only the Rust compiler and
without C/C++ compiler you can consider them equivalent. That day is still far away.

> For now, we could use the host rustc package to fetch the latest stable
> binary for the host architecture. Additionally, we could add the option
> to build the Rust compiler within Buildroot. In my opinion, this option
> only makes sense if the compiler can be configured meaningfully.

 I agree.


>> So, would it help to have a "Programming Languages" section in
>> menuconfig where you can select Rust (or any other language) and choose
>> between a using a pre-built compiler or build it from source?
> 
> In my opinion it would make more sense to have a menu "Toolchains" with
> the submenus "C/C++ Toolchain", "Rust Toolchain", ...

 Given what I wrote above, I disagree. For the time being it's fine in the host
packages menu. If that menu becomes too large, we could add something like an
'Alternative programming languages' menu.



>> And where shoud LLVM/clang be exposed?
> 
> I would put it into "C/C++ Toolchain" (if we had such a menu).

 That's slightly more complicated. LLVM is just a library so it's just in the
host menu. clang is a compiler that can be a replacement for gcc, so it'd have
to go into the toolchain menu.

 Actually, Romain is working on LLVM/Clang. He's going to start adding it as a
normal host package, so not as a replacement of gcc as the toolchain.

 Regards,
 Arnout

> 
>> Note: Building a cross-compiler for D can be done via a patch to GCC
>> thanks to GDC [1], but IIRC cross-compiling libphobos, the standard
>> library, is another matter.
>>
>> [1] https://github.com/D-Programming-GDC/GDC/releases
> 
> J?rg
> _______________________________________________
> buildroot mailing list
> buildroot at busybox.net
> http://lists.busybox.net/mailman/listinfo/buildroot
> 

-- 
Arnout Vandecappelle                          arnout at mind be
Senior Embedded Software Architect            +32-16-286500
Essensium/Mind                                http://www.mind.be
G.Geenslaan 9, 3001 Leuven, Belgium           BE 872 984 063 RPR Leuven
LinkedIn profile: http://www.linkedin.com/in/arnoutvandecappelle
GPG fingerprint:  7493 020B C7E3 8618 8DEC 222C 82EB F404 F9AC 0DDF

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

* [Buildroot] [Patch v4 3/3] rust: new package
  2017-04-10 21:43         ` Arnout Vandecappelle
@ 2017-04-13  6:05           ` Jörg Krause
  2017-04-13 16:49             ` Eric Le Bihan
  0 siblings, 1 reply; 21+ messages in thread
From: Jörg Krause @ 2017-04-13  6:05 UTC (permalink / raw)
  To: buildroot

Hi,

On Mon, 2017-04-10 at 23:43 +0200, Arnout Vandecappelle wrote:
> 
> On 10-04-17 21:02, J?rg Krause wrote:
> > Hi,
> > 
> > On Sat, 2017-04-08 at 12:09 +0200, Eric Le Bihan wrote:
> 
> [snip]
> > > Currently Buildroot only offers downloading binary versions of the C/C++
> > > cross-compilers. It does not take into account alternative C/C++
> > > cross-compilers like LLVM/Clang or compilers for new languages like
> > > Rust, D, or Haskell (though I do not know if Haskell is useful on
> > > embedded systems).
> 
>  There's a huge difference between alternative C/C++ compilers and compilers for
> other languages.
> 
>  Compilers for other languages we already have: python, mono, erlang. These are
> just normal packages, and any package in that language depends on the host-xxx
> package to provide the compiler. Similar to how packages that use the cmake
> buildsystem depend on the host-cmake package.
> 
>  Alternative C/C++ compilers are something else entirely, because they replace
> the special 'toolchain' target.
> 
>  Only when you can build an entire system with only the Rust compiler and
> without C/C++ compiler you can consider them equivalent. That day is still far away.

I see!

> > For now, we could use the host rustc package to fetch the latest stable
> > binary for the host architecture. Additionally, we could add the option
> > to build the Rust compiler within Buildroot. In my opinion, this option
> > only makes sense if the compiler can be configured meaningfully.
> 
>  I agree.

Cool.

@Eric: Do you mind to do that? By default fetch the latest stable
release, and alternatively offer an option to build a "Custom Rust
package". I think it would also be helpful to have at least one Rust
package to add as a proof of concept.

> 
> > > So, would it help to have a "Programming Languages" section in
> > > menuconfig where you can select Rust (or any other language) and choose
> > > between a using a pre-built compiler or build it from source?
> > 
> > In my opinion it would make more sense to have a menu "Toolchains" with
> > the submenus "C/C++ Toolchain", "Rust Toolchain", ...
> 
>  Given what I wrote above, I disagree. For the time being it's fine in the host
> packages menu. If that menu becomes too large, we could add something like an
> 'Alternative programming languages' menu.
> 

Sounds reasonable.

> 
> > > And where shoud LLVM/clang be exposed?
> > 
> > I would put it into "C/C++ Toolchain" (if we had such a menu).
> 
>  That's slightly more complicated. LLVM is just a library so it's just in the
> host menu. clang is a compiler that can be a replacement for gcc, so it'd have
> to go into the toolchain menu.
> 
>  Actually, Romain is working on LLVM/Clang. He's going to start adding it as a
> normal host package, so not as a replacement of gcc as the toolchain.

Nice!

J?rg

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

* [Buildroot] [Patch v4 3/3] rust: new package
  2017-04-13  6:05           ` Jörg Krause
@ 2017-04-13 16:49             ` Eric Le Bihan
  2017-04-13 21:09               ` Arnout Vandecappelle
  0 siblings, 1 reply; 21+ messages in thread
From: Eric Le Bihan @ 2017-04-13 16:49 UTC (permalink / raw)
  To: buildroot

Le 2017-04-13 06:05, J?rg Krause a ?crit?:
> Hi,
> 
> On Mon, 2017-04-10 at 23:43 +0200, Arnout Vandecappelle wrote:
>> 
>> On 10-04-17 21:02, J?rg Krause wrote:
[snip]
>> > For now, we could use the host rustc package to fetch the latest stable
>> > binary for the host architecture. Additionally, we could add the option
>> > to build the Rust compiler within Buildroot. In my opinion, this option
>> > only makes sense if the compiler can be configured meaningfully.
>> 
>>  I agree.
> 
> Cool.
> 
> @Eric: Do you mind to do that? By default fetch the latest stable
> release, and alternatively offer an option to build a "Custom Rust
> package". I think it would also be helpful to have at least one Rust
> package to add as a proof of concept.

Currently this patch series provides:

- rust-bootstrap, which fetches the binary version N-1 of rust.
- cargo-bootstrap, which fetches a nightly binary version of cargo.
- rust, which uses the two previous packages to build version N of rust.

I also have another patch series which adds a new package for cargo, 
which
uses cargo-bootstrap and rust to build Cargo from source.

IMHO, modifying the current version of the rust package to download the
latest version and providing an option to build from source would make
the Makefile of the package more complicated.

Would it not be better to use host virtual packages? Something like:

- rust-rustc: host virtual package, with two providers:
   * rustc-bin: fetches binary version N of rustc and libstd (host and
     target).
   * rustc: builds version N of rustc and libstd (host and target).
     Depends on rust-bootstrap (version N-1) and cargo-bootstrap.
- rust-cargo: host virtual package with two providers:
   * cargo-bin: fetches binary version N of Cargo.
   * cargo: builds version N of Cargo using rust and cargo-bootstrap.

And instead of littering the package directory with rust-* and cargo-*,
how about putting all these packages in a parent directory named
package/rust?

The file package/Config.in.host should also be modified to include
package/rust/Config.in.host, which would present the options to select
the providers for rust-rustc and rust-cargo.

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

* [Buildroot] [Patch v4 3/3] rust: new package
  2017-04-13 16:49             ` Eric Le Bihan
@ 2017-04-13 21:09               ` Arnout Vandecappelle
  0 siblings, 0 replies; 21+ messages in thread
From: Arnout Vandecappelle @ 2017-04-13 21:09 UTC (permalink / raw)
  To: buildroot



On 13-04-17 18:49, Eric Le Bihan wrote:
> Le 2017-04-13 06:05, J?rg Krause a ?crit :
>> Hi,
>>
>> On Mon, 2017-04-10 at 23:43 +0200, Arnout Vandecappelle wrote:
>>>
>>> On 10-04-17 21:02, J?rg Krause wrote:
> [snip]
>>> > For now, we could use the host rustc package to fetch the latest stable
>>> > binary for the host architecture. Additionally, we could add the option
>>> > to build the Rust compiler within Buildroot. In my opinion, this option
>>> > only makes sense if the compiler can be configured meaningfully.
>>>
>>>  I agree.
>>
>> Cool.
>>
>> @Eric: Do you mind to do that? By default fetch the latest stable
>> release, and alternatively offer an option to build a "Custom Rust
>> package". I think it would also be helpful to have at least one Rust
>> package to add as a proof of concept.
> 
> Currently this patch series provides:
> 
> - rust-bootstrap, which fetches the binary version N-1 of rust.
> - cargo-bootstrap, which fetches a nightly binary version of cargo.
> - rust, which uses the two previous packages to build version N of rust.
> 
> I also have another patch series which adds a new package for cargo, which
> uses cargo-bootstrap and rust to build Cargo from source.
> 
> IMHO, modifying the current version of the rust package to download the
> latest version and providing an option to build from source would make
> the Makefile of the package more complicated.

 I think Joerg's point is that we could just as well have *only* rust-bootstrap
(which would then be named "rust", of course). Why would you fetch version N-1
to build version N, if you can just fetch version N?

 If there is a reason to actually build it (like we need to set some options),
then it makes sense to have the -bootstrap.

> 
> Would it not be better to use host virtual packages? Something like:
> 
> - rust-rustc: host virtual package, with two providers:
>   * rustc-bin: fetches binary version N of rustc and libstd (host and
>     target).
>   * rustc: builds version N of rustc and libstd (host and target).
>     Depends on rust-bootstrap (version N-1) and cargo-bootstrap.
> - rust-cargo: host virtual package with two providers:
>   * cargo-bin: fetches binary version N of Cargo.
>   * cargo: builds version N of Cargo using rust and cargo-bootstrap.

 This actually sounds like an elegant solution to me. And it scales, i.e. you
can start just adding rustc-bin and cargo-bin, and later add rustc and cargo if
it's useful for something.


> And instead of littering the package directory with rust-* and cargo-*,
> how about putting all these packages in a parent directory named
> package/rust?

 Since you haven't proposed any package yet that depends on rust, it's hard to
say. We prefer to avoid subdirectories because it makes things harder to find -
we actually moved things out of a few subdirectories some years ago. The ones
that are left are the obvious ones: qt5, gstreamer{,1}, x11r7.

 For Rust, I don't see how it makes much sense. It could make sense for things
like perl, python and lua because there the packages are really tied to the
language (except for a few user-facing applications, but these don't usually
have a python- prefix).

 For Rust, however, I think the packages that depend on it are not so tied to
the language. They'll either be user-facing applications, or libraries that may
just as well be linked with C code. No? So the rust/ directory would have just
rust and cargo...

 What *does* make sense, is to keep rust and cargo together in Config.in.host.

 Regards,
 Arnout


> The file package/Config.in.host should also be modified to include
> package/rust/Config.in.host, which would present the options to select
> the providers for rust-rustc and rust-cargo.
> 
> 

-- 
Arnout Vandecappelle                          arnout at mind be
Senior Embedded Software Architect            +32-16-286500
Essensium/Mind                                http://www.mind.be
G.Geenslaan 9, 3001 Leuven, Belgium           BE 872 984 063 RPR Leuven
LinkedIn profile: http://www.linkedin.com/in/arnoutvandecappelle
GPG fingerprint:  7493 020B C7E3 8618 8DEC 222C 82EB F404 F9AC 0DDF

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

end of thread, other threads:[~2017-04-13 21:09 UTC | newest]

Thread overview: 21+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-04-02 19:46 [Buildroot] [Patch v4 0/3] Add support for the Rust programming language Eric Le Bihan
2017-04-02 19:46 ` [Buildroot] [Patch v4 1/3] rust-bootstrap: new package Eric Le Bihan
2017-04-07  7:03   ` Jörg Krause
2017-04-07  8:26     ` Thomas Petazzoni
2017-04-07  8:54       ` Jörg Krause
2017-04-07  9:03         ` Thomas Petazzoni
2017-04-07  9:22           ` Jörg Krause
2017-04-07 10:26             ` Thomas Petazzoni
2017-04-08  9:23     ` Eric Le Bihan
2017-04-02 19:46 ` [Buildroot] [Patch v4 2/3] cargo-bootstrap: " Eric Le Bihan
2017-04-07  7:06   ` Jörg Krause
2017-04-08  9:34     ` Eric Le Bihan
2017-04-08 13:20       ` Thomas Petazzoni
2017-04-02 19:46 ` [Buildroot] [Patch v4 3/3] rust: " Eric Le Bihan
2017-04-07  7:18   ` Jörg Krause
2017-04-08 10:09     ` Eric Le Bihan
2017-04-10 19:02       ` Jörg Krause
2017-04-10 21:43         ` Arnout Vandecappelle
2017-04-13  6:05           ` Jörg Krause
2017-04-13 16:49             ` Eric Le Bihan
2017-04-13 21:09               ` Arnout Vandecappelle

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.