about summary refs log tree commit diff
diff options
context:
space:
mode:
authorMichael Sullivan <sully@msully.net>2012-06-14 11:07:19 -0700
committerMichael Sullivan <sully@msully.net>2012-06-14 14:50:14 -0700
commitf99f2e8ce2a2cea39291965ecffe847392f586b2 (patch)
treeaa697f997ae4b6b4fd1e2caf32d2a8b2bc5d29cd
parent1509b091c4008b09a1387a59eeffe1269eefaf50 (diff)
downloadrust-f99f2e8ce2a2cea39291965ecffe847392f586b2.tar.gz
rust-f99f2e8ce2a2cea39291965ecffe847392f586b2.zip
Update the build system to handle dependency on header files. Closes #2547.
-rw-r--r--Makefile.in9
-rw-r--r--mk/platform.mk18
-rw-r--r--mk/rt.mk24
-rw-r--r--mk/rustllvm.mk1
4 files changed, 29 insertions, 23 deletions
diff --git a/Makefile.in b/Makefile.in
index fc3912cb396..b5ce96ef2be 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -55,6 +55,10 @@ rwildcard=$(foreach d,$(wildcard $1*),$(call rwildcard,$d/,$2) \
 
 include config.mk
 
+# We track all of the object files we might build so that we can find
+# and include all of the .d files in one fell swoop.
+ALL_OBJ_FILES :=
+
 MKFILE_DEPS := config.stamp $(call rwildcard,$(CFG_SRC_DIR)mk/,*)
 NON_HOST_TRIPLES = $(filter-out $(CFG_HOST_TRIPLE),$(CFG_TARGET_TRIPLES))
 
@@ -527,3 +531,8 @@ ifneq ($(strip $(findstring TAGS.emacs,$(MAKECMDGOALS)) \
   CFG_INFO := $(info cfg: including ctags rules)
   include $(CFG_SRC_DIR)mk/ctags.mk
 endif
+
+# Find all of the .d files and include them to add information about
+# header file dependencies.
+ALL_DEP_FILES := $(ALL_OBJ_FILES:%.o=%.d)
+-include $(ALL_DEP_FILES)
diff --git a/mk/platform.mk b/mk/platform.mk
index 61526f1f559..6216f867bc8 100644
--- a/mk/platform.mk
+++ b/mk/platform.mk
@@ -210,18 +210,20 @@ ifeq ($(CFG_C_COMPILER),clang)
     CXX=clang++
   endif
   ifeq ($(origin CPP),default)
-    CPP=cpp
+    CPP=clang -E
   endif
   CFG_GCCISH_CFLAGS += -Wall -Werror -fno-rtti -g
   CFG_GCCISH_LINK_FLAGS += -g
-  CFG_DEPEND_C = $(CFG_GCCISH_CROSS)$(CXX) $(CFG_GCCISH_CFLAGS) -MT "$(1)" \
-    -MM $(2)
+  # These flags will cause the compiler to produce a .d file
+  # next to the .o file that lists header deps.
+  CFG_DEPEND_FLAGS = -MMD -MP -MT $(1) -MF $(1:%.o=%.d)
 
   define CFG_MAKE_CC
 	CFG_COMPILE_C_$(1) = $$(CFG_GCCISH_CROSS)$$(CXX)	\
 		$$(CFG_GCCISH_CFLAGS) $$(CFG_CLANG_CFLAGS)		\
 		$$(CFG_GCCISH_CFLAGS_$$(HOST_$(1)))				\
 	    $$(CFG_CLANG_CFLAGS_$$(HOST_$(1)))				\
+        $$(CFG_DEPEND_FLAGS)                            \
 		-c -o $$(1) $$(2)
     CFG_LINK_C_$(1) = $$(CFG_GCCISH_CROSS)$$(CXX)	\
 		$$(CFG_GCCISH_LINK_FLAGS) -o $$(1)			\
@@ -241,12 +243,13 @@ ifeq ($(CFG_C_COMPILER),gcc)
     CXX=g++
   endif
   ifeq ($(origin CPP),default)
-    CPP=cpp
+    CPP=gcc -E
   endif
   CFG_GCCISH_CFLAGS += -Wall -Werror -fno-rtti -g
   CFG_GCCISH_LINK_FLAGS += -g
-  CFG_DEPEND_C = $(CFG_GCCISH_CROSS)$(CXX) $(CFG_GCCISH_CFLAGS) -MT "$(1)" \
-    -MM $(2)
+  # These flags will cause the compiler to produce a .d file
+  # next to the .o file that lists header deps.
+  CFG_DEPEND_FLAGS = -MMD -MP -MT $(1) -MF $(1:%.o=%.d)
 
   define CFG_MAKE_CC
 	CFG_COMPILE_C_$(1) = $$(CFG_GCCISH_CROSS)$$(CXX)	\
@@ -254,6 +257,7 @@ ifeq ($(CFG_C_COMPILER),gcc)
 	    $$(CFG_GCCISH_CFLAGS_$$(HOST_$(1)))				\
         $$(CFG_GCC_CFLAGS)								\
         $$(CFG_GCC_CFLAGS_$$(HOST_$(1)))				\
+        $$(CFG_DEPEND_FLAGS)                            \
         -c -o $$(1) $$(2)
     CFG_LINK_C_$(1) = $$(CFG_GCCISH_CROSS)$$(CXX)	\
         $$(CFG_GCCISH_LINK_FLAGS) -o $$(1)			\
@@ -272,7 +276,7 @@ endif
 # We're using llvm-mc as our assembler because it supports
 # .cfi pseudo-ops on mac
 define CFG_MAKE_ASSEMBLER
-  CFG_ASSEMBLE_$(1)=$$(CPP) $$(2) | \
+  CFG_ASSEMBLE_$(1)=$$(CPP) $$(CFG_DEPEND_FLAGS) $$(2) | \
                     $$(LLVM_MC_$$(CFG_HOST_TRIPLE)) \
                     -assemble \
                     -filetype=obj \
diff --git a/mk/rt.mk b/mk/rt.mk
index cd382267301..02fcdc0def6 100644
--- a/mk/rt.mk
+++ b/mk/rt.mk
@@ -79,17 +79,6 @@ RUNTIME_S_$(1) := rt/arch/$$(HOST_$(1))/_context.S \
                   rt/arch/$$(HOST_$(1))/ccall.S \
                   rt/arch/$$(HOST_$(1))/record_sp.S
 
-RUNTIME_HDR_$(1) := $$(wildcard \
-                       rt/*.h \
-                       rt/bigint/*.h \
-                       rt/isaac/*.h \
-                       rt/msvc/*.h \
-                       rt/sync/*.h \
-                       rt/uthash/*.h \
-                       rt/util/*.h \
-                       rt/vg/*.h \
-                       rt/arch/$$(HOST_$(1))/*.h)
-
 ifeq ($$(HOST_$(1)), i386)
   LIBUV_ARCH_$(1) := ia32
 else
@@ -116,25 +105,28 @@ RUNTIME_INCS_$(1) := -I $$(S)src/rt -I $$(S)src/rt/isaac -I $$(S)src/rt/uthash \
 				-I $$(S)src/libuv/include
 RUNTIME_OBJS_$(1) := $$(RUNTIME_CS_$(1):rt/%.cpp=rt/$(1)/%.o) \
                      $$(RUNTIME_S_$(1):rt/%.S=rt/$(1)/%.o)
+ALL_OBJ_FILES += $$(RUNTIME_OBJS_$(1))
+
+MORESTACK_OBJ_$(1) := rt/$(1)/arch/$$(HOST_$(1))/morestack.o
+ALL_OBJ_FILES += $$(MORESTACK_OBJS_$(1))
+
 RUNTIME_LIBS_$(1) := $$(LIBUV_LIB_$(1))
 
-rt/$(1)/%.o: rt/%.cpp $$(RUNTIME_HDR_$(1)) $$(MKFILE_DEPS)
+rt/$(1)/%.o: rt/%.cpp $$(MKFILE_DEPS)
 	@$$(call E, compile: $$@)
 	$$(Q)$$(call CFG_COMPILE_C_$(1), $$@, $$(RUNTIME_INCS_$(1)) \
                  $$(SNAP_DEFINES)) $$<
 
-rt/$(1)/%.o: rt/%.S  $$(RUNTIME_HDR_$(1)) $$(MKFILE_DEPS) \
+rt/$(1)/%.o: rt/%.S  $$(MKFILE_DEPS) \
                      $$(LLVM_CONFIG_$$(CFG_HOST_TRIPLE))
 	@$$(call E, compile: $$@)
 	$$(Q)$$(call CFG_ASSEMBLE_$(1),$$@,$$<)
 
-rt/$(1)/arch/$$(HOST_$(1))/libmorestack.a: \
-		rt/$(1)/arch/$$(HOST_$(1))/morestack.o
+rt/$(1)/arch/$$(HOST_$(1))/libmorestack.a: $$(MORESTACK_OBJ_$(1))
 	@$$(call E, link: $$@)
 	$$(Q)ar rcs $$@ $$<
 
 rt/$(1)/$(CFG_RUNTIME): $$(RUNTIME_OBJS_$(1)) $$(MKFILE_DEPS) \
-                        $$(RUNTIME_HDR_$(1)) \
                         $$(RUNTIME_DEF_$(1)) \
                         $$(RUNTIME_LIBS_$(1))
 	@$$(call E, link: $$@)
diff --git a/mk/rustllvm.mk b/mk/rustllvm.mk
index fea09dae5af..622f7d4fa09 100644
--- a/mk/rustllvm.mk
+++ b/mk/rustllvm.mk
@@ -20,6 +20,7 @@ RUSTLLVM_INCS_$(1) = $$(LLVM_EXTRA_INCDIRS_$(1)) \
                      -iquote $$(LLVM_INCDIR_$(1)) \
                      -iquote $$(S)src/rustllvm/include
 RUSTLLVM_OBJS_OBJS_$(1) := $$(RUSTLLVM_OBJS_CS_$(1):rustllvm/%.cpp=rustllvm/$(1)/%.o)
+ALL_OBJ_FILES += $$(RUSTLLVM_OBJS_OBJS_$(1))
 
 rustllvm/$(1)/$(CFG_RUSTLLVM): $$(RUSTLLVM_OBJS_OBJS_$(1)) \
                           $$(MKFILE_DEPS) $$(RUSTLLVM_DEF_$(1))