]> rtime.felk.cvut.cz Git - arc.git/blobdiff - makefile
Added more checks and information in top makefile.
[arc.git] / makefile
index a0cfcc8e7754d688cc89b4fb49c0e460142482e8..ff96b9f31dbefdca67be6e2f35a22f1deddc3d17 100644 (file)
--- a/makefile
+++ b/makefile
@@ -1,25 +1,34 @@
 # build with:\r
-# make subdir1                         - build the subdir1 \r
-# make subdir1/subdir2 - build subdir2\r
-# \r
-# clean:\r
-#      Removed all generated files \r
+#   $ make BOARDDIR=<board> BDIR=<dir>[,<dir>] CROSS_COMPILE=<gcc> all|clean|clean_all\r
 #\r
-# BOARDDIR=<board dir> \r
+# TARGETS\r
+#   all:               Target when building\r
+#   clean:     Remove generatated files for a board \r
+#   clean_all:  Remove all generated files\r
+#   help:       Print some help\r
+#\r
+# VARIABLES:\r
+#   BOARDDIR=<board dir> \r
 #       Select what board to build for \r
-\r
-# BOARDDIR=<board dir> \r
-#       Select what board to build for\r
-# \r
-# Q=[(@)/empty] \r
+#   BDIR=<dir>[,<dir>] \r
+#       Select what directories to build. The kernel if always built.\r
+#   CROSS_COMPILE\r
+#       Specify the compiler to use.  \r
+#   Q=[(@)/empty] \r
 #              If Q=@ cmd's will not be echoed.\r
-#  \r
-# Build\r
-#   >make BOARDDIR=mpc551xsim BDIR=system/kernel,examples/simple all \r
-# Clean \r
-#   >make BOARDDIR=mpc551xsim BDIR=system/kernel,examples/simple clean\r
+#\r
+# EXAMPLES\r
+#   Clean all\r
+#     $ make clean_all\r
+#\r
+#   Clean for a specific board\r
+#     $ make BDIR=mpc551xsim clean\r
+#\r
+#   Build the simple example (assuming CROSS_COMPILE set)\r
+#     $ make BOARDDIR= mpc551xsim BDIR=examples/simple all\r
 #\r
 \r
+\r
 export UNAME:=$(shell uname)\r
 \r
 ifneq ($(findstring Darwin,$(UNAME)),)\r
@@ -45,7 +54,7 @@ export CFG_$(SELECT_OPT)=y
 \r
 ifneq ($(filter clean_all,$(MAKECMDGOALS)),clean_all)\r
   ifeq (${BOARDDIR},)\r
-    $(error BOARDDIR is empty) \r
+#    $(error BOARDDIR is empty) \r
   endif\r
 endif\r
 \r
@@ -95,21 +104,44 @@ export def-y+=$(CFG_ARCH_$(ARCH)) $(CFG_MCU) $(CFG_CPU)
 comma:= ,\r
 split = $(subst $(comma), ,$(1))\r
 dir_cmd_goals  := $(call split,$(BDIR))\r
-cmd_cmd_goals := $(filter clean all install,$(MAKECMDGOALS))\r
+cmd_cmd_goals := $(filter clean all,$(MAKECMDGOALS))\r
+\r
+# Check for CROSS_COMPILE\r
+ifneq ($(cmd_cmd_goals),)\r
+ifndef CROSS_COMPILE\r
+  $(error CROSS_COMPILE not defined)\r
+endif\r
 \r
+# Check that the board actually exist\r
+ifdef BOARDDIR\r
+  all_boards := $(subst boards/,,$(shell find boards/ -maxdepth 1 -type d))\r
+  ifeq ($(filter $(BOARDDIR),$(all_boards)),)\r
+       $(error no such board: $(BOARDDIR), valid boards are: $(all_boards))\r
+  endif\r
+endif\r
+\r
+# Check BDIR\r
+endif\r
 libs:\r
        mkdir -p $@\r
 \r
 all: libs $(dir_cmd_goals)\r
 \r
+\r
+test:\r
+       @echo $(all_boards)\r
+\r
 show_build:\r
-       @echo Building for $(dir_cmd_goals)\r
-       @echo BOARDDIR: $(BOARDDIR)\r
-       @echo ARCH_FAM/ARCH: $(ARCH_FAM)/$(ARCH)\r
+       @echo "BUILD INFO"\r
+       @echo "BOARDDIR:      $(BOARDDIR) [$(origin BOARDDIR)]"\r
+       @echo "BDIR:          $(BDIR) [$(origin BDIR)]"\r
+       @echo "CROSS_COMPILE: $(CROSS_COMPILE) [$(origin CROSS_COMPILE)]"\r
+       @echo "cmd_cmd_goals: $(cmd_cmd_goals)"\r
+       \r
        \r
-\r
 $(dir_cmd_goals) :: show_build FORCE   \r
        @echo ==========[ $@  ]===========\r
+       @if [ ! -d $@ ]; then echo "No such directory: \"$@\" quitting"; exit 1; fi\r
        +@[ -d $@/$(objdir) ] || mkdir -p $@/$(objdir)\r
        @chmod 777 $@/$(objdir)\r
        $(Q)$(MAKE) -r  -C $@/$(objdir) -f $(CURDIR)/scripts/rules.mk  ROOTDIR=$(CURDIR) SUBDIR=$@ $(cmd_cmd_goals)\r
@@ -117,6 +149,10 @@ $(dir_cmd_goals) :: show_build FORCE
 \r
 FORCE:\r
 \r
+.PHONY: boards\r
+boards:\r
+       @find . -type d -name *\r
+\r
 clean_all:\r
        @find . -type d -name obj_* | xargs rm -rf\r
        @find . -type f -name *.a | xargs rm -rf\r