Skip to content

Commit 9a40c5c

Browse files
committed
auto merge of #6714 : thomaslee/rust/rustrt-stage, r=brson
As discussed with @brson on IRC: This lets us use #ifdefs to determine which stage of the build we happen to be in, which is useful in the event we need to make changes to rustrt that are incompatible with the code generated by a stage0 rustc. Example of the _RUST_STAGEN flag in action here: https://gist.github.com/thomaslee/5641890 I'm not sure what tests for this change should look like, so please advise if I need to do some work around that.
2 parents b5ab101 + e69e809 commit 9a40c5c

File tree

3 files changed

+64
-54
lines changed

3 files changed

+64
-54
lines changed

configure

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -665,12 +665,16 @@ make_dir rt
665665
for t in $CFG_TARGET_TRIPLES
666666
do
667667
make_dir rt/$t
668-
for i in \
669-
isaac linenoise sync test \
670-
arch/i386 arch/x86_64 arch/arm arch/mips \
671-
libuv libuv/src/ares libuv/src/eio libuv/src/ev
668+
for s in 0 1 2 3
672669
do
673-
make_dir rt/$t/$i
670+
make_dir rt/$t/stage$s
671+
for i in \
672+
isaac linenoise sync test \
673+
arch/i386 arch/x86_64 arch/arm arch/mips \
674+
libuv libuv/src/ares libuv/src/eio libuv/src/ev
675+
do
676+
make_dir rt/$t/stage$s/$i
677+
done
674678
done
675679
done
676680

mk/rt.mk

Lines changed: 53 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -41,14 +41,19 @@ ifneq ($(strip $(findstring snap,$(MAKECMDGOALS))),)
4141
SNAP_DEFINES=-DRUST_SNAPSHOT
4242
endif
4343

44-
4544
define DEF_RUNTIME_TARGETS
4645

4746
######################################################################
4847
# Runtime (C++) library variables
4948
######################################################################
5049

51-
RUNTIME_CXXS_$(1) := \
50+
# $(1) is the target triple
51+
# $(2) is the stage number
52+
53+
RUNTIME_CFLAGS_$(1)_$(2) = -D_RUST_STAGE$(2)
54+
RUNTIME_CXXFLAGS_$(1)_$(2) = -D_RUST_STAGE$(2)
55+
56+
RUNTIME_CXXS_$(1)_$(2) := \
5257
rt/sync/timer.cpp \
5358
rt/sync/lock_and_signal.cpp \
5459
rt/sync/rust_thread.cpp \
@@ -83,70 +88,70 @@ RUNTIME_CXXS_$(1) := \
8388
rt/rust_android_dummy.cpp \
8489
rt/rust_test_helpers.cpp
8590

86-
RUNTIME_CS_$(1) := rt/linenoise/linenoise.c rt/linenoise/utf8.c
91+
RUNTIME_CS_$(1)_$(2) := rt/linenoise/linenoise.c rt/linenoise/utf8.c
8792

88-
RUNTIME_S_$(1) := rt/arch/$$(HOST_$(1))/_context.S \
89-
rt/arch/$$(HOST_$(1))/ccall.S \
90-
rt/arch/$$(HOST_$(1))/record_sp.S
93+
RUNTIME_S_$(1)_$(2) := rt/arch/$$(HOST_$(1))/_context.S \
94+
rt/arch/$$(HOST_$(1))/ccall.S \
95+
rt/arch/$$(HOST_$(1))/record_sp.S
9196

