about summary refs log tree commit diff
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2013-10-08 14:31:41 -0700
committerbors <bors@rust-lang.org>2013-10-08 14:31:41 -0700
commit6c2cdb34367b08549a8436e0b8ce75084d9df5f0 (patch)
tree282612aaf70716c36aa9f66ff72563bb81909cad
parent6db889996be763ca9e429982894eb0e8d9d002cc (diff)
parentd858360483153d9b3a64f0fd44a0ad39c047d6a4 (diff)
downloadrust-6c2cdb34367b08549a8436e0b8ce75084d9df5f0.tar.gz
rust-6c2cdb34367b08549a8436e0b8ce75084d9df5f0.zip
auto merge of #9772 : alexcrichton/rust/buildsystem, r=thestinger
Reorganize the makefiles to stop building these once per stage because there's
no need to do this at all.

Closes #7002
-rwxr-xr-xconfigure8
-rw-r--r--mk/platform.mk12
-rw-r--r--mk/rt.mk214
3 files changed, 119 insertions, 115 deletions
diff --git a/configure b/configure
index 70b2bb75a38..c2629324d80 100755
--- a/configure
+++ b/configure
@@ -680,11 +680,15 @@ do
   for s in 0 1 2 3
   do
     make_dir $t/rt/stage$s
+    make_dir $t/rt/libuv
+    make_dir $t/rt/libuv/src/ares
+    make_dir $t/rt/libuv/src/eio
+    make_dir $t/rt/libuv/src/ev
+    make_dir $t/rt/jemalloc
     for i in                                          \
       isaac linenoise sync test \
       arch/i386 arch/x86_64 arch/arm arch/mips  \
-      libuv libuv/src/ares libuv/src/eio libuv/src/ev \
-      jemalloc sundown/src sundown/html
+      sundown/src sundown/html
     do
       make_dir $t/rt/stage$s/$i
     done
diff --git a/mk/platform.mk b/mk/platform.mk
index b3d38fc074a..5885a57f69b 100644
--- a/mk/platform.mk
+++ b/mk/platform.mk
@@ -145,6 +145,7 @@ CXX_x86_64-unknown-linux-gnu=$(CXX)
 CPP_x86_64-unknown-linux-gnu=$(CPP)
 AR_x86_64-unknown-linux-gnu=$(AR)
 CFG_LIB_NAME_x86_64-unknown-linux-gnu=lib$(1).so
+CFG_STATIC_LIB_NAME_x86_64-unknown-linux-gnu=lib$(1).a
 CFG_LIB_GLOB_x86_64-unknown-linux-gnu=lib$(1)-*.so
 CFG_LIB_DSYM_GLOB_x86_64-unknown-linux-gnu=lib$(1)-*.dylib.dSYM
 CFG_GCCISH_CFLAGS_x86_64-unknown-linux-gnu := -Wall -Werror -g -fPIC -m64
@@ -171,6 +172,7 @@ CXX_i686-unknown-linux-gnu=$(CXX)
 CPP_i686-unknown-linux-gnu=$(CPP)
 AR_i686-unknown-linux-gnu=$(AR)
 CFG_LIB_NAME_i686-unknown-linux-gnu=lib$(1).so
+CFG_STATIC_LIB_NAME_i686-unknown-linux-gnu=lib$(1).a
 CFG_LIB_GLOB_i686-unknown-linux-gnu=lib$(1)-*.so
 CFG_LIB_DSYM_GLOB_i686-unknown-linux-gnu=lib$(1)-*.dylib.dSYM
 CFG_GCCISH_CFLAGS_i686-unknown-linux-gnu := -Wall -Werror -g -fPIC -m32
@@ -197,6 +199,7 @@ CXX_x86_64-apple-darwin=$(CXX)
 CPP_x86_64-apple-darwin=$(CPP)
 AR_x86_64-apple-darwin=$(AR)
 CFG_LIB_NAME_x86_64-apple-darwin=lib$(1).dylib
