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 # ------------------------------------------
203 $(MAKE) port-specific-objects
205 $(MAKE) clean_intermediate
208 if grep '^mcs51\>' $(top_builddir)/ports.build > /dev/null; then \
209 for model in $(MODELS); do \
210 $(MAKE) MODELFLAGS="--model-$$model" PORT=$$model PORTINCDIR=$(INCDIR)/mcs51 objects; \
214 small-mcs51-stack-auto:
215 if grep '^mcs51\>' $(top_builddir)/ports.build > /dev/null; then \
216 mkdir -p small-stack-auto; cp small/Makefile small-stack-auto; \
217 $(MAKE) MODELFLAGS="--model-small --stack-auto" PORT=small-stack-auto PORTDIR=$(abspath $(BUILDDIR)/small-stack-auto) PORTINCDIR=$(INCDIR)/mcs51 objects; \
220 model-mcs51-stack-auto:
221 if grep '^mcs51\>' $(top_builddir)/ports.build > /dev/null; then \
222 for model in $(MODELS); do \
223 mkdir -p $${model}-stack-auto; cp $${model}/Makefile $${model}-stack-auto; \
224 $(MAKE) MODELFLAGS="--model-$$model --stack-auto" PORT=$${model}-stack-auto PORTDIR=$(abspath $(BUILDDIR)/$${model}-stack-auto) PORTINCDIR=$(INCDIR)/mcs51 objects; \
228 model-mcs51-xstack-auto:
229 if grep '^mcs51\>' $(top_builddir)/ports.build > /dev/null; then \
230 for model in $(MODELS); do \
231 mkdir -p $${model}-xstack-auto; cp $${model}/Makefile $${model}-xstack-auto; \
232 $(MAKE) MODELFLAGS="--model-$$model --stack-auto --xstack -DUSE_FLOATS=1" PORT=$${model}-xstack-auto PORTDIR=$(abspath $(BUILDDIR)/$${model}-xstack-auto) PORTINCDIR=$(INCDIR)/mcs51 objects; \
237 if grep '^ds390\>' $(top_builddir)/ports.build > /dev/null; then \
238 $(MAKE) MODELFLAGS="-mds390" PORT=ds390 PORTINCDIR=$(INCDIR)/mcs51 objects; \
242 if grep '^ds400\>' $(top_builddir)/ports.build > /dev/null; then \
243 $(MAKE) MODELFLAGS="-mds400" PORT=ds400 PORTINCDIR=$(INCDIR)/mcs51 objects; \
247 if grep '^xa51\>' $(top_builddir)/ports.build > /dev/null; then \
248 $(MAKE) MODELFLAGS="-mxa51" PORT=xa51 objects-xa51; \
253 $(MAKE) $(XA51OBJECTS)
254 $(MAKE) port-specific-objects
256 $(PORTDIR)/lib$(PORT).lib: $(XA51OBJECTS)
257 ifeq ($(LIB_TYPE), SDCCLIB)
258 ../../bin/sdcclib -a $(PORTDIR)/lib$(PORT).lib $(XA51OBJECTS)
259 else ifeq ($(LIB_TYPE), AR)
260 ar -Sq $(PORTDIR)/lib$(PORT).lib $(XA51OBJECTS)
261 else ifeq ($(LIB_TYPE), RANLIB)
262 ar -Sq $(PORTDIR)/lib$(PORT).lib $(XA51OBJECTS)
263 $(top_builddir)/bin/asranlib $(PORTDIR)/lib$(PORT).lib
265 rm -f $(PORTDIR)/lib$(PORT).lib
266 for i in $(notdir $(basename $(XA51OBJECTS))); do echo $$i >> $(PORTDIR)/lib$(PORT).lib; done
267 cp $(XA51OBJECTS) $(PORTDIR)
271 if grep '^z80\>' $(top_builddir)/ports.build > /dev/null; then \
272 $(MAKE) MODELFLAGS="-mz80" PORT=z80 objects-z80 OEXT=.o; \
276 if grep '^z80\>' $(top_builddir)/ports.build > /dev/null; then \
277 $(MAKE) MODELFLAGS="-mgbz80" PORT=gbz80 objects-z80 OEXT=.o; \
282 $(MAKE) port-specific-objects
283 $(MAKE) clean_intermediate
286 if grep '^hc08\>' $(top_builddir)/ports.build > /dev/null; then \
287 $(MAKE) MODELFLAGS="-mhc08" PORT=hc08 objects-hc08; \
292 $(MAKE) port-specific-objects
293 $(MAKE) clean_intermediate
296 if grep '^pic16\>' $(top_builddir)/ports.build > /dev/null; then \
297 $(MAKE) PORT=pic16 objects-pic16; \
302 $(MAKE) port-specific-objects-pic16
303 $(MAKE) clean_intermediate-pic16
306 if grep '^pic\>' $(top_builddir)/ports.build > /dev/null; then \
307 $(MAKE) PORT=pic objects-pic14; \
312 $(MAKE) port-specific-objects-pic14
313 $(MAKE) clean_intermediate-pic14
325 port-specific-objects:
326 ifneq ($(LIB_TYPE), LIB)
327 -if [ -f $(PORT)/Makefile ]; then \
328 $(MAKE) -C $(PORT) PORT=$(PORT); \
331 -if [ -f $(PORT)/Makefile ]; then \
332 $(MAKE) -C $(PORT) PORT=$(PORT); \
336 port-specific-objects-pic16:
337 -if [ -f $(PORT)/Makefile ]; then \
338 $(MAKE) -C $(PORT); \
339 for i in $(PORT)/*/lib*.a; do cp -f $$i $(PORTDIR)/$$(basename $$i .a).lib; done; \
340 cp -f $(PORT)/*/crt0*.o $(PORTDIR); \
343 port-specific-objects-pic14:
344 -if [ -f $(PORT)/Makefile ]; then \
345 mkdir -p $(PORT)/bin; \
346 $(MAKE) -C $(PORT); \
347 cp -f $(PORT)/bin/*.* $(PORTDIR); \
350 $(LIB_FILES): $(OBJECTS_FLOAT) $(OBJECTS_INT) $(OBJECTS_LONG) $(OBJECTS_SDCC)
351 ifeq ($(LIB_TYPE), SDCCLIB)
352 ../../bin/sdcclib -a $(PORTDIR)/libfloat.lib $(OBJECTS_FLOAT)
353 ../../bin/sdcclib -a $(PORTDIR)/libint.lib $(OBJECTS_INT)
354 ../../bin/sdcclib -a $(PORTDIR)/liblong.lib $(OBJECTS_LONG)
355 ../../bin/sdcclib -a $(PORTDIR)/libsdcc.lib $(OBJECTS_SDCC)
356 else ifeq ($(LIB_TYPE), AR)
357 ar -Scq $(PORTDIR)/libfloat.lib $(OBJECTS_FLOAT)
358 ar -Scq $(PORTDIR)/libint.lib $(OBJECTS_INT)
359 ar -Scq $(PORTDIR)/liblong.lib $(OBJECTS_LONG)
360 ar -Scq $(PORTDIR)/libsdcc.lib $(OBJECTS_SDCC)
361 else ifeq ($(LIB_TYPE), RANLIB)
362 ar -Scq $(PORTDIR)/libfloat.lib $(OBJECTS_FLOAT); $(top_builddir)/bin/asranlib $(PORTDIR)/libfloat.lib
363 ar -Scq $(PORTDIR)/libint.lib $(OBJECTS_INT); $(top_builddir)/bin/asranlib $(PORTDIR)/libint.lib
364 ar -Scq $(PORTDIR)/liblong.lib $(OBJECTS_LONG); $(top_builddir)/bin/asranlib $(PORTDIR)/liblong.lib
365 ar -Scq $(PORTDIR)/libsdcc.lib $(OBJECTS_SDCC); $(top_builddir)/bin/asranlib $(PORTDIR)/libsdcc.lib
367 rm -f $(PORTDIR)/libfloat.lib
368 for i in $(notdir $(basename $(OBJECTS_FLOAT))); do echo $$i >> $(PORTDIR)/libfloat.lib; done
369 cp $(OBJECTS_FLOAT) $(PORTDIR)
370 rm -f $(PORTDIR)/libint.lib
371 for i in $(notdir $(basename $(OBJECTS_INT))); do echo $$i >> $(PORTDIR)/libint.lib; done
372 cp $(OBJECTS_INT) $(PORTDIR)
373 rm -f $(PORTDIR)/liblong.lib
374 for i in $(notdir $(basename $(OBJECTS_LONG))); do echo $$i >> $(PORTDIR)/liblong.lib; done
375 cp $(OBJECTS_LONG) $(PORTDIR)
376 rm -f $(PORTDIR)/libsdcc.lib
377 for i in $(notdir $(basename $(OBJECTS_SDCC))); do echo $$i >> $(PORTDIR)/libsdcc.lib; done
378 cp $(OBJECTS_SDCC) $(PORTDIR)
382 rm -f $(PORTDIR)/*.lst $(PORTDIR)/*.sym
384 clean_intermediate-pic16:
385 $(MAKE) -C $(PORT) clean-intermediate
387 clean_intermediate-pic14:
388 $(MAKE) -C $(PORT) clean-intermediate
390 # Compiling and installing everything and runing test
391 # ---------------------------------------------------
392 install: all installdirs
393 $(CP_U) -r $(BUILDDIR)/* $(sdcc_libdir)
394 $(CP_U) -r $(MODELS) $(srcdir)/mcs51 $(srcdir)/ds390 $(srcdir)/ds400 \
395 $(srcdir)/gbz80 $(srcdir)/z80 $(srcdir)/hc08 \
396 $(srcdir)/pic $(srcdir)/pic16 $(srcdir)/*.c $(sdcc_libdir)/src
397 $(CP_U) -r $(MODELS) mcs51 ds390 ds400 gbz80 z80 hc08 $(sdcc_libdir)/src
399 for src in $(MODELS) ds390 ds400 gbz80 z80 hc08 pic pic16; do \
400 find $(sdcc_libdir)/src/$$src -depth \
401 \( -name '*.rel' -o -name '*.dump*' -o -name '*.sym' -o -name '*.o' -o -name '*.lib' -o \
402 -name '*.lst' -o -name '*.asm' -o -name '.svn' -o -name 'autom4te.cache' -o \
403 -name 'build' -o -name 'bin' -o -name 'Makefile*' -o -name 'config*' -o \
404 -name 'depcomp' -o -name 'missing' -o -name 'install-sh' -o \
405 -name 'bootstrap.sh' \) \
406 -exec rm -rf {} + ; \
408 find $(sdcc_libdir)/src/mcs51 -depth \
409 \( -name '*.rel' -o -name '*.dump*' -o -name '*.sym' -o -name '*.o' -o -name '*.lib' -o \
410 -name '*.lst' -o -name '.svn' -o -name 'build' -o -name 'bin' -o \
411 -name 'Makefile*' \) \
414 # Deleting all the installed files
415 # --------------------------------
417 rm -rf $(sdcc_libdir)
419 # Performing self-test
420 # --------------------
424 # Performing installation test
425 # ----------------------------
429 # Creating installation directories
430 # ---------------------------------
432 [ -d $(sdcc_libdir) ] || mkdir -p $(sdcc_libdir)
433 for model in $(MODELS); do \
434 [ -d $(sdcc_libdir)/$$model ] || \
435 mkdir -p $(sdcc_libdir)/$$model; \
437 for libdir in small-stack-auto ds390 ds400 hc08 pic16 pic; do \
438 [ -d $(sdcc_libdir)/$$libdir ] || mkdir -p $(sdcc_libdir)/$$libdir; \
440 mkdir -p $(sdcc_libdir)/src
442 # Creating dependencies
443 # ---------------------
446 Makefile.dep: $(SOURCES) $(INCDIR)/*.h $(PORTINCDIR)/*.h
448 for i in $(filter %.c,$^); do \
449 $(CPP) -std=c99 -M $(CPPFLAGS) $$i >$${i}.dep; \
450 cat $${i}.dep >>Makefile.dep; \
454 ifeq "$(findstring $(MAKECMDGOALS),uninstall check installcheck installdirs checkconf \
455 clean distclean mostlyclean realclean)" ""
456 -include Makefile.dep
458 include $(srcdir)/clean.mk
465 $(PORT)/%$(OEXT): %.c
466 $(CC) $(CPPFLAGS) $(CFLAGS) -c $< -o $@
468 # Remaking configuration
469 # ----------------------
471 @if [ -f $(top_builddir)/devel ]; then\
472 $(MAKE) -f $(srcdir)/conf.mk srcdir="$(srcdir)" top_builddir="$(top_builddir)" \
476 # End of main_in.mk/main.mk