]> rtime.felk.cvut.cz Git - omk.git/blob - snippets/nuttx-kernel.omk
NuttX: update rules for 12.0.0 release yet attempt to support old versions.
[omk.git] / snippets / nuttx-kernel.omk
1 KERN_MQ=\"
2 KERN_AR = $(AR)
3 KERN_OBJCOPY = $(OBJCOPY)
4 KERN_SOURCES2OBJS = .ko/.c .ko/.cc .ko/.cxx .ko/.S .ko/.s .ko/.ko
5
6 c_o_kern_COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(OMK_CPPFLAGS) \
7         $(CPPFLAGS) $(OMK_CFLAGS) $(CFLAGS)
8
9 cc_o_kern_COMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(OMK_CPPFLAGS) \
10         $(CPPFLAGS) $(CXXFLAGS) $(OMK_CFLAGS) $(CFLAGS)
11
12 S_o_kern_COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
13         $(CPPFLAGS) $(OMK_CFLAGS) $(CFLAGS) $(ASFLAGS)
14
15 kern_CC_DEPFLAGS = $(CC_DEPFLAGS)
16
17 define COMPILE_c_o_kern_template
18
19 $(2): $(1)
20         @$(QUIET_CMD_ECHO) "  CC [K]  $$@"
21         $(Q) if $$(c_o_kern_COMPILE) $$(kern_CC_DEPFLAGS) $(3) $(KERN_KBUILD_MODNAME) \
22         -D"KBUILD_BASENAME=$(KERN_MQ)$(notdir $(basename $(1)))$(KERN_MQ)" \
23         -o $$@ -c $$< ; \
24         then mv -f "$$@.d.tmp" "$$@.d" ; \
25         else rm -f "$$@.d.tmp" ; exit 1; \
26         fi
27 endef
28
29
30
31 define COMPILE_cc_o_kern_template
32
33 $(2): $(1)
34         @$(QUIET_CMD_ECHO) "  CXX [K] $$@"
35         $(Q) if $$(cc_o_kern_COMPILE) $$(kern_CC_DEPFLAGS) $(3) $(KERN_KBUILD_MODNAME) \
36         -D"KBUILD_BASENAME=$(KERN_MQ)$(notdir $(basename $(1)))$(KERN_MQ)" \
37         -o $$@ -c $$< ; \
38         then mv -f "$$@.d.tmp" "$$@.d" ; \
39         else rm -f "$$@.d.tmp" ; exit 1; \
40         fi
41 endef
42
43
44
45 define COMPILE_S_o_kern_template
46
47 $(2): $(1)
48         @$(QUIET_CMD_ECHO) "  AS [K]  $$@"
49         $(Q) if $$(S_o_kern_COMPILE) $$(kern_CC_DEPFLAGS) $(3) $(KERN_KBUILD_MODNAME) \
50         -D"KBUILD_BASENAME=$(KERN_MQ)$(notdir $(basename $(1)))$(KERN_MQ)" \
51         -o $$@ -c $$< ; \
52         then mv -f "$$@.d.tmp" "$$@.d" ; \
53         else rm -f "$$@.d.tmp" ; exit 1; \
54         fi
55 endef
56
57
58
59 # Syntax: $(call MODULE_kern_template,<module-name>,<dir>
60 define MODULE_kern_template
61 $(foreach x, $(KERN_SOURCES2OBJS),
62 $(1)_OBJS += $$(patsubst %$(notdir $(x)),%$(dir $(x)),$$(filter %$(notdir $(x)),\
63                 $$($(1)_SOURCES) $$($(1)_GEN_SOURCES)))
64 )
65 $(1)_OBJS := $$(sort $$($(1)_OBJS:%/=%))
66
67 KERN_OBJS  += $$($(1)_OBJS)
68 KERN_SOURCES += $$($(1)_SOURCES)
69
70 $(2)/$(1)$(KERN_LINK_SUFFIX): $$($(1)_OBJS)
71         @$(QUIET_CMD_ECHO) "  LD [K]  $$@"
72         $(Q) $(LD_RAW) \
73           -r -e module_initialize -T $(ELF_FILE_LDSCRIPT) \
74           -Map $(1)$(KERN_LINK_SUFFIX).map \
75           $$($(1)_OBJS) $$($(1)_MOREOBJS) $$(LOADLIBES) $$($(1)_LIBS:%=-l%) \
76           -o $$@
77         @echo "$(2)/$(1)$(KERN_LINK_SUFFIX): \\" >$(OBJS_DIR)/$(1)$(KERN_LINK_SUFFIX).d
78         @echo "  $(ELF_FILE_LDSCRIPT) \\" >>$(OBJS_DIR)/$(1)$(KERN_LINK_SUFFIX).d
79         @$(SED4OMK) -n -e 's|^LOAD \(.*\)$$$$|  \1  \&|p' $(OBJS_DIR)/$(1)$(KERN_LINK_SUFFIX).map|tr '&' '\134'  >>$(OBJS_DIR)/$(1)$(KERN_LINK_SUFFIX).d
80         @echo >>$(OBJS_DIR)/$(1)$(KERN_LINK_SUFFIX).d
81
82 $(2)/lib$(1).ka: $$($(1)_OBJS)
83         @$(QUIET_CMD_ECHO) "  AR [K]  $$@"
84         $(Q) $(KERN_AR) rcs $(1).ka.tmp $$^
85         $(Q) $(KERN_OBJCOPY) --redefine-sym module_initialize=$(1)_module_initialize $(1).ka.tmp $$@
86
87 endef
88
89 define LIBRARY_kern_template
90 $(foreach x, $(KERN_SOURCES2OBJS),
91 $(1)_OBJS += $$(patsubst %$(notdir $(x)),%$(dir $(x)),$$(filter %$(notdir $(x)),\
92                 $$($(1)_SOURCES) $$($(1)_GEN_SOURCES)))
93 )
94 $(1)_OBJS := $$(sort $$($(1)_OBJS:%/=%))
95
96 KERN_OBJS  += $$($(1)_OBJS)
97 KERN_SOURCES += $$($(1)_SOURCES)
98
99 $(KERN_LIB_DIR)/lib$(1).ka: $$($(1)_OBJS)
100         @$(QUIET_CMD_ECHO) "  AR [K]  $$@"
101         $(Q) $(KERN_AR) rcs $$@ $$^
102 endef
103
104 ifneq ($(kernel_MODULES),)
105 binary-pass_REQUIRED=y
106 endif
107
108 ifneq ($(kernel_LIBRARIES),)
109 library-pass_REQUIRED=y
110 endif