+CFG_STATIC_LIB_NAME_x86_64-apple-darwin=lib$(1).a
 CFG_LIB_GLOB_x86_64-apple-darwin=lib$(1)-*.dylib
 CFG_LIB_DSYM_GLOB_x86_64-apple-darwin=lib$(1)-*.dylib.dSYM
 CFG_GCCISH_CFLAGS_x86_64-apple-darwin := -Wall -Werror -g -fPIC -m64 -arch x86_64
@@ -222,6 +225,7 @@ CXX_i686-apple-darwin=$(CXX)
 CPP_i686-apple-darwin=$(CPP)
 AR_i686-apple-darwin=$(AR)
 CFG_LIB_NAME_i686-apple-darwin=lib$(1).dylib
+CFG_STATIC_LIB_NAME_i686-apple-darwin=lib$(1).a
 CFG_LIB_GLOB_i686-apple-darwin=lib$(1)-*.dylib
 CFG_LIB_DSYM_GLOB_i686-apple-darwin=lib$(1)-*.dylib.dSYM
 CFG_GCCISH_CFLAGS_i686-apple-darwin := -Wall -Werror -g -fPIC -m32 -arch i386
@@ -247,6 +251,7 @@ CXX_arm-linux-androideabi=$(CFG_ANDROID_CROSS_PATH)/bin/arm-linux-androideabi-g+
 CPP_arm-linux-androideabi=$(CFG_ANDROID_CROSS_PATH)/bin/arm-linux-androideabi-gcc -E
 AR_arm-linux-androideabi=$(CFG_ANDROID_CROSS_PATH)/bin/arm-linux-androideabi-ar
 CFG_LIB_NAME_arm-linux-androideabi=lib$(1).so
+CFG_STATIC_LIB_NAME_arm-linux-androideabi=lib$(1).a
 CFG_LIB_GLOB_arm-linux-androideabi=lib$(1)-*.so
 CFG_LIB_DSYM_GLOB_arm-linux-androideabi=lib$(1)-*.dylib.dSYM
 CFG_GCCISH_CFLAGS_arm-linux-androideabi := -Wall -g -fPIC -D__arm__ -DANDROID -D__ANDROID__
@@ -273,6 +278,7 @@ CXX_arm-unknown-linux-gnueabihf=arm-linux-gnueabihf-g++
 CPP_arm-unknown-linux-gnueabihf=arm-linux-gnueabihf-gcc -E
 AR_arm-unknown-linux-gnueabihf=arm-linux-gnueabihf-ar
 CFG_LIB_NAME_arm-unknown-linux-gnueabihf=lib$(1).so
+CFG_STATIC_LIB_NAME_arm-unknown-linux-gnueabihf=lib$(1).a
 CFG_LIB_GLOB_arm-unknown-linux-gnueabihf=lib$(1)-*.so
 CFG_LIB_DSYM_GLOB_arm-unknown-linux-gnueabihf=lib$(1)-*.dylib.dSYM
 CFG_GCCISH_CFLAGS_arm-unknown-linux-gnueabihf := -Wall -g -fPIC -D__arm__
@@ -299,6 +305,7 @@ CXX_arm-unknown-linux-gnueabi=arm-linux-gnueabi-g++
 CPP_arm-unknown-linux-gnueabi=arm-linux-gnueabi-gcc -E
 AR_arm-unknown-linux-gnueabi=arm-linux-gnueabi-ar
 CFG_LIB_NAME_arm-unknown-linux-gnueabi=lib$(1).so
+CFG_STATIC_LIB_NAME_arm-unknown-linux-gnueabi=lib$(1).a
 CFG_LIB_GLOB_arm-unknown-linux-gnueabi=lib$(1)-*.so
 CFG_LIB_DSYM_GLOB_arm-unknown-linux-gnueabi=lib$(1)-*.dylib.dSYM
 CFG_GCCISH_CFLAGS_arm-unknown-linux-gnueabi := -Wall -g -fPIC -D__arm__
