OPT_DISABLE_XA51 = @OPT_DISABLE_XA51@
OPT_DISABLE_Z80 = @OPT_DISABLE_Z80@
-COMMON_FLOAT = \
- _atof.c \
- _schar2fs.c \
- _sint2fs.c \
- _slong2fs.c \
- _uchar2fs.c \
- _uint2fs.c \
- _ulong2fs.c \
- _fs2schar.c \
- _fs2sint.c \
- _fs2slong.c \
- _fs2uchar.c \
- _fs2uint.c \
- _fs2ulong.c \
- _fsadd.c \
- _fsdiv.c \
- _fsmul.c \
- _fssub.c \
- _fseq.c \
- _fsgt.c \
- _fslt.c \
- _fsneq.c \
- fabsf.c \
- frexpf.c \
- ldexpf.c \
- expf.c \
- powf.c \
- sincosf.c \
- sinf.c \
- cosf.c \
- logf.c \
- log10f.c \
- sqrtf.c \
- tancotf.c \
- tanf.c \
- cotf.c \
- asincosf.c \
- asinf.c \
- acosf.c \
- atanf.c \
- atan2f.c \
- sincoshf.c \
- sinhf.c \
- coshf.c \
- tanhf.c \
- floorf.c \
- ceilf.c \
- modff.c \
- errno.c
-
-COMMON_LONG = \
- _divslong.c \
- _modslong.c \
- _modulong.c
-
-COMMON_SDCC = \
- _atoi.c \
- _atol.c \
- abs.c \
- labs.c \
- rand.c \
- _iscntrl.c \
- _isdigit.c \
- _isgraph.c \
- _isprint.c \
- _ispunct.c \
- _isspace.c \
- _islower.c \
- _isupper.c \
- _isxdigit.c \
- _strcat.c \
- _strchr.c \
- _strcmp.c \
- _strcpy.c \
- _strcspn.c \
- _strncat.c \
- _strncmp.c \
- _strncpy.c \
- _strpbrk.c \
- _strrchr.c \
- _strspn.c \
- _strstr.c \
- _strtok.c \
- _memcmp.c \
- _memcpy.c \
- _memset.c \
- _calloc.c \
- _malloc.c \
- _realloc.c \
- _free.c \
- printf_large.c \
- puts.c \
- gets.c \
- assert.c \
- time.c
-
SOURCES_FLOAT = $(COMMON_FLOAT) \
_fscmp.c \
_fsget1arg.c \
OBJECTS = $(OBJECTS_FLOAT) $(OBJECTS_INT) $(OBJECTS_LONG) $(OBJECTS_SDCC)
-Z80_FLOAT = $(COMMON_FLOAT)
-
-Z80_INT = $(COMMON_INT)
-
-Z80_LONG = $(COMMON_LONG) \
- _divulong.c \
- _mullong.c
-
-Z80_SDCC = $(COMMON_SDCC) \
- _itoa.c \
- _ltoa.c \
- _startup.c \
- sprintf.c \
- vprintf.c
-
-Z80SOURCES = $(Z80_FLOAT) $(Z80_INT) $(Z80_LONG) $(Z80_SDCC)
-Z80OBJECTS = $(Z80SOURCES:%.c=$(PORT)/%.o)
-
XA51_FLOAT = $(COMMON_FLOAT)
XA51_INT = $(COMMON_INT) \
_strlen.c \
_heap.c
-XA51SOURCES = $(Z80_FLOAT) $(XA51_INT) $(XA51_LONG) $(XA51_SDCC)
+XA51SOURCES = $(XA51_FLOAT) $(XA51_INT) $(XA51_LONG) $(XA51_SDCC)
XA51OBJECTS = $(XA51SOURCES:%.c=$(PORT)/%.rel)
-HC08_FLOAT = $(COMMON_FLOAT)
-
-HC08_INT = $(COMMON_INT) \
- _divsint.c \
- _modsint.c \
- _moduint.c
-
-HC08_LONG = $(COMMON_LONG)
-
-HC08_SDCC = $(COMMON_SDCC) \
- _itoa.c \
- _ltoa.c \
- _spx.c \
- _startup.c \
- _strlen.c \
- _memmove.c \
- _heap.c \
- sprintf.c \
- vprintf.c
-
-HC08SOURCES = $(HC08_FLOAT) $(HC08_INT) $(HC08_LONG) $(HC08_SDCC)
-HC08OBJECTS = $(patsubst %.c,$(PORT)/%.rel,$(HC08SOURCES))
+ifeq ($(LIB_TYPE), SDCCLIB)
+LIB_FILES = $(PORTDIR)/libfloat.lib $(PORTDIR)/libint.lib $(PORTDIR)/liblong.lib $(PORTDIR)/libsdcc.lib
+else ifeq ($(LIB_TYPE), AR)
+LIB_FILES = $(PORTDIR)/libfloat.lib $(PORTDIR)/libint.lib $(PORTDIR)/liblong.lib $(PORTDIR)/libsdcc.lib
+else ifeq ($(LIB_TYPE), RANLIB)
+LIB_FILES = $(PORTDIR)/libfloat.lib $(PORTDIR)/libint.lib $(PORTDIR)/liblong.lib $(PORTDIR)/libsdcc.lib
+else
+LIB_FILES = $($(OBJECTS_FLOAT) $(OBJECTS_INT) $(OBJECTS_LONG) $(OBJECTS_SDCC) $(PORTDIR)/libfloat.lib $(PORTDIR)/libint.lib $(PORTDIR)/liblong.lib $(PORTDIR)/libsdcc.lib
+endif
OEXT = .rel
# ------------------------------------------
all: checkconf $(TARGETS)
-objects: build-dir $(OBJECTS) port-specific-objects lib-files clean_intermediate
+objects: build-dir $(OBJECTS) port-specific-objects $(LIB_FILES) clean_intermediate
models:
if grep '^mcs51\>' $(top_builddir)/ports.build > /dev/null; then \
model-mcs51-stack-auto:
if grep '^mcs51\>' $(top_builddir)/ports.build > /dev/null; then \
for model in $(MODELS); do \
- mkdir -p $${model}-stack-auto; cp $${model}/Makefile $${model}-stack-auto; \
+ mkdir -p $${model}-stack-auto; cp $${model}/Makefile $${model}-stack-auto; \
$(MAKE) MODELFLAGS="--model-$$model --stack-auto" PORT=$${model}-stack-auto PORTDIR=$(abspath $(BUILDDIR)/$${model}-stack-auto) PORTINCDIR=$(INCDIR)/mcs51 objects; \
done \
fi
if grep '^mcs51\>' $(top_builddir)/ports.build > /dev/null; then \
for model in $(MODELS); do \
mkdir -p $${model}-xstack-auto; cp $${model}/Makefile $${model}-xstack-auto; \
- $(MAKE) MODELFLAGS="--model-$$model --stack-auto --xstack" PORT=$${model}-xstack-auto PORTDIR=$(abspath $(BUILDDIR)/$${model}-xstack-auto) PORTINCDIR=$(INCDIR)/mcs51 objects; \
+ MODELFLAGS="--model-$$model --stack-auto --xstack"; \
+ if test "$$model" = "large"; then MODELFLAGS="$$MODELFLAGS -DUSE_FLOATS=1"; fi; \
+ $(MAKE) MODELFLAGS="$$MODELFLAGS" PORT=$${model}-xstack-auto PORTDIR=$(abspath $(BUILDDIR)/$${model}-xstack-auto) PORTINCDIR=$(INCDIR)/mcs51 objects; \
done \
fi
fi
objects-xa51: build-dir $(XA51OBJECTS) port-specific-objects
+
+$(PORTDIR)/lib$(PORT).lib: $(XA51OBJECTS)
ifeq ($(LIB_TYPE), SDCCLIB)
../../bin/sdcclib -a $(PORTDIR)/lib$(PORT).lib $(XA51OBJECTS)
else ifeq ($(LIB_TYPE), AR)
$(MAKE) MODELFLAGS="-mgbz80" PORT=gbz80 objects-z80 OEXT=.o; \
fi
-objects-z80: build-dir $(Z80OBJECTS) port-specific-objects clean_intermediate
-ifeq ($(LIB_TYPE), SDCCLIB)
- ../../bin/sdcclib -a $(PORTDIR)/$(PORT).lib $(Z80OBJECTS)
-else ifeq ($(LIB_TYPE), AR)
- ar -Sq $(PORTDIR)/$(PORT).lib $(Z80OBJECTS)
-else ifeq ($(LIB_TYPE), RANLIB)
- ar -Sq $(PORTDIR)/$(PORT).lib $(Z80OBJECTS)
- $(top_builddir)/bin/asranlib $(PORTDIR)/$(PORT).lib
-else
- rm -f $(PORTDIR)/lib$(PORT).lib
- for i in $(notdir $(basename $(Z80OBJECTS))); do echo $$i >> $(PORTDIR)/lib$(PORT).lib; done
- cp $(Z80OBJECTS) $(PORTDIR)
-endif
+objects-z80: build-dir port-specific-objects clean_intermediate
model-hc08:
if grep '^hc08\>' $(top_builddir)/ports.build > /dev/null; then \
$(MAKE) MODELFLAGS="-mhc08" PORT=hc08 objects-hc08; \
fi
-objects-hc08: build-dir $(HC08OBJECTS) port-specific-objects clean_intermediate
-ifeq ($(LIB_TYPE), SDCCLIB)
- ../../bin/sdcclib -a $(PORTDIR)/$(PORT).lib $(HC08OBJECTS)
-else ifeq ($(LIB_TYPE), AR)
- ar -Sq $(PORTDIR)/$(PORT).lib $(HC08OBJECTS)
-else ifeq ($(LIB_TYPE), RANLIB)
- ar -Sq $(PORTDIR)/$(PORT).lib $(HC08OBJECTS)
- $(top_builddir)/bin/asranlib $(PORTDIR)/$(PORT).lib
-else
- rm -f $(PORTDIR)/lib$(PORT).lib
- for i in $(notdir $(basename $(HC08OBJECTS))); do echo $$i >> $(PORTDIR)/lib$(PORT).lib; done
- cp $(HC08OBJECTS) $(PORTDIR)
-endif
+objects-hc08: build-dir port-specific-objects clean_intermediate
model-pic16:
if grep '^pic16\>' $(top_builddir)/ports.build > /dev/null; then \
cp -f $(PORT)/bin/*.* $(PORTDIR); \
fi
-lib-files:
+$(LIB_FILES): $(OBJECTS_FLOAT) $(OBJECTS_INT) $(OBJECTS_LONG) $(OBJECTS_SDCC)
ifeq ($(LIB_TYPE), SDCCLIB)
../../bin/sdcclib -a $(PORTDIR)/libfloat.lib $(OBJECTS_FLOAT)
../../bin/sdcclib -a $(PORTDIR)/libint.lib $(OBJECTS_INT)
#if defined(INT)
- struct {
- int arg;
- char *fmt;
- char *result;
- } static const cases[]={
- // arg, fmt, result
- {0xab, "%04x", "00ab"},
- {0xffff, "0x%02X", "0xFFFF"},
- {0xffffu, "%u", "65535"},
- {1234, "%+6d", " +1234"},
- {12345, "% d", " 12345"},
- {-1234, "%d", "-1234"},
- {32767, "%8d", " 32767"},
- {1, "%%%d", "%1"},
- {1001, "%08i", "00001001"},
- {101, "%-+8d", "+101 "},
- {01234, "%o(oct)", "1234(oct)"},
-
- // do we want to check these:
- #if defined(SDCC) && !defined(SDCC_z80) && CHECK_B
- {0x4142, "%bc %bx", "\x41 42"}, /* non-std: print as bytes! */
- {0xfffe, "0x%02bX%02bx", "0xFFfe"}, /* non-std: print as bytes! */
- #elif defined(SDCC) && defined(SDCC_z80) && CHECK_B
- {0x4142, "%bc %bx", "\x42 41"}, /* non-std: print as bytes! */
- {0xfffe, "0x%02bX%02bx", "0xFEff"}, /* non-std: print as bytes! */
- #endif
- };
+struct
+{
+ int arg;
+ char *fmt;
+ char *result;
+} static const cases[] = {
+ // arg, fmt, result
+ {0xab, "%04x", "00ab"},
+ {0xffff, "0x%02X", "0xFFFF"},
+ {0xffffu, "%u", "65535"},
+ {1234, "%+6d", " +1234"},
+ {12345, "% d", " 12345"},
+ {-1234, "%d", "-1234"},
+ {32767, "%8d", " 32767"},
+ {1, "%%%d", "%1"},
+ {1001, "%08i", "00001001"},
+ {101, "%-+8d", "+101 "},
+ {01234, "%o(oct)", "1234(oct)"},
+
+ // do we want to check these:
+#if defined(SDCC) && !defined(SDCC_z80) && CHECK_B
+ {0x4142, "%bc %bx", "\x41 42"}, /* non-std: print as bytes! */
+ {0xfffe, "0x%02bX%02bx", "0xFFfe"}, /* non-std: print as bytes! */
+#elif defined(SDCC) && defined(SDCC_z80) && CHECK_B
+ {0x4142, "%bc %bx", "\x42 41"}, /* non-std: print as bytes! */
+ {0xfffe, "0x%02bX%02bx", "0xFEff"}, /* non-std: print as bytes! */
+#endif
+};
#elif defined(LONG)
- struct {
- long arg;
- char *fmt;
- char *result;
- } static const cases[]={
- // arg, fmt, result
- {0x12345678, "0x%lx", "0x12345678"},
- {0x7fffFFFF, "%10lx", " 7fffffff"},
- {0x789abcde, "0x%-10lX", "0x789ABCDE "},
- {0x1000a, "0x%02lX", "0x1000A"},
- {0x80000000, "%lu", "2147483648"},
- {-2147483648, "%li", "-2147483648"},
- {-1234, "%+6ld", " -1234"},
- {012345670123, "%lo(oct)", "12345670123(oct)"},
- {0xffffFFFF, "%lo(oct)", "37777777777(oct)"},
-
- // do we want to check these:
- #if defined(SDCC) && !defined(SDCC_z80) && CHECK_B
- {0xfedcba98, "0x%bX%bX%bx%bx", "0xFEDCba98"}, /* non-std: print as bytes! */
- #elif defined(SDCC) && defined(SDCC_z80) && CHECK_B
- {0xfedcba98, "0x%bX%bX%bx%bx", "0x98BAdcfe"}, /* non-std: print as bytes! */
- #endif
- };
+struct
+{
+ long arg;
+ char *fmt;
+ char *result;
+} static const cases[] = {
+ // arg, fmt, result
+ {0x12345678, "0x%lx", "0x12345678"},
+ {0x7fffFFFF, "%10lx", " 7fffffff"},
+ {0x789abcde, "0x%-10lX", "0x789ABCDE "},
+ {0x1000a, "0x%02lX", "0x1000A"},
+ {0x80000000, "%lu", "2147483648"},
+ {-2147483648, "%li", "-2147483648"},
+ {-1234, "%+6ld", " -1234"},
+ {012345670123, "%lo(oct)", "12345670123(oct)"},
+ {0xffffFFFF, "%lo(oct)", "37777777777(oct)"},
+
+ // do we want to check these:
+#if defined(SDCC) && !defined(SDCC_z80) && CHECK_B
+ {0xfedcba98, "0x%bX%bX%bx%bx", "0xFEDCba98"}, /* non-std: print as bytes! */
+#elif defined(SDCC) && defined(SDCC_z80) && CHECK_B
+ {0xfedcba98, "0x%bX%bX%bx%bx", "0x98BAdcfe"}, /* non-std: print as bytes! */
+#endif
+};
#elif defined(STRING)
- struct {
- char *arg;
- char *fmt;
- char *result;
- } static const cases[]={
- // arg, fmt, result
- {"abcd", "%s", "abcd"},
- {"abcd", "%3s", "abcd"},
- {"abcd", "%5s", " abcd"},
- {"abcd", "%-5s", "abcd "},
- {"abcd", "%.2s", "ab"},
- {"XYZ\\", "%s", "XYZ\x5c"},
- {"ab\x1b\x7f", "%s", "ab\x1b\x7f"},
- {"ab\tcd\n","%s", "ab\tcd\n"},
- };
+struct
+{
+ char *arg;
+ char *fmt;
+ char *result;
+} static const cases[] = {
+ // arg, fmt, result
+ {"abcd", "%s", "abcd"},
+ {"abcd", "%3s", "abcd"},
+ {"abcd", "%5s", " abcd"},
+ {"abcd", "%-5s", "abcd "},
+ {"abcd", "%.2s", "ab"},
+ {"XYZ\\", "%s", "XYZ\x5c"},
+ {"ab\x1b\x7f", "%s", "ab\x1b\x7f"},
+ {"ab\tcd\n", "%s", "ab\tcd\n"},
+};
#elif defined(FLOAT)
- struct {
- float arg;
- char *fmt;
- char *result;
- } static const cases[]={
- // arg, fmt, result
- // ... there should be more ...
- #if defined(SDCC) && !defined(SDCC_ds390)
- {1.0, "%f", "<NO FLOAT>"},
- #else
- {1.0, "%f", "1.000000"},
- {1.96, "%3.1f", "2.0"},
- #endif
- };
+struct
+{
+ float arg;
+ char *fmt;
+ char *result;
+} static const cases[] = {
+ // arg, fmt, result
+ // ... there should be more ...
+#if defined(SDCC) && !defined(SDCC_ds390) && !(defined(SDCC_mcs51) && defined(SDCC_USE_XSTACK))
+ {1.0, "%f", "<NO FLOAT>"},
+#else
+ {1.0, "%f", "1.000000"},
+ {1.96, "%3.1f", "2.0"},
+#endif
+};
#endif
void
-test_snprintf(void)
+test_snprintf (void)
{
- unsigned char buf[32];
- unsigned char i;
-
- memset(buf, 0xfe, sizeof buf); /* cookies all over */
-
- for (i=0; i<sizeof cases / sizeof cases[0]; i++) {
- sprintf(buf,cases[i].fmt,cases[i].arg);
- DEBUG(printf ("Test%d should be: \"%s\" is: \"%s\"\n", i, cases[i].result, buf));
- ASSERT(!strcmp(buf,cases[i].result));
- }
-
- ASSERT(buf[sizeof buf - 10] == 0xfe); /* check for cookie */
+ unsigned char buf[32];
+ unsigned char i;
+
+ memset (buf, 0xfe, sizeof buf); /* cookies all over */
+
+ for (i = 0; i < sizeof cases / sizeof cases[0]; i++)
+ {
+ sprintf (buf, cases[i].fmt, cases[i].arg);
+ DEBUG (printf ("Test%d should be: \"%s\" is: \"%s\"\n", i, cases[i].result, buf));
+ ASSERT (!strcmp (buf, cases[i].result));
+ }
+
+ ASSERT (buf[sizeof buf - 10] == 0xfe); /* check for cookie */
}