6 VERSIONHI = @VERSIONHI@
7 VERSIONLO = @VERSIONLO@
17 ifeq ($(shell uname -s),Linux)
23 top_builddir = @top_builddir@
24 top_srcdir = @top_srcdir@
27 INCDIR = $(top_srcdir)/device/include
29 PORTINCDIR = $(INCDIR)/mcs51
32 CC = $(top_builddir)/bin/sdcc
33 CPP = $(top_builddir)/bin/sdcpp
36 exec_prefix = @exec_prefix@
40 datarootdir = @datarootdir@
41 includedir = @includedir@
43 man1dir = $(mandir)/man1
44 man2dir = $(mandir)/man2
47 lib_dir_suffix = @lib_dir_suffix@
49 sdcc_libdir = $(DESTDIR)$(datadir)/$(lib_dir_suffix)
51 CPPFLAGS = -I$(INCDIR) -I$(PORTINCDIR)
52 CFLAGS = $(MODELFLAGS) --nostdinc --std-c99
58 PORTDIR = $(abspath $(BUILDDIR)/$(PORT))
61 OPT_DISABLE_AVR = @OPT_DISABLE_AVR@
62 OPT_DISABLE_DS390 = @OPT_DISABLE_DS390@
63 OPT_DISABLE_DS400 = @OPT_DISABLE_DS400@
64 OPT_DISABLE_GBZ80 = @OPT_DISABLE_GBZ80@
65 OPT_DISABLE_HC08 = @OPT_DISABLE_HC08@
66 OPT_DISABLE_MCS51 = @OPT_DISABLE_MCS51@
67 OPT_DISABLE_PIC = @OPT_DISABLE_PIC@
68 OPT_DISABLE_PIC16 = @OPT_DISABLE_PIC16@
69 OPT_DISABLE_XA51 = @OPT_DISABLE_XA51@
70 OPT_DISABLE_Z80 = @OPT_DISABLE_Z80@
72 SOURCES_FLOAT = $(COMMON_FLOAT) \
82 SOURCES_INT = $(COMMON_INT) \
89 SOURCES_LONG = $(COMMON_LONG) \
93 SOURCES_SDCC = $(COMMON_SDCC) \
118 SOURCES = $(SOURCES_FLOAT) $(SOURCES_INT) $(SOURCES_LONG) $(SOURCES_SDCC)
120 OBJECTS_FLOAT = $(SOURCES_FLOAT:%.c=$(PORT)/%.rel)
121 OBJECTS_INT = $(SOURCES_INT:%.c=$(PORT)/%.rel)
122 OBJECTS_LONG = $(SOURCES_LONG:%.c=$(PORT)/%.rel)
123 OBJECTS_SDCC = $(SOURCES_SDCC:%.c=$(PORT)/%.rel)
125 OBJECTS = $(OBJECTS_FLOAT) $(OBJECTS_INT) $(OBJECTS_LONG) $(OBJECTS_SDCC)
127 XA51_FLOAT = $(COMMON_FLOAT)
129 XA51_INT = $(COMMON_INT) \
136 XA51_LONG = $(COMMON_LONG) \
140 XA51_SDCC = $(COMMON_SDCC) \
145 XA51SOURCES = $(XA51_FLOAT) $(XA51_INT) $(XA51_LONG) $(XA51_SDCC)
146 XA51OBJECTS = $(XA51SOURCES:%.c=$(PORT)/%.rel)
148 ifeq ($(LIB_TYPE), SDCCLIB)
149 LIB_FILES = $(PORTDIR)/libfloat.lib $(PORTDIR)/libint.lib $(PORTDIR)/liblong.lib $(PORTDIR)/libsdcc.lib
150 else ifeq ($(LIB_TYPE), AR)
151 LIB_FILES = $(PORTDIR)/libfloat.lib $(PORTDIR)/libint.lib $(PORTDIR)/liblong.lib $(PORTDIR)/libsdcc.lib
152 else ifeq ($(LIB_TYPE), RANLIB)
153 LIB_FILES = $(PORTDIR)/libfloat.lib $(PORTDIR)/libint.lib $(PORTDIR)/liblong.lib $(PORTDIR)/libsdcc.lib
155 LIB_FILES = $(OBJECTS_FLOAT) $(OBJECTS_INT) $(OBJECTS_LONG) $(OBJECTS_SDCC) $(PORTDIR)/libfloat.lib $(PORTDIR)/libint.lib $(PORTDIR)/liblong.lib $(PORTDIR)/libsdcc.lib
160 include $(srcdir)/incl.mk
162 ifeq ($(OPT_DISABLE_DS390), 0)
163 TARGETS += model-ds390
166 ifeq ($(OPT_DISABLE_DS400), 0)
167 TARGETS += model-ds400
170 ifeq ($(OPT_DISABLE_HC08), 0)
171 TARGETS += model-hc08
174 ifeq ($(OPT_DISABLE_MCS51), 0)
175 TARGETS += models small-mcs51-stack-auto
178 ifeq ($(OPT_DISABLE_PIC), 0)
179 TARGETS += model-pic14
182 ifeq ($(OPT_DISABLE_PIC16), 0)
183 TARGETS += model-pic16
186 ifeq ($(OPT_DISABLE_Z80), 0)
190 ifeq ($(OPT_DISABLE_GBZ80), 0)
191 TARGETS += model-gbz80
194 # Compiling entire program or any subproject
195 # ------------------------------------------
196 all: checkconf $(TARGETS)
198 objects: build-dir $(OBJECTS) port-specific-objects $(LIB_FILES) clean_intermediate
201 if grep '^mcs51\>' $(top_builddir)/ports.build > /dev/null; then \
202 for model in $(MODELS); do \
203 $(MAKE) MODELFLAGS="--model-$$model" PORT=$$model PORTINCDIR=$(INCDIR)/mcs51 objects; \
207 small-mcs51-stack-auto:
208 if grep '^mcs51\>' $(top_builddir)/ports.build > /dev/null; then \
209 mkdir -p small-stack-auto; cp small/Makefile small-stack-auto; \
210 $(MAKE) MODELFLAGS="--model-small --stack-auto" PORT=small-stack-auto PORTDIR=$(abspath $(BUILDDIR)/small-stack-auto) PORTINCDIR=$(INCDIR)/mcs51 objects; \
213 model-mcs51-stack-auto:
214 if grep '^mcs51\>' $(top_builddir)/ports.build > /dev/null; then \
215 for model in $(MODELS); do \
216 mkdir -p $${model}-stack-auto; cp $${model}/Makefile $${model}-stack-auto; \
217 $(MAKE) MODELFLAGS="--model-$$model --stack-auto" PORT=$${model}-stack-auto PORTDIR=$(abspath $(BUILDDIR)/$${model}-stack-auto) PORTINCDIR=$(INCDIR)/mcs51 objects; \
221 model-mcs51-xstack-auto:
222 if grep '^mcs51\>' $(top_builddir)/ports.build > /dev/null; then \
223 for model in $(MODELS); do \
224 mkdir -p $${model}-xstack-auto; cp $${model}/Makefile $${model}-xstack-auto; \
225 $(MAKE) MODELFLAGS="--model-$$model --stack-auto --xstack -DUSE_FLOATS=1" PORT=$${model}-xstack-auto PORTDIR=$(abspath $(BUILDDIR)/$${model}-xstack-auto) PORTINCDIR=$(INCDIR)/mcs51 objects; \
230 if grep '^ds390\>' $(top_builddir)/ports.build > /dev/null; then \
231 $(MAKE) MODELFLAGS="-mds390" PORT=ds390 PORTINCDIR=$(INCDIR)/mcs51 objects; \
235 if grep '^ds400\>' $(top_builddir)/ports.build > /dev/null; then \
236 $(MAKE) MODELFLAGS="-mds400" PORT=ds400 PORTINCDIR=$(INCDIR)/mcs51 objects; \
240 if grep '^xa51\>' $(top_builddir)/ports.build > /dev/null; then \
241 $(MAKE) MODELFLAGS="-mxa51" PORT=xa51 objects-xa51; \
244 objects-xa51: build-dir $(XA51OBJECTS) port-specific-objects
246 $(PORTDIR)/lib$(PORT).lib: $(XA51OBJECTS)
247 ifeq ($(LIB_TYPE), SDCCLIB)
248 ../../bin/sdcclib -a $(PORTDIR)/lib$(PORT).lib $(XA51OBJECTS)
249 else ifeq ($(LIB_TYPE), AR)
250 ar -Sq $(PORTDIR)/lib$(PORT).lib $(XA51OBJECTS)
251 else ifeq ($(LIB_TYPE), RANLIB)
252 ar -Sq $(PORTDIR)/lib$(PORT).lib $(XA51OBJECTS)
253 $(top_builddir)/bin/asranlib $(PORTDIR)/lib$(PORT).lib
255 rm -f $(PORTDIR)/lib$(PORT).lib
256 for i in $(notdir $(basename $(XA51OBJECTS))); do echo $$i >> $(PORTDIR)/lib$(PORT).lib; done
257 cp $(XA51OBJECTS) $(PORTDIR)
261 if grep '^z80\>' $(top_builddir)/ports.build > /dev/null; then \
262 $(MAKE) MODELFLAGS="-mz80" PORT=z80 objects-z80 OEXT=.o; \
266 if grep '^z80\>' $(top_builddir)/ports.build > /dev/null; then \
267 $(MAKE) MODELFLAGS="-mgbz80" PORT=gbz80 objects-z80 OEXT=.o; \
270 objects-z80: build-dir port-specific-objects clean_intermediate
273 if grep '^hc08\>' $(top_builddir)/ports.build > /dev/null; then \
274 $(MAKE) MODELFLAGS="-mhc08" PORT=hc08 objects-hc08; \
277 objects-hc08: build-dir port-specific-objects clean_intermediate
280 if grep '^pic16\>' $(top_builddir)/ports.build > /dev/null; then \
281 $(MAKE) PORT=pic16 objects-pic16; \
284 objects-pic16: build-dir port-specific-objects-pic16 clean_intermediate-pic16
287 if grep '^pic\>' $(top_builddir)/ports.build > /dev/null; then \
288 $(MAKE) PORT=pic objects-pic14; \
291 objects-pic14: build-dir port-specific-objects-pic14 clean_intermediate-pic14
293 build-dir: $(PORTDIR) $(PORT)
301 port-specific-objects:
302 ifneq ($(LIB_TYPE), LIB)
303 -if [ -f $(PORT)/Makefile ]; then \
304 $(MAKE) -C $(PORT) PORT=$(PORT); \
307 -if [ -f $(PORT)/Makefile ]; then \
308 $(MAKE) -C $(PORT) PORT=$(PORT); \
312 port-specific-objects-pic16:
313 -if [ -f $(PORT)/Makefile ]; then \
314 $(MAKE) -C $(PORT); \
315 for i in $(PORT)/*/lib*.a; do cp -f $$i $(PORTDIR)/$$(basename $$i .a).lib; done; \
316 cp -f $(PORT)/*/crt0*.o $(PORTDIR); \
319 port-specific-objects-pic14:
320 -if [ -f $(PORT)/Makefile ]; then \
321 mkdir -p $(PORT)/bin; \
322 $(MAKE) -C $(PORT); \
323 cp -f $(PORT)/bin/*.* $(PORTDIR); \
326 $(LIB_FILES): $(OBJECTS_FLOAT) $(OBJECTS_INT) $(OBJECTS_LONG) $(OBJECTS_SDCC)
327 ifeq ($(LIB_TYPE), SDCCLIB)
328 ../../bin/sdcclib -a $(PORTDIR)/libfloat.lib $(OBJECTS_FLOAT)
329 ../../bin/sdcclib -a $(PORTDIR)/libint.lib $(OBJECTS_INT)
330 ../../bin/sdcclib -a $(PORTDIR)/liblong.lib $(OBJECTS_LONG)
331 ../../bin/sdcclib -a $(PORTDIR)/libsdcc.lib $(OBJECTS_SDCC)
332 else ifeq ($(LIB_TYPE), AR)
333 ar -Scq $(PORTDIR)/libfloat.lib $(OBJECTS_FLOAT)
334 ar -Scq $(PORTDIR)/libint.lib $(OBJECTS_INT)
335 ar -Scq $(PORTDIR)/liblong.lib $(OBJECTS_LONG)
336 ar -Scq $(PORTDIR)/libsdcc.lib $(OBJECTS_SDCC)
337 else ifeq ($(LIB_TYPE), RANLIB)
338 ar -Scq $(PORTDIR)/libfloat.lib $(OBJECTS_FLOAT); $(top_builddir)/bin/asranlib $(PORTDIR)/libfloat.lib
339 ar -Scq $(PORTDIR)/libint.lib $(OBJECTS_INT); $(top_builddir)/bin/asranlib $(PORTDIR)/libint.lib
340 ar -Scq $(PORTDIR)/liblong.lib $(OBJECTS_LONG); $(top_builddir)/bin/asranlib $(PORTDIR)/liblong.lib
341 ar -Scq $(PORTDIR)/libsdcc.lib $(OBJECTS_SDCC); $(top_builddir)/bin/asranlib $(PORTDIR)/libsdcc.lib
343 rm -f $(PORTDIR)/libfloat.lib
344 for i in $(notdir $(basename $(OBJECTS_FLOAT))); do echo $$i >> $(PORTDIR)/libfloat.lib; done
345 cp $(OBJECTS_FLOAT) $(PORTDIR)
346 rm -f $(PORTDIR)/libint.lib
347 for i in $(notdir $(basename $(OBJECTS_INT))); do echo $$i >> $(PORTDIR)/libint.lib; done
348 cp $(OBJECTS_INT) $(PORTDIR)
349 rm -f $(PORTDIR)/liblong.lib
350 for i in $(notdir $(basename $(OBJECTS_LONG))); do echo $$i >> $(PORTDIR)/liblong.lib; done
351 cp $(OBJECTS_LONG) $(PORTDIR)
352 rm -f $(PORTDIR)/libsdcc.lib
353 for i in $(notdir $(basename $(OBJECTS_SDCC))); do echo $$i >> $(PORTDIR)/libsdcc.lib; done
354 cp $(OBJECTS_SDCC) $(PORTDIR)
358 rm -f $(PORTDIR)/*.lst $(PORTDIR)/*.sym
360 clean_intermediate-pic16:
361 $(MAKE) -C $(PORT) clean-intermediate
363 clean_intermediate-pic14:
364 $(MAKE) -C $(PORT) clean-intermediate
366 # Compiling and installing everything and runing test
367 # ---------------------------------------------------
368 install: all installdirs
369 $(CP_U) -r $(BUILDDIR)/* $(sdcc_libdir)
370 $(CP_U) -r $(MODELS) $(srcdir)/mcs51 $(srcdir)/ds390 $(srcdir)/ds400 \
371 $(srcdir)/gbz80 $(srcdir)/z80 $(srcdir)/hc08 \
372 $(srcdir)/pic $(srcdir)/pic16 $(srcdir)/*.c $(sdcc_libdir)/src
373 $(CP_U) -r $(MODELS) mcs51 ds390 ds400 gbz80 z80 hc08 $(sdcc_libdir)/src
375 for src in $(MODELS) ds390 ds400 gbz80 z80 hc08 pic pic16; do \
376 find $(sdcc_libdir)/src/$$src -depth \
377 \( -name '*.rel' -o -name '*.dump*' -o -name '*.sym' -o -name '*.o' -o -name '*.lib' -o \
378 -name '*.lst' -o -name '*.asm' -o -name '.svn' -o -name 'autom4te.cache' -o \
379 -name 'build' -o -name 'bin' -o -name 'Makefile*' -o -name 'config*' -o \
380 -name 'depcomp' -o -name 'missing' -o -name 'install-sh' -o \
381 -name 'bootstrap.sh' \) \
382 -exec rm -rf {} + ; \
384 find $(sdcc_libdir)/src/mcs51 -depth \
385 \( -name '*.rel' -o -name '*.dump*' -o -name '*.sym' -o -name '*.o' -o -name '*.lib' -o \
386 -name '*.lst' -o -name '.svn' -o -name 'build' -o -name 'bin' -o \
387 -name 'Makefile*' \) \
390 # Deleting all the installed files
391 # --------------------------------
393 rm -rf $(sdcc_libdir)
395 # Performing self-test
396 # --------------------
400 # Performing installation test
401 # ----------------------------
405 # Creating installation directories
406 # ---------------------------------
408 [ -d $(sdcc_libdir) ] || mkdir -p $(sdcc_libdir)
409 for model in $(MODELS); do \
410 [ -d $(sdcc_libdir)/$$model ] || \
411 mkdir -p $(sdcc_libdir)/$$model; \
413 for libdir in small-stack-auto ds390 ds400 hc08 pic16 pic; do \
414 [ -d $(sdcc_libdir)/$$libdir ] || mkdir -p $(sdcc_libdir)/$$libdir; \
416 mkdir -p $(sdcc_libdir)/src
418 # Creating dependencies
419 # ---------------------
422 Makefile.dep: $(SOURCES) $(INCDIR)/*.h $(PORTINCDIR)/*.h
424 for i in $(filter %.c,$^); do \
425 $(CPP) -std=c99 -M $(CPPFLAGS) $$i >$${i}.dep; \
426 cat $${i}.dep >>Makefile.dep; \
430 ifeq "$(findstring $(MAKECMDGOALS),uninstall check installcheck installdirs checkconf \
431 clean distclean mostlyclean realclean)" ""
432 -include Makefile.dep
434 include $(srcdir)/clean.mk
441 $(PORT)/%$(OEXT): %.c
442 $(CC) $(CPPFLAGS) $(CFLAGS) -c $< -o $@
444 # Remaking configuration
445 # ----------------------
447 @if [ -f $(top_builddir)/devel ]; then\
448 $(MAKE) -f $(srcdir)/conf.mk srcdir="$(srcdir)" top_builddir="$(top_builddir)" \
452 # End of main_in.mk/main.mk