6 VERSIONHI = @VERSIONHI@
7 VERSIONLO = @VERSIONLO@
16 ifeq ($(shell uname -s),Linux)
22 top_builddir = @top_builddir@
23 top_srcdir = @top_srcdir@
26 INCDIR = $(top_srcdir)/device/include
28 PORTINCDIR = $(INCDIR)/mcs51
31 CC = $(top_builddir)/bin/sdcc
32 CPP = $(top_builddir)/bin/sdcpp
35 exec_prefix = @exec_prefix@
39 datarootdir = @datarootdir@
40 includedir = @includedir@
42 man1dir = $(mandir)/man1
43 man2dir = $(mandir)/man2
46 lib_dir_suffix = @lib_dir_suffix@
48 sdcc_libdir = $(DESTDIR)$(datadir)/$(lib_dir_suffix)
50 CPPFLAGS = -I$(INCDIR) -I$(PORTINCDIR)
51 CFLAGS = $(MODELFLAGS) --nostdinc --std-c99
57 PORTDIR = $(BUILDDIR)/$(PORT)
60 OPT_DISABLE_AVR = @OPT_DISABLE_AVR@
61 OPT_DISABLE_DS390 = @OPT_DISABLE_DS390@
62 OPT_DISABLE_DS400 = @OPT_DISABLE_DS400@
63 OPT_DISABLE_GBZ80 = @OPT_DISABLE_GBZ80@
64 OPT_DISABLE_HC08 = @OPT_DISABLE_HC08@
65 OPT_DISABLE_MCS51 = @OPT_DISABLE_MCS51@
66 OPT_DISABLE_PIC = @OPT_DISABLE_PIC@
67 OPT_DISABLE_PIC16 = @OPT_DISABLE_PIC16@
68 OPT_DISABLE_XA51 = @OPT_DISABLE_XA51@
69 OPT_DISABLE_Z80 = @OPT_DISABLE_Z80@
71 SOURCES_FLOAT = $(COMMON_FLOAT) \
81 SOURCES_INT = $(COMMON_INT) \
88 SOURCES_LONG = $(COMMON_LONG) \
92 SOURCES_SDCC = $(COMMON_SDCC) \
117 SOURCES = $(SOURCES_FLOAT) $(SOURCES_INT) $(SOURCES_LONG) $(SOURCES_SDCC)
119 OBJECTS_FLOAT = $(SOURCES_FLOAT:%.c=$(PORT)/%.rel)
120 OBJECTS_INT = $(SOURCES_INT:%.c=$(PORT)/%.rel)
121 OBJECTS_LONG = $(SOURCES_LONG:%.c=$(PORT)/%.rel)
122 OBJECTS_SDCC = $(SOURCES_SDCC:%.c=$(PORT)/%.rel)
124 OBJECTS = $(OBJECTS_FLOAT) $(OBJECTS_INT) $(OBJECTS_LONG) $(OBJECTS_SDCC)
126 XA51_FLOAT = $(COMMON_FLOAT)
128 XA51_INT = $(COMMON_INT) \
135 XA51_LONG = $(COMMON_LONG) \
139 XA51_SDCC = $(COMMON_SDCC) \
144 XA51SOURCES = $(XA51_FLOAT) $(XA51_INT) $(XA51_LONG) $(XA51_SDCC)
145 XA51OBJECTS = $(XA51SOURCES:%.c=$(PORT)/%.rel)
147 ifeq ($(LIB_TYPE), SDCCLIB)
148 LIB_FILES = $(PORTDIR)/libfloat.lib $(PORTDIR)/libint.lib $(PORTDIR)/liblong.lib $(PORTDIR)/libsdcc.lib
149 else ifeq ($(LIB_TYPE), AR)
150 LIB_FILES = $(PORTDIR)/libfloat.lib $(PORTDIR)/libint.lib $(PORTDIR)/liblong.lib $(PORTDIR)/libsdcc.lib
151 else ifeq ($(LIB_TYPE), RANLIB)
152 LIB_FILES = $(PORTDIR)/libfloat.lib $(PORTDIR)/libint.lib $(PORTDIR)/liblong.lib $(PORTDIR)/libsdcc.lib
154 LIB_FILES = $(OBJECTS_FLOAT) $(OBJECTS_INT) $(OBJECTS_LONG) $(OBJECTS_SDCC) $(PORTDIR)/libfloat.lib $(PORTDIR)/libint.lib $(PORTDIR)/liblong.lib $(PORTDIR)/libsdcc.lib
159 include $(srcdir)/incl.mk
161 ifeq ($(OPT_DISABLE_DS390), 0)
162 TARGETS += model-ds390
165 ifeq ($(OPT_DISABLE_DS400), 0)
166 TARGETS += model-ds400
169 ifeq ($(OPT_DISABLE_HC08), 0)
170 TARGETS += model-hc08
173 ifeq ($(OPT_DISABLE_MCS51), 0)
174 TARGETS += models small-mcs51-stack-auto
177 ifeq ($(OPT_DISABLE_PIC), 0)
178 TARGETS += model-pic14
181 ifeq ($(OPT_DISABLE_PIC16), 0)
182 TARGETS += model-pic16
185 ifeq ($(OPT_DISABLE_Z80), 0)
189 ifeq ($(OPT_DISABLE_GBZ80), 0)
190 TARGETS += model-gbz80
193 # Compiling entire program or any subproject
194 # ------------------------------------------
202 $(MAKE) port-specific-objects
204 $(MAKE) clean_intermediate
207 if grep '^mcs51\>' $(top_builddir)/ports.build > /dev/null; then \
208 for model in $(MODELS); do \
209 $(MAKE) MODELFLAGS="--model-$$model" PORT=$$model PORTINCDIR=$(INCDIR)/mcs51 objects; \
213 small-mcs51-stack-auto:
214 if grep '^mcs51\>' $(top_builddir)/ports.build > /dev/null; then \
215 mkdir -p small-stack-auto; cp small/Makefile small-stack-auto; \
216 $(MAKE) MODELFLAGS="--model-small --stack-auto" PORT=small-stack-auto PORTDIR=$(BUILDDIR)/small-stack-auto PORTINCDIR=$(INCDIR)/mcs51 objects; \
219 model-mcs51-stack-auto:
220 if grep '^mcs51\>' $(top_builddir)/ports.build > /dev/null; then \
221 for model in $(MODELS); do \
222 mkdir -p $${model}-stack-auto; cp $${model}/Makefile $${model}-stack-auto; \
223 $(MAKE) MODELFLAGS="--model-$$model --stack-auto" PORT=$${model}-stack-auto PORTDIR=$(BUILDDIR)/$${model}-stack-auto PORTINCDIR=$(INCDIR)/mcs51 objects; \
227 model-mcs51-xstack-auto:
228 if grep '^mcs51\>' $(top_builddir)/ports.build > /dev/null; then \
229 for model in $(MODELS); do \
230 mkdir -p $${model}-xstack-auto; cp $${model}/Makefile $${model}-xstack-auto; \
231 $(MAKE) MODELFLAGS="--model-$$model --stack-auto --xstack -DUSE_FLOATS=1" PORT=$${model}-xstack-auto PORTDIR=$(BUILDDIR)/$${model}-xstack-auto PORTINCDIR=$(INCDIR)/mcs51 objects; \
236 if grep '^ds390\>' $(top_builddir)/ports.build > /dev/null; then \
237 $(MAKE) MODELFLAGS="-mds390" PORT=ds390 PORTINCDIR=$(INCDIR)/mcs51 objects; \
241 if grep '^ds400\>' $(top_builddir)/ports.build > /dev/null; then \
242 $(MAKE) MODELFLAGS="-mds400" PORT=ds400 PORTINCDIR=$(INCDIR)/mcs51 objects; \
246 if grep '^xa51\>' $(top_builddir)/ports.build > /dev/null; then \
247 $(MAKE) MODELFLAGS="-mxa51" PORT=xa51 objects-xa51; \
252 $(MAKE) $(XA51OBJECTS)
253 $(MAKE) port-specific-objects
255 $(PORTDIR)/lib$(PORT).lib: $(XA51OBJECTS)
256 ifeq ($(LIB_TYPE), SDCCLIB)
257 ../../bin/sdcclib -a $(PORTDIR)/lib$(PORT).lib $(XA51OBJECTS)
258 else ifeq ($(LIB_TYPE), AR)
259 ar -Sq $(PORTDIR)/lib$(PORT).lib $(XA51OBJECTS)
260 else ifeq ($(LIB_TYPE), RANLIB)
261 ar -Sq $(PORTDIR)/lib$(PORT).lib $(XA51OBJECTS)
262 $(top_builddir)/bin/asranlib $(PORTDIR)/lib$(PORT).lib
264 rm -f $(PORTDIR)/lib$(PORT).lib
265 for i in $(notdir $(basename $(XA51OBJECTS))); do echo $$i >> $(PORTDIR)/lib$(PORT).lib; done
266 cp $(XA51OBJECTS) $(PORTDIR)
270 if grep '^z80\>' $(top_builddir)/ports.build > /dev/null; then \
271 $(MAKE) MODELFLAGS="-mz80" PORT=z80 objects-z80 OEXT=.o; \
275 if grep '^z80\>' $(top_builddir)/ports.build > /dev/null; then \
276 $(MAKE) MODELFLAGS="-mgbz80" PORT=gbz80 objects-z80 OEXT=.o; \
281 $(MAKE) port-specific-objects
282 $(MAKE) clean_intermediate
285 if grep '^hc08\>' $(top_builddir)/ports.build > /dev/null; then \
286 $(MAKE) MODELFLAGS="-mhc08" PORT=hc08 objects-hc08; \
291 $(MAKE) port-specific-objects
292 $(MAKE) clean_intermediate
295 if grep '^pic16\>' $(top_builddir)/ports.build > /dev/null; then \
296 $(MAKE) PORT=pic16 objects-pic16; \
301 $(MAKE) port-specific-objects-pic16
302 $(MAKE) clean_intermediate-pic16
305 if grep '^pic\>' $(top_builddir)/ports.build > /dev/null; then \
306 $(MAKE) PORT=pic objects-pic14; \
311 $(MAKE) port-specific-objects-pic14
312 $(MAKE) clean_intermediate-pic14
324 port-specific-objects:
325 -if [ -f $(PORT)/Makefile ]; then \
326 $(MAKE) -C $(PORT) PORT=$(PORT); \
329 port-specific-objects-pic16:
330 -if [ -f $(PORT)/Makefile ]; then \
331 $(MAKE) -C $(PORT); \
332 for i in $(PORT)/*/lib*.a; do cp -f $$i $(PORTDIR)/$$(basename $$i .a).lib; done; \
333 cp -f $(PORT)/*/crt0*.o $(PORTDIR); \
336 port-specific-objects-pic14:
337 -if [ -f $(PORT)/Makefile ]; then \
338 mkdir -p $(PORT)/bin; \
339 $(MAKE) -C $(PORT); \
340 cp -f $(PORT)/bin/*.* $(PORTDIR); \
343 $(LIB_FILES): $(OBJECTS_FLOAT) $(OBJECTS_INT) $(OBJECTS_LONG) $(OBJECTS_SDCC)
344 ifeq ($(LIB_TYPE), SDCCLIB)
345 ../../bin/sdcclib -a $(PORTDIR)/libfloat.lib $(OBJECTS_FLOAT)
346 ../../bin/sdcclib -a $(PORTDIR)/libint.lib $(OBJECTS_INT)
347 ../../bin/sdcclib -a $(PORTDIR)/liblong.lib $(OBJECTS_LONG)
348 ../../bin/sdcclib -a $(PORTDIR)/libsdcc.lib $(OBJECTS_SDCC)
349 else ifeq ($(LIB_TYPE), AR)
350 ar -Scq $(PORTDIR)/libfloat.lib $(OBJECTS_FLOAT)
351 ar -Scq $(PORTDIR)/libint.lib $(OBJECTS_INT)
352 ar -Scq $(PORTDIR)/liblong.lib $(OBJECTS_LONG)
353 ar -Scq $(PORTDIR)/libsdcc.lib $(OBJECTS_SDCC)
354 else ifeq ($(LIB_TYPE), RANLIB)
355 ar -Scq $(PORTDIR)/libfloat.lib $(OBJECTS_FLOAT); $(top_builddir)/bin/asranlib $(PORTDIR)/libfloat.lib
356 ar -Scq $(PORTDIR)/libint.lib $(OBJECTS_INT); $(top_builddir)/bin/asranlib $(PORTDIR)/libint.lib
357 ar -Scq $(PORTDIR)/liblong.lib $(OBJECTS_LONG); $(top_builddir)/bin/asranlib $(PORTDIR)/liblong.lib
358 ar -Scq $(PORTDIR)/libsdcc.lib $(OBJECTS_SDCC); $(top_builddir)/bin/asranlib $(PORTDIR)/libsdcc.lib
360 rm -f $(PORTDIR)/libfloat.lib
361 for i in $(notdir $(basename $(OBJECTS_FLOAT))); do echo $$i >> $(PORTDIR)/libfloat.lib; done
362 cp $(OBJECTS_FLOAT) $(PORTDIR)
363 rm -f $(PORTDIR)/libint.lib
364 for i in $(notdir $(basename $(OBJECTS_INT))); do echo $$i >> $(PORTDIR)/libint.lib; done
365 cp $(OBJECTS_INT) $(PORTDIR)
366 rm -f $(PORTDIR)/liblong.lib
367 for i in $(notdir $(basename $(OBJECTS_LONG))); do echo $$i >> $(PORTDIR)/liblong.lib; done
368 cp $(OBJECTS_LONG) $(PORTDIR)
369 rm -f $(PORTDIR)/libsdcc.lib
370 for i in $(notdir $(basename $(OBJECTS_SDCC))); do echo $$i >> $(PORTDIR)/libsdcc.lib; done
371 cp $(OBJECTS_SDCC) $(PORTDIR)
375 rm -f $(PORTDIR)/*.lst $(PORTDIR)/*.sym
377 clean_intermediate-pic16:
378 $(MAKE) -C $(PORT) clean-intermediate
380 clean_intermediate-pic14:
381 $(MAKE) -C $(PORT) clean-intermediate
383 # Compiling and installing everything and runing test
384 # ---------------------------------------------------
385 install: all installdirs
386 $(CP_U) -r $(BUILDDIR)/* $(sdcc_libdir)
387 $(CP_U) -r $(MODELS) $(srcdir)/mcs51 $(srcdir)/ds390 $(srcdir)/ds400 \
388 $(srcdir)/gbz80 $(srcdir)/z80 $(srcdir)/hc08 \
389 $(srcdir)/pic $(srcdir)/pic16 $(srcdir)/*.c $(sdcc_libdir)/src
390 $(CP_U) -r $(MODELS) mcs51 ds390 ds400 gbz80 z80 hc08 $(sdcc_libdir)/src
392 for src in $(MODELS) ds390 ds400 gbz80 z80 hc08 pic pic16; do \
393 find $(sdcc_libdir)/src/$$src -depth \
394 \( -name '*.rel' -o -name '*.dump*' -o -name '*.sym' -o -name '*.o' -o -name '*.lib' -o \
395 -name '*.lst' -o -name '*.asm' -o -name '.svn' -o -name 'autom4te.cache' -o \
396 -name 'build' -o -name 'bin' -o -name 'Makefile*' -o -name 'config*' -o \
397 -name 'depcomp' -o -name 'missing' -o -name 'install-sh' -o \
398 -name 'bootstrap.sh' \) \
399 -exec rm -rf {} + ; \
401 find $(sdcc_libdir)/src/mcs51 -depth \
402 \( -name '*.rel' -o -name '*.dump*' -o -name '*.sym' -o -name '*.o' -o -name '*.lib' -o \
403 -name '*.lst' -o -name '.svn' -o -name 'build' -o -name 'bin' -o \
404 -name 'Makefile*' \) \
407 # Deleting all the installed files
408 # --------------------------------
410 rm -rf $(sdcc_libdir)
412 # Performing self-test
413 # --------------------
417 # Performing installation test
418 # ----------------------------
422 # Creating installation directories
423 # ---------------------------------
425 [ -d $(sdcc_libdir) ] || mkdir -p $(sdcc_libdir)
426 for model in $(MODELS); do \
427 [ -d $(sdcc_libdir)/$$model ] || \
428 mkdir -p $(sdcc_libdir)/$$model; \
430 for libdir in small-stack-auto ds390 ds400 hc08 pic16 pic; do \
431 [ -d $(sdcc_libdir)/$$libdir ] || mkdir -p $(sdcc_libdir)/$$libdir; \
433 mkdir -p $(sdcc_libdir)/src
435 # Creating dependencies
436 # ---------------------
439 Makefile.dep: $(SOURCES) $(INCDIR)/*.h $(PORTINCDIR)/*.h
441 for i in $(filter %.c,$^); do \
442 $(CPP) -std=c99 -M $(CPPFLAGS) $$i >$${i}.dep; \
443 cat $${i}.dep >>Makefile.dep; \
447 ifeq "$(findstring $(MAKECMDGOALS),uninstall check installcheck installdirs checkconf \
448 clean distclean mostlyclean realclean)" ""
449 -include Makefile.dep
451 include $(srcdir)/clean.mk
458 $(PORT)/%$(OEXT): %.c
459 $(CC) $(CPPFLAGS) $(CFLAGS) -c $< -o $@
461 # Remaking configuration
462 # ----------------------
464 @if [ -f $(top_builddir)/devel ]; then\
465 $(MAKE) -f $(srcdir)/conf.mk srcdir="$(srcdir)" top_builddir="$(top_builddir)" \
469 # End of main_in.mk/main.mk