@@ -325,6 +332,7 @@ CXX_mips-unknown-linux-gnu=mips-linux-gnu-g++
 CPP_mips-unknown-linux-gnu=mips-linux-gnu-gcc -E
 AR_mips-unknown-linux-gnu=mips-linux-gnu-ar
 CFG_LIB_NAME_mips-unknown-linux-gnu=lib$(1).so
+CFG_STATIC_LIB_NAME_mips-unknown-linux-gnu=lib$(1).a
 CFG_LIB_GLOB_mips-unknown-linux-gnu=lib$(1)-*.so
 CFG_LIB_DSYM_GLOB_mips-unknown-linux-gnu=lib$(1)-*.dylib.dSYM
 CFG_GCCISH_CFLAGS_mips-unknown-linux-gnu := -Wall -g -fPIC -mips32r2 -msoft-float -mabi=32 -mno-compact-eh
@@ -351,6 +359,7 @@ CXX_i686-pc-mingw32=$(CXX)
 CPP_i686-pc-mingw32=$(CPP)
 AR_i686-pc-mingw32=$(AR)
 CFG_LIB_NAME_i686-pc-mingw32=$(1).dll
+CFG_STATIC_LIB_NAME_i686-pc-mingw32=$(1).lib
 CFG_LIB_GLOB_i686-pc-mingw32=$(1)-*.dll
 CFG_LIB_DSYM_GLOB_i686-pc-mingw32=$(1)-*.dylib.dSYM
 CFG_GCCISH_CFLAGS_i686-pc-mingw32 := -Wall -Werror -g -m32 -march=i686 -D_WIN32_WINNT=0x0600 -I$(CFG_SRC_DIR)src/etc/mingw-fix-include
@@ -377,6 +386,7 @@ CXX_i586-mingw32msvc=$(CFG_MINGW32_CROSS_PATH)/bin/i586-mingw32msvc-g++
 CPP_i586-mingw32msvc=$(CFG_MINGW32_CROSS_PATH)/bin/i586-mingw32msvc-cpp
 AR_i586-mingw32msvc=$(CFG_MINGW32_CROSS_PATH)/bin/i586-mingw32msvc-ar
 CFG_LIB_NAME_i586-mingw32msvc=$(1).dll
+CFG_STATIC_LIB_NAME_i586-mingw32msvc=$(1).lib
 CFG_LIB_GLOB_i586-mingw32msvc=$(1)-*.dll
 CFG_LIB_DSYM_GLOB_i586-mingw32msvc=$(1)-*.dylib.dSYM
 CFG_GCCISH_CFLAGS_i586-mingw32msvc := -Wall -Werror -g -march=i586 -m32
@@ -404,6 +414,7 @@ CXX_x86_64-w64-mingw32=$(CXX)
 CPP_x86_64-w64-mingw32=$(CPP)
 AR_x86_64-w64-mingw32=$(AR)
 CFG_LIB_NAME_x86_64-w64-mingw32=$(1).dll
+CFG_STATIC_LIB_NAME_x86_64-w64-mingw32=$(1).lib
 CFG_LIB_GLOB_x86_64-w64-mingw32=$(1)-*.dll
 CFG_LIB_DSYM_GLOB_x86_64-w64-mingw32=$(1)-*.dylib.dSYM
 CFG_GCCISH_CFLAGS_x86_64-w64-mingw32 := -Wall -Werror -g -m64 -D_WIN32_WINNT=0x0600
@@ -429,6 +440,7 @@ CXX_x86_64-unknown-freebsd=$(CXX)
 CPP_x86_64-unknown-freebsd=$(CPP)
 AR_x86_64-unknown-freebsd=$(AR)
 CFG_LIB_NAME_x86_64-unknown-freebsd=lib$(1).so
