Added bug cases. Added decent support for distclean
[fw/sdcc] / Makefile
1 #
2 #
3 #
4
5 SHELL           = /bin/sh
6
7 PRJDIR          = .
8
9 SDCC_MISC       = debugger/mcs51 sim/ucsim
10 SDCC_LIBS       = support/cpp support/cpp2
11 SDCC_DOC        = doc
12
13 # Parts that are not normally compiled but need to be cleaned
14 SDCC_EXTRA      = support/regression support/makebin
15
16 SDCC_ASLINK     = as/mcs51 as link
17 SDCC_PACKIHX    = packihx
18
19 TARGETS         = sdcc-libs sdcc-cc sdcc-aslink sdcc-doc
20
21 PKGS            = $(SDCC_LIBS) src $(SDCC_ASLINK) $(SDCC_DOC)
22
23 ifneq ($(OPT_ENABLE_UCSIM), no)
24 TARGETS         += sdcc-misc 
25 PKGS            += $(SDCC_MISC)
26 endif
27
28 ifneq ($(OPT_ENABLE_DEVICE_LIB_BUILD), no)
29 TARGETS         += sdcc-device
30 PKGS            += device/include device/lib
31 endif
32
33 ifneq ($(OPT_ENABLE_PACKIHX), no)
34 TARGETS         += sdcc-packihx
35 PKGS            += $(SDCC_PACKIHX)
36 endif
37
38 PKGS_TINI       = $(SDCC_LIBS) $(SDCC_ASLINK) \
39                   src device/include $(SDCC_PACKIHX)
40 PORTS           = $(shell cat ports.build)
41 ALLPORTS        = $(shell cat ports.all)
42
43 # Compiling entire program or any subproject
44 # ------------------------------------------
45 all: checkconf sdcc
46
47 tini: checkconf sdcc-tini
48
49 sdcc-libs:
50         for lib in $(SDCC_LIBS); do $(MAKE) -C $$lib; done
51
52 sdcc-cc: sdcc-libs
53         $(MAKE) -C src
54
55 sdcc-aslink:
56         for as in $(SDCC_ASLINK); do $(MAKE) -C $$as; done
57
58 sdcc-misc:
59         for misc in $(SDCC_MISC); do $(MAKE) -C $$misc; done
60
61 sdcc-packihx:
62         $(MAKE) -C $(SDCC_PACKIHX)
63
64 sdcc-device:
65         $(MAKE) -C device/include
66         $(MAKE) -C device/lib
67
68 sdcc-device-tini:
69         $(MAKE) -C device/include
70         $(MAKE) -C device/lib modelDS390
71
72 # Empty for now, as doc depends on latex and latex2html
73 sdcc-doc:
74
75 sdcc: $(TARGETS)
76
77 sdcc-tini: sdcc-cc sdcc-aslink sdcc-device-tini sdcc-packihx
78         $(MAKE) -f main.mk all
79
80 # Some interesting sub rules
81 sdcc-bin: sdcc-cc sdcc-aslink sdcc-misc
82
83 sdcc-base: sdcc-cc sdcc-aslink
84
85 # Compiling and installing everything and runing test
86 # ---------------------------------------------------
87 install:
88         $(MAKE) -f main.mk install
89         @for pkg in $(PKGS); do\
90           $(MAKE) -C $$pkg install ;\
91         done
92
93 install-tini:
94         $(MAKE) -f main.mk install
95         @for pkg in $(PKGS_TINI); do\
96           $(MAKE) -C $$pkg install ;\
97         done
98         $(MAKE) -C device/lib installDS390
99
100
101
102 # Deleting all the installed files
103 # --------------------------------
104 uninstall:
105         $(MAKE) -f main.mk uninstall
106         @for pkg in $(PKGS); do\
107           $(MAKE) -C $$pkg uninstall ;\
108         done
109
110
111 # Deleting all files created by building the program
112 # --------------------------------------------------
113 clean:
114         @echo "+ Cleaning root of the project..."
115         $(MAKE) -f clean.mk clean
116         @echo "+ Cleaning packages in their directories..."
117         for pkg in $(PKGS); do\
118           $(MAKE) PORTS="$(PORTS)" -C $$pkg -f clean.mk clean ;\
119         done
120
121 # Deleting all files created by configuring or building the program
122 # -----------------------------------------------------------------
123 distclean:
124         @echo "+ DistCleaning root of the project..."
125         $(MAKE) -f clean.mk distclean
126         @echo "+ DistCleaning packages using clean.mk..."
127         for pkg in $(PKGS); do\
128           $(MAKE) -C $$pkg PORTS="$(PORTS)" -f clean.mk distclean ;\
129         done
130         for pkg in $(SDCC_EXTRA); do \
131           $(MAKE) -C $$pkg clean; \
132         done
133
134 # Like clean but some files may still exist
135 # -----------------------------------------
136 mostlyclean: clean
137         $(MAKE) -f clean.mk mostlyclean
138         for pkg in $(PKGS); do\
139           $(MAKE) -C $$pkg -f clean.mk PORTS="$(PORTS)" mostlyclean ;\
140         done
141
142
143 # Deleting everything that can reconstructed by this Makefile. It deletes
144 # everything deleted by distclean plus files created by bison, stc.
145 # -----------------------------------------------------------------------
146 realclean: distclean
147         $(MAKE) -f clean.mk realclean
148         for pkg in $(PKGS); do\
149           $(MAKE) -C $$pkg -f clean.mk PORTS="$(PORTS)" realclean ;\
150         done
151
152
153 # Creating distribution
154 # ---------------------
155 dist: distclean
156         @if [ -f devel ]; then\
157           rm -f devel; mkdist sdcc; touch devel;\
158         else\
159           mkdist sdcc;\
160         fi
161
162
163 # Performing self-test
164 # --------------------
165 check:
166
167
168 # Performing installation test
169 # ----------------------------
170 installcheck:
171
172
173 # Creating dependencies
174 # ---------------------
175 dep:
176         $(MAKE) -f main.mk dep
177         @for pkg in $(PKGS); do\
178           $(MAKE) -C $$pkg dep ;\
179         done
180
181
182 # My rules
183 # --------
184 newer: distclean
185         @if [ -f start ]; then \
186           tar cvf - \
187             `find . -newer start -type f -print` |\
188           gzip -9c >`date '+%m%d%H%M'`.tgz; \
189         else \
190           echo "start file not found.\n"; \
191           exit 1; \
192         fi
193
194 putcopyright:
195         'put(c)' -s $(STARTYEAR) *.cc *.h *.y *.l
196
197
198 # Remaking configuration
199 # ----------------------
200 configure: configure.in
201         $(SHELL) $(AUTOCONF)
202
203 main.mk: $(srcdir)/main_in.mk $(srcdir)/configure.in config.status
204         $(SHELL) ./config.status
205
206 Makefiles: makefiles
207
208 makefiles: config.status
209
210 config.status: configure
211         $(SHELL) ./config.status --recheck
212
213 makefiles:
214         $(SHELL) ./config.status
215
216 freshconf: main.mk
217
218 checkconf:
219         @if [ -f devel ]; then\
220           $(MAKE) freshconf;\
221         fi
222
223 # End of Makefile