]> rtime.felk.cvut.cz Git - sysless.git/commitdiff
Makefile.rules updated to the actual version from OMK.
authorMichal Sojka <sojkam1@fel.cvut.cz>
Wed, 26 Mar 2008 20:08:17 +0000 (21:08 +0100)
committerMichal Sojka <sojkam1@fel.cvut.cz>
Wed, 26 Mar 2008 20:08:17 +0000 (21:08 +0100)
common/Makefile.rules

index 75227335ff29f8c3490d08d938377e91b536861d..7f65b8aa7d52c0278bd8a5ad3aa62148d77cf3a9 100644 (file)
 #                    variables.
 # local_EVALUATE   .. Makefile hook, which is executed at the end of #OMK@localeval
 #                     the Makefile.rules. Used only for dirty hacks.
-                                                             #OMK@sysless-setup
--include $(MAKERULES_DIR)/config.target
-
-BUILD_DIR_NAME = _build$(addprefix /,$(PREFIX_DIR))
-COMPILED_DIR_NAME = _compiled$(addprefix /,$(PREFIX_DIR))
-
-LOCAL_BUILD_DIR=$(MAKERULES_DIR)/$(BUILD_DIR_NAME)/$(RELATIVE_DIR)
-#$(warning LOCAL_BUILD_DIR = $(LOCAL_BUILD_DIR))
-
-#=====================================================================
-# Common utility rules
-
-link_VARIANTS ?= $(DEFAULT_LD_SCRIPT_VARIANT)
-
-
-#=====================================================================
-# Include correct rules for just running pass
-
-USER_COMPILED_DIR_NAME=$(MAKERULES_DIR)/$(COMPILED_DIR_NAME)
-
-USER_INCLUDE_DIR = $(USER_COMPILED_DIR_NAME)/include
-USER_LIB_DIR     = $(USER_COMPILED_DIR_NAME)/lib
-USER_UTILS_DIR   = $(USER_COMPILED_DIR_NAME)/bin-utils
-USER_TESTS_DIR   = $(USER_COMPILED_DIR_NAME)/bin-tests
-USER_BIN_DIR     = $(USER_COMPILED_DIR_NAME)/bin
-USER_OBJS_DIR    = $(LOCAL_BUILD_DIR)
-
-# Local Variables:
-# mode:makefile
-# End:
                                                              #OMK@base
 # We need to ensure definition of sources directory first
 ifndef SOURCES_DIR
+# Only shell built-in pwd understands -L
 SOURCES_DIR := $(shell ( pwd -L ) )
 endif
 
+# If we are not called by OMK leaf Makefile...
+ifndef MAKERULES_DIR
+MAKERULES_DIR := $(abspath $(dir $(filter %Makefile.rules,$(MAKEFILE_LIST))))
+endif
+
 .PHONY: all default check-make-ver omkize
 
 ifdef W
@@ -103,6 +79,17 @@ all:
        @$(MAKE) -C $(MAKERULES_DIR) OMK_SERIALIZE_INCLUDED=n SOURCES_DIR=$(MAKERULES_DIR) RELATIVE_DIR="" $(MAKECMDGOALS) W=0
 endif
 
+ifdef OMK_TESTSROOT
+# Usage: $(call canttest,<error message>)
+define canttest
+       ( echo "$(1)" > $(MAKERULES_DIR)/_canttest; echo "$(1)"; exit 1 )
+endef
+else
+define canttest
+       echo "$(1)"
+endef
+endif
+
 #=========================
 # Include the config file
 
@@ -118,6 +105,8 @@ $(warning Please, run "make default-config" first)
 endif
 endif
 
+-include $(MAKERULES_DIR)/config.target
+
 ifneq ($(wildcard $(CONFIG_FILE)),)
 include $(CONFIG_FILE)
 CONFIG_FILE_OK = y
@@ -151,7 +140,7 @@ override RELATIVE_PREFIX := $(RELATIVE_PREFIX:/%=%)
 #vpath %.cc $(SOURCES_DIR)
 #vpath %.cxx $(SOURCES_DIR)
 
-VPATH = $(SOURCES_DIR)
+# Define srcdir for Automake compatibility
 srcdir = $(SOURCES_DIR)
 
 # Defines for quiet compilation
@@ -211,19 +200,32 @@ ifneq ($(V),2)
 NO_PRINT_DIRECTORY := --no-print-directory
 endif
 
-# Syntax: $(call omk_pass_template,<pass name>,<build dir>,[<local make flags>],[<local condition>])
+ifeq ($(USE_LEAF_MAKEFILES),n)
+export USE_LEAF_MAKEFILES
+SUBDIR_MAKEFILE=$(MAKERULES_DIR)/Makefile.rules
+SOURCESDIR_MAKEFILE=$(MAKERULES_DIR)/Makefile.rules
+else
+SUBDIR_MAKEFILE=$(SOURCES_DIR)/$(dir)/Makefile
+SOURCESDIR_MAKEFILE=$(SOURCES_DIR)/Makefile
+endif
+
+ifdef OMK_TESTSROOT
+check-target = $$(@:%=%-check)
+endif
+
+# Syntax: $(call omk_pass_template,<pass name(s)>,<build dir>,[<local make flags>],[<local condition>])
 define omk_pass_template
-.PHNOY: $(1) $(1)-local
+.PHNOY: $(1) $(addsuffix -local,$(1)) $(addsuffix -check,$(1))
 $(1):
        +@$(foreach dir,$(SUBDIRS),$(call mkdir_def,$(2)/$(dir)); \
                $(MAKE) SOURCES_DIR=$(SOURCES_DIR)/$(dir) $(NO_PRINT_DIRECTORY) \
                RELATIVE_DIR=$(RELATIVE_PREFIX)$(dir) -C $(2)/$(dir) \
-               -f $(SOURCES_DIR)/$(dir)/Makefile $$@ || exit 1 ;) true
+               -f $(SUBDIR_MAKEFILE) $$@ || exit 1 ;) true
 ifneq ($(4),)
        @echo "make[omk]: $$@ in $(RELATIVE_DIR)"; \
        $(call mkdir_def,$(2)); \
        $(MAKE) $(NO_PRINT_DIRECTORY) SOURCES_DIR=$(SOURCES_DIR) RELATIVE_DIR=$(RELATIVE_DIR) -C $(2) \
-               -f $(SOURCES_DIR)/Makefile $(3) $$(@:%=%-local)
+               -f $(SOURCESDIR_MAKEFILE) $(3) $(check-target) $$(@:%=%-local)
 endif
 endef
 
@@ -423,7 +425,7 @@ $(2)/$(1)$(3:%=-%): $$($(1)_OBJS)
        @echo "$(2)/$(1)$(3:%=-%): \\" >$(OBJS_DIR)/$(1)$(3:%=-%).exe.d
        @if [ -n "$(LD_SCRIPT)" ]; then \
          echo "  $(LIB_DIR)/$(LD_SCRIPT).ld$(3:%=-%) \\" >>$(OBJS_DIR)/$(1)$(3:%=-%).exe.d; fi
-       @sed -n -e 's/^LOAD \(.*\)$$$$/  \1  \\/p' $(OBJS_DIR)/$(1)$(3:%=-%).map  >>$(OBJS_DIR)/$(1)$(3:%=-%).exe.d
+       @sed -n -e 's|^LOAD \(.*\)$$$$|  \1  \&|p' $(OBJS_DIR)/$(1)$(3:%=-%).map|tr '&' '\134'  >>$(OBJS_DIR)/$(1)$(3:%=-%).exe.d
        @echo >>$(OBJS_DIR)/$(1).exe.d
 endef
 
@@ -486,7 +488,7 @@ define cp_cmd
 endef
 else
 define cp_cmd
-( echo "  LN      $(1:$(MAKERULES_DIR)/%=%) -> $(2:$(MAKERULES_DIR)/%=%)"; ln -sf $(LNHEADER_FLAGS) $(1) $(2) )
+( echo "  LN      $(1:$(MAKERULES_DIR)/%=%) -> $(2:$(MAKERULES_DIR)/%=%)"; [ -f $(1) ] && ln -sf $(LNHEADER_FLAGS) $(1) $(2) )
 endef
 endif
 
@@ -509,6 +511,30 @@ endef
 # mode:makefile
 # End:
                                                              #OMK@sysless
+BUILD_DIR_NAME = _build$(addprefix /,$(PREFIX_DIR))
+COMPILED_DIR_NAME = _compiled$(addprefix /,$(PREFIX_DIR))
+
+LOCAL_BUILD_DIR=$(MAKERULES_DIR)/$(BUILD_DIR_NAME)/$(RELATIVE_DIR)
+#$(warning LOCAL_BUILD_DIR = $(LOCAL_BUILD_DIR))
+
+#=====================================================================
+# Common utility rules
+
+link_VARIANTS ?= $(DEFAULT_LD_SCRIPT_VARIANT)
+
+
+#=====================================================================
+# Include correct rules for just running pass
+
+USER_COMPILED_DIR_NAME=$(MAKERULES_DIR)/$(COMPILED_DIR_NAME)
+
+USER_INCLUDE_DIR = $(USER_COMPILED_DIR_NAME)/include
+USER_LIB_DIR     = $(USER_COMPILED_DIR_NAME)/lib
+USER_UTILS_DIR   = $(USER_COMPILED_DIR_NAME)/bin-utils
+USER_TESTS_DIR   = $(USER_COMPILED_DIR_NAME)/bin-tests
+USER_BIN_DIR     = $(USER_COMPILED_DIR_NAME)/bin
+USER_OBJS_DIR    = $(LOCAL_BUILD_DIR)
+
 .PHONY: check-dir
 
 # Some support to serialize some targets for parallel make
@@ -518,6 +544,7 @@ library-pass: include-pass
 binary-pass utils-pass: library-pass
 
 override OMK_SERIALIZE_INCLUDED = y
+MAKEOVERRIDES := $(filter-out OMK_SERIALIZE_INCLUDED=n,$(MAKEOVERRIDES))
 endif
 
 # -------------------------------------
@@ -649,6 +676,12 @@ utils-pass-local: $(utils_PROGRAMS:%=$(USER_UTILS_DIR)/%)
 
 endif # HOST_RULE_TEMPLATES
 
+# Checks for OMK tester
+ifdef OMK_TESTSROOT
+default-config-pass-check include-pass-check:
+library-pass-check binary-pass-check:
+       @[ -x "$(shell which $(CC))" ] || $(call canttest,Cannot file compiler: $(CC))
+endif
 
 #=====================================================================
 # Automatic loading of compiled program by issuing "make load"