9297
ifeq ($$(CFG_WINDOWSY_$(1)), 1)
93-
LIBUV_OSTYPE_$(1) := win
94-
LIBUV_LIB_$(1) := rt/$(1)/libuv/libuv.a
98+
LIBUV_OSTYPE_$(1)_$(2) := win
99+
LIBUV_LIB_$(1)_$(2) := rt/$(1)/stage$(2)/libuv/libuv.a
95100
else ifeq ($(OSTYPE_$(1)), apple-darwin)
96-
LIBUV_OSTYPE_$(1) := mac
97-
LIBUV_LIB_$(1) := rt/$(1)/libuv/libuv.a
101+
LIBUV_OSTYPE_$(1)_$(2) := mac
102+
LIBUV_LIB_$(1)_$(2) := rt/$(1)/stage$(2)/libuv/libuv.a
98103
else ifeq ($(OSTYPE_$(1)), unknown-freebsd)
99-
LIBUV_OSTYPE_$(1) := unix/freebsd
100-
LIBUV_LIB_$(1) := rt/$(1)/libuv/libuv.a
104+
LIBUV_OSTYPE_$(1)_$(2) := unix/freebsd
105+
LIBUV_LIB_$(1)_$(2) := rt/$(1)/stage$(2)/libuv/libuv.a
101106
else ifeq ($(OSTYPE_$(1)), linux-androideabi)
102-
LIBUV_OSTYPE_$(1) := unix/android
103-
LIBUV_LIB_$(1) := rt/$(1)/libuv/libuv.a
107+
LIBUV_OSTYPE_$(1)_$(2) := unix/android
108+
LIBUV_LIB_$(1)_$(2) := rt/$(1)/stage$(2)/libuv/libuv.a
104109
else
105-
LIBUV_OSTYPE_$(1) := unix/linux
106-
LIBUV_LIB_$(1) := rt/$(1)/libuv/libuv.a
110+
LIBUV_OSTYPE_$(1)_$(2) := unix/linux
111+
LIBUV_LIB_$(1)_$(2) := rt/$(1)/stage$(2)/libuv/libuv.a
107112
endif
108113

109-
RUNTIME_DEF_$(1) := rt/rustrt$(CFG_DEF_SUFFIX_$(1))
110-
RUNTIME_INCS_$(1) := -I $$(S)src/rt -I $$(S)src/rt/isaac -I $$(S)src/rt/uthash \
114+
RUNTIME_DEF_$(1)_$(2) := rt/rustrt$(CFG_DEF_SUFFIX_$(1))
115+
RUNTIME_INCS_$(1)_$(2) := -I $$(S)src/rt -I $$(S)src/rt/isaac -I $$(S)src/rt/uthash \
111116
-I $$(S)src/rt/arch/$$(HOST_$(1)) \
112117
-I $$(S)src/rt/linenoise \
113118
-I $$(S)src/libuv/include
114-
RUNTIME_OBJS_$(1) := $$(RUNTIME_CXXS_$(1):rt/%.cpp=rt/$(1)/%.o) \
115-
$$(RUNTIME_CS_$(1):rt/%.c=rt/$(1)/%.o) \
116-
$$(RUNTIME_S_$(1):rt/%.S=rt/$(1)/%.o)
117-
ALL_OBJ_FILES += $$(RUNTIME_OBJS_$(1))
119+
RUNTIME_OBJS_$(1)_$(2) := $$(RUNTIME_CXXS_$(1)_$(2):rt/%.cpp=rt/$(1)/stage$(2)/%.o) \
120+
$$(RUNTIME_CS_$(1)_$(2):rt/%.c=rt/$(1)/stage$(2)/%.o) \
121+
$$(RUNTIME_S_$(1)_$(2):rt/%.S=rt/$(1)/stage$(2)/%.o)
122+
ALL_OBJ_FILES += $$(RUNTIME_OBJS_$(1)_$(2))
118123

119-
MORESTACK_OBJ_$(1) := rt/$(1)/arch/$$(HOST_$(1))/morestack.o
120-
ALL_OBJ_FILES += $$(MORESTACK_OBJS_$(1))
124+
MORESTACK_OBJ_$(1)_$(2) := rt/$(1)/stage$(2)/arch/$$(HOST_$(1))/morestack.o
125+
ALL_OBJ_FILES += $$(MORESTACK_OBJS_$(1)_$(2))
121126

122-
RUNTIME_LIBS_$(1) := $$(LIBUV_LIB_$(1))
127+
RUNTIME_LIBS_$(1)_$(2) := $$(LIBUV_LIB_$(1)_$(2))
123128

124-
rt/$(1)/%.o: rt/%.cpp $$(MKFILE_DEPS)
129+
rt/$(1)/stage$(2)/%.o: rt/%.cpp $$(MKFILE_DEPS)
125130
@$$(call E, compile: $$@)
126-
$$(Q)$$(call CFG_COMPILE_CXX_$(1), $$@, $$(RUNTIME_INCS_$(1)) \
127-
$$(SNAP_DEFINES)) $$<
131+
$$(Q)$$(call CFG_COMPILE_CXX_$(1), $$@, $$(RUNTIME_INCS_$(1)_$(2)) \
132+
$$(SNAP_DEFINES) $$(RUNTIME_CXXFLAGS_$(1)_$(2))) $$<
128133

129-
rt/$(1)/%.o: rt/%.c $$(MKFILE_DEPS)
134+
rt/$(1)/stage$(2)/%.o: rt/%.c $$(MKFILE_DEPS)
130135
@$$(call E, compile: $$@)
131-
$$(Q)$$(call CFG_COMPILE_C_$(1), $$@, $$(RUNTIME_INCS_$(1)) \
132-
$$(SNAP_DEFINES)) $$<
136+
$$(Q)$$(call CFG_COMPILE_C_$(1), $$@, $$(RUNTIME_INCS_$(1)_$(2)) \
137+
$$(SNAP_DEFINES) $$(RUNTIME_CFLAGS_$(1)_$(2))) $$<
133138

134-
rt/$(1)/%.o: rt/%.S $$(MKFILE_DEPS) \
139+
rt/$(1)/stage$(2)/%.o: rt/%.S $$(MKFILE_DEPS) \
135140
$$(LLVM_CONFIG_$$(CFG_BUILD_TRIPLE))
136141
@$$(call E, compile: $$@)
137142
$$(Q)$$(call CFG_ASSEMBLE_$(1),$$@,$$<)
138143

139-
rt/$(1)/arch/$$(HOST_$(1))/libmorestack.a: $$(MORESTACK_OBJ_$(1))
144+
rt/$(1)/stage$(2)/arch/$$(HOST_$(1))/libmorestack.a: $$(MORESTACK_OBJ_$(1)_$(2))
140145
@$$(call E, link: $$@)
141146
$$(Q)$(AR_$(1)) rcs $$@ $$<
142147

143-
rt/$(1)/$(CFG_RUNTIME_$(1)): $$(RUNTIME_OBJS_$(1)) $$(MKFILE_DEPS) \
144-
$$(RUNTIME_DEF_$(1)) \
145-
$$(RUNTIME_LIBS_$(1))
148+
rt/$(1)/stage$(2)/$(CFG_RUNTIME_$(1)): $$(RUNTIME_OBJS_$(1)_$(2)) $$(MKFILE_DEPS) \
149+
$$(RUNTIME_DEF_$(1)_$(2)) \
150+
$$(RUNTIME_LIBS_$(1)_$(2))
146151
@$$(call E, link: $$@)
147-
$$(Q)$$(call CFG_LINK_CXX_$(1),$$@, $$(RUNTIME_OBJS_$(1)) \
148-
$$(CFG_GCCISH_POST_LIB_FLAGS_$(1)) $$(RUNTIME_LIBS_$(1)) \
149-
$$(CFG_LIBUV_LINK_FLAGS_$(1)),$$(RUNTIME_DEF_$(1)),$$(CFG_RUNTIME_$(1)))
152+
$$(Q)$$(call CFG_LINK_CXX_$(1),$$@, $$(RUNTIME_OBJS_$(1)_$(2)) \
153+
$$(CFG_GCCISH_POST_LIB_FLAGS_$(1)) $$(RUNTIME_LIBS_$(1)_$(2)) \
154+
$$(CFG_LIBUV_LINK_FLAGS_$(1)),$$(RUNTIME_DEF_$(1)_$(2)),$$(CFG_RUNTIME_$(1)))
150155

151156
# FIXME: For some reason libuv's makefiles can't figure out the
152157
# correct definition of CC on the mingw I'm using, so we are
@@ -165,32 +170,32 @@ endif
165170

