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 MODELFLAGS="--model-$$model --stack-auto --xstack"; \
226 if test "$$model" = "large"; then MODELFLAGS="$$MODELFLAGS -DUSE_FLOATS=1"; fi; \
227 $(MAKE) MODELFLAGS="$$MODELFLAGS" PORT=$${model}-xstack-auto PORTDIR=$(abspath $(BUILDDIR)/$${model}-xstack-auto) PORTINCDIR=$(INCDIR)/mcs51 objects; \
232 if grep '^ds390\>' $(top_builddir)/ports.build > /dev/null; then \
233 $(MAKE) MODELFLAGS="-mds390" PORT=ds390 PORTINCDIR=$(INCDIR)/mcs51 objects; \
237 if grep '^ds400\>' $(top_builddir)/ports.build > /dev/null; then \
238 $(MAKE) MODELFLAGS="-mds400" PORT=ds400 PORTINCDIR=$(INCDIR)/mcs51 objects; \
242 if grep '^xa51\>' $(top_builddir)/ports.build > /dev/null; then \
243 $(MAKE) MODELFLAGS="-mxa51" PORT=xa51 objects-xa51; \
246 objects-xa51: build-dir $(XA51OBJECTS) port-specific-objects
248 $(PORTDIR)/lib$(PORT).lib: $(XA51OBJECTS)
249 ifeq ($(LIB_TYPE), SDCCLIB)
250 ../../bin/sdcclib -a $(PORTDIR)/lib$(PORT).lib $(XA51OBJECTS)
251 else ifeq ($(LIB_TYPE), AR)
252 ar -Sq $(PORTDIR)/lib$(PORT).lib $(XA51OBJECTS)
253 else ifeq ($(LIB_TYPE), RANLIB)
254 ar -Sq $(PORTDIR)/lib$(PORT).lib $(XA51OBJECTS)
255 $(top_builddir)/bin/asranlib $(PORTDIR)/lib$(PORT).lib
257 rm -f $(PORTDIR)/lib$(PORT).lib
258 for i in $(notdir $(basename $(XA51OBJECTS))); do echo $$i >> $(PORTDIR)/lib$(PORT).lib; done
259 cp $(XA51OBJECTS) $(PORTDIR)
263 if grep '^z80\>' $(top_builddir)/ports.build > /dev/null; then \
264 $(MAKE) MODELFLAGS="-mz80" PORT=z80 objects-z80 OEXT=.o; \
268 if grep '^z80\>' $(top_builddir)/ports.build > /dev/null; then \
269 $(MAKE) MODELFLAGS="-mgbz80" PORT=gbz80 objects-z80 OEXT=.o; \
272 objects-z80: build-dir port-specific-objects clean_intermediate
275 if grep '^hc08\>' $(top_builddir)/ports.build > /dev/null; then \
276 $(MAKE) MODELFLAGS="-mhc08" PORT=hc08 objects-hc08; \
279 objects-hc08: build-dir port-specific-objects clean_intermediate
282 if grep '^pic16\>' $(top_builddir)/ports.build > /dev/null; then \
283 $(MAKE) PORT=pic16 objects-pic16; \
286 objects-pic16: build-dir port-specific-objects-pic16 clean_intermediate-pic16
289 if grep '^pic\>' $(top_builddir)/ports.build > /dev/null; then \
290 $(MAKE) PORT=pic objects-pic14; \
293 objects-pic14: build-dir port-specific-objects-pic14 clean_intermediate-pic14
295 build-dir: $(PORTDIR) $(PORT)
303 port-specific-objects:
304 ifneq ($(LIB_TYPE), LIB)
305 -if [ -f $(PORT)/Makefile ]; then \
306 $(MAKE) -C $(PORT) PORT=$(PORT); \
309 -if [ -f $(PORT)/Makefile ]; then \
310 $(MAKE) -C $(PORT) PORT=$(PORT); \
314 port-specific-objects-pic16:
315 -if [ -f $(PORT)/Makefile ]; then \
316 $(MAKE) -C $(PORT); \
317 for i in $(PORT)/*/lib*.a; do cp -f $$i $(PORTDIR)/$$(basename $$i .a).lib; done; \
318 cp -f $(PORT)/*/crt0*.o $(PORTDIR); \
321 port-specific-objects-pic14:
322 -if [ -f $(PORT)/Makefile ]; then \
323 mkdir -p $(PORT)/bin; \
324 $(MAKE) -C $(PORT); \
325 cp -f $(PORT)/bin/*.* $(PORTDIR); \
328 $(LIB_FILES): $(OBJECTS_FLOAT) $(OBJECTS_INT) $(OBJECTS_LONG) $(OBJECTS_SDCC)
329 ifeq ($(LIB_TYPE), SDCCLIB)
330 ../../bin/sdcclib -a $(PORTDIR)/libfloat.lib $(OBJECTS_FLOAT)
331 ../../bin/sdcclib -a $(PORTDIR)/libint.lib $(OBJECTS_INT)
332 ../../bin/sdcclib -a $(PORTDIR)/liblong.lib $(OBJECTS_LONG)
333 ../../bin/sdcclib -a $(PORTDIR)/libsdcc.lib $(OBJECTS_SDCC)
334 else ifeq ($(LIB_TYPE), AR)
335 ar -Scq $(PORTDIR)/libfloat.lib $(OBJECTS_FLOAT)
336 ar -Scq $(PORTDIR)/libint.lib $(OBJECTS_INT)
337 ar -Scq $(PORTDIR)/liblong.lib $(OBJECTS_LONG)
338 ar -Scq $(PORTDIR)/libsdcc.lib $(OBJECTS_SDCC)
339 else ifeq ($(LIB_TYPE), RANLIB)
340 ar -Scq $(PORTDIR)/libfloat.lib $(OBJECTS_FLOAT); $(top_builddir)/bin/asranlib $(PORTDIR)/libfloat.lib
341 ar -Scq $(PORTDIR)/libint.lib $(OBJECTS_INT); $(top_builddir)/bin/asranlib $(PORTDIR)/libint.lib
342 ar -Scq $(PORTDIR)/liblong.lib $(OBJECTS_LONG); $(top_builddir)/bin/asranlib $(PORTDIR)/liblong.lib
343 ar -Scq $(PORTDIR)/libsdcc.lib $(OBJECTS_SDCC); $(top_builddir)/bin/asranlib $(PORTDIR)/libsdcc.lib
345 rm -f $(PORTDIR)/libfloat.lib
346 for i in $(notdir $(basename $(OBJECTS_FLOAT))); do echo $$i >> $(PORTDIR)/libfloat.lib; done
347 cp $(OBJECTS_FLOAT) $(PORTDIR)
348 rm -f $(PORTDIR)/libint.lib
349 for i in $(notdir $(basename $(OBJECTS_INT))); do echo $$i >> $(PORTDIR)/libint.lib; done
350 cp $(OBJECTS_INT) $(PORTDIR)
351 rm -f $(PORTDIR)/liblong.lib
352 for i in $(notdir $(basename $(OBJECTS_LONG))); do echo $$i >> $(PORTDIR)/liblong.lib; done
353 cp $(OBJECTS_LONG) $(PORTDIR)
354 rm -f $(PORTDIR)/libsdcc.lib
355 for i in $(notdir $(basename $(OBJECTS_SDCC))); do echo $$i >> $(PORTDIR)/libsdcc.lib; done
356 cp $(OBJECTS_SDCC) $(PORTDIR)
360 rm -f $(PORTDIR)/*.lst $(PORTDIR)/*.sym
362 clean_intermediate-pic16:
363 $(MAKE) -C $(PORT) clean-intermediate
365 clean_intermediate-pic14:
366 $(MAKE) -C $(PORT) clean-intermediate
368 # Compiling and installing everything and runing test
369 # ---------------------------------------------------
370 install: all installdirs
371 $(CP_U) -r $(BUILDDIR)/* $(sdcc_libdir)
372 $(CP_U) -r $(MODELS) $(srcdir)/mcs51 $(srcdir)/ds390 $(srcdir)/ds400 \
373 $(srcdir)/gbz80 $(srcdir)/z80 $(srcdir)/hc08 \
374 $(srcdir)/pic $(srcdir)/pic16 $(srcdir)/*.c $(sdcc_libdir)/src
375 $(CP_U) -r $(MODELS) mcs51 ds390 ds400 gbz80 z80 hc08 $(sdcc_libdir)/src
377 for src in $(MODELS) ds390 ds400 gbz80 z80 hc08 pic pic16; do \
378 find $(sdcc_libdir)/src/$$src -depth \
379 \( -name '*.rel' -o -name '*.dump*' -o -name '*.sym' -o -name '*.o' -o -name '*.lib' -o \
380 -name '*.lst' -o -name '*.asm' -o -name '.svn' -o -name 'autom4te.cache' -o \
381 -name 'build' -o -name 'bin' -o -name 'Makefile*' -o -name 'config*' -o \
382 -name 'depcomp' -o -name 'missing' -o -name 'install-sh' -o \
383 -name 'bootstrap.sh' \) \
384 -exec rm -rf {} + ; \
386 find $(sdcc_libdir)/src/mcs51 -depth \
387 \( -name '*.rel' -o -name '*.dump*' -o -name '*.sym' -o -name '*.o' -o -name '*.lib' -o \
388 -name '*.lst' -o -name '.svn' -o -name 'build' -o -name 'bin' -o \
389 -name 'Makefile*' \) \
392 # Deleting all the installed files
393 # --------------------------------
395 rm -rf $(sdcc_libdir)
397 # Performing self-test
398 # --------------------
402 # Performing installation test
403 # ----------------------------
407 # Creating installation directories
408 # ---------------------------------
410 [ -d $(sdcc_libdir) ] || mkdir -p $(sdcc_libdir)
411 for model in $(MODELS); do \
412 [ -d $(sdcc_libdir)/$$model ] || \
413 mkdir -p $(sdcc_libdir)/$$model; \
415 for libdir in small-stack-auto ds390 ds400 hc08 pic16 pic; do \
416 [ -d $(sdcc_libdir)/$$libdir ] || mkdir -p $(sdcc_libdir)/$$libdir; \
418 mkdir -p $(sdcc_libdir)/src
420 # Creating dependencies
421 # ---------------------
424 Makefile.dep: $(SOURCES) $(INCDIR)/*.h $(PORTINCDIR)/*.h
426 for i in $(filter %.c,$^); do \
427 $(CPP) -std=c99 -M $(CPPFLAGS) $$i >$${i}.dep; \
428 cat $${i}.dep >>Makefile.dep; \
432 ifeq "$(findstring $(MAKECMDGOALS),uninstall check installcheck installdirs checkconf \
433 clean distclean mostlyclean realclean)" ""
434 -include Makefile.dep
436 include $(srcdir)/clean.mk
443 $(PORT)/%$(OEXT): %.c
444 $(CC) $(CPPFLAGS) $(CFLAGS) -c $< -o $@
446 # Remaking configuration
447 # ----------------------
449 @if [ -f $(top_builddir)/devel ]; then\
450 $(MAKE) -f $(srcdir)/conf.mk srcdir="$(srcdir)" top_builddir="$(top_builddir)" \
454 # End of main_in.mk/main.mk