# 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
\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
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
\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