2 # $ make BOARDDIR=<board> BDIR=<dir>[,<dir>] CROSS_COMPILE=<gcc> all|clean|clean_all
\r
5 # all: Target when building
\r
6 # clean: Remove generatated files for a board
\r
7 # clean_all: Remove all generated files
\r
8 # help: Print some help
\r
11 # BOARDDIR=<board dir>
\r
12 # Select what board to build for
\r
13 # BDIR=<dir>[,<dir>]
\r
14 # Select what directories to build. The kernel if always built.
\r
16 # Specify the compiler to use.
\r
18 # If Q=@ cmd's will not be echoed.
\r
24 # Clean for a specific board
\r
25 # $ make BDIR=mpc551xsim clean
\r
27 # Build the simple example (assuming CROSS_COMPILE set)
\r
28 # $ make BOARDDIR= mpc551xsim BDIR=examples/simple all
\r
32 export UNAME:=$(shell uname)
\r
34 ifneq ($(findstring Darwin,$(UNAME)),)
\r
36 export SED=/opt/local/bin/gsed
\r
43 export TOPDIR = $(CURDIR)
\r
46 # Select default console
\r
47 # RAMLOG | TTY_T32 | TTY_WINIDEA
\r
48 export SELECT_OS_CONSOLE
\r
49 export SELECT_CONSOLE
\r
50 export USE_DEBUG_PRINTF
\r
53 ifneq ($(filter clean_all,$(MAKECMDGOALS)),clean_all)
\r
55 # $(error BOARDDIR is empty)
\r
62 # override BDIR := system/kernel ${BDIR}
\r
65 # Ugly thing to make things work under cmd.exe
\r
66 PATH := /usr/bin/:$(PATH)
\r
67 #find := $(shell which find)
\r
68 FIND := $(shell which find)
\r
70 export objdir = obj_$(BOARDDIR)
\r
77 @echo "Make kernel and a simple example"
\r
78 @echo " > make BOARDDIR=mpc551xsim CROSS_COMPILE=/opt/powerpc-eabi/bin/powerpc-eabi- BDIR=examples/simple all"
\r
80 @echo "Save the config (CROSS_COMPILE and BDIR)"
\r
81 @echo " > make BOARDDIR=mpc551xsim CROSS_COMPILE=/opt/powerpc-eabi/bin/powerpc-eabi- BDIR=examples/simple save"
\r
84 @echo " > make clean"
\r
86 @echo "Present config:"
\r
87 @echo " ARCH=$(ARCH)"
\r
88 @echo " ARCH_FAM=$(ARCH_FAM)"
\r
89 @echo " BOARDDIR =$(BOARDDIR)"
\r
90 @echo " CROSS_COMPILE =$(CROSS_COMPILE)"
\r
96 export def-y+=$(CFG_ARCH_$(ARCH)) $(CFG_MCU) $(CFG_CPU)
\r
98 # We descend into the object directories and build the. That way it's easier to build
\r
99 # multi-arch support and we don't have to use objdir everywhere.
\r
100 # ROOTDIR - The top-most directory
\r
101 # SUBDIR - The current subdirectory it's building.
\r
104 split = $(subst $(comma), ,$(1))
\r
105 dir_cmd_goals := $(call split,$(BDIR))
\r
106 cmd_cmd_goals := $(filter all clean config,$(MAKECMDGOALS))
\r
108 # Check for CROSS_COMPILE
\r
109 ifneq ($(cmd_cmd_goals),)
\r
110 #ifndef CROSS_COMPILE
\r
111 # $(error CROSS_COMPILE not defined)
\r
114 # Check that the board actually exist
\r
116 all_boards := $(subst boards/,,$(shell $(FIND) boards/ -maxdepth 1 -type d))
\r
117 ifeq ($(filter $(BOARDDIR),$(all_boards)),)
\r
118 $(error no such board: $(BOARDDIR), valid boards are: $(all_boards))
\r
130 all: libs $(dir_cmd_goals)
\r
134 @echo $(all_boards)
\r
138 @echo "BOARDDIR: $(BOARDDIR) [$(origin BOARDDIR)]"
\r
139 @echo "BDIR: $(BDIR) [$(origin BDIR)]"
\r
140 @echo "CROSS_COMPILE: $(CROSS_COMPILE) [$(origin CROSS_COMPILE)]"
\r
141 @echo "cmd_cmd_goals: $(cmd_cmd_goals)"
\r
144 $(dir_cmd_goals) :: show_build FORCE
\r
145 @echo ==========[ $@ ]===========
\r
146 @if [ ! -d $@ ]; then echo "No such directory: \"$@\" quitting"; exit 1; fi
\r
147 +@[ -d $@/$(objdir) ] || mkdir -p $@/$(objdir)
\r
148 @chmod 777 $@/$(objdir)
\r
149 $(Q)$(MAKE) -r -C $@/$(objdir) -f $(CURDIR)/scripts/rules.mk ROOTDIR=$(CURDIR) SUBDIR=$@ $(cmd_cmd_goals)
\r
156 @find . -type d -name *
\r
159 @find . -type d -name obj_* | xargs rm -rf
\r
160 @find . -type f -name *.a | xargs rm -rf
\r
163 config: $(dir_cmd_goals)
\r
166 clean: $(dir_cmd_goals)
\r
168 @echo " Removing objectfiles and libs for ARCH=$(ARCH)"
\r
169 @find . -type d -name $(objdir) | xargs rm -rf
\r
170 @find . -type f -name *.a| xargs rm -rf
\r