]> rtime.felk.cvut.cz Git - omk.git/commitdiff
Merge branch 'master' into devel
authorMichal Sojka <sojkam1@fel.cvut.cz>
Tue, 18 Nov 2008 19:34:13 +0000 (20:34 +0100)
committerMichal Sojka <sojkam1@fel.cvut.cz>
Tue, 18 Nov 2008 19:34:13 +0000 (20:34 +0100)
Conflicts:

snippets/linux

snippets/linux

index 64387b4f48644831a4704de35d9e3612fdcadad7..696674e002556bacb1502eadc0644d56d3310390 100644 (file)
@@ -62,6 +62,7 @@ USER_UTILS_DIR   := $(TARGET_DIR)/usr/bin
 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 
@@ -80,6 +81,7 @@ USER_UTILS_DIR   := $(OUTPUT_DIR)/$(COMPILED_DIR_NAME)/bin-utils
 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)
@@ -118,7 +120,7 @@ CPPFLAGS  += -I $(USER_INCLUDE_DIR)
 
 LOADLIBES += -L$(USER_LIB_DIR) 
 
-LOADLIBES += $(lib_LOADLIBES:%=-l%)
+#LOADLIBES += $(lib_LOADLIBES:%=-l%)
 
 LIB_CPPFLAGS += $(CPPFLAGS)
 LIB_CFLAGS   += $(CFLAGS)
@@ -144,7 +146,7 @@ OMK_WORK_DIR  = $(USER_OBJS_DIR)
 ifneq ($(OMK_SERIALIZE_INCLUDED),y)
 include-pass: check-dir
 library-pass: include-pass
-binary-pass: library-pass link-pseudo-pass
+link: library-pass
 kernel-lib-pass: include-pass
 kernel-mod-pass: kernel-lib-pass
 kernel-modpost-pass: kernel-mod-pass
@@ -157,7 +159,7 @@ endif
 # Checks for OMK tester
 ifdef OMK_TESTSROOT
 default-config-pass-check include-pass-check:
-library-pass-check binary-pass-check:
+library-pass-check:
        @[ -x "$(shell which $(CC))" ] || $(call canttest,Cannot find compiler: $(CC))
 endif
 
@@ -256,8 +258,7 @@ $(2).c $(2)-stubs.c $(2)-skels.c $(2)-common.c $(2).h: $(1)
 endef
 
 
-# Syntax: $(call PROGRAM_template,<dir>,<executable-name>,<executable-suffix>,<linker-sript>)
-# FIXME: ???????? asi je tu blbej komentar
+# Syntax: $(call PROGRAM_template,<executable-name>,<bin|utils|test>)
 define PROGRAM_template
 
 USER_IDLS  += $$($(1)_SERVER_IDL) $$($(1)_CLIENT_IDL) $$($(1)_IDL)
@@ -277,13 +278,12 @@ $(1)_OBJS := $$(sort $$($(1)_OBJS:%/=%))
 USER_OBJS  += $$($(1)_OBJS)
 USER_SOURCES += $$($(1)_SOURCES)
 
