78d95d3d9ca5244a55803094d7f211655ceebeae
[feed/packages.git] / lang / rust / Makefile
1 # SPDX-License-Identifier: GPL-2.0-only
2 #
3 # Copyright (C) 2023 Luca Barbato and Donald Hoskins
4
5 include $(TOPDIR)/rules.mk
6
7 PKG_NAME:=rust
8 PKG_VERSION:=1.73.0
9 PKG_RELEASE:=2
10
11 PKG_SOURCE:=rustc-$(PKG_VERSION)-src.tar.gz
12 PKG_SOURCE_URL:=https://static.rust-lang.org/dist/
13 PKG_HASH:=96d62e6d1f2d21df7ac8acb3b9882411f9e7c7036173f7f2ede9e1f1f6b1bb3a
14 HOST_BUILD_DIR:=$(BUILD_DIR)/host/rustc-$(PKG_VERSION)-src
15
16 PKG_MAINTAINER:=Luca Barbato <lu_zero@luminem.org>
17 PKG_LICENSE:=Apache-2.0 MIT
18 PKG_LICENSE_FILES:=LICENSE-APACHE LICENSE-MIT
19
20 PKG_HOST_ONLY:=1
21 PKG_BUILD_FLAGS:=no-mips16
22
23 include $(INCLUDE_DIR)/host-build.mk
24 include $(INCLUDE_DIR)/package.mk
25 include ./rust-values.mk
26
27 define Package/rust
28 SECTION:=lang
29 CATEGORY:=Languages
30 SUBMENU:=Rust
31 TITLE:=Rust Programming Language Compiler
32 URL:=https://www.rust-lang.org/
33 DEPENDS:=$(RUST_ARCH_DEPENDS)
34 endef
35
36 define Package/rust/description
37 Rust is a multi-paradigm, general-purpose programming language designed for performance
38 and safety, especially safe concurrency. Rust is syntactically similar to C++, but can
39 guarantee memory safety by using a borrow checker to validate references.
40 endef
41
42 define Package/rust/config
43 source "$(SOURCE)/Config.in"
44 endef
45
46 # Rust-lang has an uninstall script
47 RUST_UNINSTALL:=$(STAGING_DIR)/host/lib/rustlib/uninstall.sh
48
49 # Target Flags
50 TARGET_CONFIGURE_ARGS = \
51 --set=target.$(RUSTC_TARGET_ARCH).ar=$(TARGET_AR) \
52 --set=target.$(RUSTC_TARGET_ARCH).cc=$(TARGET_CC_NOCACHE) \
53 --set=target.$(RUSTC_TARGET_ARCH).cxx=$(TARGET_CXX_NOCACHE) \
54 --set=target.$(RUSTC_TARGET_ARCH).linker=$(TARGET_CC_NOCACHE) \
55 --set=target.$(RUSTC_TARGET_ARCH).ranlib=$(TARGET_RANLIB) \
56 --set=target.$(RUSTC_TARGET_ARCH).crt-static=false \
57 $(if $(CONFIG_USE_MUSL),--set=target.$(RUSTC_TARGET_ARCH).musl-root=$(TOOLCHAIN_DIR))
58
59 # CARGO_HOME is an environmental
60 HOST_CONFIGURE_VARS += CARGO_HOME="$(CARGO_HOME)"
61
62 # Rust Configuration Arguments
63 HOST_CONFIGURE_ARGS = \
64 --build=$(RUSTC_HOST_ARCH) \
65 --target=$(RUSTC_TARGET_ARCH),$(RUSTC_HOST_ARCH) \
66 --host=$(RUSTC_HOST_ARCH) \
67 --prefix=$(STAGING_DIR)/host \
68 --bindir=$(STAGING_DIR)/host/bin \
69 --libdir=$(STAGING_DIR)/host/lib \
70 --sysconfdir=$(STAGING_DIR)/host/etc \
71 --datadir=$(STAGING_DIR)/host/share \
72 --mandir=$(STAGING_DIR)/host/man \
73 --dist-compression-formats=gz \
74 --enable-missing-tools \
75 --disable-sanitizers \
76 --release-channel=stable \
77 --enable-cargo-native-static \
78 --set=llvm.download-ci-llvm=true \
79 $(TARGET_CONFIGURE_ARGS)
80
81 define Host/Uninstall
82 # Call the Uninstall script
83 [ -f $(RUST_UNINSTALL) ] && \
84 $(BASH) $(RUST_UNINSTALL) || echo No Uninstall
85 endef
86
87 define Host/Compile
88 $(RUST_SCCACHE_VARS) \
89 CARGO_HOME=$(CARGO_HOME) \
90 TARGET_CFLAGS="$(TARGET_CFLAGS)" \
91 OPENWRT_RUSTC_BOOTSTRAP_CACHE=$(DL_DIR)/rustc \
92 $(PYTHON) $(HOST_BUILD_DIR)/x.py \
93 --build-dir $(HOST_BUILD_DIR)/build \
94 --config $(HOST_BUILD_DIR)/config.toml \
95 dist build-manifest cargo llvm-tools rustc rust-std rust-src
96 endef
97
98 define Host/Install
99 ( \
100 cd $(HOST_BUILD_DIR)/build/dist ; \
101 for targz in *.tar.gz; do \
102 $(STAGING_DIR_HOST)/bin/libdeflate-gzip -dc "$$$$targz" | tar -xf - ; \
103 done ; \
104 find . -mindepth 2 -maxdepth 2 -type f -name install.sh \
105 -execdir bash '{}' --prefix=$(STAGING_DIR)/host --disable-ldconfig \; ; \
106 )
107 endef
108
109 $(eval $(call HostBuild))
110 $(eval $(call BuildPackage,rust))