]> rtime.felk.cvut.cz Git - omk.git/blobdiff - snippets/base
CFLAGS and CXXFLAGS can be overridden in config.omk.
[omk.git] / snippets / base
index 9c05c9d2816af50aeeced2a5ec59672d5110bcd5..4a96af4122f3d10849d3393fbd2f97becbe716b8 100644 (file)
@@ -3,9 +3,12 @@
 #  (C) Copyright 2003 by Pavel Pisa - OCERA team member
 #  (C) Copyright 2006 by Michal Sojka - Czech Technical University, FEE, DCE
 #
+# The OMK build system is distributed under the GNU General Public
+# License.  See file COPYING for details.
 #
 # input variables
 # V                .. if set to 1, full command text is shown else short form is used
+# W                .. whole tree - if set to 1, make is always called from the top-level directory
 # SUBDIRS          .. list of subdirectories intended for make from actual directory
 # default_CONFIG   .. list of default config assignments CONFIG_XXX=y/n ...
 
@@ -16,7 +19,23 @@ endif
 
 .PHONY: all default check-make-ver
 
+ifdef W
+  ifeq ("$(origin W)", "command line")
+    OMK_WHOLE_TREE:=$(W)
+  endif
+endif
+ifndef OMK_WHOLE_TREE
+  OMK_WHOLE_TREE:=0
+endif
+
+ifneq ($(OMK_WHOLE_TREE),1)
 all: check-make-ver default
+       @echo "Compilation finished"
+else
+# Run make in the top-level directory
+all:
+       @$(MAKE) -C $(MAKERULES_DIR) OMK_SERIALIZE_INCLUDED=n SOURCES_DIR=$(MAKERULES_DIR) RELATIVE_DIR="" $(MAKECMDGOALS) W=0
+endif
 
 #=========================
 # Include the config file
@@ -28,8 +47,10 @@ endif
 ifneq ($(wildcard $(CONFIG_FILE)-default),)
 -include $(CONFIG_FILE)-default
 else
+ifneq ($(MAKECMDGOALS),default-config)
 $(warning Please, run "make default-config" first)
 endif
+endif
 
 ifneq ($(wildcard $(CONFIG_FILE)),)
 include $(CONFIG_FILE)
@@ -83,6 +104,10 @@ else
   QUIET_CMD_ECHO = echo
 endif
 
+# All subdirectories (even linked ones) containing Makefile.omk
+# Usage in Makefile.omk: SUBDIRS = $(ALL_OMK_SUBDIRS)
+ALL_OMK_SUBDIRS = $(patsubst %/Makefile.omk,%,$(patsubst $(SOURCES_DIR)/%,%,$(wildcard $(SOURCES_DIR)/*/Makefile.omk)))
+
 # ===================================================================
 # We have set up all important variables, so we can check and include
 # real OCERA style Makefile.omk now
@@ -91,7 +116,6 @@ include $(SOURCES_DIR)/Makefile.omk
 OMK_INCLUDED := 1
 endif
 
-
 check-make-ver:
        @GOOD_MAKE_VERSION=`echo $(MAKE_VERSION) | sed -n -e 's/^[4-9]\..*\|^3\.9[0-9].*\|^3\.8[1-9].*/y/p'` ; \
        if [ x$$GOOD_MAKE_VERSION != xy ] ; then \
@@ -111,22 +135,24 @@ define mkdir_def
        [ -d $(1) ] || mkdir -p $(1) || exit 1
 endef
 
-# Syntax: $(call omk_pass_template,<pass name>,<build dir>,[<local make flags>],[<local condition>],[<subpass>])
+ifneq ($(V),2)
+NO_PRINT_DIRECTORY := --no-print-directory
+endif
+
+# Syntax: $(call omk_pass_template,<pass name>,<build dir>,[<local make flags>],[<local condition>])
 define omk_pass_template
 .PHNOY: $(1) $(1)-local
 $(1):
-       +@$(foreach dir,$(SUBDIRS),$(call mkdir_def,$(2)/$(dir)) ; \
-               $(MAKE) SOURCES_DIR=$(SOURCES_DIR)/$(dir) --no-print-directory \
+       +@$(foreach dir,$(SUBDIRS),$(call mkdir_def,$(2)/$(dir)); \
+               $(MAKE) SOURCES_DIR=$(SOURCES_DIR)/$(dir) $(NO_PRINT_DIRECTORY) \
                RELATIVE_DIR=$(RELATIVE_DIR)/$(dir) -C $(2)/$(dir) \
-               -f $(SOURCES_DIR)/$(dir)/Makefile $$@ || exit 1 ;)
-       $(5)
-       +@if [ $(4) ] || [ -z "$(subst ",\",$(4))" ]; then \
-           echo "  MAKE    $$@ in $(RELATIVE_DIR)"; \
-           $(call mkdir_def,$(2)); \
-           $(MAKE) --no-print-directory -C $(2) \
-               -f $(SOURCES_DIR)/Makefile $(3) $$(@:%=%-local); \
-       fi
-
+               -f $(SOURCES_DIR)/$(dir)/Makefile $$@ || exit 1 ;) true
+ifneq ($(4),)
+       @echo "make[omk]: $$@ in $(RELATIVE_DIR)"; \
+       $(call mkdir_def,$(2)); \
+       $(MAKE) $(NO_PRINT_DIRECTORY) -C $(2) \
+               -f $(SOURCES_DIR)/Makefile $(3) $$(@:%=%-local)
+endif
 endef
 
 # =======================
@@ -137,14 +163,15 @@ default-config:
        @echo "# This file should not be altered manually" >> "$(CONFIG_FILE)-default"
        @echo "# Overrides should be stored in file $(notdir $(CONFIG_FILE))" >> "$(CONFIG_FILE)-default"
        @echo >> "$(CONFIG_FILE)-default"
-       @$(MAKE) --no-print-directory -C $(MAKERULES_DIR) \
+       @$(MAKE) $(NO_PRINT_DIRECTORY) -C $(MAKERULES_DIR) \
                RELATIVE_DIR="" SOURCES_DIR=$(MAKERULES_DIR) \
                -f $(MAKERULES_DIR)/Makefile default-config-pass
 
-$(eval $(call omk_pass_template,default-config-pass,$$(LOCAL_BUILD_DIR)))
+$(eval $(call omk_pass_template,default-config-pass,$$(LOCAL_BUILD_DIR),,always))
 
 default-config-pass-local:
 #      @echo Default config for $(RELATIVE_DIR)
        @echo "# Config for $(RELATIVE_DIR)" >> "$(CONFIG_FILE)-default"
        @$(foreach x, $(default_CONFIG), echo $(x) | \
                sed -e 's/^.*=x$$/#\0/' >> "$(CONFIG_FILE)-default" ; )
+