Update the build system to handle dependency on header files. Closes #2547.
This commit is contained in:
parent
1509b091c4
commit
f99f2e8ce2
|
@ -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)
|
||||
|
|
|
@ -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 \
|
||||
|
|
24
mk/rt.mk
24
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: $$@)
|
||||
|
|
|
@ -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))
|
||||
|
|
Loading…
Reference in New Issue