ソースを参照

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 年 前
コミット
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