package/pkg-cargo: ensure host/target rustflags are properly split
In Cargo, it is quite typical for "build scripts" to be written in Rust
and therefore they need to be compiled as part of the overall build. In
cross-compilation, that means a mixed host and target build.
Unfortunately, by default Cargo makes no distinction between the
RUSTFLAGS used for the host and the target. There is, however, an
unstable feature to make this distinction [1][2].
We already have CARGO_TARGET_APPLIES_TO_HOST="false". This makes sure
that any configuration that we make for the target doesn't automatically
apply to the host as well. However, this only applies for per-target
configuration, for example the setting of "cc" in the config.toml
generated by package/rust/rust.mk. Flags that are passed with RUSTFLAGS
still apply to both host and target. Therefore, we need to use the
CARGO_TARGET_<tuple>_RUSTFLAGS environment variable instead of plain
RUSTFLAGS.
This, however, doesn't allow us to specify flags that apply only to the
host. We could use CARGO_TARGET_<hosttuple>_RUSTFLAGS for that, but that
doesn't work in case the host and target tuple are the same. For this,
we need another unstable feature, enabled with
CARGO_UNSTABLE_HOST_CONFIG="true". With this enabled, we can specify
flags that apply only for the host build using CARGO_HOST_RUSTFLAGS.
Currently, we don't have any such flags, but we really should: we should
pass the proper link flags to point to $(HOST_DIR)/lib. Therefore, add
CARGO_HOST_RUSTFLAGS doing exactly that.
[1] https://doc.rust-lang.org/nightly/cargo/reference/unstable.html#host-config
[2] https://github.com/rust-lang/cargo/pull/10395
Signed-off-by: James Hilliard <james.hilliard1@gmail.com>
Signed-off-by: Arnout Vandecappelle <arnout@mind.be>
(cherry picked from commit b40a2cc391
)
Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
This commit is contained in:
parent
aa658bec37
commit
f29a5497f5
@ -34,7 +34,10 @@ PKG_COMMON_CARGO_ENV = \
|
|||||||
# using nighly features on stable releases, i.e features that are not
|
# using nighly features on stable releases, i.e features that are not
|
||||||
# yet considered stable.
|
# yet considered stable.
|
||||||
#
|
#
|
||||||
# CARGO_UNSTABLE_TARGET_APPLIES_TO_HOST="true" "enables the nightly
|
# CARGO_UNSTABLE_HOST_CONFIG="true" enables the host specific
|
||||||
|
# configuration feature
|
||||||
|
#
|
||||||
|
# CARGO_UNSTABLE_TARGET_APPLIES_TO_HOST="true" enables the nightly
|
||||||
# configuration option target-applies-to-host value to be set
|
# configuration option target-applies-to-host value to be set
|
||||||
#
|
#
|
||||||
# CARGO_TARGET_APPLIES_TO_HOST="false" is actually setting the value
|
# CARGO_TARGET_APPLIES_TO_HOST="false" is actually setting the value
|
||||||
@ -43,9 +46,11 @@ PKG_COMMON_CARGO_ENV = \
|
|||||||
PKG_CARGO_ENV = \
|
PKG_CARGO_ENV = \
|
||||||
$(PKG_COMMON_CARGO_ENV) \
|
$(PKG_COMMON_CARGO_ENV) \
|
||||||
__CARGO_TEST_CHANNEL_OVERRIDE_DO_NOT_USE_THIS="nightly" \
|
__CARGO_TEST_CHANNEL_OVERRIDE_DO_NOT_USE_THIS="nightly" \
|
||||||
|
CARGO_UNSTABLE_HOST_CONFIG="true" \
|
||||||
CARGO_UNSTABLE_TARGET_APPLIES_TO_HOST="true" \
|
CARGO_UNSTABLE_TARGET_APPLIES_TO_HOST="true" \
|
||||||
CARGO_TARGET_APPLIES_TO_HOST="false" \
|
CARGO_TARGET_APPLIES_TO_HOST="false" \
|
||||||
CARGO_BUILD_TARGET="$(RUSTC_TARGET_NAME)" \
|
CARGO_BUILD_TARGET="$(RUSTC_TARGET_NAME)" \
|
||||||
|
CARGO_HOST_RUSTFLAGS="$(addprefix -C link-args=,$(HOST_LDFLAGS))" \
|
||||||
CARGO_TARGET_$(call UPPERCASE,$(RUSTC_TARGET_NAME))_LINKER=$(notdir $(TARGET_CROSS))gcc
|
CARGO_TARGET_$(call UPPERCASE,$(RUSTC_TARGET_NAME))_LINKER=$(notdir $(TARGET_CROSS))gcc
|
||||||
|
|
||||||
#
|
#
|
||||||
@ -53,7 +58,8 @@ PKG_CARGO_ENV = \
|
|||||||
# and should be removed when fixed upstream
|
# and should be removed when fixed upstream
|
||||||
#
|
#
|
||||||
ifeq ($(NORMALIZED_ARCH),arm)
|
ifeq ($(NORMALIZED_ARCH),arm)
|
||||||
PKG_CARGO_ENV += RUSTFLAGS="-Clink-arg=-Wl,--allow-multiple-definition"
|
PKG_CARGO_ENV += \
|
||||||
|
CARGO_TARGET_$(call UPPERCASE,$(RUSTC_TARGET_NAME))_RUSTFLAGS="-Clink-arg=-Wl,--allow-multiple-definition"
|
||||||
endif
|
endif
|
||||||
|
|
||||||
HOST_PKG_CARGO_ENV = \
|
HOST_PKG_CARGO_ENV = \
|
||||||
|
Loading…
Reference in New Issue
Block a user