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