Просмотр исходного кода

build: Fix dependency loop cause by phony targets

When building proj-deps.mk, it would always be evaluated as
'out-of-date' because the dependency collection relied on
phony targets.

And since make 'reloads' itself after including a file it
generates, it would continuously do so ... at least on some
version of make. make >= 4.2.1 seem to not have this issue.

To solve this, move on to real file 'markers' to indicate
the dependency has been processed. Also make sure it depends
on core.mk so it rebuilds it the core config changes

Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
Sylvain Munaut 6 лет назад
Родитель
Сommit
74fb15fae5
3 измененных файлов с 17 добавлено и 16 удалено
  1. 5 7
      build/core-magic.mk
  2. 7 5
      build/core-rules.mk
  3. 5 4
      build/project-rules.mk

+ 5 - 7
build/core-magic.mk

@@ -6,10 +6,8 @@ RTL_SRCS_$(CORE) := $(addprefix $(CORE_$(CORE)_DIR)/,$(RTL_SRCS_$(CORE)))
 TB_SRCS_$(CORE)  := $(addprefix $(CORE_$(CORE)_DIR)/,$(TB_SRCS_$(CORE)))
 
 # Dependency collection target
-deps-core-$(CORE): $(addprefix deps-core-,$(DEPS_$(CORE)))
-	$(eval CORE := $(subst deps-core-,,$@))
-	$(eval DEPS_SOLVE_TMP += $(CORE))
-	$(eval SRCS_SOLVE_TMP += $(RTL_SRCS_$(CORE)))
-	$(eval PREREQ_SOLVE_TMP += $(PREREQ_$(CORE)))
-
-.PHONY: deps-core-$(CORE)
+$(BUILD_TMP)/deps-core-$(CORE): $(CORE_$(CORE)_DIR)/core.mk $(addprefix $(BUILD_TMP)/deps-core-,$(DEPS_$(CORE)))
+	$(eval CORE := $(subst $(BUILD_TMP)/deps-core-,,$@))
+	@echo "DEPS_SOLVE_TMP += $(CORE)" > $@
+	@echo "SRCS_SOLVE_TMP += $(RTL_SRCS_$(CORE))" >> $@
+	@echo "PREREQ_SOLVE_TMP +=  $(PREREQ_$(CORE))" >> $@

+ 7 - 5
build/core-rules.mk

@@ -27,12 +27,14 @@ $(BUILD_TMP):
 $(foreach core_dir, $(wildcard $(ROOT)/cores/*), $(eval include $(core_dir)/core.mk))
 
 # Resolve dependency tree for project and collect sources
-$(BUILD_TMP)/proj-deps.mk: Makefile $(BUILD_TMP) deps-core-$(THIS_CORE)
-	@echo "CORE_ALL_DEPS := $(DEPS_SOLVE_TMP)" > $@
-	@echo "CORE_ALL_SRCS := $(SRCS_SOLVE_TMP)" >> $@
-	@echo "CORE_ALL_PREREQ := $(PREREQ_SOLVE_TMP)" >> $@
+$(BUILD_TMP)/core-deps.mk: Makefile $(BUILD_TMP) $(BUILD_TMP)/deps-core-$(THIS_CORE)
+	@echo "include $(BUILD_TMP)/deps-core-*" > $@
+	@echo "CORE_ALL_DEPS := \$$(DEPS_SOLVE_TMP)" >> $@
+	@echo "CORE_ALL_SRCS := \$$(SRCS_SOLVE_TMP)" >> $@
+	@echo "CORE_ALL_PREREQ := \$$(PREREQ_SOLVE_TMP)" >> $@
+
+include $(BUILD_TMP)/core-deps.mk
 
-include $(BUILD_TMP)/proj-deps.mk
 
 # Simulation
 $(BUILD_TMP)/%_tb: sim/%_tb.v $(ICE40_LIBS) $(CORE_ALL_PREREQ) $(CORE_ALL_SRCS)

+ 5 - 4
build/project-rules.mk

@@ -31,10 +31,11 @@ $(BUILD_TMP):
 $(foreach core_dir, $(wildcard $(ROOT)/cores/*), $(eval include $(core_dir)/core.mk))
 
 # Resolve dependency tree for project and collect sources
-$(BUILD_TMP)/proj-deps.mk: Makefile $(BUILD_TMP) $(addprefix deps-core-,$(PROJ_DEPS))
-	@echo "PROJ_ALL_DEPS := $(DEPS_SOLVE_TMP)" > $@
-	@echo "PROJ_ALL_SRCS := $(SRCS_SOLVE_TMP)" >> $@
-	@echo "PROJ_ALL_PREREQ := $(PREREQ_SOLVE_TMP)" >> $@
+$(BUILD_TMP)/proj-deps.mk: Makefile $(BUILD_TMP) $(addprefix $(BUILD_TMP)/deps-core-,$(PROJ_DEPS))
+	@echo "include $(BUILD_TMP)/deps-core-*" > $@
+	@echo "PROJ_ALL_DEPS := \$$(DEPS_SOLVE_TMP)" >> $@
+	@echo "PROJ_ALL_SRCS := \$$(SRCS_SOLVE_TMP)" >> $@
+	@echo "PROJ_ALL_PREREQ := \$$(PREREQ_SOLVE_TMP)" >> $@
 
 include $(BUILD_TMP)/proj-deps.mk