diff options
Diffstat (limited to 'rules/cross-rustc.make')
-rw-r--r-- | rules/cross-rustc.make | 125 |
1 files changed, 125 insertions, 0 deletions
diff --git a/rules/cross-rustc.make b/rules/cross-rustc.make new file mode 100644 index 0000000..e7d22ad --- /dev/null +++ b/rules/cross-rustc.make @@ -0,0 +1,125 @@ +# -*-makefile-*- +# +# Copyright (C) 2019 by Michael Olbrich <m.olbrich@pengutronix.de> +# +# See CREDITS for details about who has contributed to this project. +# +# For further information about the PTXdist project and license conditions +# see the README file. +# + +# +# We provide this package +# +CROSS_PACKAGES-$(PTXCONF_CROSS_RUSTC) += cross-rustc + +# +# Paths and names +# +CROSS_RUSTC_VERSION := $(call remove_quotes,$(PTXCONF_CROSS_RUSTC_VERSION)) +CROSS_RUSTC_MD5 := $(call remove_quotes,$(PTXCONF_CROSS_RUSTC_MD5)) +CROSS_RUSTC := rustc-$(CROSS_RUSTC_VERSION) +CROSS_RUSTC_SUFFIX := tar.xz +CROSS_RUSTC_URL := https://static.rust-lang.org/dist/$(CROSS_RUSTC)-src.$(CROSS_RUSTC_SUFFIX) +CROSS_RUSTC_SOURCE := $(SRCDIR)/$(CROSS_RUSTC)-src.$(CROSS_RUSTC_SUFFIX) +CROSS_RUSTC_DIR := $(CROSS_BUILDDIR)/$(CROSS_RUSTC) + +CROSS_RUSTC_BUILD_VERSION := $(call remove_quotes,$(PTXCONF_CROSS_RUSTC_BUILD_VERSION)) +CROSS_RUSTC_BUILD_DATE := $(call remove_quotes,$(PTXCONF_CROSS_RUSTC_BUILD_DATE)) + +CROSS_RUSTC_BUILD_STD_VERSION := $(CROSS_RUSTC_BUILD_VERSION) +CROSS_RUSTC_BUILD_STD_MD5 := $(call remove_quotes,$(PTXCONF_CROSS_RUSTC_BUILD_STD_MD5)) +CROSS_RUSTC_BUILD_STD := rust-std-$(CROSS_RUSTC_BUILD_STD_VERSION)-$(GNU_BUILD) +CROSS_RUSTC_BUILD_STD_SUFFIX := tar.xz +CROSS_RUSTC_BUILD_STD_URL := https://static.rust-lang.org/dist/$(CROSS_RUSTC_BUILD_DATE)/$(CROSS_RUSTC_BUILD_STD).$(CROSS_RUSTC_BUILD_STD_SUFFIX) +CROSS_RUSTC_BUILD_STD_SOURCE := $(SRCDIR)/$(CROSS_RUSTC_BUILD_STD).$(CROSS_RUSTC_BUILD_STD_SUFFIX) +$(CROSS_RUSTC_BUILD_STD_SOURCE) := CROSS_RUSTC_BUILD_STD +CROSS_RUSTC_SOURCES += $(CROSS_RUSTC_BUILD_STD_SOURCE) + +CROSS_RUSTC_BUILD_RUSTC_VERSION := $(CROSS_RUSTC_BUILD_VERSION) +CROSS_RUSTC_BUILD_RUSTC_MD5 := $(call remove_quotes,$(PTXCONF_CROSS_RUSTC_BUILD_RUSTC_MD5)) +CROSS_RUSTC_BUILD_RUSTC := rustc-$(CROSS_RUSTC_BUILD_RUSTC_VERSION)-$(GNU_BUILD) +CROSS_RUSTC_BUILD_RUSTC_SUFFIX := tar.xz +CROSS_RUSTC_BUILD_RUSTC_URL := https://static.rust-lang.org/dist/$(CROSS_RUSTC_BUILD_DATE)/$(CROSS_RUSTC_BUILD_RUSTC).$(CROSS_RUSTC_BUILD_RUSTC_SUFFIX) +CROSS_RUSTC_BUILD_RUSTC_SOURCE := $(SRCDIR)/$(CROSS_RUSTC_BUILD_RUSTC).$(CROSS_RUSTC_BUILD_RUSTC_SUFFIX) +$(CROSS_RUSTC_BUILD_RUSTC_SOURCE) := CROSS_RUSTC_BUILD_RUSTC +CROSS_RUSTC_SOURCES += $(CROSS_RUSTC_BUILD_RUSTC_SOURCE) + +CROSS_RUSTC_BUILD_CARGO_VERSION := $(CROSS_RUSTC_BUILD_VERSION) +CROSS_RUSTC_BUILD_CARGO_MD5 := $(call remove_quotes,$(PTXCONF_CROSS_RUSTC_BUILD_CARGO_MD5)) +CROSS_RUSTC_BUILD_CARGO := cargo-$(CROSS_RUSTC_BUILD_CARGO_VERSION)-$(GNU_BUILD) +CROSS_RUSTC_BUILD_CARGO_SUFFIX := tar.xz +CROSS_RUSTC_BUILD_CARGO_URL := https://static.rust-lang.org/dist/$(CROSS_RUSTC_BUILD_DATE)/$(CROSS_RUSTC_BUILD_CARGO).$(CROSS_RUSTC_BUILD_CARGO_SUFFIX) +CROSS_RUSTC_BUILD_CARGO_SOURCE := $(SRCDIR)/$(CROSS_RUSTC_BUILD_CARGO).$(CROSS_RUSTC_BUILD_CARGO_SUFFIX) +$(CROSS_RUSTC_BUILD_CARGO_SOURCE) := CROSS_RUSTC_BUILD_CARGO +CROSS_RUSTC_SOURCES += $(CROSS_RUSTC_BUILD_CARGO_SOURCE) + +CROSS_RUSTC_CONFIG := $(call ptx/in-path, PTXDIST_PATH_LAYERS, config/rustc.toml) +CROSS_RUSTC_TARGET := $(call remove_quotes,$(PTXCONF_CROSS_RUSTC_TARGET)) +CROSS_RUSTC_TARGET_PATH := $(PTXDIST_WORKSPACE)/config/rust + +# ---------------------------------------------------------------------------- +# Prepare +# ---------------------------------------------------------------------------- + +CROSS_RUSTC_CONF_ENV := \ + BUILD_TRIPLE=$(GNU_BUILD) \ + TARGET_TRIPLE=$(CROSS_RUSTC_TARGET) \ + PREFIX=$(PTXCONF_PREFIX_CROSS) \ + LLVM_CONFIG=$(CROSS_LLVM_DIR)-build/bin/llvm-config \ + COMPILER_PREFIX=$(COMPILER_PREFIX) + +$(STATEDIR)/cross-rustc.prepare: + @$(call targetinfo) + @mkdir -p $(CROSS_RUSTC_DIR)/build/cache/$(CROSS_RUSTC_BUILD_DATE) + @cp -v \ + $(CROSS_RUSTC_BUILD_STD_SOURCE) \ + $(CROSS_RUSTC_BUILD_RUSTC_SOURCE) \ + $(CROSS_RUSTC_BUILD_CARGO_SOURCE) \ + $(CROSS_RUSTC_DIR)/build/cache/$(CROSS_RUSTC_BUILD_DATE)/ + $(CROSS_RUSTC_CONF_ENV) ptxd_replace_magic \ + $(CROSS_RUSTC_CONFIG) > $(CROSS_RUSTC_DIR)/config.toml + @$(call touch) + +# ---------------------------------------------------------------------------- +# Compile +# ---------------------------------------------------------------------------- + +CROSS_RUSTC_MAKE_ENV := \ + RUST_TARGET_PATH=$(CROSS_RUSTC_TARGET_PATH) + +$(STATEDIR)/cross-rustc.compile: + @$(call targetinfo) + @$(call world/execute, CROSS_RUSTC, ./x.py build) + @$(call touch) + +# ---------------------------------------------------------------------------- +# Install +# ---------------------------------------------------------------------------- + +define ptx/cross-rustc-wrapper-impl +echo "Creating '$(1)'..." +rm -f '$(1)' +echo '#!/bin/sh' > '$(1)' +echo 'd="$$(dirname $$(readlink -f "$${0}"))"' >> '$(1)' +echo 'export RUST_TARGET_PATH="$$d"' >> '$(1)' +echo 'exec "$$d/rustc" --target $(CROSS_RUSTC_TARGET) "$$@"' >> '$(1)' +chmod +x '$(1)' +endef + +define ptx/cross-rustc-wrapper +$(call ptx/cross-rustc-wrapper-impl,$(strip \ + $(CROSS_RUSTC_PKGDIR)$(PTXCONF_PREFIX_CROSS)/bin/$(COMPILER_PREFIX)rustc)) +endef + +$(STATEDIR)/cross-rustc.install: + @$(call targetinfo) + @$(call world/execute, CROSS_RUSTC, \ + DESTDIR=$(CROSS_RUSTC_PKGDIR) ./x.py install) + @rm -rv $(CROSS_RUSTC_PKGDIR)$(PTXCONF_PREFIX_CROSS)/lib/rustlib/$(GNU_BUILD)/bin + @cp -v $(CROSS_RUSTC_TARGET_PATH)/$(CROSS_RUSTC_TARGET).json \ + $(CROSS_RUSTC_PKGDIR)$(PTXCONF_PREFIX_CROSS)/bin/ + @$(call ptx/cross-rustc-wrapper) + @$(call touch) + +# vim: syntax=make |