# SPDX-License-Identifier: GPL-2.0-only # # Copyright (C) 2023 Luca Barbato and Donald Hoskins include $(TOPDIR)/rules.mk PKG_NAME:=rust PKG_VERSION:=1.75.0 PKG_RELEASE:=1 PKG_SOURCE:=rustc-$(PKG_VERSION)-src.tar.gz PKG_SOURCE_URL:=https://static.rust-lang.org/dist/ PKG_HASH:=5b739f45bc9d341e2d1c570d65d2375591e22c2d23ef5b8a37711a0386abc088 HOST_BUILD_DIR:=$(BUILD_DIR)/host/rustc-$(PKG_VERSION)-src PKG_MAINTAINER:=Luca Barbato PKG_LICENSE:=Apache-2.0 MIT PKG_LICENSE_FILES:=LICENSE-APACHE LICENSE-MIT PKG_HOST_ONLY:=1 PKG_BUILD_FLAGS:=no-mips16 include $(INCLUDE_DIR)/host-build.mk include $(INCLUDE_DIR)/package.mk include ./rust-values.mk define Package/rust SECTION:=lang CATEGORY:=Languages SUBMENU:=Rust TITLE:=Rust Programming Language Compiler URL:=https://www.rust-lang.org/ DEPENDS:=$(RUST_ARCH_DEPENDS) endef define Package/rust/description Rust is a multi-paradigm, general-purpose programming language designed for performance and safety, especially safe concurrency. Rust is syntactically similar to C++, but can 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 # Target Flags TARGET_CONFIGURE_ARGS = \ --set=target.$(RUSTC_TARGET_ARCH).ar=$(TARGET_AR) \ --set=target.$(RUSTC_TARGET_ARCH).cc=$(TARGET_CC_NOCACHE) \ --set=target.$(RUSTC_TARGET_ARCH).cxx=$(TARGET_CXX_NOCACHE) \ --set=target.$(RUSTC_TARGET_ARCH).linker=$(TARGET_CC_NOCACHE) \ --set=target.$(RUSTC_TARGET_ARCH).ranlib=$(TARGET_RANLIB) \ --set=target.$(RUSTC_TARGET_ARCH).crt-static=false \ $(if $(CONFIG_USE_MUSL),--set=target.$(RUSTC_TARGET_ARCH).musl-root=$(TOOLCHAIN_DIR)) # CARGO_HOME is an environmental HOST_CONFIGURE_VARS += CARGO_HOME="$(CARGO_HOME)" # Rust Configuration Arguments HOST_CONFIGURE_ARGS = \ --build=$(RUSTC_HOST_ARCH) \ --target=$(RUSTC_TARGET_ARCH),$(RUSTC_HOST_ARCH) \ --host=$(RUSTC_HOST_ARCH) \ --prefix=$(STAGING_DIR)/host \ --bindir=$(STAGING_DIR)/host/bin \ --libdir=$(STAGING_DIR)/host/lib \ --sysconfdir=$(STAGING_DIR)/host/etc \ --datadir=$(STAGING_DIR)/host/share \ --mandir=$(STAGING_DIR)/host/man \ --dist-compression-formats=gz \ --enable-missing-tools \ --disable-sanitizers \ --release-channel=stable \ --enable-cargo-native-static \ --set=llvm.download-ci-llvm=true \ $(TARGET_CONFIGURE_ARGS) define Host/Uninstall # Call the Uninstall script [ -f $(RUST_UNINSTALL) ] && \ $(BASH) $(RUST_UNINSTALL) || echo No Uninstall endef define Host/Compile $(RUST_SCCACHE_VARS) \ CARGO_HOME=$(CARGO_HOME) \ TARGET_CFLAGS="$(TARGET_CFLAGS)" \ OPENWRT_RUSTC_BOOTSTRAP_CACHE=$(DL_DIR)/rustc \ $(PYTHON) $(HOST_BUILD_DIR)/x.py \ --build-dir $(HOST_BUILD_DIR)/build \ --config $(HOST_BUILD_DIR)/config.toml \ dist build-manifest cargo llvm-tools rustc rust-std rust-src endef define Host/Install ( \ cd $(HOST_BUILD_DIR)/build/dist ; \ for targz in *.tar.gz; do \ $(STAGING_DIR_HOST)/bin/libdeflate-gzip -dc "$$$$targz" | tar -xf - ; \ done ; \ find . -mindepth 2 -maxdepth 2 -type f -name install.sh \ -execdir bash '{}' --prefix=$(STAGING_DIR)/host --disable-ldconfig \; ; \ ) endef $(eval $(call HostBuild)) $(eval $(call BuildPackage,rust))