Skip to content

Commit f99f2e8

Browse files
committed
Update the build system to handle dependency on header files. Closes #2547.
1 parent 1509b09 commit f99f2e8

File tree

4 files changed

+29
-23
lines changed

4 files changed

+29
-23
lines changed

Makefile.in

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,10 @@ rwildcard=$(foreach d,$(wildcard $1*),$(call rwildcard,$d/,$2) \
5555

5656
include config.mk
5757

58+
# We track all of the object files we might build so that we can find
59+
# and include all of the .d files in one fell swoop.
60+
ALL_OBJ_FILES :=
61+
5862
MKFILE_DEPS := config.stamp $(call rwildcard,$(CFG_SRC_DIR)mk/,*)
5963
NON_HOST_TRIPLES = $(filter-out $(CFG_HOST_TRIPLE),$(CFG_TARGET_TRIPLES))
6064

@@ -527,3 +531,8 @@ ifneq ($(strip $(findstring TAGS.emacs,$(MAKECMDGOALS)) \
527531
CFG_INFO := $(info cfg: including ctags rules)
528532
include $(CFG_SRC_DIR)mk/ctags.mk
529533
endif
534+
535+
# Find all of the .d files and include them to add information about
536+
# header file dependencies.
537+
ALL_DEP_FILES := $(ALL_OBJ_FILES:%.o=%.d)
538+
-include $(ALL_DEP_FILES)

mk/platform.mk

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -210,18 +210,20 @@ ifeq ($(CFG_C_COMPILER),clang)
210210
CXX=clang++
211211
endif
212212
ifeq ($(origin CPP),default)
213-
CPP=cpp
213+
CPP=clang -E
214214
endif
215215
CFG_GCCISH_CFLAGS += -Wall -Werror -fno-rtti -g
216216
CFG_GCCISH_LINK_FLAGS += -g
217-
CFG_DEPEND_C = $(CFG_GCCISH_CROSS)$(CXX) $(CFG_GCCISH_CFLAGS) -MT "$(1)" \
218-
-MM $(2)
217+
# These flags will cause the compiler to produce a .d file
218+
# next to the .o file that lists header deps.
219+
CFG_DEPEND_FLAGS = -MMD -MP -MT $(1) -MF $(1:%.o=%.d)
219220

220221
define CFG_MAKE_CC
221222
CFG_COMPILE_C_$(1) = $$(CFG_GCCISH_CROSS)$$(CXX) \
222223
$$(CFG_GCCISH_CFLAGS) $$(CFG_CLANG_CFLAGS) \
223224
$$(CFG_GCCISH_CFLAGS_$$(HOST_$(1))) \
224225
$$(CFG_CLANG_CFLAGS_$$(HOST_$(1))) \
226+
$$(CFG_DEPEND_FLAGS) \
225227
-c -o $$(1) $$(2)
226228
CFG_LINK_C_$(1) = $$(CFG_GCCISH_CROSS)$$(CXX) \
227229
$$(CFG_GCCISH_LINK_FLAGS) -o $$(1) \
@@ -241,19 +243,21 @@ ifeq ($(CFG_C_COMPILER),gcc)
241243
CXX=g++
242244
endif
243245
ifeq ($(origin CPP),default)
244-
CPP=cpp
246+
CPP=gcc -E
245247
endif
246248
CFG_GCCISH_CFLAGS += -Wall -Werror -fno-rtti -g
247249
CFG_GCCISH_LINK_FLAGS += -g
248-
CFG_DEPEND_C = $(CFG_GCCISH_CROSS)$(CXX) $(CFG_GCCISH_CFLAGS) -MT "$(1)" \
249-
-MM $(2)
250+
# These flags will cause the compiler to produce a .d file
251+
# next to the .o file that lists header deps.
252+
CFG_DEPEND_FLAGS = -MMD -MP -MT $(1) -MF $(1:%.o=%.d)
250253

251254
define CFG_MAKE_CC
252255
CFG_COMPILE_C_$(1) = $$(CFG_GCCISH_CROSS)$$(CXX) \
253256
$$(CFG_GCCISH_CFLAGS) \
254257
$$(CFG_GCCISH_CFLAGS_$$(HOST_$(1))) \
255258
$$(CFG_GCC_CFLAGS) \
256259
$$(CFG_GCC_CFLAGS_$$(HOST_$(1))) \
260+
$$(CFG_DEPEND_FLAGS) \
257261
-c -o $$(1) $$(2)
258262
CFG_LINK_C_$(1) = $$(CFG_GCCISH_CROSS)$$(CXX) \
259263
$$(CFG_GCCISH_LINK_FLAGS) -o $$(1) \
@@ -272,7 +276,7 @@ endif
272276
# We're using llvm-mc as our assembler because it supports
273277
# .cfi pseudo-ops on mac
274278
define CFG_MAKE_ASSEMBLER
275-
CFG_ASSEMBLE_$(1)=$$(CPP) $$(2) | \
279+
CFG_ASSEMBLE_$(1)=$$(CPP) $$(CFG_DEPEND_FLAGS) $$(2) | \
276280
$$(LLVM_MC_$$(CFG_HOST_TRIPLE)) \
277281
-assemble \
278282
-filetype=obj \

mk/rt.mk

Lines changed: 8 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -79,17 +79,6 @@ RUNTIME_S_$(1) := rt/arch/$$(HOST_$(1))/_context.S \
7979
rt/arch/$$(HOST_$(1))/ccall.S \
8080
rt/arch/$$(HOST_$(1))/record_sp.S
8181

82-
RUNTIME_HDR_$(1) := $$(wildcard \
83-
rt/*.h \
84-
rt/bigint/*.h \
85-
rt/isaac/*.h \
86-
rt/msvc/*.h \
87-
rt/sync/*.h \
88-
rt/uthash/*.h \
89-
rt/util/*.h \
90-
rt/vg/*.h \
91-
rt/arch/$$(HOST_$(1))/*.h)
92-
9382
ifeq ($$(HOST_$(1)), i386)
9483
LIBUV_ARCH_$(1) := ia32
9584
else
@@ -116,25 +105,28 @@ RUNTIME_INCS_$(1) := -I $$(S)src/rt -I $$(S)src/rt/isaac -I $$(S)src/rt/uthash \
116105
-I $$(S)src/libuv/include
117106
RUNTIME_OBJS_$(1) := $$(RUNTIME_CS_$(1):rt/%.cpp=rt/$(1)/%.o) \
118107
$$(RUNTIME_S_$(1):rt/%.S=rt/$(1)/%.o)
108+
ALL_OBJ_FILES += $$(RUNTIME_OBJS_$(1))
109+
110+
MORESTACK_OBJ_$(1) := rt/$(1)/arch/$$(HOST_$(1))/morestack.o
111+
ALL_OBJ_FILES += $$(MORESTACK_OBJS_$(1))
112+
119113
RUNTIME_LIBS_$(1) := $$(LIBUV_LIB_$(1))
120114

121-
rt/$(1)/%.o: rt/%.cpp $$(RUNTIME_HDR_$(1)) $$(MKFILE_DEPS)
115+
rt/$(1)/%.o: rt/%.cpp $$(MKFILE_DEPS)
122116
@$$(call E, compile: $$@)
123117
$$(Q)$$(call CFG_COMPILE_C_$(1), $$@, $$(RUNTIME_INCS_$(1)) \
124118
$$(SNAP_DEFINES)) $$<
125119

126-
rt/$(1)/%.o: rt/%.S $$(RUNTIME_HDR_$(1)) $$(MKFILE_DEPS) \
120+
rt/$(1)/%.o: rt/%.S $$(MKFILE_DEPS) \
127121
$$(LLVM_CONFIG_$$(CFG_HOST_TRIPLE))
128122
@$$(call E, compile: $$@)
129123
$$(Q)$$(call CFG_ASSEMBLE_$(1),$$@,$$<)
130124

131-
rt/$(1)/arch/$$(HOST_$(1))/libmorestack.a: \
132-
rt/$(1)/arch/$$(HOST_$(1))/morestack.o
125+
rt/$(1)/arch/$$(HOST_$(1))/libmorestack.a: $$(MORESTACK_OBJ_$(1))
133126
@$$(call E, link: $$@)
134127
$$(Q)ar rcs $$@ $$<
135128

136129
rt/$(1)/$(CFG_RUNTIME): $$(RUNTIME_OBJS_$(1)) $$(MKFILE_DEPS) \
137-
$$(RUNTIME_HDR_$(1)) \
138130
$$(RUNTIME_DEF_$(1)) \
139131
$$(RUNTIME_LIBS_$(1))
140132
@$$(call E, link: $$@)

mk/rustllvm.mk

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ RUSTLLVM_INCS_$(1) = $$(LLVM_EXTRA_INCDIRS_$(1)) \
2020
-iquote $$(LLVM_INCDIR_$(1)) \
2121
-iquote $$(S)src/rustllvm/include
2222
RUSTLLVM_OBJS_OBJS_$(1) := $$(RUSTLLVM_OBJS_CS_$(1):rustllvm/%.cpp=rustllvm/$(1)/%.o)
23+
ALL_OBJ_FILES += $$(RUSTLLVM_OBJS_OBJS_$(1))
2324

2425
rustllvm/$(1)/$(CFG_RUSTLLVM): $$(RUSTLLVM_OBJS_OBJS_$(1)) \
2526
$$(MKFILE_DEPS) $$(RUSTLLVM_DEF_$(1))

0 commit comments

Comments
 (0)