From 2bfa72ea42493c3337737cd35c5cd366502031c3 Mon Sep 17 00:00:00 2001 From: Niko Matsakis Date: Tue, 1 Nov 2011 17:28:41 -0700 Subject: [PATCH] virtualize rustllvm construction per target triple --- configure | 8 +++++++- mk/rustllvm.mk | 39 +++++++++++++++++++++++---------------- mk/target.mk | 4 ++-- 3 files changed, 32 insertions(+), 19 deletions(-) diff --git a/configure b/configure index bb7a4a8e5ef..34861581283 100755 --- a/configure +++ b/configure @@ -394,13 +394,19 @@ step_msg "making directories" for i in \ doc doc/std \ nd nd/std \ - rustllvm dl \ + dl \ test/run-pass test/run-fail test/compile-fail \ test/bench test/perf test/pretty do make_dir $i done +make_dir rustllvm +for t in $CFG_TARGET_TRIPLES +do + make_dir rustllvm/$t +done + make_dir rt for t in $CFG_TARGET_TRIPLES do diff --git a/mk/rustllvm.mk b/mk/rustllvm.mk index 7df9e3366e0..e5d30d5487b 100644 --- a/mk/rustllvm.mk +++ b/mk/rustllvm.mk @@ -2,29 +2,36 @@ # rustc LLVM-extensions (C++) library variables and rules ###################################################################### -RUSTLLVM_OBJS_CS := $(addprefix rustllvm/, RustGCMetadataPrinter.cpp \ +define DEF_RUSTLLVM_TARGETS + +RUSTLLVM_OBJS_CS_$(1) := $$(addprefix rustllvm/, RustGCMetadataPrinter.cpp \ RustGCStrategy.cpp RustWrapper.cpp) # Behind an ifdef for now since this requires a patched LLVM. ifdef CFG_STACK_GROWTH -RUSTLLVM_OBJS_CS += rustllvm/RustPrologHook.cpp +RUSTLLVM_OBJS_CS_$(1) += rustllvm/RustPrologHook.cpp endif -RUSTLLVM_DEF := rustllvm/rustllvm$(CFG_DEF_SUFFIX) +RUSTLLVM_DEF_$(1) := rustllvm/rustllvm$$(CFG_DEF_SUFFIX) -RUSTLLVM_INCS := -iquote $(CFG_LLVM_INCDIR) \ - -iquote $(S)src/rustllvm/include -RUSTLLVM_OBJS_OBJS := $(RUSTLLVM_OBJS_CS:.cpp=.o) +RUSTLLVM_INCS_$(1) := -iquote $$(CFG_LLVM_INCDIR) \ + -iquote $$(S)src/rustllvm/include +RUSTLLVM_OBJS_OBJS_$(1) := $$(RUSTLLVM_OBJS_CS_$(1):rustllvm/%.cpp=rustllvm/$(1)/%.o) -rustllvm/$(CFG_RUSTLLVM): $(RUSTLLVM_OBJS_OBJS) \ - $(MKFILES) $(RUSTLLVM_DEF) - @$(call E, link: $@) - $(Q)$(call CFG_LINK_C,$@,$(RUSTLLVM_OBJS_OBJS) \ - $(CFG_GCCISH_PRE_LIB_FLAGS) $(CFG_LLVM_LIBS) \ - $(CFG_GCCISH_POST_LIB_FLAGS) \ - $(CFG_LLVM_LDFLAGS),$(RUSTLLVM_DEF),$(CFG_RUSTLLVM)) +rustllvm/$(1)/$(CFG_RUSTLLVM): $$(RUSTLLVM_OBJS_OBJS_$(1)) \ + $$(MKFILES) $$(RUSTLLVM_DEF_$(1)) + @$$(call E, link: $$@) + $$(Q)$$(call CFG_LINK_C_$(1),$$@,$$(RUSTLLVM_OBJS_OBJS_$(1)) \ + $$(CFG_GCCISH_PRE_LIB_FLAGS) $$(CFG_LLVM_LIBS) \ + $$(CFG_GCCISH_POST_LIB_FLAGS) \ + $$(CFG_LLVM_LDFLAGS),$$(RUSTLLVM_DEF_$(1)),$$(CFG_RUSTLLVM)) -rustllvm/%.o: rustllvm/%.cpp $(MKFILES) - @$(call E, compile: $@) - $(Q)$(call CFG_COMPILE_C, $@, $(CFG_LLVM_CXXFLAGS) $(RUSTLLVM_INCS)) $< +rustllvm/$(1)/%.o: rustllvm/%.cpp $$(MKFILES) + @$$(call E, compile: $$@) + $$(Q)$$(call CFG_COMPILE_C_$(1), $$@, $$(CFG_LLVM_CXXFLAGS) $$(RUSTLLVM_INCS_$(1))) $$< +endef + +# Instantiate template for all stages +$(foreach target,$(CFG_TARGET_TRIPLES), \ + $(eval $(call DEF_RUSTLLVM_TARGETS,$(target)))) diff --git a/mk/target.mk b/mk/target.mk index 71c744bdf4c..0844db9e433 100644 --- a/mk/target.mk +++ b/mk/target.mk @@ -35,11 +35,11 @@ $$(TARGET_LIB$(1)$(2))/libstd.rlib: \ @$$(call E, compile_and_link: $$@) $$(STAGE$(1)_$(2)) --lib --static -o $$@ $$< -$$(TARGET_LIB$(1)$(2))/$$(CFG_RUNTIME): rt/$(2)/$(CFG_RUNTIME) +$$(TARGET_LIB$(1)$(2))/$$(CFG_RUNTIME): rt/$(2)/$$(CFG_RUNTIME) @$$(call E, cp: $$@) $$(Q)cp $$< $$@ -$$(TARGET_LIB$(1)$(2))/$$(CFG_RUSTLLVM): rustllvm/$$(CFG_RUSTLLVM) +$$(TARGET_LIB$(1)$(2))/$$(CFG_RUSTLLVM): rustllvm/$(2)/$$(CFG_RUSTLLVM) @$$(call E, cp: $$@) $$(Q)cp $$< $$@