@@ -46,6 +46,21 @@ define DEF_LIBUV_ARCH_VAR
46
46
endef
47
47
$(foreach t,$(CFG_TARGET_TRIPLES),$(eval $(call DEF_LIBUV_ARCH_VAR,$(t))))
48
48
49
+ ifdef CFG_ENABLE_FAST_MAKE
50
+ LIBUV_DEPS := $(S ) /.gitmodules
51
+ else
52
+ LIBUV_DEPS := $(wildcard \
53
+ $(S ) src/libuv/* \
54
+ $(S ) src/libuv/* /* \
55
+ $(S ) src/libuv/* /* /* \
56
+ $(S ) src/libuv/* /* /* /* )
57
+ endif
58
+
59
+ LIBUV_NO_LOAD = run-benchmarks.target.mk run-tests.target.mk \
60
+ uv_dtrace_header.target.mk uv_dtrace_provider.target.mk
61
+
62
+ export PYTHONPATH := $(PYTHONPATH ) :$(S ) src/gyp/pylib
63
+
49
64
define DEF_RUNTIME_TARGETS
50
65
51
66
# #####################################################################
@@ -97,31 +112,8 @@ RUNTIME_S_$(1)_$(2) := rt/arch/$$(HOST_$(1))/_context.S \
97
112
rt/arch/$$(HOST_$(1 ) ) /ccall.S \
98
113
rt/arch/$$(HOST_$(1 ) ) /record_sp.S
99
114
100
- RT_OUTPUT_DIR_$(1 ) := $(1 ) /rt
101
115
RT_BUILD_DIR_$(1 ) _$(2 ) := $$(RT_OUTPUT_DIR_$(1 ) ) /stage$(2 )
102
116
103
- ifeq ($$(CFG_WINDOWSY_$(1 ) ) , 1)
104
- LIBUV_OSTYPE_$(1)_$(2) := win
105
- LIBUV_LIB_$(1)_$(2) := $$(RT_BUILD_DIR_$(1 ) _$(2 ) ) /libuv/libuv.a
106
- JEMALLOC_LIB_$(1)_$(2) := $$(RT_BUILD_DIR_$(1 ) _$(2 ) ) /jemalloc/lib/jemalloc.lib
107
- else ifeq ($(OSTYPE_$(1)), apple-darwin)
108
- LIBUV_OSTYPE_$(1)_$(2) := mac
109
- LIBUV_LIB_$(1)_$(2) := $$(RT_BUILD_DIR_$(1 ) _$(2 ) ) /libuv/libuv.a
110
- JEMALLOC_LIB_$(1)_$(2) := $$(RT_BUILD_DIR_$(1 ) _$(2 ) ) /jemalloc/lib/libjemalloc_pic.a
111
- else ifeq ($(OSTYPE_$(1)), unknown-freebsd)
112
- LIBUV_OSTYPE_$(1)_$(2) := freebsd
113
- LIBUV_LIB_$(1)_$(2) := $$(RT_BUILD_DIR_$(1 ) _$(2 ) ) /libuv/libuv.a
114
- JEMALLOC_LIB_$(1)_$(2) := $$(RT_BUILD_DIR_$(1 ) _$(2 ) ) /jemalloc/lib/libjemalloc_pic.a
115
- else ifeq ($(OSTYPE_$(1)), linux-androideabi)
116
- LIBUV_OSTYPE_$(1)_$(2) := android
117
- LIBUV_LIB_$(1)_$(2) := $$(RT_BUILD_DIR_$(1 ) _$(2 ) ) /libuv/libuv.a
118
- JEMALLOC_LIB_$(1)_$(2) := $$(RT_BUILD_DIR_$(1 ) _$(2 ) ) /jemalloc/lib/libjemalloc_pic.a
119
- else
120
- LIBUV_OSTYPE_$(1)_$(2) := linux
121
- LIBUV_LIB_$(1)_$(2) := $$(RT_BUILD_DIR_$(1 ) _$(2 ) ) /libuv/libuv.a
122
- JEMALLOC_LIB_$(1)_$(2) := $$(RT_BUILD_DIR_$(1 ) _$(2 ) ) /jemalloc/lib/libjemalloc_pic.a
123
- endif
124
-
125
117
RUNTIME_DEF_$(1 ) _$(2 ) := $$(RT_OUTPUT_DIR_$(1 ) ) /rustrt$$(CFG_DEF_SUFFIX_$(1 ) )
126
118
RUNTIME_INCS_$(1 ) _$(2 ) := -I $$(S ) src/rt -I $$(S ) src/rt/isaac -I $$(S ) src/rt/uthash \
127
119
-I $$(S ) src/rt/arch/$$(HOST_$(1 ) ) \
@@ -157,133 +149,129 @@ $$(RT_BUILD_DIR_$(1)_$(2))/arch/$$(HOST_$(1))/libmorestack.a: $$(MORESTACK_OBJ_$
157
149
$$(Q )$(AR_$(1 ) ) rcs $$@ $$<
158
150
159
151
$$(RT_BUILD_DIR_$(1 ) _$(2 ) ) /$(CFG_RUNTIME_$(1 ) ) : $$(RUNTIME_OBJS_$(1 ) _$(2 ) ) $$(MKFILE_DEPS ) \
160
- $$(RUNTIME_DEF_$(1 ) _$(2 ) ) $$(LIBUV_LIB_$(1 ) _ $( 2 ) ) $$(JEMALLOC_LIB_$(1 ) _ $( 2 ) )
152
+ $$(RUNTIME_DEF_$(1 ) _$(2 ) ) $$(LIBUV_LIB_$(1 ) ) $$(JEMALLOC_LIB_$(1 ) )
161
153
@$$(call E, link: $$@ )
162
154
$$(Q )$$(call CFG_LINK_CXX_$(1 ) ,$$@ , $$(RUNTIME_OBJS_$(1 ) _$(2 ) ) \
163
- $$(JEMALLOC_LIB_$(1 ) _ $( 2 ) ) $$(CFG_GCCISH_POST_LIB_FLAGS_$(1 ) ) $$(LIBUV_LIB_$(1 ) _ $( 2 ) ) \
164
- $$(CFG_LIBUV_LINK_FLAGS_$(1 ) ) ,$$(RUNTIME_DEF_$(1 ) _$(2 ) ) ,$$(CFG_RUNTIME_$(1 ) ) )
155
+ $$(JEMALLOC_LIB_$(1 ) ) $$(CFG_GCCISH_POST_LIB_FLAGS_$(1 ) ) $$(LIBUV_LIB_$(1 ) ) \
156
+ $$(CFG_LIBUV_LINK_FLAGS_$(1 ) ) ,$$(RUNTIME_DEF_$(1 ) _$(2 ) ) ,$$(CFG_RUNTIME_$(1 ) ) )
165
157
166
- # FIXME: For some reason libuv's makefiles can't figure out the
167
- # correct definition of CC on the mingw I'm using, so we are
168
- # explicitly using gcc. Also, we have to list environment variables
169
- # first on windows... mysterious
158
+ # These could go in rt.mk or rustllvm.mk, they're needed for both.
170
159
171
- ifdef CFG_ENABLE_FAST_MAKE
172
- LIBUV_DEPS := $$(S ) /.gitmodules
160
+ # This regexp has a single $, escaped twice
161
+ $(1 ) /%.bsd.def: %.def.in $$(MKFILE_DEPS )
162
+ @$$(call E, def: $$@ )
163
+ $$(Q ) echo "{" > $$@
164
+ $$(Q ) sed 's/.$$$$/&;/' $$< >> $$@
165
+ $$(Q ) echo "};" >> $$@
166
+
167
+ $(1 ) /%.linux.def: %.def.in $$(MKFILE_DEPS )
168
+ @$$(call E, def: $$@ )
169
+ $$(Q ) echo "{" > $$@
170
+ $$(Q ) sed 's/.$$$$/&;/' $$< >> $$@
171
+ $$(Q ) echo "};" >> $$@
172
+
173
+ $(1 ) /%.darwin.def: %.def.in $$(MKFILE_DEPS )
174
+ @$$(call E, def: $$@ )
175
+ $$(Q ) sed 's/^./_&/' $$< > $$@
176
+
177
+ $(1 ) /%.android.def: %.def.in $$(MKFILE_DEPS )
178
+ @$$(call E, def: $$@ )
179
+ $$(Q ) echo "{" > $$@
180
+ $$(Q ) sed 's/.$$$$/&;/' $$< >> $$@
181
+ $$(Q ) echo "};" >> $$@
182
+
183
+ $(1 ) /%.mingw32.def: %.def.in $$(MKFILE_DEPS )
184
+ @$$(call E, def: $$@ )
185
+ $$(Q ) echo LIBRARY $$* > $$@
186
+ $$(Q ) echo EXPORTS >> $$@
187
+ $$(Q ) sed 's/^./ &/' $$< >> $$@
188
+
189
+ endef
190
+
191
+
192
+ # #####################################################################
193
+ # Runtime third party targets (libuv, jemalloc, etc.)
194
+ #
195
+ # These targets do not need to be built once per stage, so these
196
+ # rules just build them once and then we're done with them.
197
+ # #####################################################################
198
+
199
+ define DEF_THIRD_PARTY_TARGETS
200
+
201
+ # $(1) is the target triple
202
+
203
+ RT_OUTPUT_DIR_$(1 ) := $(1 ) /rt
204
+ JEMALLOC_TARGET_$(1 ) := jemalloc_pic
205
+
206
+ ifeq ($$(CFG_WINDOWSY_$(1 ) ) , 1)
207
+ LIBUV_OSTYPE_$(1) := win
208
+ JEMALLOC_TARGET_$(1) := jemalloc
209
+ else ifeq ($(OSTYPE_$(1)), apple-darwin)
210
+ LIBUV_OSTYPE_$(1) := mac
211
+ else ifeq ($(OSTYPE_$(1)), unknown-freebsd)
212
+ LIBUV_OSTYPE_$(1) := freebsd
213
+ else ifeq ($(OSTYPE_$(1)), linux-androideabi)
214
+ LIBUV_OSTYPE_$(1) := android
215
+ JEMALLOC_ARGS_$(1) := --disable-tls
216
+ LIBUV_ARGS_$(1) := PLATFORM=android host=android OS=linux
173
217
else
174
- LIBUV_DEPS := $$(wildcard \
175
- $$(S ) src/libuv/* \
176
- $$(S ) src/libuv/* /* \
177
- $$(S ) src/libuv/* /* /* \
178
- $$(S ) src/libuv/* /* /* /* )
218
+ LIBUV_OSTYPE_$(1) := linux
179
219
endif
180
220
181
- LIBUV_MAKEFILE_$(1 ) _$(2 ) := $$(CFG_BUILD_DIR )$$(RT_BUILD_DIR_$(1 ) _$(2 ) ) /libuv/Makefile
182
- LIBUV_NO_LOAD = run-benchmarks.target.mk run-tests.target.mk \
183
- uv_dtrace_header.target.mk uv_dtrace_provider.target.mk
221
+ LIBUV_NAME_$(1 ) := $$(call CFG_STATIC_LIB_NAME_$(1 ) ,uv)
222
+ LIBUV_LIB_$(1 ) := $$(RT_OUTPUT_DIR_$(1 ) ) /libuv/$$(LIBUV_NAME_$(1 ) )
223
+ JEMALLOC_NAME_$(1 ) := $$(call CFG_STATIC_LIB_NAME_$(1 ) ,$$(JEMALLOC_TARGET_$(1 ) ) )
224
+ JEMALLOC_LIB_$(1 ) := $$(RT_OUTPUT_DIR_$(1 ) ) /jemalloc/lib/$$(JEMALLOC_NAME_$(1 ) )
184
225
185
- export PYTHONPATH := $( PYTHONPATH ) : $$(S ) src/gyp/pylib
226
+ LIBUV_MAKEFILE_ $( 1 ) := $$( CFG_BUILD_DIR ) $$(RT_OUTPUT_DIR_ $( 1 ) ) /libuv/Makefile
186
227
187
- $$(LIBUV_MAKEFILE_$(1 ) _ $( 2 ) ) : $$(LIBUV_DEPS )
228
+ $$(LIBUV_MAKEFILE_$(1 ) ) : $$(LIBUV_DEPS )
188
229
(cd $(S ) src/libuv/ && \
189
- $$(CFG_PYTHON ) ./gyp_uv -f make -Dtarget_arch=$$(LIBUV_ARCH_$(1 ) ) -D ninja \
190
- -DOS=$$(LIBUV_OSTYPE_$(1 ) _$(2 ) ) \
230
+ $$(CFG_PYTHON ) ./gyp_uv -f make -Dtarget_arch=$$(LIBUV_ARCH_$(1 ) ) \
231
+ -D ninja \
232
+ -DOS=$$(LIBUV_OSTYPE_$(1 ) ) \
191
233
-Goutput_dir=$$(@D ) --generator-output $$(@D ) )
192
234
193
- # XXX: Shouldn't need platform-specific conditions here
235
+ # Windows has a completely different build system for libuv because of mingw. In
236
+ # theory when we support msvc then we should be using gyp's msvc output instead
237
+ # of mingw's makefile for windows
194
238
ifdef CFG_WINDOWSY_$(1)
195
- $$(LIBUV_LIB_$(1 ) _ $( 2 ) ) : $$(LIBUV_DEPS )
239
+ $$(LIBUV_LIB_$(1 ) ) : $$(LIBUV_DEPS )
196
240
$$(Q )$$(MAKE ) -C $$(S ) src/libuv -f Makefile.mingw \
197
241
CFLAGS=" $$ (CFG_GCCISH_CFLAGS) $$ (LIBUV_FLAGS_$$ (HOST_$( 1) )) $$ (SNAP_DEFINES)" \
198
242
AR=" $$ (AR_$( 1) )" \
199
243
V=$$(VERBOSE )
200
244
$$(Q ) cp $$(S ) src/libuv/libuv.a $$@
201
- else ifeq ($(OSTYPE_$(1)), linux-androideabi)
202
- $$(LIBUV_LIB_$(1 ) _$(2 ) ) : $$(LIBUV_DEPS ) $$(LIBUV_MAKEFILE_$(1 ) _$(2 ) )
203
- $$(Q )$$(MAKE ) -C $$(@D ) \
204
- CFLAGS=" $$ (CFG_GCCISH_CFLAGS) $$ (LIBUV_FLAGS_$$ (HOST_$( 1) )) $$ (SNAP_DEFINES)" \
205
- LDFLAGS=" $$ (CFG_GCCISH_LINK_FLAGS) $$ (LIBUV_FLAGS_$$ (HOST_$( 1) ))" \
206
- CC=" $$ (CC_$( 1) )" \
207
- CXX=" $$ (CXX_$( 1) )" \
208
- LINK=" $$ (CXX_$( 1) )" \
209
- AR=" $$ (AR_$( 1) )" \
210
- PLATFORM=android \
211
- host=android OS=linux \
212
- builddir=" ." \
213
- BUILDTYPE=Release \
214
- NO_LOAD=" $$ (LIBUV_NO_LOAD)" \
215
- V=$$(VERBOSE )
216
245
else
217
- $$(LIBUV_LIB_$(1 ) _ $( 2 ) ) : $$(LIBUV_DEPS ) $$(LIBUV_MAKEFILE_$(1 ) _ $( 2 ) )
246
+ $$(LIBUV_LIB_$(1 ) ) : $$(LIBUV_DEPS ) $$(LIBUV_MAKEFILE_$(1 ) )
218
247
$$(Q )$$(MAKE ) -C $$(@D ) \
219
248
CFLAGS=" $$ (CFG_GCCISH_CFLAGS) $$ (LIBUV_FLAGS_$$ (HOST_$( 1) )) $$ (SNAP_DEFINES)" \
220
249
LDFLAGS=" $$ (CFG_GCCISH_LINK_FLAGS) $$ (LIBUV_FLAGS_$$ (HOST_$( 1) ))" \
221
250
CC=" $$ (CC_$( 1) )" \
222
251
CXX=" $$ (CXX_$( 1) )" \
223
252
AR=" $$ (AR_$( 1) )" \
253
+ $$(LIBUV_ARGS_$(1 ) ) \
224
254
builddir=" ." \
225
255
BUILDTYPE=Release \
226
256
NO_LOAD=" $$ (LIBUV_NO_LOAD)" \
227
257
V=$$(VERBOSE )
228
258
endif
229
259
230
- ifeq ($(OSTYPE_$(1 ) ) , linux-androideabi)
231
- $$(JEMALLOC_LIB_$(1 ) _$(2 ) ) :
232
- cd $$(RT_BUILD_DIR_$(1 ) _$(2 ) ) /jemalloc; $(S ) src/rt/jemalloc/configure \
233
- --disable-experimental --build=$(CFG_BUILD_TRIPLE ) --host=$(1 ) --disable-tls \
234
- EXTRA_CFLAGS=" $$ (CFG_GCCISH_CFLAGS) $$ (LIBUV_FLAGS_$$ (HOST_$( 1) )) $$ (SNAP_DEFINES)" \
235
- LDFLAGS=" $$ (CFG_GCCISH_LINK_FLAGS) $$ (LIBUV_FLAGS_$$ (HOST_$( 1) ))" \
236
- CC=" $$ (CC_$( 1) )" \
237
- CXX=" $$ (CXX_$( 1) )" \
238
- AR=" $$ (AR_$( 1) )"
239
- $$(Q )$$(MAKE ) -C $$(RT_BUILD_DIR_$(1 ) _$(2 ) ) /jemalloc
240
- else
241
- $$(JEMALLOC_LIB_$(1 ) _$(2 ) ) :
242
- cd $$(RT_BUILD_DIR_$(1 ) _$(2 ) ) /jemalloc; $(S ) src/rt/jemalloc/configure \
260
+ $$(JEMALLOC_LIB_$(1 ) ) :
261
+ cd $$(RT_OUTPUT_DIR_$(1 ) ) /jemalloc; $(S ) src/rt/jemalloc/configure \
262
+ $$(JEMALLOC_ARGS_$(1 ) ) \
243
263
--disable-experimental --build=$(CFG_BUILD_TRIPLE ) --host=$(1 ) \
244
- EXTRA_CFLAGS=" $$ (CFG_GCCISH_CFLAGS) $$ (LIBUV_FLAGS_$$ (HOST_$( 1) )) $$ (SNAP_DEFINES)" \
245
- LDFLAGS=" $$ (CFG_GCCISH_LINK_FLAGS) $$ (LIBUV_FLAGS_$$ (HOST_$( 1) ))" \
264
+ EXTRA_CFLAGS="$$(CFG_GCCISH_CFLAGS ) $$(LIBUV_FLAGS_$$(HOST_$(1 ) ) ) " \
246
265
CC="$$(CC_$(1 ) ) " \
247
266
CXX="$$(CXX_$(1 ) ) " \
248
267
AR="$$(AR_$(1 ) ) "
249
- $$(Q )$$(MAKE ) -C $$(RT_BUILD_DIR_$(1 ) _$(2 ) ) /jemalloc
250
- endif
251
-
252
-
253
- # These could go in rt.mk or rustllvm.mk, they're needed for both.
254
-
255
- # This regexp has a single $, escaped twice
256
- $(1 ) /%.bsd.def: %.def.in $$(MKFILE_DEPS )
257
- @$$(call E, def: $$@ )
258
- $$(Q ) echo "{" > $$@
259
- $$(Q ) sed 's/.$$$$/&;/' $$< >> $$@
260
- $$(Q ) echo "};" >> $$@
261
-
262
- $(1 ) /%.linux.def: %.def.in $$(MKFILE_DEPS )
263
- @$$(call E, def: $$@ )
264
- $$(Q ) echo "{" > $$@
265
- $$(Q ) sed 's/.$$$$/&;/' $$< >> $$@
266
- $$(Q ) echo "};" >> $$@
267
-
268
- $(1 ) /%.darwin.def: %.def.in $$(MKFILE_DEPS )
269
- @$$(call E, def: $$@ )
270
- $$(Q ) sed 's/^./_&/' $$< > $$@
271
-
272
- $(1 ) /%.android.def: %.def.in $$(MKFILE_DEPS )
273
- @$$(call E, def: $$@ )
274
- $$(Q ) echo "{" > $$@
275
- $$(Q ) sed 's/.$$$$/&;/' $$< >> $$@
276
- $$(Q ) echo "};" >> $$@
277
-
278
- $(1 ) /%.mingw32.def: %.def.in $$(MKFILE_DEPS )
279
- @$$(call E, def: $$@ )
280
- $$(Q ) echo LIBRARY $$* > $$@
281
- $$(Q ) echo EXPORTS >> $$@
282
- $$(Q ) sed 's/^./ &/' $$< >> $$@
268
+ $$(Q )$$(MAKE ) -C $$(RT_OUTPUT_DIR_$(1 ) ) /jemalloc build_lib_static
283
269
284
270
endef
285
271
286
- # Instantiate template for all stages
272
+ # Instantiate template for all stages/targets
273
+ $(foreach target,$(CFG_TARGET_TRIPLES), \
274
+ $(eval $(call DEF_THIRD_PARTY_TARGETS,$(target))))
287
275
$(foreach stage,$(STAGES), \
288
- $(foreach target,$(CFG_TARGET_TRIPLES), \
276
+ $(foreach target,$(CFG_TARGET_TRIPLES), \
289
277
$(eval $(call DEF_RUNTIME_TARGETS,$(target),$(stage)))))
0 commit comments