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