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