USER_TESTS_DIR := $(TARGET_DIR)/usr/bin
USER_BIN_DIR := $(TARGET_DIR)/usr/bin
USER_BUILD_DIR := $(BUILD_DIR)/user/$(GROUP_DIR_NAME)
-LINK_BUILD_DIR := $(BUILD_DIR)/link/$(GROUP_DIR_NAME)
#LINUX_DIR := $(OCERA_DIR)/kernel/linux
#RTL_DIR := $(OCERA_DIR)/kernel/rtlinux
#CONFIG_FILE := $(OCERA_DIR)/emdebsys/.config
USER_TESTS_DIR := $(OUTPUT_DIR)/$(COMPILED_DIR_NAME)/bin-tests
USER_BIN_DIR := $(OUTPUT_DIR)/$(COMPILED_DIR_NAME)/bin
USER_BUILD_DIR := $(OUTPUT_DIR)/$(BUILD_DIR_NAME)/user
-LINK_BUILD_DIR := $(OUTPUT_DIR)/$(BUILD_DIR_NAME)/link
ifndef LINUX_VERSION
LINUX_VERSION=$(shell uname -r)
LOADLIBES += -L$(USER_LIB_DIR)
-#LOADLIBES += $(lib_LOADLIBES:%=-l%)
+LOADLIBES += $(lib_LOADLIBES:%=-l%)
LIB_CPPFLAGS += $(CPPFLAGS)
LIB_CFLAGS += $(CFLAGS)
# Some support to serialize some targets for parallel make
ifneq ($(OMK_SERIALIZE_INCLUDED),y)
include-pass: check-dir
-link: include-pass
+library-pass: include-pass
+binary-pass: library-pass link-pseudo-pass
kernel-lib-pass: include-pass
kernel-mod-pass: kernel-lib-pass
kernel-modpost-pass: kernel-mod-pass
# Checks for OMK tester
ifdef OMK_TESTSROOT
default-config-pass-check include-pass-check:
-library-pass-check:
+library-pass-check binary-pass-check:
@[ -x "$(shell which $(CC))" ] || $(call canttest,Cannot find compiler: $(CC))
endif
endef
-# Syntax: $(call PROGRAM_template,<executable-name>,<bin|utils|test>)
+# Syntax: $(call PROGRAM_template,<dir>,<executable-name>,<executable-suffix>,<linker-sript>)
+# FIXME: ???????? asi je tu blbej komentar
define PROGRAM_template
USER_IDLS += $$($(1)_SERVER_IDL) $$($(1)_CLIENT_IDL) $$($(1)_IDL)
USER_OBJS += $$($(1)_OBJS)
USER_SOURCES += $$($(1)_SOURCES)
-include-pass-local: $(OMK_WORK_DIR)/$(2)-$(1)$(EXE_SUFFIX).cmd
-$(OMK_WORK_DIR)/$(2)-$(1)$(EXE_SUFFIX).cmd: $$($(1)_OBJS) FORCE
- $(Q)echo '$(1)_objs += $$$$(addprefix $(USER_OBJS_DIR)/,$$($(1)_OBJS))' > $$@.tmp; \
- echo '$(1)_libs += $$($(1)_LIBS) $$(lib_LOADLIBES)' >> $$@.tmp; \
- echo '$(1)_linker += $$(if $$(filter %.cc,$$($(1)_SOURCES:%.cxx=%.cc)),$$(CXX),$$(CC))' >> $$@.tmp; \
- echo '$(2)_programs += $(1)' >> $$@.tmp; \
- if cmp -s $$@.tmp $$@; then rm $$@.tmp; else mv $$@.tmp $$@; fi
+$(2)/$(1)$(3): $$($(1)_OBJS)
+ @$(QUIET_CMD_ECHO) " LINK $$@"
+ $(Q) $$(if $$(filter %.cc,$$($(1)_SOURCES:%.cxx=%.cc)),$$(CXX),$$(CC)) \
+ $$($(1)_OBJS) $$($(1)_LIBS:%=-l%) $$(LOADLIBES) $$(LDFLAGS) -Wl,-rpath-link,$(USER_LIB_DIR) -Wl,-Map,$(USER_OBJS_DIR)/$(1).exe.map -o $$@
+ @echo "$(2)/$(1)$(3): \\" >$(USER_OBJS_DIR)/$(1).exe.d
+ @sed -n -e 's|^LOAD \(.*\)$$$$| \1 \&|p' $(USER_OBJS_DIR)/$(1).exe.map|tr '&' '\134' >>$(USER_OBJS_DIR)/$(1).exe.d
+ @echo >>$(USER_OBJS_DIR)/$(1).exe.d
endef
if cmp -s $$@.tmp $$@; then rm $$@.tmp; else mv $$@.tmp $$@; fi
endef
+library-pass-local: $(addprefix $(USER_INCLUDE_DIR)/,$(cmetric_include_HEADERS)) \
+ $(lib_LIBRARIES:%=$(USER_LIB_DIR)/lib%.a) $(shared_LIBRARIES:%=$(OMK_WORK_DIR)/lib%.$(SOLIB_EXT).omkvar)
-$(OMK_WORK_DIR)/targets.omk: FORCE
- @rm $$@.tmp; \
- echo '_omk_libs += $(lib_LIBRARIES)' >> $$@.tmp; \
- echo '_omk_shared_libs += $(shared_LIBRARIES)' >> $$@.tmp; \
- echo '_omk_bin += $(bin_PROGRAMS)' >> $$@.tmp; \
- echo '_omk_utils += $(utils_PROGRAMS)' >> $$@.tmp; \
- echo '_omk_test += $(test_PROGRAMS)' >> $$@.tmp; \
- if cmp -s $$@.tmp $$@; then rm $$@.tmp; else mv $$@.tmp $$@; fi
-
-
-include-pass-local: $(addprefix $(USER_INCLUDE_DIR)/,$(cmetric_include_HEADERS)) \
- $(OMK_WORK_DIR)/targets.omk
+binary-pass-local: $(bin_PROGRAMS:%=$(USER_BIN_DIR)/%$(EXE_SUFFIX)) $(utils_PROGRAMS:%=$(USER_UTILS_DIR)/%$(EXE_SUFFIX)) $(test_PROGRAMS:%=$(USER_TESTS_DIR)/%$(EXE_SUFFIX))
# Special rules for CMETRIC generated headers
# Generate rules for compilation of programs and libraries
-$(foreach prog,$(utils_PROGRAMS),$(eval $(call PROGRAM_template,$(prog),utils)))
+$(foreach prog,$(utils_PROGRAMS),$(eval $(call PROGRAM_template,$(prog),$(USER_UTILS_DIR),$(EXE_SUFFIX))))
-$(foreach prog,$(test_PROGRAMS),$(eval $(call PROGRAM_template,$(prog),test)))
+$(foreach prog,$(test_PROGRAMS),$(eval $(call PROGRAM_template,$(prog),$(USER_TESTS_DIR),$(EXE_SUFFIX))))
-$(foreach prog,$(bin_PROGRAMS),$(eval $(call PROGRAM_template,$(prog),bin)))
+$(foreach prog,$(bin_PROGRAMS),$(eval $(call PROGRAM_template,$(prog),$(USER_BIN_DIR),$(EXE_SUFFIX))))
$(foreach lib,$(lib_LIBRARIES),$(eval $(call LIBRARY_template,$(lib))))
endif # USER_RULE_TEMPLATES
-.PHONY: link
-link:
- $(Q)$(MAKE) $(NO_PRINT_DIRECTORY) -C $(LINK_BUILD_DIR) -f $(SOURCESDIR_MAKEFILE) link-pseudo-pass
+.PHONY: link-pseudo-pass
+link-pseudo-pass:
+ $(Q)$(MAKE) $(NO_PRINT_DIRECTORY) -C $(USER_BUILD_DIR) -f $(SOURCESDIR_MAKEFILE) link-shared-libs
-ifeq ($(MAKECMDGOALS),link-pseudo-pass)
+ifeq ($(MAKECMDGOALS),link-shared-libs)
# Syntax: $(call solib_link_template,<library-name>)
define solib_link_template
$(Q)$(CC) --shared -Xlinker -soname=lib$(1).$(SOLIB_EXT) -o $$@ $$($(1)_objslo) $$(LOADLIBES) $$($(1)_libs:%=-l%)
endef
-# Syntax: $(call program_link_template,<executable-name>,<dest-dir>)
-define program_link_template
-$(2)/$(1)$(EXE_SUFFIX): dir=$(LINK_BUILD_DIR)/$$(notdir $(2))
-$(2)/$(1)$(EXE_SUFFIX): $$($(1)_objs)
- @$(QUIET_CMD_ECHO) " LINK $$@"
- $(Q) $$($(1)_linker) \
- $$($(1)_objs) $$($(1)_libs:%=-l%) $$(LOADLIBES) $$(LDFLAGS) -Wl,-Map,$$(dir)/$(1).exe.map -o $$@
- @echo "$$@: \\" >$$(dir)/$(1).exe.d
- @sed -n -e 's|^LOAD \(.*\)$$$$| \1 \&|p' $$(dir)/$(1).exe.map|tr '&' '\134' >>$$(dir)/$(1).exe.d
- @echo >>$$(dir)/$(1).exe.d
-endef
-
--include $(shell true; find $(USER_BUILD_DIR) -name '*.omkvar') # `true' is a hack for MinGW
+-include $(shell true; find $(USER_BUILD_DIR) -name 'lib*.omkvar') # `true' is a hack for MinGW
#$(warning $(shared_libs))
$(foreach lib,$(shared_libs),$(eval $(call solib_link_template,$(lib))))
-$(foreach prg,$(bin_programs),$(eval $(call program_link_template,$(prg),$(USER_BIN_DIR))))
-$(foreach prg,$(utils_programs),$(eval $(call program_link_template,$(prg),$(USER_UTILS_DIR))))
-$(foreach prg,$(test_programs),$(eval $(call program_link_template,$(prg),$(USER_TESTS_DIR))))
-.PHONY: link-pseudo-pass
-link-pseudo-pass: $(shared_libs:%=$(USER_LIB_DIR)/lib%.$(SOLIB_EXT)) \
- $(bin_programs:%=$(USER_BIN_DIR)/%$(EXE_SUFFIX)) \
- $(utils_programs:%=$(USER_UTILS_DIR)/%$(EXE_SUFFIX)) \
- $(tests_programs:%=$(USER_TESTS_DIR)/%$(EXE_SUFFIX))
+.PHONY: link-shared-libs
+link-shared-libs: $(shared_libs:%=$(USER_LIB_DIR)/lib%.$(SOLIB_EXT))
endif # link-shared-libs
#=====================================================================
-f $(SOURCES_DIR)/Makefile KERN_RULE_TEMPLATES=y KERN_MODPOST_PASS=y $(@:%=%-local) ; \
fi
+$(eval $(call omk_pass_template, library-pass,$(USER_OBJS_DIR),USER_RULE_TEMPLATES=y,$(lib_LIBRARIES)$(shared_LIBRARIES)))
+$(eval $(call omk_pass_template, binary-pass, $(USER_OBJS_DIR),USER_RULE_TEMPLATES=y,$(bin_PROGRAMS)$(utils_PROGRAMS)$(test_PROGRAMS)))
+
$(eval $(call omk_pass_template,clean,$(USER_OBJS_DIR),,always))
$(eval $(call omk_pass_template,install,$(USER_OBJS_DIR),,always))
$(eval $(call omk_pass_template,include-pass,$(USER_OBJS_DIR),USER_RULE_TEMPLATES=y,always))
-check-dir:
+check-dir::
@$(call mkdir_def,$(USER_BUILD_DIR))
- @$(call mkdir_def,$(LINK_BUILD_DIR)/lib)
- @$(call mkdir_def,$(LINK_BUILD_DIR)/bin)
- @$(call mkdir_def,$(LINK_BUILD_DIR)/bin-utils)
- @$(call mkdir_def,$(LINK_BUILD_DIR)/bin-tests)
@$(call mkdir_def,$(KERN_BUILD_DIR))
@$(call mkdir_def,$(USER_INCLUDE_DIR))
@$(call mkdir_def,$(KERN_INCLUDE_DIR))
# might be needed there.
include-pass-this-dir $(foreach subdir,$(SUBDIRS),include-pass-$(subdir)-subdir): extra-rules-subdirs
-default: include-pass link
+default: include-pass library-pass binary-pass
ifndef OMIT_KERNEL_PASSES
# Also make kernel passes if not disabled
default: kernel-lib-pass kernel-pass
endif
# Local Variables:
-# mode:makefile-gmake
+# mode:makefile
# End: