From: Michal Sojka Date: Mon, 8 Dec 2008 18:47:25 +0000 (+0100) Subject: Merge branch 'master' into devel X-Git-Url: http://rtime.felk.cvut.cz/gitweb/omk.git/commitdiff_plain/3c97e82a1c4dd60060c44b926cd1610311222c09?hp=-c Merge branch 'master' into devel Conflicts: snippets/linux --- 3c97e82a1c4dd60060c44b926cd1610311222c09 diff --combined snippets/linux index 09f4ad1,336e035..2be4bea --- a/snippets/linux +++ b/snippets/linux @@@ -62,7 -62,6 +62,7 @@@ USER_UTILS_DIR := $(TARGET_DIR)/usr/b 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 @@@ -81,7 -80,6 +81,7 @@@ USER_UTILS_DIR := $(OUTPUT_DIR)/$(COM 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) @@@ -120,7 -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) @@@ -145,7 -143,8 +145,7 @@@ OMK_WORK_DIR = $(USER_OBJS_DIR # Some support to serialize some targets for parallel make ifneq ($(OMK_SERIALIZE_INCLUDED),y) include-pass: check-dir -library-pass: include-pass -binary-pass: library-pass link-pseudo-pass +link: include-pass kernel-lib-pass: include-pass kernel-mod-pass: kernel-lib-pass kernel-modpost-pass: kernel-mod-pass @@@ -158,7 -157,7 +158,7 @@@ endi # 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 @@@ -257,7 -256,8 +257,7 @@@ $(2).c $(2)-stubs.c $(2)-skels.c $(2)-c endef -# Syntax: $(call PROGRAM_template,,,,) -# FIXME: ???????? asi je tu blbej komentar +# Syntax: $(call PROGRAM_template,,) define PROGRAM_template USER_IDLS += $$($(1)_SERVER_IDL) $$($(1)_CLIENT_IDL) $$($(1)_IDL) @@@ -277,13 -277,13 +277,13 @@@ $(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 +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 endef @@@ -341,19 -341,10 +341,19 @@@ $(OMK_WORK_DIR)/lib$(1).$(SOLIB_EXT).om 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) -binary-pass-local: $(bin_PROGRAMS:%=$(USER_BIN_DIR)/%$(EXE_SUFFIX)) $(utils_PROGRAMS:%=$(USER_UTILS_DIR)/%$(EXE_SUFFIX)) $(test_PROGRAMS:%=$(USER_TESTS_DIR)/%$(EXE_SUFFIX)) +$(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 # Special rules for CMETRIC generated headers @@@ -370,11 -361,11 +370,11 @@@ GEN_HEADERS+=$(filter %.h,$(USER_IDLS:% # 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)))) @@@ -384,11 -375,11 +384,11 @@@ $(foreach lib,$(shared_LIBRARIES),$(eva 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,) define solib_link_template @@@ -399,30 -390,12 +399,30 @@@ $(USER_LIB_DIR)/lib$(1).$(SOLIB_EXT): $ $(Q)$(CC) --shared -Xlinker -soname=lib$(1).$(SOLIB_EXT) -o $$@ $$($(1)_objslo) $$(LOADLIBES) $$($(1)_libs:%=-l%) endef --include $(shell true; find $(USER_BUILD_DIR) -name 'lib*.omkvar') # `true' is a hack for MinGW +# Syntax: $(call program_link_template,,) +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 find $(USER_BUILD_DIR) -name '*.omkvar') ++-include $(shell true; find $(USER_BUILD_DIR) -name '*.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-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 #===================================================================== @@@ -732,16 -705,15 +732,16 @@@ 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,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: @$(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)) @@@ -844,7 -816,7 +844,7 @@@ include-pass-submakes: extra-rules-subd # 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 link ifndef OMIT_KERNEL_PASSES # Also make kernel passes if not disabled default: kernel-lib-pass kernel-pass