mirror of
https://github.com/openwrt/packages.git
synced 2025-12-21 23:34:31 +04:00
In order to use $(RUSTC_TARGET_ARCH) in HOST_BUILD_DIR, the line to include rust-values.mk in the Rust makefile was moved inf489e019ac, causing it to be included before package.mk is included. This had the side effect of preventing "-lssp_nonshared" from being added to RUSTC_LDFLAGS, because PKG_SSP is indirectly set by package.mk (package.mk includes hardening.mk, hardening.mk sets PKG_SSP). There is a deeper issue; it is the Rust package's PKG_SSP value that causes RUSTC_LDFLAGS to be set and written to the Cargo config file. For packages that use Rust to build, their PKG_SSP value does not affect the linker flag. This sets rustflags with the RUSTFLAGS environment variable, instead of writing the value to the Cargo config file, allowing PKG_SSP from the package being built to be used and for the package being built to modify the rustflags used. This also: * Fix "-lssp_nonshared" being added to TARGET_CFLAGS instead of RUSTC_LDFLAGS, when CONFIG_PKG_CC_STACKPROTECTOR_STRONG is set. * Remove the use of $(RUSTC_TARGET_ARCH) in HOST_BUILD_DIR and move the include line for rust-values.mk back to after package.mk. Since the host build directory was moved under the target build directory inefdbac38dc, it is no longer necessary to separate build directories with RUSTC_TARGET_ARCH; $(BUILD_DIR) already separates build directories by target. * Add BUILDONLY:=1, as the Rust package does not build a target package. * Install the Cargo config file as "config.toml" instead of "config", as this is the preferred form[1]. * Rename RUST_CFLAGS to RUSTC_CFLAGS and CONFIG_HOST_SUFFIX to RUSTC_HOST_SUFFIX, for consistency. * Allow CARGO_VARS to be set before rust-values.mk is included. [1]: https://doc.rust-lang.org/cargo/reference/config.html#hierarchical-structure Fixes:f489e019ac("rust: compile host package per target") Fixes:83785a7ce0("rust-lang: Add the rust language support") Fixes: https://github.com/openwrt/packages/issues/22133 Signed-off-by: Jeffery To <jeffery.to@gmail.com>
65 lines
1.7 KiB
Makefile
65 lines
1.7 KiB
Makefile
# SPDX-License-Identifier: GPL-2.0-only
|
|
#
|
|
# Copyright (C) 2023 Luca Barbato and Donald Hoskins
|
|
|
|
# Rust Environmental Vars
|
|
RUSTC_HOST_SUFFIX:=$(word 4, $(subst -, ,$(GNU_HOST_NAME)))
|
|
RUSTC_HOST_ARCH:=$(HOST_ARCH)-unknown-linux-$(RUSTC_HOST_SUFFIX)
|
|
CARGO_HOME:=$(STAGING_DIR)/host/cargo
|
|
CARGO_VARS?=
|
|
|
|
ifeq ($(CONFIG_USE_MUSL),y)
|
|
# Force linking of the SSP library for musl
|
|
ifdef CONFIG_PKG_CC_STACKPROTECTOR_REGULAR
|
|
ifeq ($(strip $(PKG_SSP)),1)
|
|
RUSTC_LDFLAGS+=-lssp_nonshared
|
|
endif
|
|
endif
|
|
ifdef CONFIG_PKG_CC_STACKPROTECTOR_STRONG
|
|
ifeq ($(strip $(PKG_SSP)),1)
|
|
RUSTC_LDFLAGS+=-lssp_nonshared
|
|
endif
|
|
endif
|
|
endif
|
|
|
|
CARGO_RUSTFLAGS+=-Ctarget-feature=-crt-static $(RUSTC_LDFLAGS)
|
|
|
|
ifeq ($(HOST_OS),Darwin)
|
|
ifeq ($(HOST_ARCH),arm64)
|
|
RUSTC_HOST_ARCH:=aarch64-apple-darwin
|
|
endif
|
|
endif
|
|
|
|
# mips64 openwrt has a specific targed in rustc
|
|
ifeq ($(ARCH),mips64)
|
|
RUSTC_TARGET_ARCH:=$(REAL_GNU_TARGET_NAME)
|
|
else
|
|
RUSTC_TARGET_ARCH:=$(subst openwrt,unknown,$(REAL_GNU_TARGET_NAME))
|
|
endif
|
|
|
|
RUSTC_TARGET_ARCH:=$(subst muslgnueabi,musleabi,$(RUSTC_TARGET_ARCH))
|
|
|
|
ifeq ($(ARCH),i386)
|
|
RUSTC_TARGET_ARCH:=$(subst i486,i586,$(RUSTC_TARGET_ARCH))
|
|
else ifeq ($(ARCH),riscv64)
|
|
RUSTC_TARGET_ARCH:=$(subst riscv64,riscv64gc,$(RUSTC_TARGET_ARCH))
|
|
endif
|
|
|
|
# ARM Logic
|
|
ifeq ($(ARCH),arm)
|
|
ifeq ($(CONFIG_arm_v7),y)
|
|
RUSTC_TARGET_ARCH:=$(subst arm,armv7,$(RUSTC_TARGET_ARCH))
|
|
endif
|
|
|
|
ifeq ($(CONFIG_HAS_FPU),y)
|
|
RUSTC_TARGET_ARCH:=$(subst musleabi,musleabihf,$(RUSTC_TARGET_ARCH))
|
|
endif
|
|
endif
|
|
|
|
ifeq ($(ARCH),aarch64)
|
|
RUSTC_CFLAGS:=-mno-outline-atomics
|
|
endif
|
|
|
|
# Support only a subset for now.
|
|
RUST_ARCH_DEPENDS:=@(aarch64||arm||i386||i686||mips||mipsel||mips64||mips64el||mipsel||powerpc64||riscv64||x86_64)
|