summaryrefslogtreecommitdiffstats
path: root/rules/cross-rustc.make
blob: e7d22ad9ad53f11db0d6adcc0644aeb28700b3a9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
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