]> rtime.felk.cvut.cz Git - omk.git/blobdiff - snippets/nuttx-kernel.omk
NuttX: correct kernel modules and libraries build.
[omk.git] / snippets / nuttx-kernel.omk
index dff7e1aec419cd66426e57f7476741a2cb4ea2cb..1d967233f7ae77b24e3dc8c42690075d8ef6deda 100644 (file)
@@ -1,5 +1,9 @@
 KERN_MQ=\"
-KERN_AR = $(CROSS_COMPILE)ar
+KERN_AR = $(AR)
+KERN_ARFLAGS = $(ARFLAGS)
+
+KERN_OBJCOPY = $(OBJCOPY)
+KERN_SOURCES2OBJS = .ko/.c .ko/.cc .ko/.cxx .ko/.S .ko/.s .ko/.ko
 
 c_o_kern_COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(OMK_CPPFLAGS) \
        $(CPPFLAGS) $(OMK_CFLAGS) $(CFLAGS)
@@ -54,8 +58,9 @@ endef
 
 
 
+# Syntax: $(call MODULE_kern_template,<module-name>,<dir>
 define MODULE_kern_template
-$(foreach x, $(SOURCES2OBJS),
+$(foreach x, $(KERN_SOURCES2OBJS),
 $(1)_OBJS += $$(patsubst %$(notdir $(x)),%$(dir $(x)),$$(filter %$(notdir $(x)),\
                $$($(1)_SOURCES) $$($(1)_GEN_SOURCES)))
 )
@@ -66,19 +71,25 @@ KERN_SOURCES += $$($(1)_SOURCES)
 
 $(2)/$(1)$(KERN_LINK_SUFFIX): $$($(1)_OBJS)
        @$(QUIET_CMD_ECHO) "  LD [K]  $$@"
-       $(Q) $(LINK) \
-         -r -e module_initialize -T $(NUTTX_EXPORT)/build/gnu-elf.ld \
+       $(Q) $(LD_RAW) \
+         -r -e module_initialize -T $(ELF_FILE_LDSCRIPT) \
          -Map $(1)$(KERN_LINK_SUFFIX).map \
          $$($(1)_OBJS) $$($(1)_MOREOBJS) $$(LOADLIBES) $$($(1)_LIBS:%=-l%) \
          -o $$@
        @echo "$(2)/$(1)$(KERN_LINK_SUFFIX): \\" >$(OBJS_DIR)/$(1)$(KERN_LINK_SUFFIX).d
-       @echo "  $(NUTTX_EXPORT)/build/gnu-elf.ld \\" >>$(OBJS_DIR)/$(1)$(KERN_LINK_SUFFIX).d
+       @echo "  $(ELF_FILE_LDSCRIPT) \\" >>$(OBJS_DIR)/$(1)$(KERN_LINK_SUFFIX).d
        @$(SED4OMK) -n -e 's|^LOAD \(.*\)$$$$|  \1  \&|p' $(OBJS_DIR)/$(1)$(KERN_LINK_SUFFIX).map|tr '&' '\134'  >>$(OBJS_DIR)/$(1)$(KERN_LINK_SUFFIX).d
        @echo >>$(OBJS_DIR)/$(1)$(KERN_LINK_SUFFIX).d
+
+$(2)/lib$(1).ka: $$($(1)_OBJS)
+       @$(QUIET_CMD_ECHO) "  AR [K]  $$@"
+       $(Q) $(KERN_AR) $(KERN_ARFLAGS) $(1).ka.tmp $$^
+       $(Q) $(KERN_OBJCOPY) --redefine-sym module_initialize=$(1)_module_initialize $(1).ka.tmp $$@
+
 endef
 
 define LIBRARY_kern_template
-$(foreach x, $(SOURCES2OBJS),
+$(foreach x, $(KERN_SOURCES2OBJS),
 $(1)_OBJS += $$(patsubst %$(notdir $(x)),%$(dir $(x)),$$(filter %$(notdir $(x)),\
                $$($(1)_SOURCES) $$($(1)_GEN_SOURCES)))
 )
@@ -87,9 +98,9 @@ $(1)_OBJS := $$(sort $$($(1)_OBJS:%/=%))
 KERN_OBJS  += $$($(1)_OBJS)
 KERN_SOURCES += $$($(1)_SOURCES)
 
-$(KERN_LIB_DIR)/lib$(1).a: $$($(1)_OBJS)
+$(KERN_LIB_DIR)/lib$(1).ka: $$($(1)_OBJS)
        @$(QUIET_CMD_ECHO) "  AR [K]  $$@"
-       $(Q) $(KERN_AR) rcs $$@ $$^
+       $(Q) $(KERN_AR) $(KERN_ARFLAGS) $$@ $$^
 endef
 
 ifneq ($(kernel_MODULES),)