]> rtime.felk.cvut.cz Git - omk.git/commitdiff
NuttX: allow multiple LD-script files to support RISC-V targets.
authorPavel Pisa <ppisa@pikron.com>
Tue, 4 Apr 2023 15:22:57 +0000 (17:22 +0200)
committerPavel Pisa <ppisa@pikron.com>
Tue, 4 Apr 2023 15:22:57 +0000 (17:22 +0200)
Signed-off-by: Pavel Pisa <ppisa@pikron.com>
snippets/nuttx-compile.omk
snippets/sysless.omk

index c858232545943c686113f7093b750452674a916c..58d95e0426257fb81a2489f74940dcf77dd7867a 100644 (file)
@@ -111,7 +111,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),)
@@ -123,8 +123,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)
@@ -274,7 +272,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    $$@"
@@ -284,6 +282,7 @@ $(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) \
@@ -298,8 +297,9 @@ 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 $$@
@@ -318,6 +318,7 @@ $(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) \
@@ -382,7 +383,9 @@ SOLIB_SOURCES += $$($(1)_SOURCES)
 
 $(LIB_DIR)/lib$(1).so: $$($(1)_OBJSLO)
        @$(QUIET_CMD_ECHO) "  LINK    $$@"
-       $(Q) $(LD_RAW) --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),)
@@ -405,6 +408,7 @@ $(2):
 $(2)$$(OBJ_EXT): $(2)
        @$(QUIET_CMD_ECHO) "  ROMFS   $$@"
        $(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 \
index 8edaff3d7cefec5ffb0e93ae4e44d4b7a119eab7..3a576df7b9ee15e92c371ceda90939717ccdc57c 100644 (file)
@@ -262,7 +262,10 @@ include-pass-local:
 
 
 clean-local::
-       $(Q)rm -f $(USER_OBJS_DIR)/*$(OBJ_EXT) $(USER_OBJS_DIR)/*.lo \
+       $(Q)rm -f $(USER_OBJS_DIR)/*.o \
+              $(if $(OBJEXT),$(USER_OBJS_DIR)/*$(OBJEXT)) \
+              $(if $(OBJ_EXT),$(USER_OBJS_DIR)/*$(OBJ_EXT)) \
+              $(USER_OBJS_DIR)/*.lo \
               $(USER_OBJS_DIR)/*.d \
               $(USER_OBJS_DIR)/*.map \
               $(LOCAL_CONFIG_H:%=$(USER_OBJS_DIR)/%)