]> rtime.felk.cvut.cz Git - arc.git/blob - makefile
Merged in from generic-tests
[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 if 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 Q?=@\r
42 export Q\r
43 export TOPDIR = $(CURDIR)\r
44 export PATH\r
45 \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
51 export SELECT_OPT\r
52 \r
53 ifneq ($(filter clean_all,$(MAKECMDGOALS)),clean_all)\r
54   ifeq (${BOARDDIR},)\r
55 #    $(error BOARDDIR is empty) \r
56   endif\r
57 endif\r
58 \r
59 USE_T32_SIM?=n\r
60 export USE_T32_SIM\r
61 \r
62 # override BDIR := system/kernel ${BDIR} \r
63 \r
64 # Tools\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
69 \r
70 export objdir = obj_$(BOARDDIR)\r
71 \r
72 .PHONY: clean\r
73 .PHONY: release\r
74 \r
75 .PHONY: help\r
76 help:\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
79         @echo ""\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
82         @echo ""\r
83         @echo "Clean"\r
84         @echo "  > make clean"\r
85         @echo ""\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
91         @echo ""\r
92         \r
93 export CFG_MCU \r
94 export CFG_CPU\r
95 export MCU\r
96 export def-y+=$(CFG_ARCH_$(ARCH)) $(CFG_MCU) $(CFG_CPU)\r
97 \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
102 \r
103 comma:= ,\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
107 \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
112 #endif\r
113 \r
114 # Check that the board actually exist\r
115 ifdef BOARDDIR\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
119   endif\r
120 endif\r
121 \r
122 # Check BDIR\r
123 endif\r
124 \r
125 libs:\r
126         mkdir -p $@\r
127 \r
128 .PHONY all:\r
129 \r
130 all: libs $(dir_cmd_goals)\r
131 \r
132 \r
133 test:\r
134         @echo $(all_boards)\r
135 \r
136 show_build:\r
137         @echo "BUILD INFO"\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
142         \r
143         \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
150 .PHONY: test    \r
151 \r
152 FORCE:\r
153 \r
154 .PHONY: boards\r
155 boards:\r
156         @find . -type d -name *\r
157 \r
158 clean_all:\r
159         @find . -type d -name obj_* | xargs rm -rf\r
160         @find . -type f -name *.a | xargs rm -rf\r
161         echo Done!\r
162         \r
163 config: $(dir_cmd_goals)        \r
164         \r
165 .PHONY clean:   \r
166 clean: $(dir_cmd_goals)\r
167         @echo "Clean:"\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
171         @rm   -rf libs/*\r
172         @echo Done!\r
173 \r
174                 \r
175         \r
176 \r
177 \r
178 \r