+CFG_STATIC_LIB_NAME_x86_64-unknown-freebsd=lib$(1).a
 CFG_LIB_GLOB_x86_64-unknown-freebsd=lib$(1)-*.so
 CFG_LIB_DSYM_GLOB_x86_64-unknown-freebsd=$(1)-*.dylib.dSYM
 CFG_GCCISH_CFLAGS_x86_64-unknown-freebsd := -Wall -Werror -g -fPIC -I/usr/local/include
diff --git a/mk/rt.mk b/mk/rt.mk
index fb4d8f7c734..5d75b961510 100644
--- a/mk/rt.mk
+++ b/mk/rt.mk
@@ -46,6 +46,21 @@ define DEF_LIBUV_ARCH_VAR
 endef
 $(foreach t,$(CFG_TARGET_TRIPLES),$(eval $(call DEF_LIBUV_ARCH_VAR,$(t))))
 
+ifdef CFG_ENABLE_FAST_MAKE
+LIBUV_DEPS := $(S)/.gitmodules
+else
+LIBUV_DEPS := $(wildcard \
+              $(S)src/libuv/* \
+              $(S)src/libuv/*/* \
+              $(S)src/libuv/*/*/* \
+              $(S)src/libuv/*/*/*/*)
+endif
+
+LIBUV_NO_LOAD = run-benchmarks.target.mk run-tests.target.mk \
+		uv_dtrace_header.target.mk uv_dtrace_provider.target.mk
+
+export PYTHONPATH := $(PYTHONPATH):$(S)src/gyp/pylib
+
 define DEF_RUNTIME_TARGETS
 
 ######################################################################
@@ -97,31 +112,8 @@ RUNTIME_S_$(1)_$(2) := rt/arch/$$(HOST_$(1))/_context.S \
 			rt/arch/$$(HOST_$(1))/ccall.S \
 			rt/arch/$$(HOST_$(1))/record_sp.S
 
-RT_OUTPUT_DIR_$(1) := $(1)/rt
 RT_BUILD_DIR_$(1)_$(2) := $$(RT_OUTPUT_DIR_$(1))/stage$(2)
 
-ifeq ($$(CFG_WINDOWSY_$(1)), 1)
-  LIBUV_OSTYPE_$(1)_$(2) := win
-  LIBUV_LIB_$(1)_$(2) := $$(RT_BUILD_DIR_$(1)_$(2))/libuv/libuv.a
-  JEMALLOC_LIB_$(1)_$(2) := $$(RT_BUILD_DIR_$(1)_$(2))/jemalloc/lib/jemalloc.lib
-else ifeq ($(OSTYPE_$(1)), apple-darwin)
-  LIBUV_OSTYPE_$(1)_$(2) := mac
-  LIBUV_LIB_$(1)_$(2) := $$(RT_BUILD_DIR_$(1)_$(2))/libuv/libuv.a
-  JEMALLOC_LIB_$(1)_$(2) := $$(RT_BUILD_DIR_$(1)_$(2))/jemalloc/lib/libjemalloc_pic.a
-else ifeq ($(OSTYPE_$(1)), unknown-freebsd)
-  LIBUV_OSTYPE_$(1)_$(2) := freebsd
-  LIBUV_LIB_$(1)_$(2) := $$(RT_BUILD_DIR_$(1)_$(2))/libuv/libuv.a
-  JEMALLOC_LIB_$(1)_$(2) := $$(RT_BUILD_DIR_$(1)_$(2))/jemalloc/lib/libjemalloc_pic.a
-else ifeq ($(OSTYPE_$(1)), linux-androideabi)
-  LIBUV_OSTYPE_$(1)_$(2) := android
-  LIBUV_LIB_$(1)_$(2) := $$(RT_BUILD_DIR_$(1)_$(2))/libuv/libuv.a
-  JEMALLOC_LIB_$(1)_$(2) := $$(RT_BUILD_DIR_$(1)_$(2))/jemalloc/lib/libjemalloc_pic.a
-else
-  LIBUV_OSTYPE_$(1)_$(2) := linux
-  LIBUV_LIB_$(1)_$(2) := $$(RT_BUILD_DIR_$(1)_$(2))/libuv/libuv.a
-  JEMALLOC_LIB_$(1)_$(2) := $$(RT_BUILD_DIR_$(1)_$(2))/jemalloc/lib/libjemalloc_pic.a
-endif
-
 RUNTIME_DEF_$(1)_$(2) := $$(RT_OUTPUT_DIR_$(1))/rustrt$$(CFG_DEF_SUFFIX_$(1))
 RUNTIME_INCS_$(1)_$(2) := -I $$(S)src/rt -I $$(S)src/rt/isaac -I $$(S)src/rt/uthash \
                      -I $$(S)src/rt/arch/$$(HOST_$(1)) \
@@ -157,133 +149,129 @@ $$(RT_BUILD_DIR_$(1)_$(2))/arch/$$(HOST_$(1))/libmorestack.a: $$(MORESTACK_OBJ_$
 	$$(Q)$(AR_$(1)) rcs $$@ $$<
 
 $$(RT_BUILD_DIR_$(1)_$(2))/$(CFG_RUNTIME_$(1)): $$(RUNTIME_OBJS_$(1)_$(2)) $$(MKFILE_DEPS) \
-                        $$(RUNTIME_DEF_$(1)_$(2)) $$(LIBUV_LIB_$(1)_$(2)) $$(JEMALLOC_LIB_$(1)_$(2))
+                        $$(RUNTIME_DEF_$(1)_$(2)) $$(LIBUV_LIB_$(1)) $$(JEMALLOC_LIB_$(1))
 	@$$(call E, link: $$@)
 	$$(Q)$$(call CFG_LINK_CXX_$(1),$$@, $$(RUNTIME_OBJS_$(1)_$(2)) \
-	  $$(JEMALLOC_LIB_$(1)_$(2)) $$(CFG_GCCISH_POST_LIB_FLAGS_$(1)) $$(LIBUV_LIB_$(1)_$(2)) \
-	  $$(CFG_LIBUV_LINK_FLAGS_$(1)),$$(RUNTIME_DEF_$(1)_$(2)),$$(CFG_RUNTIME_$(1)))
+	    $$(JEMALLOC_LIB_$(1)) $$(CFG_GCCISH_POST_LIB_FLAGS_$(1)) $$(LIBUV_LIB_$(1)) \
+	    $$(CFG_LIBUV_LINK_FLAGS_$(1)),$$(RUNTIME_DEF_$(1)_$(2)),$$(CFG_RUNTIME_$(1)))
 
-# FIXME: For some reason libuv's makefiles can't figure out the
-# correct definition of CC on the mingw I'm using, so we are
-# explicitly using gcc. Also, we have to list environment variables
-# first on windows... mysterious
+# These could go in rt.mk or rustllvm.mk, they're needed for both.
 
-ifdef CFG_ENABLE_FAST_MAKE
-LIBUV_DEPS := $$(S)/.gitmodules
+# This regexp has a single $, escaped twice
+$(1)/%.bsd.def:    %.def.in $$(MKFILE_DEPS)
+	@$$(call E, def: $$@)
+	$$(Q)echo "{" > $$@
+	$$(Q)sed 's/.$$$$/&;/' $$< >> $$@
+	$$(Q)echo "};" >> $$@
+
+$(1)/%.linux.def:    %.def.in $$(MKFILE_DEPS)
+	@$$(call E, def: $$@)
+	$$(Q)echo "{" > $$@
+	$$(Q)sed 's/.$$$$/&;/' $$< >> $$@
+	$$(Q)echo "};" >> $$@
+
+$(1)/%.darwin.def:	%.def.in $$(MKFILE_DEPS)
+	@$$(call E, def: $$@)
+	$$(Q)sed 's/^./_&/' $$< > $$@
+
+$(1)/%.android.def:  %.def.in $$(MKFILE_DEPS)
+	@$$(call E, def: $$@)
+	$$(Q)echo "{" > $$@
+	$$(Q)sed 's/.$$$$/&;/' $$< >> $$@
+	$$(Q)echo "};" >> $$@
+
+$(1)/%.mingw32.def:	%.def.in $$(MKFILE_DEPS)
+	@$$(call E, def: $$@)
+	$$(Q)echo LIBRARY $$* > $$@
+	$$(Q)echo EXPORTS >> $$@
+	$$(Q)sed 's/^./    &/' $$< >> $$@
+
+endef
+
+
+######################################################################
+# Runtime third party targets (libuv, jemalloc, etc.)
+#
+# These targets do not need to be built once per stage, so these
+# rules just build them once and then we're done with them.
+######################################################################
+
+define DEF_THIRD_PARTY_TARGETS
+
+# $(1) is the target triple
+
+RT_OUTPUT_DIR_$(1) := $(1)/rt
+JEMALLOC_TARGET_$(1) := jemalloc_pic
+
+ifeq ($$(CFG_WINDOWSY_$(1)), 1)
+  LIBUV_OSTYPE_$(1) := win
+  JEMALLOC_TARGET_$(1) := jemalloc
+else ifeq ($(OSTYPE_$(1)), apple-darwin)
+  LIBUV_OSTYPE_$(1) := mac
+else ifeq ($(OSTYPE_$(1)), unknown-freebsd)
+  LIBUV_OSTYPE_$(1) := freebsd
+else ifeq ($(OSTYPE_$(1)), linux-androideabi)
+  LIBUV_OSTYPE_$(1) := android
+  JEMALLOC_ARGS_$(1) := --disable-tls
+  LIBUV_ARGS_$(1) := PLATFORM=android host=android OS=linux
 else
-LIBUV_DEPS := $$(wildcard \
-              $$(S)src/libuv/* \
-              $$(S)src/libuv/*/* \
-              $$(S)src/libuv/*/*/* \
-              $$(S)src/libuv/*/*/*/*)
+  LIBUV_OSTYPE_$(1) := linux
 endif
 
-LIBUV_MAKEFILE_$(1)_$(2) := $$(CFG_BUILD_DIR)$$(RT_BUILD_DIR_$(1)_$(2))/libuv/Makefile
-LIBUV_NO_LOAD = run-benchmarks.target.mk run-tests.target.mk \
-		uv_dtrace_header.target.mk uv_dtrace_provider.target.mk
+LIBUV_NAME_$(1) := $$(call CFG_STATIC_LIB_NAME_$(1),uv)
+LIBUV_LIB_$(1) := $$(RT_OUTPUT_DIR_$(1))/libuv/$$(LIBUV_NAME_$(1))
+JEMALLOC_NAME_$(1) := $$(call CFG_STATIC_LIB_NAME_$(1),$$(JEMALLOC_TARGET_$(1)))
+JEMALLOC_LIB_$(1) := $$(RT_OUTPUT_DIR_$(1))/jemalloc/lib/$$(JEMALLOC_NAME_$(1))
 
-export PYTHONPATH := $(PYTHONPATH):$$(S)src/gyp/pylib
+LIBUV_MAKEFILE_$(1) := $$(CFG_BUILD_DIR)$$(RT_OUTPUT_DIR_$(1))/libuv/Makefile
 
-$$(LIBUV_MAKEFILE_$(1)_$(2)): $$(LIBUV_DEPS)
+$$(LIBUV_MAKEFILE_$(1)): $$(LIBUV_DEPS)
 	(cd $(S)src/libuv/ && \
-	 $$(CFG_PYTHON) ./gyp_uv -f make -Dtarget_arch=$$(LIBUV_ARCH_$(1)) -D ninja \
-	   -DOS=$$(LIBUV_OSTYPE_$(1)_$(2)) \
+	 $$(CFG_PYTHON) ./gyp_uv -f make -Dtarget_arch=$$(LIBUV_ARCH_$(1)) \
+	   -D ninja \
+	   -DOS=$$(LIBUV_OSTYPE_$(1)) \
 	   -Goutput_dir=$$(@D) --generator-output $$(@D))
 
-# XXX: Shouldn't need platform-specific conditions here
+# Windows has a completely different build system for libuv because of mingw. In
+# theory when we support msvc then we should be using gyp's msvc output instead
+# of mingw's makefile for windows
 ifdef CFG_WINDOWSY_$(1)
-$$(LIBUV_LIB_$(1)_$(2)): $$(LIBUV_DEPS)
+$$(LIBUV_LIB_$(1)): $$(LIBUV_DEPS)
 	$$(Q)$$(MAKE) -C $$(S)src/libuv -f Makefile.mingw \
 		CFLAGS="$$(CFG_GCCISH_CFLAGS) $$(LIBUV_FLAGS_$$(HOST_$(1))) $$(SNAP_DEFINES)" \
 		AR="$$(AR_$(1))" \
 		V=$$(VERBOSE)
 	$$(Q)cp $$(S)src/libuv/libuv.a $$@
-else ifeq ($(OSTYPE_$(1)), linux-androideabi)
-$$(LIBUV_LIB_$(1)_$(2)): $$(LIBUV_DEPS) $$(LIBUV_MAKEFILE_$(1)_$(2))
-	$$(Q)$$(MAKE) -C $$(@D) \
-		CFLAGS="$$(CFG_GCCISH_CFLAGS) $$(LIBUV_FLAGS_$$(HOST_$(1))) $$(SNAP_DEFINES)" \
-		LDFLAGS="$$(CFG_GCCISH_LINK_FLAGS) $$(LIBUV_FLAGS_$$(HOST_$(1)))" \
-		CC="$$(CC_$(1))" \
-		CXX="$$(CXX_$(1))" \
-	 	LINK="$$(CXX_$(1))" \
-		AR="$$(AR_$(1))" \
-		PLATFORM=android \
-		host=android OS=linux \
-		builddir="." \
-		BUILDTYPE=Release \
-		NO_LOAD="$$(LIBUV_NO_LOAD)" \
-		V=$$(VERBOSE)
 else
-$$(LIBUV_LIB_$(1)_$(2)): $$(LIBUV_DEPS) $$(LIBUV_MAKEFILE_$(1)_$(2))
+$$(LIBUV_LIB_$(1)): $$(LIBUV_DEPS) $$(LIBUV_MAKEFILE_$(1))
 	$$(Q)$$(MAKE) -C $$(@D) \
 		CFLAGS="$$(CFG_GCCISH_CFLAGS) $$(LIBUV_FLAGS_$$(HOST_$(1))) $$(SNAP_DEFINES)" \
 		LDFLAGS="$$(CFG_GCCISH_LINK_FLAGS) $$(LIBUV_FLAGS_$$(HOST_$(1)))" \
 		CC="$$(CC_$(1))" \
 		CXX="$$(CXX_$(1))" \
 		AR="$$(AR_$(1))" \
+		$$(LIBUV_ARGS_$(1)) \
 		builddir="." \
 		BUILDTYPE=Release \
 		NO_LOAD="$$(LIBUV_NO_LOAD)" \
 		V=$$(VERBOSE)
 endif
 
-ifeq ($(OSTYPE_$(1)), linux-androideabi)
-$$(JEMALLOC_LIB_$(1)_$(2)):
-	cd $$(RT_BUILD_DIR_$(1)_$(2))/jemalloc; $(S)src/rt/jemalloc/configure \
-		--disable-experimental --build=$(CFG_BUILD_TRIPLE) --host=$(1) --disable-tls \
-		EXTRA_CFLAGS="$$(CFG_GCCISH_CFLAGS) $$(LIBUV_FLAGS_$$(HOST_$(1))) $$(SNAP_DEFINES)" \
-		LDFLAGS="$$(CFG_GCCISH_LINK_FLAGS) $$(LIBUV_FLAGS_$$(HOST_$(1)))" \
-		CC="$$(CC_$(1))" \
-		CXX="$$(CXX_$(1))" \
-		AR="$$(AR_$(1))"
-	$$(Q)$$(MAKE) -C $$(RT_BUILD_DIR_$(1)_$(2))/jemalloc
-else
-$$(JEMALLOC_LIB_$(1)_$(2)):
-	cd $$(RT_BUILD_DIR_$(1)_$(2))/jemalloc; $(S)src/rt/jemalloc/configure \
+$$(JEMALLOC_LIB_$(1)):
+	cd $$(RT_OUTPUT_DIR_$(1))/jemalloc; $(S)src/rt/jemalloc/configure \
+		$$(JEMALLOC_ARGS_$(1)) \
 		--disable-experimental --build=$(CFG_BUILD_TRIPLE) --host=$(1) \
-		EXTRA_CFLAGS="$$(CFG_GCCISH_CFLAGS) $$(LIBUV_FLAGS_$$(HOST_$(1))) $$(SNAP_DEFINES)" \
-		LDFLAGS="$$(CFG_GCCISH_LINK_FLAGS) $$(LIBUV_FLAGS_$$(HOST_$(1)))" \
+		EXTRA_CFLAGS="$$(CFG_GCCISH_CFLAGS) $$(LIBUV_FLAGS_$$(HOST_$(1)))" \
 		CC="$$(CC_$(1))" \
 		CXX="$$(CXX_$(1))" \
 		AR="$$(AR_$(1))"
-	$$(Q)$$(MAKE) -C $$(RT_BUILD_DIR_$(1)_$(2))/jemalloc
-endif
-
-
-# These could go in rt.mk or rustllvm.mk, they're needed for both.
-
-# This regexp has a single $, escaped twice
-$(1)/%.bsd.def:    %.def.in $$(MKFILE_DEPS)
-	@$$(call E, def: $$@)
-	$$(Q)echo "{" > $$@
-	$$(Q)sed 's/.$$$$/&;/' $$< >> $$@
-	$$(Q)echo "};" >> $$@
-
-$(1)/%.linux.def:    %.def.in $$(MKFILE_DEPS)
-	@$$(call E, def: $$@)
-	$$(Q)echo "{" > $$@
-	$$(Q)sed 's/.$$$$/&;/' $$< >> $$@
-	$$(Q)echo "};" >> $$@
-
-$(1)/%.darwin.def:	%.def.in $$(MKFILE_DEPS)
-	@$$(call E, def: $$@)
-	$$(Q)sed 's/^./_&/' $$< > $$@
-
-$(1)/%.android.def:  %.def.in $$(MKFILE_DEPS)
-	@$$(call E, def: $$@)
-	$$(Q)echo "{" > $$@
-	$$(Q)sed 's/.$$$$/&;/' $$< >> $$@
-	$$(Q)echo "};" >> $$@
-
-$(1)/%.mingw32.def:	%.def.in $$(MKFILE_DEPS)
-	@$$(call E, def: $$@)
-	$$(Q)echo LIBRARY $$* > $$@
-	$$(Q)echo EXPORTS >> $$@
-	$$(Q)sed 's/^./    &/' $$< >> $$@
+	$$(Q)$$(MAKE) -C $$(RT_OUTPUT_DIR_$(1))/jemalloc build_lib_static
 
 endef
 
-# Instantiate template for all stages
+# Instantiate template for all stages/targets
+$(foreach target,$(CFG_TARGET_TRIPLES), \
+     $(eval $(call DEF_THIRD_PARTY_TARGETS,$(target))))
 $(foreach stage,$(STAGES), \
-	$(foreach target,$(CFG_TARGET_TRIPLES), \
+    $(foreach target,$(CFG_TARGET_TRIPLES), \
 	 $(eval $(call DEF_RUNTIME_TARGETS,$(target),$(stage)))))