This is an automated email from the ASF dual-hosted git repository. xiaoxiang pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/incubator-nuttx.git
The following commit(s) were added to refs/heads/master by this push: new 57a19de Improve dirlinks dependencies for Makefile.win 57a19de is described below commit 57a19de451738c7512c1ed3df619f820764a1ff7 Author: Alan Rosenthal <alanrosent...@google.com> AuthorDate: Tue Jan 4 10:46:26 2022 -0500 Improve dirlinks dependencies for Makefile.win This PR improved dirlinks dependencies for Makefile.unix: https://github.com/apache/incubator-nuttx/pull/5069 This PR copies the changes into Makefile.win --- tools/Makefile.win | 160 +++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 118 insertions(+), 42 deletions(-) diff --git a/tools/Makefile.win b/tools/Makefile.win index 3f16f5d..7726f61 100644 --- a/tools/Makefile.win +++ b/tools/Makefile.win @@ -131,7 +131,7 @@ endif BIN = nuttx$(EXEEXT) all: $(BIN) -.PHONY: dirlinks context clean_context config oldconfig menuconfig nconfig export subdir_clean clean subdir_distclean distclean apps_clean apps_distclean +.PHONY: context clean_context config oldconfig menuconfig nconfig export subdir_clean clean subdir_distclean distclean apps_clean apps_distclean .PHONY: pass1 pass1dep .PHONY: pass2 pass2dep @@ -233,7 +233,7 @@ include\nuttx\config.h: $(TOPDIR)\.config tools\mkconfig$(HOSTEXEEXT) tools\mkdeps$(HOSTEXEEXT): $(Q) $(MAKE) -C tools -f Makefile.host mkdeps$(HOSTEXEEXT) -# dirlinks, and helpers +# .dirlinks, and helpers # # Directories links. Most of establishing the NuttX configuration involves # setting up symbolic links with 'generic' directory names to specific, @@ -242,71 +242,147 @@ tools\mkdeps$(HOSTEXEEXT): # Link the arch\<arch-name>\include directory to include\arch include\arch: - @echo LN: include\arch to $(ARCH_DIR)\include - $(Q) $(DIRLINK) $(TOPDIR)\$(ARCH_DIR)\include include\arch - $(Q) touch $@ + @echo "LN: $@ to $(ARCH_DIR)\include" + $(Q) $(DIRLINK) $(TOPDIR)\$(ARCH_DIR)\include $@ # Link the boards\<arch>\<chip>\<board>\include directory to include\arch\board -include\arch\board: include\arch - @echo LN: include\arch\board to $(BOARD_DIR)\include - $(Q) $(DIRLINK) $(BOARD_DIR)\include include\arch\board - $(Q) touch $@ +include\arch\board: | include\arch + @echo "LN: $@ to $(BOARD_DIR)\include" + $(Q) $(DIRLINK) $(BOARD_DIR)\include $@ -ifneq ($(BOARD_COMMON_DIR),) # Link the boards\<arch>\<chip>\common dir to arch\<arch-name>\src\board # Link the boards\<arch>\<chip>\<board>\src dir to arch\<arch-name>\src\board\board -$(ARCH_SRC)\board: - @echo "LN: $(ARCH_SRC)\board to $(BOARD_COMMON_DIR)" - $(Q) $(DIRLINK) $(BOARD_COMMON_DIR) $(ARCH_SRC)\board - @echo "LN: $(ARCH_SRC)\board\board to $(BOARD_DIR)\src" - $(Q) $(DIRLINK) $(BOARD_DIR)\src $(ARCH_SRC)\board\board - $(Q) touch $@ +ifneq ($(BOARD_COMMON_DIR),) +ARCH_SRC_BOARD_SYMLINK=$(BOARD_COMMON_DIR) +ARCH_SRC_BOARD_BOARD_SYMLINK=$(BOARD_DIR)\src else -# Link the boards\<arch>\<chip>\<board>\src dir to arch\<arch-name>\src\board +ARCH_SRC_BOARD_SYMLINK=$(BOARD_DIR)\src +endif +ifneq ($(ARCH_SRC_BOARD_SYMLINK),) $(ARCH_SRC)\board: - @echo LN: $(ARCH_SRC)\board to $(BOARD_DIR)\src - $(Q) $(DIRLINK) $(BOARD_DIR)\src $(ARCH_SRC)\board - $(Q) touch $@ + @echo "LN: $@ to $(ARCH_SRC_BOARD_SYMLINK)" + $(Q) $(DIRLINK) $(ARCH_SRC_BOARD_SYMLINK) $@ +endif + +ifneq ($(ARCH_SRC_BOARD_BOARD_SYMLINK),) +$(ARCH_SRC)\board\board: | $(ARCH_SRC)\board + @echo "LN: $@ to $(ARCH_SRC_BOARD_BOARD_SYMLINK)" + $(Q) $(DIRLINK) $(ARCH_SRC_BOARD_BOARD_SYMLINK) $@ endif # Link the boards\<arch>\<chip>\drivers dir to drivers\platform drivers\platform: - @echo LN: $(TOPDIR)\drivers\platform to $(BOARD_DRIVERS_DIR) - $(Q) $(DIRLINK) $(BOARD_DRIVERS_DIR) $(TOPDIR)\drivers\platform - $(Q) touch $@ + @echo "LN: $@ to $(BOARD_DRIVERS_DIR)" + $(Q) $(DIRLINK) $(BOARD_DRIVERS_DIR) $@ # Link arch\<arch-name>\src\<chip-name> to arch\<arch-name>\src\chip -$(ARCH_SRC)\chip: ifeq ($(CONFIG_ARCH_CHIP_CUSTOM),y) - @echo LN: $(ARCH_SRC)\chip to $(CHIP_DIR) - $(Q) $(DIRLINK) $(CHIP_DIR) $(ARCH_SRC)\chip +ARCH_SRC_CHIP_SYMLINK_DIR=$(CHIP_DIR) else ifneq ($(CONFIG_ARCH_CHIP),) - @echo LN: $(ARCH_SRC)\chip to $(ARCH_SRC)\$(CONFIG_ARCH_CHIP) - $(Q) $(DIRLINK) $(TOPDIR)\$(ARCH_SRC)\$(CONFIG_ARCH_CHIP) $(ARCH_SRC)\chip +ARCH_SRC_CHIP_SYMLINK_DIR=$(TOPDIR)\$(ARCH_SRC)\$(CONFIG_ARCH_CHIP) +endif + +ifneq ($(ARCH_SRC_CHIP_SYMLINK_DIR),) +$(ARCH_SRC)\chip: + @echo "LN: $@ to $(ARCH_SRC_CHIP_SYMLINK_DIR)" + $(Q) $(DIRLINK) $(ARCH_SRC_CHIP_SYMLINK_DIR) $@ endif - $(Q) cp -f $(CHIP_KCONFIG) $(TOPDIR)\arch\dummy\Kconfig - $(Q) touch $@ -# Link arch\<arch-name>\include\<chip-name> to arch\<arch-name>\include\chip +# Link arch\<arch-name>\include\<chip-name> to include\arch\chip -include\arch\chip: include\arch ifeq ($(CONFIG_ARCH_CHIP_CUSTOM),y) - @echo LN: include\arch\chip to $(CHIP_DIR)\include - $(Q) $(DIRLINK) $(CHIP_DIR)\include include\arch\chip +INCLUDE_ARCH_CHIP_SYMLINK_DIR=$(CHIP_DIR)\include else ifneq ($(CONFIG_ARCH_CHIP),) - @echo LN: include\arch\chip to $(ARCH_INC)\$(CONFIG_ARCH_CHIP) - $(Q) $(DIRLINK) $(TOPDIR)\$(ARCH_INC)\$(CONFIG_ARCH_CHIP) include\arch\chip +INCLUDE_ARCH_CHIP_SYMLINK_DIR=$(TOPDIR)\$(ARCH_INC)\$(CONFIG_ARCH_CHIP) +endif + +ifneq ($(INCLUDE_ARCH_CHIP_SYMLINK_DIR),) +include\arch\chip: + @echo "LN: $@ to $(INCLUDE_ARCH_CHIP_SYMLINK_DIR)" + $(DIRLINK) $(INCLUDE_ARCH_CHIP_SYMLINK_DIR) $@ +endif + +# Copy $(CHIP_KCONFIG) to arch\dummy\Kconfig + +arch\dummy\Kconfig: + @echo "CP: $@ to $(CHIP_KCONFIG)" + $(Q) cp -f $(CHIP_KCONFIG) $@ + +DIRLINKS_SYMLINK = \ + include\arch \ + include\arch\board \ + drivers\platform \ + +DIRLINKS_FILE = \ + arch\dummy\Kconfig \ + +ifneq ($(INCLUDE_ARCH_CHIP_SYMLINK_DIR),) +DIRLINKS_SYMLINK += include\arch\chip endif + +ifneq ($(ARCH_SRC_CHIP_SYMLINK_DIR),) +DIRLINKS_SYMLINK += $(ARCH_SRC)\chip +endif + +ifneq ($(ARCH_SRC_BOARD_SYMLINK),) +DIRLINKS_SYMLINK += $(ARCH_SRC)\board +endif + +ifneq ($(ARCH_SRC_BOARD_BOARD_SYMLINK),) +DIRLINKS_SYMLINK += $(ARCH_SRC)\board\board +endif + +DIRLINKS_EXTERNAL_DIRS = boards + +ifneq ($(APPDIR),) +DIRLINKS_EXTERNAL_DIRS += $(APPDIR) +endif + +# Generate a pattern to build $(DIRLINKS_EXTERNAL_DIRS) +DIRLINKS_EXTERNAL_DEP = $(patsubst %,%\.dirlinks,$(DIRLINKS_EXTERNAL_DIRS)) +DIRLINKS_FILE += $(DIRLINKS_EXTERNAL_DEP) + +.dirlinks: $(DIRLINKS_FILE) | $(DIRLINKS_SYMLINK) + touch $@ + +# Pattern rule for $(DIRLINKS_EXTERNAL_DEP) + +%\.dirlinks: + $(Q) $(MAKE) -C $(patsubst %\.dirlinks,%,$@) dirlinks $(Q) touch $@ -dirlinks: include\arch include\arch\board include\arch\chip $(ARCH_SRC)\board $(ARCH_SRC)\chip drivers\platform - $(Q) $(MAKE) -C boards dirlinks - $(Q) $(MAKE) -C $(CONFIG_APPS_DIR) dirlinks + +# clean_dirlinks +# +# This is part of the distclean target. It removes all symbolic links created by the dirlink target. + +# The symlink subfolders need to be removed before the parent symlinks + +.PHONY: clean_dirlinks +clean_dirlinks: + $(Q) $(call DELFILE, $(DIRLINKS_FILE)) + $(Q) $(call DELFILE, .dirlinks) + $(Q) $(DIRUNLINK) drivers\platform +ifneq ($(INCLUDE_ARCH_CHIP_SYMLINK_DIR),) + $(Q) $(DIRUNLINK) include\arch\chip +endif + $(Q) $(DIRUNLINK) include\arch\board + $(Q) $(DIRUNLINK) include\arch +ifneq ($(ARCH_SRC_BOARD_BOARD_SYMLINK),) + $(Q) $(DIRUNLINK) $(ARCH_SRC)\board\board +endif +ifneq ($(ARCH_SRC_BOARD_SYMLINK),) + $(Q) $(DIRUNLINK) $(ARCH_SRC)\board +endif +ifneq ($(ARCH_SRC_CHIP_SYMLINK_DIR),) + $(Q) $(DIRUNLINK) $(ARCH_SRC)\chip +endif + # context # @@ -319,7 +395,7 @@ dirlinks: include\arch include\arch\board include\arch\chip $(ARCH_SRC)\board $( CONTEXTDIRS_DEPS = $(patsubst %,%\.context,$(CONTEXTDIRS)) -context: include\nuttx\config.h include\nuttx\version.h $(CONTEXTDIRS_DEPS) dirlinks | staging +context: include\nuttx\config.h include\nuttx\version.h $(CONTEXTDIRS_DEPS) .dirlinks | staging ifeq ($(NEED_MATH_H),y) context: include\math.h @@ -342,7 +418,7 @@ staging: # Pattern rule for $(CONTEXTDIRS_DEPS) -%.context: include\nuttx\config.h dirlinks +%.context: include\nuttx\config.h .dirlinks $(Q) $(MAKE) -C $(patsubst %.context,%,$@) TOPDIR="$(TOPDIR)" context $(Q) touch $@ @@ -602,7 +678,7 @@ endif # apps_distclean: Perform the distclean operation only in the user application # directory. -apps_preconfig: dirlinks +apps_preconfig: .dirlinks ifneq ($(APPDIR),) $(Q) $(MAKE) -C "$(APPDIR)" preconfig endif