rust: refactor build helper
Added new RustBinPackage, RustBinHostBuild wrapper. Added new RUST_PKG_FEATURES flag. Moved CARGO_HOME to STAGING_DIR_HOSTPKG. Overrode default Build/Compile and Host/Compile to Cargo build. Signed-off-by: Tianling Shen <cnsztl@immortalwrt.org>
This commit is contained in:
parent
473bc722ea
commit
e7016bb4bc
4 changed files with 86 additions and 29 deletions
|
@ -20,9 +20,9 @@ PKG_LICENSE_FILES:=LICENSE-APACHE LICENSE-MIT
|
||||||
HOST_BUILD_DEPENDS:=python3/host
|
HOST_BUILD_DEPENDS:=python3/host
|
||||||
PKG_HOST_ONLY:=1
|
PKG_HOST_ONLY:=1
|
||||||
|
|
||||||
include $(INCLUDE_DIR)/package.mk
|
|
||||||
include $(INCLUDE_DIR)/host-build.mk
|
include $(INCLUDE_DIR)/host-build.mk
|
||||||
include ./rust-host.mk
|
include $(INCLUDE_DIR)/package.mk
|
||||||
|
include ./rust-values.mk
|
||||||
|
|
||||||
define Package/rust
|
define Package/rust
|
||||||
SECTION:=lang
|
SECTION:=lang
|
||||||
|
|
45
lang/rust/rust-host-build.mk
Normal file
45
lang/rust/rust-host-build.mk
Normal file
|
@ -0,0 +1,45 @@
|
||||||
|
# SPDX-License-Identifier: GPL-2.0-only
|
||||||
|
#
|
||||||
|
# Copyright (C) 2023 Luca Barbato and Donald Hoskins
|
||||||
|
|
||||||
|
ifeq ($(origin RUST_INCLUDE_DIR),undefined)
|
||||||
|
RUST_INCLUDE_DIR:=$(dir $(lastword $(MAKEFILE_LIST)))
|
||||||
|
endif
|
||||||
|
include $(RUST_INCLUDE_DIR)/rust-values.mk
|
||||||
|
|
||||||
|
# $(1) path to the package (optional)
|
||||||
|
# $(2) additional arguments to cargo (optional)
|
||||||
|
define Host/Compile/Cargo
|
||||||
|
( \
|
||||||
|
cd $(HOST_BUILD_DIR) ; \
|
||||||
|
export PATH="$(CARGO_HOME)/bin:$(PATH)" ; \
|
||||||
|
CARGO_HOME=$(CARGO_HOME) \
|
||||||
|
CC=$(HOSTCC_NOCACHE) \
|
||||||
|
cargo install -v \
|
||||||
|
--profile stripped \
|
||||||
|
$(if $(RUST_PKG_FEATURES),--features "$(RUST_PKG_FEATURES)") \
|
||||||
|
--root $(HOST_INSTALL_DIR) \
|
||||||
|
--path "$(if $(strip $(1)),$(strip $(1)),.)" $(2) ; \
|
||||||
|
)
|
||||||
|
endef
|
||||||
|
|
||||||
|
define Host/Uninstall/Cargo
|
||||||
|
( \
|
||||||
|
cd $(HOST_BUILD_DIR) ; \
|
||||||
|
export PATH="$(CARGO_HOME)/bin:$(PATH)" ; \
|
||||||
|
CARGO_HOME=$(CARGO_HOME) \
|
||||||
|
CC=$(HOSTCC_NOCACHE) \
|
||||||
|
cargo uninstall -v \
|
||||||
|
--root $(HOST_INSTALL_DIR) || true ; \
|
||||||
|
)
|
||||||
|
endef
|
||||||
|
|
||||||
|
define RustBinHostBuild
|
||||||
|
define Host/Install
|
||||||
|
$(INSTALL_DIR) $(STAGING_DIR_HOSTPKG)/bin
|
||||||
|
$(INSTALL_BIN) $(HOST_INSTALL_DIR)/bin/* $(STAGING_DIR_HOSTPKG)/bin/
|
||||||
|
endef
|
||||||
|
endef
|
||||||
|
|
||||||
|
Host/Compile=$(call Host/Compile/Cargo)
|
||||||
|
Host/Uninstall=$(call Host/Uninstall/Cargo)
|
|
@ -2,27 +2,49 @@
|
||||||
#
|
#
|
||||||
# Copyright (C) 2023 Luca Barbato and Donald Hoskins
|
# Copyright (C) 2023 Luca Barbato and Donald Hoskins
|
||||||
|
|
||||||
rust_mk_path:=$(dir $(lastword $(MAKEFILE_LIST)))
|
# Variables (all optional) to be set in package Makefiles:
|
||||||
include $(rust_mk_path)rust-host.mk
|
#
|
||||||
|
# RUST_PKG_FEATURES - list of options, default empty
|
||||||
|
#
|
||||||
|
# Space or comma separated list of features to activate
|
||||||
|
#
|
||||||
|
# e.g. RUST_PKG_FEATURES:=enable-foo,with-bar
|
||||||
|
|
||||||
# $(1) path to the package
|
ifeq ($(origin RUST_INCLUDE_DIR),undefined)
|
||||||
# $(2) additional arguments to cargo
|
RUST_INCLUDE_DIR:=$(dir $(lastword $(MAKEFILE_LIST)))
|
||||||
define Host/Compile/Cargo
|
endif
|
||||||
( \
|
include $(RUST_INCLUDE_DIR)/rust-values.mk
|
||||||
cd $(HOST_BUILD_DIR) ; \
|
|
||||||
export PATH="$(CARGO_HOME)/bin:$(PATH)" ; \
|
|
||||||
CARGO_HOME=$(CARGO_HOME) CC=$(HOSTCC) \
|
|
||||||
cargo install -v --profile stripped --root $(HOST_INSTALL_DIR) --path "$(if $(strip $(1)),$(strip $(1)),.)" $(2) ; \
|
|
||||||
)
|
|
||||||
endef
|
|
||||||
|
|
||||||
# $(1) path to the package
|
# Support only a subset for now.
|
||||||
# $(2) additional arguments to cargo
|
RUST_ARCH_DEPENDS:=@(aarch64||arm||i386||i686||mips||mipsel||mips64||mips64el||mipsel||powerpc64||x86_64)
|
||||||
|
|
||||||
|
# $(1) path to the package (optional)
|
||||||
|
# $(2) additional arguments to cargo (optional)
|
||||||
define Build/Compile/Cargo
|
define Build/Compile/Cargo
|
||||||
( \
|
( \
|
||||||
cd $(PKG_BUILD_DIR) ; \
|
cd $(PKG_BUILD_DIR) ; \
|
||||||
export PATH="$(CARGO_HOME)/bin:$(PATH)" ; \
|
export PATH="$(CARGO_HOME)/bin:$(PATH)" ; \
|
||||||
CARGO_HOME=$(CARGO_HOME) TARGET_CFLAGS="$(TARGET_CFLAGS) $(RUST_CFLAGS)" TARGET_CC=$(TARGET_CC_NOCACHE) CC=cc \
|
CARGO_HOME=$(CARGO_HOME) \
|
||||||
cargo install -v --profile stripped --target $(RUSTC_TARGET_ARCH) --root $(PKG_INSTALL_DIR) --path "$(if $(strip $(1)),$(strip $(1)),.)" $(2) ; \
|
TARGET_CFLAGS="$(TARGET_CFLAGS) $(RUST_CFLAGS)" \
|
||||||
|
TARGET_CC=$(TARGET_CC_NOCACHE) \
|
||||||
|
CC=$(HOSTCC) \
|
||||||
|
cargo install -v \
|
||||||
|
--profile stripped \
|
||||||
|
--target $(RUSTC_TARGET_ARCH) \
|
||||||
|
$(if $(strip $(RUST_PKG_FEATURES)),--features "$(strip $(RUST_PKG_FEATURES))") \
|
||||||
|
--root $(PKG_INSTALL_DIR) \
|
||||||
|
--path "$(if $(strip $(1)),$(strip $(1)),.)" \
|
||||||
|
$(2) ; \
|
||||||
)
|
)
|
||||||
endef
|
endef
|
||||||
|
|
||||||
|
define RustBinPackage
|
||||||
|
ifndef Package/$(1)/install
|
||||||
|
define Package/$(1)/install
|
||||||
|
$$(INSTALL_DIR) $$(1)/usr/bin/
|
||||||
|
$$(INSTALL_BIN) $$(PKG_INSTALL_DIR)/bin/* $$(1)/usr/bin/
|
||||||
|
endef
|
||||||
|
endif
|
||||||
|
endef
|
||||||
|
|
||||||
|
Build/Compile=$(call Build/Compile/Cargo)
|
||||||
|
|
|
@ -5,17 +5,7 @@
|
||||||
# Rust Environmental Vars
|
# Rust Environmental Vars
|
||||||
CONFIG_HOST_SUFFIX:=$(word 4, $(subst -, ,$(GNU_HOST_NAME)))
|
CONFIG_HOST_SUFFIX:=$(word 4, $(subst -, ,$(GNU_HOST_NAME)))
|
||||||
RUSTC_HOST_ARCH:=$(HOST_ARCH)-unknown-linux-$(CONFIG_HOST_SUFFIX)
|
RUSTC_HOST_ARCH:=$(HOST_ARCH)-unknown-linux-$(CONFIG_HOST_SUFFIX)
|
||||||
CARGO_HOME:=$(STAGING_DIR_HOST)/cargo
|
CARGO_HOME:=$(STAGING_DIR_HOSTPKG)/cargo
|
||||||
|
|
||||||
# Support only a subset for now.
|
|
||||||
RUST_ARCH_DEPENDS:=@(aarch64||arm||i386||i686||mips||mipsel||mips64||mips64el||mipsel||powerpc64||x86_64)
|
|
||||||
|
|
||||||
# Common Build Flags
|
|
||||||
RUST_BUILD_FLAGS = \
|
|
||||||
CARGO_HOME="$(CARGO_HOME)"
|
|
||||||
|
|
||||||
# This adds the rust environmental variables to Make calls
|
|
||||||
MAKE_FLAGS += $(RUST_BUILD_FLAGS)
|
|
||||||
|
|
||||||
# Force linking of the SSP library
|
# Force linking of the SSP library
|
||||||
ifdef CONFIG_PKG_CC_STACKPROTECTOR_REGULAR
|
ifdef CONFIG_PKG_CC_STACKPROTECTOR_REGULAR
|
Loading…
Reference in a new issue