$(eval $(call include-pass-template,$(KERN_INCLUDE_DIR),kernel))
+$(foreach module,$(kernel_MODULES),$(eval $(call MODULE_kern_template,$(module),$(KERN_MODULES_DIR))))
+
+$(foreach lib,$(kernel_LIBRARIES),$(eval $(call LIBRARY_kern_template,$(lib))))
+
KERN_SOURCES := $(sort $(KERN_SOURCES))
$(foreach src,$(filter %.c,$(KERN_SOURCES)),$(eval $(call COMPILE_c_o_kern_template,$(SOURCES_DIR)/$(src),$(src:%.c=%.o),)))
$(foreach prog,$(bin_PROGRAMS),$(eval $(call PROGBUILTIN_template,$(prog),$(USER_REGISTRY_DIR),$(USER_REGISTRY_DIR))))
-$(foreach module,$(kernel_MODULES),$(eval $(call MODULE_kern_template,$(module),$(KERN_MODULES_DIR))))
-
library-pass-local: $(bin_PROGRAMS:%=$(USER_REGISTRY_DIR)/%.pbi)
+library-pass-local: $(kernel_LIBRARIES:%=$(KERN_LIB_DIR)/lib%.a)
+
clean-local::
$(Q)rm -f $(bin_PROGRAMS:%=$(USER_REGISTRY_DIR)/%.*)
+KERN_MQ=\"
+KERN_AR = $(CROSS_COMPILE)ar
+
+c_o_kern_COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(OMK_CPPFLAGS) \
+ $(CPPFLAGS) $(OMK_CFLAGS) $(CFLAGS)
+
+cc_o_kern_COMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(OMK_CPPFLAGS) \
+ $(CPPFLAGS) $(CXXFLAGS) $(OMK_CFLAGS) $(CFLAGS)
+
+S_o_kern_COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+ $(CPPFLAGS) $(OMK_CFLAGS) $(CFLAGS) $(ASFLAGS)
+
+kern_CC_DEPFLAGS = $(CC_DEPFLAGS)
+
define COMPILE_c_o_kern_template
$(2): $(1)
define MODULE_kern_template
-$(1)_OBJS += $$(filter %.o,$$($(1)_SOURCES:%.c=%.o))
-$(1)_OBJS += $$(filter %.o,$$($(1)_SOURCES:%.cc=%.o))
-$(1)_OBJS += $$(filter %.o,$$($(1)_SOURCES:%.cxx=%.o))
-$(1)_OBJS += $$(filter %.o,$$($(1)_SOURCES:%.cpp=%.o))
-$(1)_OBJS := $$(sort $$($(1)_OBJS))
+$(foreach x, $(SOURCES2OBJS),
+$(1)_OBJS += $$(patsubst %$(notdir $(x)),%$(dir $(x)),$$(filter %$(notdir $(x)),\
+ $$($(1)_SOURCES) $$($(1)_GEN_SOURCES)))
+)
+$(1)_OBJS := $$(sort $$($(1)_OBJS:%/=%))
KERN_OBJS += $$($(1)_OBJS)
KERN_SOURCES += $$($(1)_SOURCES)
endef
define LIBRARY_kern_template
-$(1)_OBJS += $$(filter %.o,$$($(1)_SOURCES:%.c=%.o))
-$(1)_OBJS += $$(filter %.o,$$($(1)_SOURCES:%.cc=%.o))
-$(1)_OBJS += $$(filter %.o,$$($(1)_SOURCES:%.cxx=%.o))
-$(1)_OBJS += $$(filter %.o,$$($(1)_SOURCES:%.cpp=%.o))
-$(1)_OBJS := $$(sort $$($(1)_OBJS))
+$(foreach x, $(SOURCES2OBJS),
+$(1)_OBJS += $$(patsubst %$(notdir $(x)),%$(dir $(x)),$$(filter %$(notdir $(x)),\
+ $$($(1)_SOURCES) $$($(1)_GEN_SOURCES)))
+)
+$(1)_OBJS := $$(sort $$($(1)_OBJS:%/=%))
KERN_OBJS += $$($(1)_OBJS)
KERN_SOURCES += $$($(1)_SOURCES)
ifneq ($(kernel_MODULES),)
binary-pass_REQUIRED=y
endif
+
+ifneq ($(kernel_LIBRARIES),)
+library-pass_REQUIRED=y
+endif