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