1 # SPDX-License-Identifier: GPL-2.0-only
3 # Copyright (C) 2023 Luca Barbato and Donald Hoskins
5 include $(TOPDIR
)/rules.mk
11 PKG_SOURCE
:=rustc-
$(PKG_VERSION
)-src.
tar.gz
12 PKG_SOURCE_URL
:=https
://static.rust-lang.org
/dist/
13 PKG_HASH
:=46483d3e5de85a3bd46f8e7a3ae1837496391067dbe713a25d3cf051b3d9ff6e
14 HOST_BUILD_DIR
:=$(BUILD_DIR_HOST
)/rustc-
$(PKG_VERSION
)-src
/
16 PKG_MAINTAINER
:=Luca Barbato
<lu_zero@luminem.org
>
17 PKG_LICENSE
:=Apache-2.0 MIT
18 PKG_LICENSE_FILES
:=LICENSE-APACHE LICENSE-MIT
20 HOST_BUILD_DEPENDS
:=python3
/host
23 include $(INCLUDE_DIR
)/package.mk
24 include $(INCLUDE_DIR
)/host-build.mk
26 # rust environment variables
27 include .
/rust-host.mk
30 RUST_TMP_DIR
:=$(TMP_DIR
)/rust-install
32 RUST_INSTALL_HOST_FILENAME
:=$(PKG_NAME
)-$(PKG_VERSION
)-$(RUSTC_HOST_ARCH
)-install.
tar.xz
33 RUST_INSTALL_TARGET_FILENAME
:=$(PKG_NAME
)-$(PKG_VERSION
)-$(RUSTC_TARGET_ARCH
)-install.
tar.xz
35 # Rust-lang has an uninstall script
36 RUST_UNINSTALL
:=$(CARGO_HOME
)/lib
/rustlib
/uninstall.sh
39 TARGET_CONFIGURE_ARGS
= \
40 --set
=target.
$(RUSTC_TARGET_ARCH
).
ar=$(TARGET_AR
) \
41 --set
=target.
$(RUSTC_TARGET_ARCH
).
cc=$(TARGET_CC_NOCACHE
) \
42 --set
=target.
$(RUSTC_TARGET_ARCH
).
cxx=$(TARGET_CXX_NOCACHE
) \
43 --set
=target.
$(RUSTC_TARGET_ARCH
).linker
=$(TARGET_CC_NOCACHE
) \
44 --set
=target.
$(RUSTC_TARGET_ARCH
).musl-root
=$(TOOLCHAIN_DIR
) \
45 --set
=target.
$(RUSTC_TARGET_ARCH
).ranlib
=$(TARGET_RANLIB
)
47 # CARGO_HOME is an environmental
48 HOST_CONFIGURE_OPTS
+= CARGO_HOME
="$(CARGO_HOME)"
50 # Rust Configuration Arguments
51 HOST_CONFIGURE_ARGS
= \
52 --build
=$(RUSTC_HOST_ARCH
) \
53 --target
=$(RUSTC_TARGET_ARCH
),$(RUSTC_HOST_ARCH
) \
54 --host
=$(RUSTC_HOST_ARCH
) \
55 --prefix=$(CARGO_HOME
) \
56 --bindir=$(CARGO_HOME
)/bin \
57 --libdir=$(CARGO_HOME
)/lib \
58 --sysconfdir
=$(CARGO_HOME
)/etc \
59 --datadir=$(CARGO_HOME
)/share \
60 --mandir=$(CARGO_HOME
)/man \
61 --dist-compression-formats
=xz \
62 --enable-llvm-link-shared \
63 --enable-llvm-plugins \
64 --enable-missing-tools \
66 --disable-sanitizers \
67 --release-channel
=stable \
68 --enable-cargo-native-static \
69 $(TARGET_CONFIGURE_ARGS
)
72 # Ensure rust temp directory
73 [ -d
$(RUST_TMP_DIR
) ] || \
74 mkdir
-p
$(RUST_TMP_DIR
)
76 $(call Host
/Prepare
/Default
)
80 # Call the Uninstall script
81 [ -f
$(RUST_UNINSTALL
) ] && \
82 $(BASH
) $(RUST_UNINSTALL
) || echo No Uninstall
84 rm -rf
$(RUST_TMP_DIR
)
87 # Makes and then packages the dist artifacts
89 cd
$(HOST_BUILD_DIR
) && \
90 $(PYTHON
) x.py
--config .
/config.toml
dist build-manifest cargo llvm-tools \
91 rustc rust-std rust-src
93 $(call Host
/PackageDist
)
96 # Distribution Artifacts are packaged by Host/PackageDist
97 # We just need to extract and install
99 $(TAR
) -C
$(RUST_TMP_DIR
) -xJf
$(DL_DIR
)/$(RUST_INSTALL_HOST_FILENAME
) && \
100 $(TAR
) -C
$(RUST_TMP_DIR
) -xJf
$(DL_DIR
)/$(RUST_INSTALL_TARGET_FILENAME
)
102 cd
$(RUST_TMP_DIR
) && \
103 find
-iname
"*.xz" -exec
tar -xJf
{} ";" && \
104 find .
/* -type f
-name
install.sh
-execdir sh
{} --prefix=$(CARGO_HOME
) --disable-ldconfig \
;
106 echo
-e
"[target.$(RUSTC_TARGET_ARCH)]\nlinker = \"$(TARGET_CC_NOCACHE)\"\nrustflags = [\"-Ctarget-feature=-crt-static\", \"-Clink-args=$(RUSTC_LDFLAGS)\"]" > $(CARGO_HOME
)/config
107 echo
-e
"\n[profile.stripped]\ninherits = \"release\"\nopt-level = \"s\"\nstrip = true" >> $(CARGO_HOME
)/config
110 # Packages the Distribution Artifacts into HOST and TARGET bundles.
111 define Host
/PackageDist
113 cd
$(HOST_BUILD_DIR
)/build
/dist ; \
114 $(TAR
) -cJf
$(DL_DIR
)/$(RUST_INSTALL_TARGET_FILENAME
) \
115 rust-
*-$(RUSTC_TARGET_ARCH
).
tar.xz
; \
116 $(TAR
) -cJf
$(DL_DIR
)/$(RUST_INSTALL_HOST_FILENAME
) \
117 --exclude rust-
*-$(RUSTC_TARGET_ARCH
).
tar.xz
*.xz
; \
124 TITLE
:=Rust Programming Language Compiler
125 URL
:=https
://www.rust-lang.org
/
126 DEPENDS
:=$(RUST_ARCH_DEPENDS
) \
127 +pkg-config
+libunwind
+libopenssl
+liblzma
+libc
130 define Package
/rust
/description
131 Rust is a multi-paradigm
, general-purpose programming language designed for performance
132 and safety
, especially safe concurrency. Rust is syntactically similar to C
++, but can
133 guarantee memory safety by using a borrow checker to validate references.
136 define Package
/rust
/config
137 source
"$(SOURCE)/Config.in"
140 $(eval
$(call HostBuild
))
141 $(eval
$(call BuildPackage
,rust
))