]> rtime.felk.cvut.cz Git - arc.git/blobdiff - makefile
Merge branch 'mikulka' of git@rtime.felk.cvut.cz:arc into mikulka
[arc.git] / makefile
index a0cfcc8e7754d688cc89b4fb49c0e460142482e8..6b64781e01bdcf74fb4f8c405a197028774c181e 100644 (file)
--- a/makefile
+++ b/makefile
@@ -1,24 +1,33 @@
 # 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 is 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
@@ -29,9 +38,12 @@ else
        export SED=sed\r
 endif\r
 \r
+ifeq ($(VERBOSE),y)\r
+export Q?=\r
+else\r
+export Q?=@\r
+endif\r
 \r
-Q?=@\r
-export Q\r
 export TOPDIR = $(CURDIR)\r
 export PATH\r
 \r
@@ -40,48 +52,26 @@ export PATH
 export SELECT_OS_CONSOLE\r
 export SELECT_CONSOLE\r
 export USE_DEBUG_PRINTF\r
-export SELECT_OPT?=OPT_RELEASE\r
-export CFG_$(SELECT_OPT)=y\r
+export SELECT_OPT\r
 \r
 ifneq ($(filter clean_all,$(MAKECMDGOALS)),clean_all)\r
-  ifeq (${BOARDDIR},)\r
-    $(error BOARDDIR is empty) \r
+  ifeq ($(BOARDDIR),)\r
+    $(error BOARDDIR is empty)\r
+  endif\r
+  ifeq ($(BDIR),)\r
+    $(error BDIR is empty)\r
   endif\r
 endif\r
 \r
 USE_T32_SIM?=n\r
 export USE_T32_SIM\r
 \r
-# override BDIR := system/kernel ${BDIR} \r
-\r
 # Tools\r
 # Ugly thing to make things work under cmd.exe \r
 PATH := /usr/bin/:$(PATH) \r
-find := $(shell which find)\r
+FIND := $(shell which find)\r
 \r
 export objdir = obj_$(BOARDDIR)\r
-\r
-.PHONY: clean\r
-.PHONY: release\r
-\r
-.PHONY: help\r
-help:\r
-       @echo "Make kernel and a simple example"\r
-       @echo "  > make BOARDDIR=mpc551xsim CROSS_COMPILE=/opt/powerpc-eabi/bin/powerpc-eabi- BDIR=examples/simple all"\r
-       @echo ""\r
-       @echo "Save the config (CROSS_COMPILE and BDIR)"\r
-       @echo "  > make BOARDDIR=mpc551xsim CROSS_COMPILE=/opt/powerpc-eabi/bin/powerpc-eabi- BDIR=examples/simple save"\r
-       @echo ""\r
-       @echo "Clean"\r
-       @echo "  > make clean"\r
-       @echo ""\r
-       @echo "Present config:"\r
-       @echo "  ARCH=$(ARCH)"\r
-       @echo "  ARCH_FAM=$(ARCH_FAM)"\r
-       @echo "  BOARDDIR =$(BOARDDIR)"\r
-       @echo "  CROSS_COMPILE =$(CROSS_COMPILE)"\r
-       @echo ""\r
-       \r
 export CFG_MCU \r
 export CFG_CPU\r
 export MCU\r
@@ -93,23 +83,76 @@ export def-y+=$(CFG_ARCH_$(ARCH)) $(CFG_MCU) $(CFG_CPU)
 # SUBDIR - The current subdirectory it's building.\r
 \r
 comma:= ,\r
+empty:=\r
+space:= $(empty) $(empty)\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 all clean config,$(MAKECMDGOALS))\r
+\r
+# Check for CROSS_COMPILE\r
+ifneq ($(cmd_cmd_goals),)\r
+\r
+# Check that the board actually exist\r
+ifdef BOARDDIR\r
+  all_boards := $(subst boards/,,$(shell $(FIND) boards/ -maxdepth 1 -type d))\r
+  all_boards_print := $(subst $(space),$(comma)$(space),$(strip $(all_boards)))\r
+  ifeq ($(filter $(BOARDDIR),$(all_boards)),)\r
+       $(error no such board: $(BOARDDIR), valid boards are: $(all_boards_print))\r
+  endif\r
+endif\r
+\r
+# Check BDIR\r
+endif\r
 \r
 libs:\r
        mkdir -p $@\r
 \r
+.PHONY all:\r
+\r
 all: libs $(dir_cmd_goals)\r
 \r
+.PHONY: clean\r
+.PHONY: release\r
+\r
+.PHONY: help\r
+help:\r
+       @echo "Build a simple example"\r
+       @echo "  > make BOARDDIR=mpc551xsim CROSS_COMPILE=/opt/powerpc-eabi/bin/powerpc-eabi- BDIR=examples/simple all"\r
+       @echo ""\r
+       @echo "Clean"\r
+       @echo "  > make clean"\r
+       @echo ""\r
+       @echo "Present config:"\r
+       @echo "  BDIR          = ${BDIR}"\r
+       @echo "  BOARDDIR      = $(BOARDDIR)"\r
+       @echo "  CROSS_COMPILE = $(CROSS_COMPILE)"\r
+       @echo "  CURDIR        = $(CURDIR)"     \r
+       @echo ""\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 ""\r
+       @echo "==========[ BUILD INFO ]==========="\r
+       @echo "  BDIR:           $(BDIR) [$(origin BDIR)]"\r
+       @echo "  BOARDDIR:       $(BOARDDIR) [$(origin BOARDDIR)]"\r
+       @echo "  COMPILER:       $(COMPILER) [$(origin COMPILER)]"      \r
+ifeq ($(COMPILER),cw)  \r
+       @echo "  CW_COMPILE:     $(CW_COMPILE) [$(origin CW_COMPILE)]"\r
+else \r
+       @echo "  CROSS_COMPILE:  $(CROSS_COMPILE) [$(origin CROSS_COMPILE)]"\r
+endif\r
+       @echo "  CURDIR:         $(CURDIR)"\r
+       @echo "  SELECT_CONSOLE: $(SELECT_CONSOLE) [$(origin SELECT_CONSOLE)]"\r
+       \r
+       \r
        \r
-\r
 $(dir_cmd_goals) :: show_build FORCE   \r
-       @echo ==========[ $@  ]===========\r
+       @echo ""\r
+       @echo ==========[ ${abspath $@}  ]===========\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,18 +160,29 @@ $(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
-       echo Done!\r
+       $(Q)find . -type d -name obj_* | xargs rm -rf\r
+       $(Q)find . -type f -name *.a | xargs rm -rf\r
+       @echo\r
+       @echo "  >>>>>>>>>  DONE  <<<<<<<<<"\r
+       @echo\r
+       \r
+config: $(dir_cmd_goals)       \r
        \r
+.PHONY clean:  \r
 clean: $(dir_cmd_goals)\r
-       @echo "Clean:"\r
-       @echo "  Removing objectfiles and libs for ARCH=$(ARCH)"\r
-       @find . -type d -name $(objdir) | xargs rm -rf\r
-       @find . -type f -name *.a| xargs rm -rf\r
-       @rm   -rf libs/*\r
-       @echo Done!\r
+       @echo\r
+       @echo "  >> Cleaning MAIN $(CURDIR)"\r
+#      $(Q)find . -type d -name $(objdir) | xargs rm -rf\r
+#      $(Q)find . -type f -name *.a | xargs rm -rf\r
+#      $(Q)rm   -rf libs/*\r
+       @echo\r
+       @echo "  >>>>>>>>>  DONE  <<<<<<<<<"\r
+       @echo\r
 \r
                \r
        \r