]> rtime.felk.cvut.cz Git - arc.git/blob - makefile
Merge branch 'mikulka' of git@rtime.felk.cvut.cz:arc into mikulka
[arc.git] / makefile
1 # build with:\r
2 #   $ make BOARDDIR=<board> BDIR=<dir>[,<dir>] CROSS_COMPILE=<gcc> all|clean|clean_all\r
3 #\r
4 # TARGETS\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
9 #\r
10 # VARIABLES:\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 is always built.\r
15 #   CROSS_COMPILE\r
16 #       Specify the compiler to use.  \r
17 #   Q=[(@)/empty] \r
18 #               If Q=@ cmd's will not be echoed.\r
19 #\r
20 # EXAMPLES\r
21 #   Clean all\r
22 #     $ make clean_all\r
23 #\r
24 #   Clean for a specific board\r
25 #     $ make BDIR=mpc551xsim clean\r
26 #\r
27 #   Build the simple example (assuming CROSS_COMPILE set)\r
28 #     $ make BOARDDIR= mpc551xsim BDIR=examples/simple all\r
29 #\r
30 \r
31 \r
32 export UNAME:=$(shell uname)\r
33 \r
34 ifneq ($(findstring Darwin,$(UNAME)),)\r
35   SHELL:=/bin/bash\r
36   export SED=/opt/local/bin/gsed\r
37 else\r
38         export SED=sed\r
39 endif\r
40 \r
41 ifeq ($(VERBOSE),y)\r
42 export Q?=\r
43 else\r
44 export Q?=@\r
45 endif\r
46 \r
47 export TOPDIR = $(CURDIR)\r
48 export PATH\r
49 \r
50 # Select default console\r
51 # RAMLOG | TTY_T32 | TTY_WINIDEA \r
52 export SELECT_OS_CONSOLE\r
53 export SELECT_CONSOLE\r
54 export USE_DEBUG_PRINTF\r
55 export SELECT_OPT\r
56 \r
57 ifneq ($(filter clean_all,$(MAKECMDGOALS)),clean_all)\r
58   ifeq ($(BOARDDIR),)\r
59     $(error BOARDDIR is empty)\r
60   endif\r
61   ifeq ($(BDIR),)\r
62     $(error BDIR is empty)\r
63   endif\r
64 endif\r
65 \r
66 USE_T32_SIM?=n\r
67 export USE_T32_SIM\r
68 \r
69 # Tools\r
70 # Ugly thing to make things work under cmd.exe \r
71 PATH := /usr/bin/:$(PATH) \r
72 FIND := $(shell which find)\r
73 \r
74 export objdir = obj_$(BOARDDIR)\r
75 export CFG_MCU \r
76 export CFG_CPU\r
77 export MCU\r
78 export def-y+=$(CFG_ARCH_$(ARCH)) $(CFG_MCU) $(CFG_CPU)\r
79 \r
80 # We descend into the object directories and build the. That way it's easier to build\r
81 # multi-arch support and we don't have to use objdir everywhere.\r
82 # ROOTDIR - The top-most directory\r
83 # SUBDIR - The current subdirectory it's building.\r
84 \r
85 comma:= ,\r
86 empty:=\r
87 space:= $(empty) $(empty)\r
88 split = $(subst $(comma), ,$(1))\r
89 dir_cmd_goals  := $(call split,$(BDIR))\r
90 cmd_cmd_goals := $(filter all clean config,$(MAKECMDGOALS))\r
91 \r
92 # Check for CROSS_COMPILE\r
93 ifneq ($(cmd_cmd_goals),)\r
94 \r
95 # Check that the board actually exist\r
96 ifdef BOARDDIR\r
97   all_boards := $(subst boards/,,$(shell $(FIND) boards/ -maxdepth 1 -type d))\r
98   all_boards_print := $(subst $(space),$(comma)$(space),$(strip $(all_boards)))\r
99   ifeq ($(filter $(BOARDDIR),$(all_boards)),)\r
100         $(error no such board: $(BOARDDIR), valid boards are: $(all_boards_print))\r
101   endif\r
102 endif\r
103 \r
104 # Check BDIR\r
105 endif\r
106 \r
107 libs:\r
108         mkdir -p $@\r
109 \r
110 .PHONY all:\r
111 \r
112 all: libs $(dir_cmd_goals)\r
113 \r
114 .PHONY: clean\r
115 .PHONY: release\r
116 \r
117 .PHONY: help\r
118 help:\r
119         @echo "Build a simple example"\r
120         @echo "  > make BOARDDIR=mpc551xsim CROSS_COMPILE=/opt/powerpc-eabi/bin/powerpc-eabi- BDIR=examples/simple all"\r
121         @echo ""\r
122         @echo "Clean"\r
123         @echo "  > make clean"\r
124         @echo ""\r
125         @echo "Present config:"\r
126         @echo "  BDIR          = ${BDIR}"\r
127         @echo "  BOARDDIR      = $(BOARDDIR)"\r
128         @echo "  CROSS_COMPILE = $(CROSS_COMPILE)"\r
129         @echo "  CURDIR        = $(CURDIR)"     \r
130         @echo ""\r
131 \r
132 \r
133 test:\r
134         @echo $(all_boards)\r
135 \r
136 show_build:\r
137         @echo ""\r
138         @echo "==========[ BUILD INFO ]==========="\r
139         @echo "  BDIR:           $(BDIR) [$(origin BDIR)]"\r
140         @echo "  BOARDDIR:       $(BOARDDIR) [$(origin BOARDDIR)]"\r
141         @echo "  COMPILER:       $(COMPILER) [$(origin COMPILER)]"      \r
142 ifeq ($(COMPILER),cw)   \r
143         @echo "  CW_COMPILE:     $(CW_COMPILE) [$(origin CW_COMPILE)]"\r
144 else \r
145         @echo "  CROSS_COMPILE:  $(CROSS_COMPILE) [$(origin CROSS_COMPILE)]"\r
146 endif\r
147         @echo "  CURDIR:         $(CURDIR)"\r
148         @echo "  SELECT_CONSOLE: $(SELECT_CONSOLE) [$(origin SELECT_CONSOLE)]"\r
149         \r
150         \r
151         \r
152 $(dir_cmd_goals) :: show_build FORCE    \r
153         @echo ""\r
154         @echo ==========[ ${abspath $@}  ]===========\r
155         @if [ ! -d $@ ]; then echo "No such directory: \"$@\" quitting"; exit 1; fi\r
156         +@[ -d $@/$(objdir) ] || mkdir -p $@/$(objdir)\r
157         @chmod 777 $@/$(objdir)\r
158         $(Q)$(MAKE) -r  -C $@/$(objdir) -f $(CURDIR)/scripts/rules.mk  ROOTDIR=$(CURDIR) SUBDIR=$@ $(cmd_cmd_goals)\r
159 .PHONY: test    \r
160 \r
161 FORCE:\r
162 \r
163 .PHONY: boards\r
164 boards:\r
165         @find . -type d -name *\r
166 \r
167 clean_all:\r
168         $(Q)find . -type d -name obj_* | xargs rm -rf\r
169         $(Q)find . -type f -name *.a | xargs rm -rf\r
170         @echo\r
171         @echo "  >>>>>>>>>  DONE  <<<<<<<<<"\r
172         @echo\r
173         \r
174 config: $(dir_cmd_goals)        \r
175         \r
176 .PHONY clean:   \r
177 clean: $(dir_cmd_goals)\r
178         @echo\r
179         @echo "  >> Cleaning MAIN $(CURDIR)"\r
180 #       $(Q)find . -type d -name $(objdir) | xargs rm -rf\r
181 #       $(Q)find . -type f -name *.a | xargs rm -rf\r
182 #       $(Q)rm   -rf libs/*\r
183         @echo\r
184         @echo "  >>>>>>>>>  DONE  <<<<<<<<<"\r
185         @echo\r
186 \r
187                 \r
188         \r
189 \r
190 \r
191 \r