From b4ec01739865770e3d0432683406844f7fd8e707 Mon Sep 17 00:00:00 2001 From: Jeffery To Date: Mon, 25 Sep 2023 10:00:58 +0800 Subject: [PATCH] rust: Add option to use sccache Using sccache makes recompilation of rustc and Rust packages faster. This also makes the rust package visible in menuconfig, in order for the sccache options to be accessible. Signed-off-by: Jeffery To --- lang/rust/Config.in | 15 +++++++++++++++ lang/rust/Makefile | 6 +++++- lang/rust/rust-values.mk | 11 +++++++++++ 3 files changed, 31 insertions(+), 1 deletion(-) create mode 100644 lang/rust/Config.in diff --git a/lang/rust/Config.in b/lang/rust/Config.in new file mode 100644 index 0000000000..62051af139 --- /dev/null +++ b/lang/rust/Config.in @@ -0,0 +1,15 @@ +menu "Configuration options (for developers)" + +config RUST_SCCACHE + bool "Use sccache" + help + Shared compilation cache; see https://github.com/mozilla/sccache + +config RUST_SCCACHE_DIR + string "Set sccache directory" if RUST_SCCACHE + default "" + help + Store sccache in this directory. + If not set, uses './.sccache' + +endmenu diff --git a/lang/rust/Makefile b/lang/rust/Makefile index d0a9ef48d5..7785e95f13 100644 --- a/lang/rust/Makefile +++ b/lang/rust/Makefile @@ -30,7 +30,6 @@ define Package/rust TITLE:=Rust Programming Language Compiler URL:=https://www.rust-lang.org/ DEPENDS:=$(RUST_ARCH_DEPENDS) - BUILDONLY:=1 endef define Package/rust/description @@ -39,6 +38,10 @@ define Package/rust/description guarantee memory safety by using a borrow checker to validate references. endef +define Package/rust/config + source "$(SOURCE)/Config.in" +endef + # Rust-lang has an uninstall script RUST_UNINSTALL:=$(STAGING_DIR)/host/lib/rustlib/uninstall.sh @@ -80,6 +83,7 @@ define Host/Uninstall endef define Host/Compile + $(RUST_SCCACHE_VARS) \ CARGO_HOME=$(CARGO_HOME) \ OPENWRT_RUSTC_BOOTSTRAP_CACHE=$(DL_DIR)/rustc \ $(PYTHON) $(HOST_BUILD_DIR)/x.py \ diff --git a/lang/rust/rust-values.mk b/lang/rust/rust-values.mk index 8f2017af6b..0a18cd17f4 100644 --- a/lang/rust/rust-values.mk +++ b/lang/rust/rust-values.mk @@ -62,12 +62,23 @@ endif # Support only a subset for now. RUST_ARCH_DEPENDS:=@(aarch64||arm||i386||i686||mips||mipsel||mips64||mips64el||mipsel||powerpc64||riscv64||x86_64) +ifneq ($(CONFIG_RUST_SCCACHE),) + RUST_SCCACHE_DIR:=$(if $(call qstrip,$(CONFIG_RUST_SCCACHE_DIR)),$(call qstrip,$(CONFIG_RUST_SCCACHE_DIR)),$(TOPDIR)/.sccache) + + RUST_SCCACHE_VARS:= \ + CARGO_INCREMENTAL=0 \ + RUSTC_WRAPPER=sccache \ + SCCACHE_DIR=$(RUST_SCCACHE_DIR) +endif + CARGO_HOST_CONFIG_VARS= \ + $(RUST_SCCACHE_VARS) \ CARGO_HOME=$(CARGO_HOME) CARGO_HOST_PROFILE:=release CARGO_PKG_CONFIG_VARS= \ + $(RUST_SCCACHE_VARS) \ CARGO_BUILD_TARGET=$(RUSTC_TARGET_ARCH) \ CARGO_HOME=$(CARGO_HOME) \ CARGO_PROFILE_RELEASE_OPT_LEVEL=s \