rust: Add option to use sccache
authorJeffery To <redacted>
Mon, 25 Sep 2023 02:00:58 +0000 (10:00 +0800)
committerJeffery To <redacted>
Wed, 11 Oct 2023 07:50:24 +0000 (15:50 +0800)
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 <redacted>
lang/rust/Config.in [new file with mode: 0644]
lang/rust/Makefile
lang/rust/rust-values.mk

diff --git a/lang/rust/Config.in b/lang/rust/Config.in
new file mode 100644 (file)
index 0000000..62051af
--- /dev/null
@@ -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
index d0a9ef48d5f0ce80d1d71755290fcceaf230fa34..7785e95f139f5dafa03d3a8a5299759d53689689 100644 (file)
@@ -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 \
index 8f2017af6b14e937bf2f6eb7636cb2ffd7231fbd..0a18cd17f4d0a03d9c735c4810ac160c676d13d6 100644 (file)
@@ -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 \
git clone https://git.99rst.org/PROJECT