-$(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
+$(OMK_WORK_DIR)/$(2)-$(1)$(EXE_SUFFIX).omkvar: $$($(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
 endef
 
 
@@ -342,9 +342,11 @@ $(OMK_WORK_DIR)/lib$(1).$(SOLIB_EXT).omkvar: $$($(1)_OBJSLO) FORCE
 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)
-
-binary-pass-local: $(bin_PROGRAMS:%=$(USER_BIN_DIR)/%$(EXE_SUFFIX)) $(utils_PROGRAMS:%=$(USER_UTILS_DIR)/%$(EXE_SUFFIX)) $(test_PROGRAMS:%=$(USER_TESTS_DIR)/%$(EXE_SUFFIX))
+                   $(lib_LIBRARIES:%=$(USER_LIB_DIR)/lib%.a) \
+                   $(shared_LIBRARIES:%=$(OMK_WORK_DIR)/lib%.$(SOLIB_EXT).omkvar) \
+                   $(bin_PROGRAMS:%=$(OMK_WORK_DIR)/bin-%$(EXE_SUFFIX).omkvar) \
+                   $(utils_PROGRAMS:%=$(OMK_WORK_DIR)/utils-%$(EXE_SUFFIX).omkvar) \
+                   $(test_PROGRAMS:%=$(OMK_WORK_DIR)/test-%$(EXE_SUFFIX).omkvar)
 
 # Special rules for CMETRIC generated headers
 
@@ -361,11 +363,11 @@ GEN_HEADERS+=$(filter %.h,$(USER_IDLS:%.idl=%.h))
 
 # Generate rules for compilation of programs and libraries
 
-$(foreach prog,$(utils_PROGRAMS),$(eval $(call PROGRAM_template,$(prog),$(USER_UTILS_DIR),$(EXE_SUFFIX))))
+$(foreach prog,$(utils_PROGRAMS),$(eval $(call PROGRAM_template,$(prog),utils)))
 
-$(foreach prog,$(test_PROGRAMS),$(eval $(call PROGRAM_template,$(prog),$(USER_TESTS_DIR),$(EXE_SUFFIX))))
+$(foreach prog,$(test_PROGRAMS),$(eval $(call PROGRAM_template,$(prog),test)))
 
-$(foreach prog,$(bin_PROGRAMS),$(eval $(call PROGRAM_template,$(prog),$(USER_BIN_DIR),$(EXE_SUFFIX))))
+$(foreach prog,$(bin_PROGRAMS),$(eval $(call PROGRAM_template,$(prog),bin)))
 
 $(foreach lib,$(lib_LIBRARIES),$(eval $(call LIBRARY_template,$(lib))))
 
@@ -375,11 +377,11 @@ $(foreach lib,$(shared_LIBRARIES),$(eval $(call SOLIB_template,$(lib))))
 
 endif # USER_RULE_TEMPLATES
 
-.PHONY: link-pseudo-pass
-link-pseudo-pass:
-       $(Q)$(MAKE) $(NO_PRINT_DIRECTORY) -C $(USER_BUILD_DIR) -f $(SOURCESDIR_MAKEFILE) link-shared-libs
+.PHONY: link
+link:
+       $(Q)$(MAKE) $(NO_PRINT_DIRECTORY) -C $(LINK_BUILD_DIR) -f $(SOURCESDIR_MAKEFILE) link-pseudo-pass
 
-ifeq ($(MAKECMDGOALS),link-shared-libs)
+ifeq ($(MAKECMDGOALS),link-pseudo-pass)
 
 # Syntax: $(call solib_link_template,<library-name>)
 define solib_link_template
@@ -390,12 +392,29 @@ $(USER_LIB_DIR)/lib$(1).$(SOLIB_EXT): $$($(1)_shared_libs) $$($(1)_objslo)
        $(Q)$(CC) --shared -Xlinker -soname=lib$(1).$(SOLIB_EXT) -o $$@ $$($(1)_objslo) $$(LOADLIBES) $$($(1)_libs:%=-l%)
 endef
 
--include $(shell find $(USER_BUILD_DIR) -name 'lib*.omkvar')
+# Syntax: $(call program_link_template,<executable-name>,<dest-dir>)
+define program_link_template
+$(2)/$(1)$(EXE_SUFFIX): $$($(1)_objs) dir=$(LINK_BUILD_DIR)/$$(notdir $(2))
+       @$(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 find $(USER_BUILD_DIR) -name '*.omkvar')
 #$(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-shared-libs
-link-shared-libs: $(shared_libs:%=$(USER_LIB_DIR)/lib%.$(SOLIB_EXT))
+.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))
 endif # link-shared-libs
 
 #=====================================================================
@@ -705,8 +724,7 @@ kernel-modpost-pass:
               -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, library-pass,$(USER_OBJS_DIR),USER_RULE_TEMPLATES=y,$(lib_LIBRARIES)$(shared_LIBRARIES)$(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))
@@ -714,6 +732,10 @@ $(eval $(call omk_pass_template,include-pass,$(USER_OBJS_DIR),USER_RULE_TEMPLATE
 
 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))
@@ -816,7 +838,7 @@ include-pass-submakes: extra-rules-subdirs
 # might be needed there.
 include-pass-this-dir $(foreach subdir,$(SUBDIRS),include-pass-$(subdir)-subdir): extra-rules-subdirs
 
-default: include-pass library-pass binary-pass
+default: include-pass library-pass link
 ifndef OMIT_KERNEL_PASSES
 # Also make kernel passes if not disabled
 default: kernel-lib-pass kernel-pass