]> rtime.felk.cvut.cz Git - omk.git/blobdiff - snippets/nuttx-compile.omk
Prevent GNU linker synthetic LOAD map statements to propagate to dependencies.
[omk.git] / snippets / nuttx-compile.omk
index d8ffc6b794c562976539b6962de78d2ad5d2b34f..1539adb4126ba8daa3aebdcf39b6d31f3f4be25a 100644 (file)
@@ -45,6 +45,7 @@
 
 EMPTY :=
 LD_OPTION_SEP = $(EMPTY) $(EMPTY)
+TARGET_STDSTARTFILES = y
 
 define COMPILER_DEFS_template
 OBJ_EXT ?= $$(OBJEXT)
@@ -59,6 +60,8 @@ endif
 LIB_PREF = lib
 ASM_EXT = .S
 
+CROSS_COMPILE ?= $$(CROSSDEV)
+
 CC ?= $$(CROSS_COMPILE)gcc
 CXX ?= $$(CROSS_COMPILE)g++
 LD ?= $$(CROSS_COMPILE)ld
@@ -109,7 +112,7 @@ ifeq ($$(LDNAME),)
 LDNAME := $$(LDSCRIPT)
 endif
 
-LD_SCRIPT ?= $$(NUTTX_EXPORT)/scripts/$$(LDNAME)
+LD_SCRIPT ?= $$(LDNAME:%=$$(NUTTX_EXPORT)/scripts/%)
 
 ifneq ($$(filter-out clean distclean, $$(MAKECMDGOALS)),)
 ifeq ($(LDNAME),)
@@ -121,8 +124,6 @@ $$(error LD_SCRIPT='$$(LD_SCRIPT)' does not exists, correct config.target)
 endif
 endif
 
-LD_SCRIPT = $$(NUTTX_EXPORT)/scripts/$$(LDNAME)
-
 ELF_FILE_LDSCRIPT?=$$(wildcard $$(NUTTX_EXPORT)/scripts/gnu-elf.ld)
 
 LOADLIBES += -L$$(LIB_DIR)
@@ -272,7 +273,7 @@ else
 $(1)$(3:%=-%)_LD_SCRIPT = $$($(1)$(3:%=-%)_LD_SCRIPT_FN)
 endif
 
-$(1)$(3:%=-%)_LDFLAGS = $$(CC_LD_OPTION)-T$$(LD_OPTION_SEP)$$($(1)$(3:%=-%)_LD_SCRIPT)
+$(1)$(3:%=-%)_LDFLAGS = $$($(1)$(3:%=-%)_LD_SCRIPT:%=$$(CC_LD_OPTION)-T$$(LD_OPTION_SEP)%)
 
 $(2)/$(1)$(3:%=-%): $$($(1)_OBJS) $$($(1)_BUILTINTABLE:%.c=%$$(OBJ_EXT)) $$($(1)_BUILTINWRAPMAIN:%.c=%$$(OBJ_EXT)) $$($(1)_PROGBUILTIN_LDAT) $$($(1)$(3:%=-%)_LD_SCRIPT) $$($(1)_KMODBUILTIN_LIBS)
        @$(QUIET_CMD_ECHO) "  LINK    $$@"
@@ -282,12 +283,13 @@ $(2)/$(1)$(3:%=-%): $$($(1)_OBJS) $$($(1)_BUILTINTABLE:%.c=%$$(OBJ_EXT)) $$($(1)
            $$(LD) \
          ) \
          $$(OMK_LDFLAGS) $$(LDFLAGS) $$($(1)$(3:%=-%)_LDFLAGS) $$(CC_LD_OPTION)-Map$$(LD_OPTION_SEP)$(1)$(3:%=-%).map \
+         $$(HEAD_OBJ:%=$$(NUTTX_EXPORT)/startup/%) \
          $$($(1)_OBJS) $$($(1)_MOREOBJS) $$($(1)_BUILTINTABLE:%.c=%$$(OBJ_EXT)) $$($(1)_BUILTINWRAPMAIN:%.c=%$$(OBJ_EXT)) \
          $$($(1)_PROGBUILTIN_PBI) $$(LOADLIBES) $$($(1)_LIBS:%=-l%) $$($(1)_KMODBUILTIN_LIBS) \
          $$(shell for i in $$($(1)_PROGBUILTIN_LDAT); do cat $$$$i ; done) $$(NUTTXLIBES) \
          -o $$@
        @echo "$(2)/$(1)$(3:%=-%): \\" >$(OBJS_DIR)/$(1)$(3:%=-%).exe.d
-       @$(SED4OMK) -n -e 's|^LOAD \(.*\)$$$$|  \1  \&|p' $(OBJS_DIR)/$(1)$(3:%=-%).map|tr '&' '\134'  >>$(OBJS_DIR)/$(1)$(3:%=-%).exe.d
+       @$(SED4OMK) -n -e 's|^LOAD \(.*\)$$$$|  \1  \&|p' $(OBJS_DIR)/$(1)$(3:%=-%).map|tr '&' '\134' | grep -v '^  linker [^ ]' >>$(OBJS_DIR)/$(1)$(3:%=-%).exe.d
        @echo >>$(OBJS_DIR)/$(1).exe.d
 endef
 
@@ -296,14 +298,15 @@ define ELF_template
 
 $(2)/$(1).elf: $$($(1)_OBJS)
        @$(QUIET_CMD_ECHO) "  ELF     $$@"
-       $(Q) $(LD_RAW) \
-         -r -e main -T $(ELF_FILE_LDSCRIPT) \
+       $(Q) $$(LD_RAW) \
+         $$(filter -m%,$$(LDFLAGS:$$(CC_LD_OPTION)%=%)) \
+         -r -e main -T $$(ELF_FILE_LDSCRIPT) \
          -Map $(1).elf.map \
          $$($(1)_OBJS) $$($(1)_MOREOBJS) $$(LOADLIBES) $$($(1)_LIBS:%=-l%) \
          -o $$@
        @echo "$(2)/$(1).elf: \\" >$(OBJS_DIR)/$(1).elf.d
        @echo "  $(ELF_FILE_LDSCRIPT) \\" >>$(OBJS_DIR)/$(1).elf.d
-       @$(SED4OMK) -n -e 's|^LOAD \(.*\)$$$$|  \1  \&|p' $(OBJS_DIR)/$(1).elf.map|tr '&' '\134'  >>$(OBJS_DIR)/$(1).elf.d
+       @$(SED4OMK) -n -e 's|^LOAD \(.*\)$$$$|  \1  \&|p' $(OBJS_DIR)/$(1).elf.map|tr '&' '\134' | grep -v '^  linker [^ ]' >>$(OBJS_DIR)/$(1).elf.d
        @echo >>$(OBJS_DIR)/$(1).elf.d
 endef
 
@@ -316,13 +319,14 @@ $(1)_STACKSIZE ?= 2048
 $(2)/$(1).pbi: $$($(1)_OBJS)
        @$(QUIET_CMD_ECHO) "  PROGMOD $$@"
        $(Q) $(LD_RAW) \
+         $$(filter -m%,$$(LDFLAGS:$$(CC_LD_OPTION)%=%)) \
          -r -x --defsym=$(1)_main=main \
          -Map $(1).pbi.map \
          $$($(1)_OBJS) $$($(1)_MOREOBJS) \
          -o $(OBJS_DIR)/$(1).pbo
        $(Q) $(OBJCOPY) --keep-global-symbol=$(1)_main $(OBJS_DIR)/$(1).pbo $$@
        @echo "$(2)/$(1).pbi: \\" >$(OBJS_DIR)/$(1).pbi.d
-       @$(SED4OMK) -n -e 's|^LOAD \(.*\)$$$$|  \1  \&|p' $(OBJS_DIR)/$(1).pbi.map|tr '&' '\134'  >>$(OBJS_DIR)/$(1).pbi.d
+       @$(SED4OMK) -n -e 's|^LOAD \(.*\)$$$$|  \1  \&|p' $(OBJS_DIR)/$(1).pbi.map|tr '&' '\134' | grep -v '^  linker [^ ]' >>$(OBJS_DIR)/$(1).pbi.d
        @echo >>$(OBJS_DIR)/$(1).pbi.d
        @echo "{ \"$1\", $$($(1)_PRIORITY), $$($(1)_STACKSIZE), $(1)_main }," >$(3)/$(1).bdat
        @echo "int $(1)_main(int argc, char *argv[]);" >$(3)/$(1).pdat
@@ -380,7 +384,9 @@ SOLIB_SOURCES += $$($(1)_SOURCES)
 
 $(LIB_DIR)/lib$(1).so: $$($(1)_OBJSLO)
        @$(QUIET_CMD_ECHO) "  LINK    $$@"
-       $(Q) $(LD) --shared --soname=lib$(1).so -o $$@ $$^
+       $(Q) $(LD_RAW) \
+         $$(filter -m%,$$(LDFLAGS:$$(CC_LD_OPTION)%=%) \
+         --shared --soname=lib$(1).so -o $$@ $$^
 endef
 
 ifneq ($(bin_PROGRAMS),)
@@ -402,7 +408,8 @@ $(2):
 
 $(2)$$(OBJ_EXT): $(2)
        @$(QUIET_CMD_ECHO) "  ROMFS   $$@"
-       $(Q) $(LD) -r --accept-unknown-input-arch -b binary \
+       $(Q) $(LD_RAW) -r --accept-unknown-input-arch -b binary \
+               $$(filter -m%,$$(LDFLAGS:$$(CC_LD_OPTION)%=%)) \
                --defsym=$(2)_size=_binary_$(2)_size \
                --defsym=$(2)_start=_binary_$(2)_start \
                --defsym=$(2)_end=_binary_$(2)_end \