diff --git a/.gitignore b/.gitignore index f434778e91df3..35034bff89312 100644 --- a/.gitignore +++ b/.gitignore @@ -36,6 +36,9 @@ *.pyc *.mapfile *.SystemMap +*.ld.tmp +*.script.tmp +*.linkcmd.tmp *~ \#*\# .\#* diff --git a/arch/arm/src/Makefile b/arch/arm/src/Makefile index 7c6da2a3eaabe..db4bcac80262d 100644 --- a/arch/arm/src/Makefile +++ b/arch/arm/src/Makefile @@ -161,6 +161,8 @@ VPATH += chip VPATH += common VPATH += $(ARCH_SUBDIR) +vpath nuttx$(EXEEXT) $(TOPDIR) + ifeq ($(CONFIG_ARM_TOOLCHAIN_IAR),y) VPATH += common$(DELIM)iar else # ifeq ($(CONFIG_ARCH_TOOLCHAIN_GNU),y) @@ -170,8 +172,6 @@ endif all: $(HEAD_OBJ) $(BIN) -.PHONY: board$(DELIM)libboard$(LIBEXT) - $(AOBJS) $(UAOBJS) $(HEAD_OBJ): %$(OBJEXT): %.S $(call ASSEMBLE, $<, $@) @@ -192,9 +192,13 @@ endif $(KBIN): $(OBJS) $(call ARCHIVE, $@, $(OBJS)) -board$(DELIM)libboard$(LIBEXT): +board$(DELIM)libboard$(LIBEXT): FORCE $(Q) $(MAKE) -C board libboard$(LIBEXT) EXTRAFLAGS="$(EXTRAFLAGS)" +.PHONY: FORCE + +FORCE: + # When multiple linking, these two additional linking objects will be included ifeq ($(CONFIG_MM_KASAN_GLOBAL),y) @@ -218,10 +222,10 @@ define LINK_ALLSYMS_KASAN $(LDSTARTGROUP) $(LDLIBS) $(EXTRA_LIBS) $(LDENDGROUP) endef -$(addsuffix .tmp,$(ARCHSCRIPT)): $(ARCHSCRIPT) +$(addsuffix .tmp,$(ARCHSCRIPT)): $(ARCHSCRIPT) $(TOPDIR)$(DELIM).config $(call PREPROCESS, $(patsubst %.tmp,%,$@), $@) -nuttx$(EXEEXT): $(HEAD_OBJ) board$(DELIM)libboard$(LIBEXT) $(addsuffix .tmp,$(ARCHSCRIPT)) +nuttx$(EXEEXT): $(HEAD_OBJ) board$(DELIM)libboard$(LIBEXT) $(addsuffix .tmp,$(ARCHSCRIPT)) $(addprefix $(TOPDIR)$(DELIM)staging$(DELIM),$(LINKLIBS)) $(Q) echo "LD: nuttx" ifeq ($(CONFIG_ALLSYMS)$(CONFIG_MM_KASAN_GLOBAL),) $(Q) $(LD) $(LDFLAGS) $(LIBPATHS) $(EXTRA_LIBPATHS) \ @@ -242,7 +246,6 @@ ifneq ($(CONFIG_WINDOWS_NATIVE),y) grep -v '\(compiled\)\|\(\$(OBJEXT)$$\)\|\( [aUw] \)\|\(\.\.ng$$\)\|\(LASH[RL]DI\)' | \ sort > $(TOPDIR)$(DELIM)System.map endif - $(Q) $(call DELFILE, $(addsuffix .tmp,$(ARCHSCRIPT))) # This is part of the top-level export target # Note that there may not be a head object if layout is handled diff --git a/arch/arm64/src/Makefile b/arch/arm64/src/Makefile index 73cefe97d486e..568325b89dd0e 100644 --- a/arch/arm64/src/Makefile +++ b/arch/arm64/src/Makefile @@ -132,9 +132,9 @@ VPATH += chip VPATH += common VPATH += $(ARCH_SUBDIR) -all: $(HEAD_OBJ) $(BIN) +vpath nuttx$(EXEEXT) $(TOPDIR) -.PHONY: board$(DELIM)libboard$(LIBEXT) +all: $(HEAD_OBJ) $(BIN) $(AOBJS) $(UAOBJS) $(HEAD_OBJ): %$(OBJEXT): %.S $(call ASSEMBLE, $<, $@) @@ -156,9 +156,13 @@ endif $(KBIN): $(OBJS) $(call ARCHIVE, $@, $(OBJS)) -board$(DELIM)libboard$(LIBEXT): +board$(DELIM)libboard$(LIBEXT): FORCE $(Q) $(MAKE) -C board libboard$(LIBEXT) EXTRAFLAGS="$(EXTRAFLAGS)" +.PHONY: FORCE + +FORCE: + # When multiple linking, these two additional linking objects will be included ifeq ($(CONFIG_MM_KASAN_GLOBAL),y) @@ -182,10 +186,10 @@ define LINK_ALLSYMS_KASAN $(LDSTARTGROUP) $(LDLIBS) $(EXTRA_LIBS) $(LDENDGROUP) endef -$(addsuffix .tmp,$(ARCHSCRIPT)): $(ARCHSCRIPT) +$(addsuffix .tmp,$(ARCHSCRIPT)): $(ARCHSCRIPT) $(TOPDIR)$(DELIM).config $(call PREPROCESS, $(patsubst %.tmp,%,$@), $@) -nuttx$(EXEEXT): $(HEAD_OBJ) board$(DELIM)libboard$(LIBEXT) $(addsuffix .tmp,$(ARCHSCRIPT)) +nuttx$(EXEEXT): $(HEAD_OBJ) board$(DELIM)libboard$(LIBEXT) $(addsuffix .tmp,$(ARCHSCRIPT)) $(addprefix $(TOPDIR)$(DELIM)staging$(DELIM),$(LINKLIBS)) $(Q) echo "LD: nuttx" ifeq ($(CONFIG_ALLSYMS)$(CONFIG_MM_KASAN_GLOBAL),) $(Q) $(LD) --entry=__start $(LDFLAGS) $(LIBPATHS) $(EXTRA_LIBPATHS) \ @@ -206,7 +210,6 @@ ifneq ($(CONFIG_WINDOWS_NATIVE),y) grep -v '\(compiled\)\|\(\$(OBJEXT)$$\)\|\( [aUw] \)\|\(\.\.ng$$\)\|\(LASH[RL]DI\)' | \ sort > $(TOPDIR)$(DELIM)System.map endif - $(Q) $(call DELFILE, $(addsuffix .tmp,$(ARCHSCRIPT))) # This is part of the top-level export target # Note that there may not be a head object if layout is handled diff --git a/arch/risc-v/src/Makefile b/arch/risc-v/src/Makefile index be9ea8bdce3f4..a20e9b20c4ce8 100644 --- a/arch/risc-v/src/Makefile +++ b/arch/risc-v/src/Makefile @@ -133,9 +133,9 @@ VPATH += $(SBI_DIR) VPATH += $(ARCH_SUBDIR) VPATH += $(CHIP_DIR) -all: $(HEAD_OBJ) $(BIN) +vpath nuttx$(EXEEXT) $(TOPDIR) -.PHONY: board/libboard$(LIBEXT) +all: $(HEAD_OBJ) $(BIN) $(AOBJS) $(UAOBJS) $(HEAD_OBJ): %$(OBJEXT): %.S $(call ASSEMBLE, $<, $@) @@ -157,9 +157,13 @@ endif $(KBIN): $(OBJS) $(call ARCHIVE, $@, $(OBJS)) -board/libboard$(LIBEXT): +board/libboard$(LIBEXT): FORCE $(Q) $(MAKE) -C board libboard$(LIBEXT) EXTRAFLAGS="$(EXTRAFLAGS)" +.PHONY: FORCE + +FORCE: + # When multiple linking, these two additional linking objects will be included ifeq ($(CONFIG_MM_KASAN_GLOBAL),y) @@ -183,10 +187,10 @@ define LINK_ALLSYMS_KASAN $(LDSTARTGROUP) $(LDLIBS) $(EXTRA_LIBS) $(LDENDGROUP) endef -$(addsuffix .tmp,$(ARCHSCRIPT)): $(ARCHSCRIPT) +$(addsuffix .tmp,$(ARCHSCRIPT)): $(ARCHSCRIPT) $(TOPDIR)$(DELIM).config $(call PREPROCESS, $(patsubst %.tmp,%,$@), $@) -nuttx$(EXEEXT): $(HEAD_OBJ) board/libboard$(LIBEXT) $(addsuffix .tmp,$(ARCHSCRIPT)) +nuttx$(EXEEXT): $(HEAD_OBJ) board/libboard$(LIBEXT) $(addsuffix .tmp,$(ARCHSCRIPT)) $(addprefix $(TOPDIR)$(DELIM)staging$(DELIM),$(LINKLIBS)) $(Q) echo "LD: nuttx" ifeq ($(CONFIG_ALLSYMS)$(CONFIG_MM_KASAN_GLOBAL),) $(Q) $(LD) $(LDENTRY) $(LDFLAGS) $(LIBPATHS) $(EXTRA_LIBPATHS) \ @@ -207,7 +211,6 @@ ifneq ($(CONFIG_WINDOWS_NATIVE),y) grep -v '\(compiled\)\|\(\$(OBJEXT)$$\)\|\( [aUw] \)\|\(\.\.ng$$\)\|\(LASH[RL]DI\)' | \ sort > $(TOPDIR)/System.map endif - $(Q) $(call DELFILE, $(addsuffix .tmp,$(ARCHSCRIPT))) # This is part of the top-level export target # Note that there may not be a head object if layout is handled diff --git a/arch/sim/src/Makefile b/arch/sim/src/Makefile index 9cef07a2ae23d..8a25b107837ba 100644 --- a/arch/sim/src/Makefile +++ b/arch/sim/src/Makefile @@ -106,6 +106,8 @@ else endif DEPPATH = $(patsubst %,--dep-path %,$(subst :, ,$(VPATH))) +vpath nuttx$(EXEEXT) $(TOPDIR) + CFLAGS += -fvisibility=default HOSTCFLAGS = $(ARCHWARNINGS) $(ARCHOPTIMIZATION) \ $(ARCHCFLAGS) $(HOSTINCLUDES) $(EXTRAFLAGS) -D__SIM__ \ @@ -372,7 +374,7 @@ RELLIBS += -lboard all: sim_head$(OBJEXT) libarch$(LIBEXT) -.PHONY: export_startup clean distclean cleanrel depend board/libboard$(LIBEXT) +.PHONY: export_startup clean distclean cleanrel depend FORCE $(AOBJS): %$(OBJEXT): %.S $(call ASSEMBLE, $<, $@) @@ -394,9 +396,11 @@ libarch$(LIBEXT): $(NUTTXOBJS) # the simulation. However, this is a good place to keep parts of the simulation # that are not hardware-related. -board/libboard$(LIBEXT): +board/libboard$(LIBEXT): FORCE $(Q) $(MAKE) -C board libboard$(LIBEXT) EXTRAFLAGS="$(EXTRAFLAGS)" +FORCE: + # A partially linked object containing only NuttX code (no interface to host OS) # Change the names of most symbols that conflict with libc symbols. # Generate the final NuttX binary by linking the host-specific objects with the NuttX diff --git a/arch/x86_64/src/Makefile b/arch/x86_64/src/Makefile index 0089fbab5f328..967a9760f4662 100644 --- a/arch/x86_64/src/Makefile +++ b/arch/x86_64/src/Makefile @@ -105,9 +105,9 @@ endif VPATH = chip:common:$(ARCH_SUBDIR) -all: libarch$(LIBEXT) +vpath nuttx$(EXEEXT) $(TOPDIR) -.PHONY: board/libboard$(LIBEXT) +all: libarch$(LIBEXT) $(AOBJS): %$(OBJEXT): %.S $(call ASSEMBLE, $<, $@) @@ -129,9 +129,13 @@ endif $(KBIN): $(OBJS) $(call ARCHIVE, $@, $(OBJS)) -board/libboard$(LIBEXT): +board/libboard$(LIBEXT): FORCE $(Q) $(MAKE) -C board libboard$(LIBEXT) EXTRAFLAGS="$(EXTRAFLAGS)" +.PHONY: FORCE + +FORCE: + ifeq ($(CONFIG_ALLSYMS),y) EXTRA_LIBS += allsyms$(OBJEXT) endif @@ -154,10 +158,10 @@ define LINK_ALLSYMS_KASAN $(LDSTARTGROUP) $(EXTRA_LIBS) --no-relax $(LDLIBS) $(LDENDGROUP) endef -$(addsuffix .tmp,$(ARCHSCRIPT)): $(ARCHSCRIPT) +$(addsuffix .tmp,$(ARCHSCRIPT)): $(ARCHSCRIPT) $(TOPDIR)$(DELIM).config $(call PREPROCESS, $(patsubst %.tmp,%,$@), $@) -nuttx$(EXEEXT): $(HEAD_OBJ) board/libboard$(LIBEXT) $(addsuffix .tmp,$(ARCHSCRIPT)) +nuttx$(EXEEXT): $(HEAD_OBJ) board/libboard$(LIBEXT) $(addsuffix .tmp,$(ARCHSCRIPT)) $(addprefix $(TOPDIR)$(DELIM)staging$(DELIM),$(LINKLIBS)) @echo "LD: nuttx$(EXEEXT)" ifeq ($(CONFIG_ALLSYMS)$(CONFIG_MM_KASAN_GLOBAL),) @@ -170,7 +174,6 @@ else $(Q) $(call LINK_ALLSYMS_KASAN) $(Q) $(call LINK_ALLSYMS_KASAN) endif - $(Q) $(call DELFILE, $(addsuffix .tmp,$(ARCHSCRIPT))) ifneq ($(CONFIG_WINDOWS_NATIVE),y) $(Q) $(NM) $(NUTTX) | \ @@ -217,6 +220,7 @@ clean: ifeq ($(BOARDMAKE),y) $(Q) $(MAKE) -C board clean endif + $(call DELFILE, $(addsuffix .tmp,$(ARCHSCRIPT))) $(call DELFILE, libarch$(LIBEXT)) $(call CLEAN) diff --git a/arch/xtensa/src/Makefile b/arch/xtensa/src/Makefile index a21db44c16b5f..cdaeaa8b01374 100644 --- a/arch/xtensa/src/Makefile +++ b/arch/xtensa/src/Makefile @@ -135,9 +135,9 @@ VPATH += common/espressif VPATH += $(ARCH_SUBDIR) VPATH += $(CHIP_DIR) -all: $(STARTUP_OBJS) libarch$(LIBEXT) +vpath nuttx$(EXEEXT) $(TOPDIR) -.PHONY: board/libboard$(LIBEXT) +all: $(STARTUP_OBJS) libarch$(LIBEXT) $(AOBJS) $(UAOBJS) $(HEAD_AOBJ): %$(OBJEXT): %.S $(call ASSEMBLE, $<, $@) @@ -159,9 +159,13 @@ endif $(KBIN): $(OBJS) $(call ARCHIVE, $@, $(OBJS)) -board/libboard$(LIBEXT): +board/libboard$(LIBEXT): FORCE $(Q) $(MAKE) -C board libboard$(LIBEXT) EXTRAFLAGS="$(EXTRAFLAGS)" +.PHONY: FORCE + +FORCE: + define LINK_ALLSYMS $(Q) $(TOPDIR)/tools/mkallsyms.py $(NUTTX) allsyms.tmp --orderbyname $(CONFIG_SYMTAB_ORDEREDBYNAME) $(Q) $(call COMPILE, allsyms.tmp, allsyms$(OBJEXT), -x c) @@ -171,10 +175,10 @@ define LINK_ALLSYMS $(Q) $(call DELFILE, allsyms.tmp allsyms$(OBJEXT)) endef -$(addsuffix .tmp,$(ARCHSCRIPT)): $(ARCHSCRIPT) +$(addsuffix .tmp,$(ARCHSCRIPT)): $(ARCHSCRIPT) $(TOPDIR)$(DELIM).config $(call PREPROCESS, $(patsubst %.tmp,%,$@), $@) -nuttx$(EXEEXT): $(STARTUP_OBJS) board/libboard$(LIBEXT) $(addsuffix .tmp,$(ARCHSCRIPT)) +nuttx$(EXEEXT): $(STARTUP_OBJS) board/libboard$(LIBEXT) $(addsuffix .tmp,$(ARCHSCRIPT)) $(addprefix $(TOPDIR)$(DELIM)staging$(DELIM),$(LINKLIBS)) $(Q) echo "LD: nuttx" ifneq ($(CONFIG_ALLSYMS),y) $(Q) $(LD) --entry=__start $(LDFLAGS) $(LIBPATHS) $(EXTRA_LIBPATHS) \ @@ -193,7 +197,6 @@ ifneq ($(CONFIG_WINDOWS_NATIVE),y) grep -v '\(compiled\)\|\(\$(OBJEXT)$$\)\|\( [aUw] \)\|\(\.\.ng$$\)\|\(LASH[RL]DI\)' | \ sort > $(TOPDIR)/System.map endif - $(Q) $(call DELFILE, $(addsuffix .tmp,$(ARCHSCRIPT))) # This is part of the top-level export target diff --git a/libs/libc/misc/Make.defs b/libs/libc/misc/Make.defs index 812379b706481..98b896d4a6841 100644 --- a/libs/libc/misc/Make.defs +++ b/libs/libc/misc/Make.defs @@ -91,9 +91,9 @@ endif # To ensure uname information is newest, # add lib_utsname.o to phony target for force rebuild -#if !defined(CONFIG_LIBC_UNAME_DISABLE_TIMESTAMP) +ifeq ($(CONFIG_LIBC_UNAME_DISABLE_TIMESTAMP),) .PHONY: bin$(DELIM)lib_utsname$(OBJEXT) kbin$(DELIM)lib_utsname$(OBJEXT) -#endif +endif # Add the misc directory to the build diff --git a/tools/Unix.mk b/tools/Unix.mk index 935deae876af6..6cd5ffad82857 100644 --- a/tools/Unix.mk +++ b/tools/Unix.mk @@ -266,11 +266,12 @@ tools/mkconfig$(HOSTEXEEXT): prebuild include/nuttx/config.h: $(TOPDIR)/.config tools/mkconfig$(HOSTEXEEXT) $(Q) grep -v "CONFIG_BASE_DEFCONFIG" "$(TOPDIR)/.config" > "$(TOPDIR)/.config.tmp" $(Q) if ! cmp -s "$(TOPDIR)/.config.tmp" "$(TOPDIR)/.config.orig" ; then \ - sed -i.bak -e "/CONFIG_BASE_DEFCONFIG/ { /-dirty/! s/\"$$/-dirty\"/; }" "$(TOPDIR)/.config" ; \ + sed -e "/CONFIG_BASE_DEFCONFIG/ { /-dirty/! s/\"$$/-dirty\"/; }" "$(TOPDIR)/.config" > "$(TOPDIR)/.config.dirty" ; \ else \ - sed -i.bak "s/-dirty//g" "$(TOPDIR)/.config"; \ + sed "s/-dirty//g" "$(TOPDIR)/.config" > "$(TOPDIR)/.config.dirty"; \ fi - $(Q) rm -f "$(TOPDIR)/.config.tmp" "$(TOPDIR)/.config.bak" + $(Q) rm -f "$(TOPDIR)/.config.tmp" + $(Q) $(call TESTANDREPLACEFILE, $(TOPDIR)/.config.dirty, $(TOPDIR)/.config) $(Q) tools/mkconfig $(TOPDIR) > $@.tmp $(Q) $(call TESTANDREPLACEFILE, $@.tmp, $@)