166171
# XXX: Shouldn't need platform-specific conditions here
167172
ifdef CFG_WINDOWSY_$(1)
168-
$$(LIBUV_LIB_$(1)): $$(LIBUV_DEPS)
173+
$$(LIBUV_LIB_$(1)_$(2)): $$(LIBUV_DEPS)
169174
$$(Q)$$(MAKE) -C $$(S)src/libuv/ \
170-
builddir_name="$$(CFG_BUILD_DIR)/rt/$(1)/libuv" \
175+
builddir_name="$$(CFG_BUILD_DIR)/rt/$(1)/stage$(2)/libuv" \
171176
OS=mingw \
172177
V=$$(VERBOSE)
173178
else ifeq ($(OSTYPE_$(1)), linux-androideabi)
174-
$$(LIBUV_LIB_$(1)): $$(LIBUV_DEPS)
179+
$$(LIBUV_LIB_$(1)_$(2)): $$(LIBUV_DEPS)
175180
$$(Q)$$(MAKE) -C $$(S)src/libuv/ \
176181
CFLAGS="$$(CFG_GCCISH_CFLAGS) $$(LIBUV_FLAGS_$$(HOST_$(1))) $$(SNAP_DEFINES)" \
177182
LDFLAGS="$$(CFG_GCCISH_LINK_FLAGS) $$(LIBUV_FLAGS_$$(HOST_$(1)))" \
178183
CC="$$(CC_$(1))" \
179184
CXX="$$(CXX_$(1))" \
180185
AR="$$(AR_$(1))" \
181186
BUILDTYPE=Release \
182-
builddir_name="$$(CFG_BUILD_DIR)/rt/$(1)/libuv" \
187+
builddir_name="$$(CFG_BUILD_DIR)/rt/$(1)/stage$(2)/libuv" \
183188
host=android OS=linux \
184189
V=$$(VERBOSE)
185190
else
186-
$$(LIBUV_LIB_$(1)): $$(LIBUV_DEPS)
191+
$$(LIBUV_LIB_$(1)_$(2)): $$(LIBUV_DEPS)
187192
$$(Q)$$(MAKE) -C $$(S)src/libuv/ \
188193
CFLAGS="$$(CFG_GCCISH_CFLAGS) $$(LIBUV_FLAGS_$$(HOST_$(1))) $$(SNAP_DEFINES)" \
189194
LDFLAGS="$$(CFG_GCCISH_LINK_FLAGS) $$(LIBUV_FLAGS_$$(HOST_$(1)))" \
190195
CC="$$(CC_$(1))" \
191196
CXX="$$(CXX_$(1))" \
192197
AR="$$(AR_$(1))" \
193-
builddir_name="$$(CFG_BUILD_DIR)/rt/$(1)/libuv" \
198+
builddir_name="$$(CFG_BUILD_DIR)/rt/$(1)/stage$(2)/libuv" \
194199
V=$$(VERBOSE)
195200
endif
196201

@@ -229,5 +234,6 @@ endif
229234
endef
230235

231236
# Instantiate template for all stages
232-
$(foreach target,$(CFG_TARGET_TRIPLES), \
233-
$(eval $(call DEF_RUNTIME_TARGETS,$(target))))
237+
$(foreach stage,$(STAGES), \
238+
$(foreach target,$(CFG_TARGET_TRIPLES), \
239+
$(eval $(call DEF_RUNTIME_TARGETS,$(target),$(stage)))))

mk/target.mk

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,13 @@
1818
define TARGET_STAGE_N
1919

2020
$$(TLIB$(1)_T_$(2)_H_$(3))/libmorestack.a: \
21-
rt/$(2)/arch/$$(HOST_$(2))/libmorestack.a \
21+
rt/$(2)/stage$(1)/arch/$$(HOST_$(2))/libmorestack.a \
2222
| $$(TLIB$(1)_T_$(2)_H_$(3))/
2323
@$$(call E, cp: $$@)
2424
$$(Q)cp $$< $$@
2525

2626
$$(TLIB$(1)_T_$(2)_H_$(3))/$(CFG_RUNTIME_$(2)): \
27-
rt/$(2)/$(CFG_RUNTIME_$(2)) \
27+
rt/$(2)/stage$(1)/$(CFG_RUNTIME_$(2)) \
2828
| $$(TLIB$(1)_T_$(2)_H_$(3))/
2929
@$$(call E, cp: $$@)
3030
$$(Q)cp $$< $$@

0 commit comments

Comments
 (0)