rust: new package
This new package provides rustc, the compiler for the Rust programming
language, built from source.
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-bin and rust-bin.
The internal build process is as follows:
1. stage0 compiler, provided by rust-bin, is used to build stage1
compiler.
2. stage1 compiler builds the final Rust compiler (stage2 compiler)
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 uses $(RUST_TARGET_NAME) defined in the rustc package 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.
The menuconfig entry for rustc is also updated to expose this provider.
[1] https://forge.rust-lang.org/platform-support.html
Signed-off-by: Eric Le Bihan <eric.le.bihan.dev@free.fr>
Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
2018-02-04 19:07:43 +01:00
|
|
|
################################################################################
|
|
|
|
#
|
|
|
|
# rust
|
|
|
|
#
|
|
|
|
################################################################################
|
|
|
|
|
|
|
|
RUST_VERSION = 1.23.0
|
|
|
|
RUST_SOURCE = rustc-$(RUST_VERSION)-src.tar.xz
|
|
|
|
RUST_SITE = https://static.rust-lang.org/dist
|
|
|
|
RUST_LICENSE = Apache-2.0 or MIT
|
|
|
|
RUST_LICENSE_FILES = LICENSE-APACHE LICENSE-MIT
|
|
|
|
|
|
|
|
HOST_RUST_PROVIDES = host-rustc
|
|
|
|
|
|
|
|
HOST_RUST_DEPENDENCIES = \
|
|
|
|
toolchain \
|
|
|
|
host-rust-bin \
|
|
|
|
host-cargo-bin \
|
|
|
|
host-python \
|
|
|
|
$(BR2_CMAKE_HOST_DEPENDENCY)
|
|
|
|
|
|
|
|
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_VERBOSITY = $(if $(VERBOSE),2,0)
|
|
|
|
|
|
|
|
# Some vendor crates contain Cargo.toml.orig files. The associated
|
|
|
|
# .cargo-checksum.json file will contain a checksum for Cargo.toml.orig but
|
|
|
|
# support/scripts/apply-patches.sh will delete them. This will cause the build
|
|
|
|
# to fail, as Cargo will not be able to find the file and verify the checksum.
|
|
|
|
# So, remove all Cargo.toml.orig entries from the affected .cargo-checksum.json
|
|
|
|
# files
|
|
|
|
define HOST_RUST_EXCLUDE_ORIG_FILES
|
|
|
|
for file in $$(find $(@D) -name '*.orig'); do \
|
|
|
|
crate=$$(dirname $${file}); \
|
|
|
|
fn=$${crate}/.cargo-checksum.json; \
|
|
|
|
sed -i -e 's/"Cargo.toml.orig":"[a-z0-9]\+",//g' $${fn}; \
|
|
|
|
done
|
|
|
|
endef
|
|
|
|
|
|
|
|
HOST_RUST_POST_EXTRACT_HOOKS += HOST_RUST_EXCLUDE_ORIG_FILES
|
|
|
|
|
|
|
|
define HOST_RUST_CONFIGURE_CMDS
|
|
|
|
( \
|
|
|
|
echo '[build]'; \
|
2018-02-13 08:21:27 +01:00
|
|
|
echo 'target = ["$(RUSTC_TARGET_NAME)"]'; \
|
rust: new package
This new package provides rustc, the compiler for the Rust programming
language, built from source.
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-bin and rust-bin.
The internal build process is as follows:
1. stage0 compiler, provided by rust-bin, is used to build stage1
compiler.
2. stage1 compiler builds the final Rust compiler (stage2 compiler)
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 uses $(RUST_TARGET_NAME) defined in the rustc package 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.
The menuconfig entry for rustc is also updated to expose this provider.
[1] https://forge.rust-lang.org/platform-support.html
Signed-off-by: Eric Le Bihan <eric.le.bihan.dev@free.fr>
Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
2018-02-04 19:07:43 +01:00
|
|
|
echo 'cargo = "$(HOST_CARGO_BIN_DIR)/cargo/bin/cargo"'; \
|
|
|
|
echo 'rustc = "$(HOST_RUST_BIN_DIR)/rustc/bin/rustc"'; \
|
|
|
|
echo 'python = "$(HOST_DIR)/bin/python2"'; \
|
|
|
|
echo 'submodules = false'; \
|
|
|
|
echo 'vendor = true'; \
|
|
|
|
echo 'compiler-docs = false'; \
|
|
|
|
echo 'docs = false'; \
|
|
|
|
echo 'verbose = $(HOST_RUST_VERBOSITY)'; \
|
|
|
|
echo '[install]'; \
|
|
|
|
echo 'prefix = "$(HOST_DIR)"'; \
|
|
|
|
echo '[rust]'; \
|
|
|
|
echo 'use-jemalloc = $(HOST_RUST_JEMALLOC_ENABLED)'; \
|
2018-02-13 08:21:27 +01:00
|
|
|
echo '[target.$(RUSTC_TARGET_NAME)]'; \
|
rust: new package
This new package provides rustc, the compiler for the Rust programming
language, built from source.
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-bin and rust-bin.
The internal build process is as follows:
1. stage0 compiler, provided by rust-bin, is used to build stage1
compiler.
2. stage1 compiler builds the final Rust compiler (stage2 compiler)
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 uses $(RUST_TARGET_NAME) defined in the rustc package 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.
The menuconfig entry for rustc is also updated to expose this provider.
[1] https://forge.rust-lang.org/platform-support.html
Signed-off-by: Eric Le Bihan <eric.le.bihan.dev@free.fr>
Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
2018-02-04 19:07:43 +01:00
|
|
|
echo 'cc = "$(TARGET_CROSS)gcc"'; \
|
|
|
|
echo $(HOST_RUST_JEMALLOC_CONF); \
|
|
|
|
) > $(@D)/config.toml
|
|
|
|
endef
|
|
|
|
|
|
|
|
define HOST_RUST_BUILD_CMDS
|
|
|
|
cd $(@D); $(HOST_MAKE_ENV) $(HOST_DIR)/bin/python2 x.py build
|
|
|
|
endef
|
|
|
|
|
|
|
|
define HOST_RUST_INSTALL_CMDS
|
|
|
|
cd $(@D); $(HOST_MAKE_ENV) $(HOST_DIR)/bin/python2 x.py dist
|
|
|
|
cd $(@D); $(HOST_MAKE_ENV) $(HOST_DIR)/bin/python2 x.py install
|
|
|
|
endef
|
|
|
|
|
|
|
|
$(eval $(host-generic-package))
|