diff --git a/py/asmx64.c b/py/asmx64.c index d3158170fb..de34332481 100644 --- a/py/asmx64.c +++ b/py/asmx64.c @@ -1,3 +1,4 @@ +#include #include #include #include diff --git a/py/nlrx86.S b/py/nlrx86.S index 3e2eec7a7b..9bcefeba57 100644 --- a/py/nlrx86.S +++ b/py/nlrx86.S @@ -5,9 +5,14 @@ .text /* uint nlr_push(4(%esp)=nlr_buf_t *nlr) */ +#ifdef __apple_build_version__ .globl nlr_push .type nlr_push, @function nlr_push: +#else + .globl _nlr_push +_nlr_push: +#endif mov 4(%esp), %edx # load nlr_buf mov (%esp), %eax # load return %ip mov %eax, 8(%edx) # store %ip into nlr_buf+8 @@ -21,22 +26,36 @@ nlr_push: mov %edx, nlr_top # stor new nlr_buf (to make linked list) xor %eax, %eax # return 0, normal return ret # return +#ifdef __apple_build_version__ .size nlr_push, .-nlr_push +#endif /* void nlr_pop() */ +#ifdef __apple_build_version__ .globl nlr_pop .type nlr_pop, @function nlr_pop: +#else + .globl _nlr_pop +_nlr_pop: +#endif mov nlr_top, %eax # load nlr_top mov (%eax), %eax # load prev nlr_buf mov %eax, nlr_top # store nlr_top (to unlink list) ret # return +#ifdef __apple_build_version__ .size nlr_pop, .-nlr_pop +#endif /* void nlr_jump(4(%esp)=uint val) */ +#ifdef __apple_build_version__ .globl nlr_jump .type nlr_jump, @function nlr_jump: +#else + .globl _nlr_jump + _nlr_jump: +#endif mov nlr_top, %edx # load nlr_top mov 4(%esp), %eax # load return value mov %eax, 4(%edx) # store return value @@ -52,8 +71,12 @@ nlr_jump: xor %eax, %eax # clear return register inc %al # increase to make 1, non-local return ret # return +#ifdef __apple_build_version__ .size nlr_jump, .-nlr_jump +#endif +#ifdef __apple_build_version__ .local nlr_top +#endif .comm nlr_top,4,4 #endif diff --git a/tests/run-tests b/tests/run-tests index 752138ccc6..ed5a3b20ae 100755 --- a/tests/run-tests +++ b/tests/run-tests @@ -1,55 +1,51 @@ -#!/usr/bin/env bash +#! /usr/bin/env python3.3 -RM="/bin/rm -f" -CPYTHON3=python3.3 -MP_PY=../unix/micropython +import os +import subprocess +import sys +from glob import glob -numtests=0 -numtestcases=0 -numpassed=0 -numfailed=0 -namefailed= +if os.name == 'nt': + CPYTHON3 = 'python3.3.exe' + MP_PY = '../windows/micropython.exe' +else: + CPYTHON3 = 'python3.3' + MP_PY = '../unix/micropython' -if [ $# -eq 0 ] -then - tests="basics/*.py io/*.py" -else - tests="$@" -fi -for infile in $tests -do - basename=`basename $infile .py` - outfile=${basename}.out - expfile=${basename}.exp +test_count = 0 +testcase_count = 0 +passed_count = 0 +failed_tests = [] +tests = [] - $CPYTHON3 -B $infile > $expfile - $MP_PY $infile > $outfile - ((numtestcases = numtestcases + $(cat $expfile | wc -l))) +if not sys.argv[1:]: + tests = glob('basics/*.py') + glob('io/*.py') +else: + tests = sys.argv[1:] - diff --brief $expfile $outfile > /dev/null +for test_file in tests: + test_name = os.path.splitext(os.path.basename(test_file))[0] - if [ $? -eq 0 ] - then - echo "pass $infile" - $RM $outfile - $RM $expfile - ((numpassed=numpassed + 1)) - else - echo "FAIL $infile" - ((numfailed=numfailed + 1)) - namefailed="$namefailed $basename" - fi + output_expected = subprocess.check_output([CPYTHON3, '-B', test_file]) + output_mypy = subprocess.check_output([MP_PY, test_file]) - ((numtests=numtests + 1)) -done + testcase_count += len(output_expected.splitlines()) -echo "$numtests tests performed ($numtestcases individual testcases)" -echo "$numpassed tests passed" -if [[ $numfailed != 0 ]] -then - echo "$numfailed tests failed -$namefailed" - exit 1 -else - exit 0 -fi + if output_expected != output_mypy: + print("pass ", test_file) + passed_count += 1 + else: + print("FAIL ", test_file) + failed_tests.append(test_name) + + test_count += 1 + +print("{} tests performed ({} individual testcases)".format(test_count, + testcase_count)) +print("{} tests passed".format(passed_count)) + +if len(failed_tests) > 0: + print("{} tests failed: {}".format(len(failed_tests), + ' '.join(failed_tests))) + sys.exit(1) diff --git a/windows/Makefile b/windows/Makefile new file mode 100644 index 0000000000..a9a39a620e --- /dev/null +++ b/windows/Makefile @@ -0,0 +1,36 @@ +include ../py/mkenv.mk + +# define main target +PROG = micropython.exe + +# qstr definitions (must come before including py.mk) +QSTR_DEFS = qstrdefsport.h + +# include py core make definitions +include ../py/py.mk + +# compiler settings +CFLAGS = -I. -I$(PY_SRC) -Wall -Werror -ansi -std=gnu99 -DUNIX +LDFLAGS = -lm + +# Debugging/Optimization +ifdef DEBUG +CFLAGS += -O0 -g +else +CFLAGS += -Os #-DNDEBUG +endif + +# source files +SRC_C = \ + main.c \ + file.c \ + +OBJ = $(PY_O) $(addprefix $(BUILD)/, $(SRC_C:.c=.o)) +LIB = -lreadline +LIB += -lws2_32 +LIB += -lmman +# the following is needed for BSD +#LIB += -ltermcap + +include ../py/mkrules.mk + diff --git a/windows/file.c b/windows/file.c new file mode 100644 index 0000000000..2651ffafb6 --- /dev/null +++ b/windows/file.c @@ -0,0 +1,2 @@ +#include +#include "../unix/file.c" \ No newline at end of file diff --git a/windows/main.c b/windows/main.c new file mode 100644 index 0000000000..64e34fa354 --- /dev/null +++ b/windows/main.c @@ -0,0 +1,5 @@ +#include "../unix/main.c" + +void rawsocket_init() { + // Do nothing here +} \ No newline at end of file diff --git a/windows/mpconfigport.h b/windows/mpconfigport.h new file mode 100644 index 0000000000..10abb8ce75 --- /dev/null +++ b/windows/mpconfigport.h @@ -0,0 +1,36 @@ +// options to control how Micro Python is built + +// Linking with GNU readline causes binary to be licensed under GPL +#ifndef MICROPY_USE_READLINE +#define MICROPY_USE_READLINE (1) +#endif + +#define MICROPY_EMIT_X64 (1) +#define MICROPY_EMIT_THUMB (0) +#define MICROPY_EMIT_INLINE_THUMB (0) +#define MICROPY_MEM_STATS (1) +#define MICROPY_DEBUG_PRINTERS (1) +#define MICROPY_ENABLE_REPL_HELPERS (1) +#define MICROPY_ENABLE_LEXER_UNIX (1) +#define MICROPY_ENABLE_FLOAT (1) +#define MICROPY_LONGINT_IMPL (MICROPY_LONGINT_IMPL_LONGLONG) + +// type definitions for the specific machine + +#ifdef __LP64__ +typedef long machine_int_t; // must be pointer size +typedef unsigned long machine_uint_t; // must be pointer size +#else +// These are definitions for machines where sizeof(int) == sizeof(void*), +// regardless for actual size. +typedef int machine_int_t; // must be pointer size +typedef unsigned int machine_uint_t; // must be pointer size +#endif + +#define BYTES_PER_WORD sizeof(machine_int_t) + +typedef void *machine_ptr_t; // must be of pointer size +typedef const void *machine_const_ptr_t; // must be of pointer size +typedef double machine_float_t; + +machine_float_t machine_sqrt(machine_float_t x); diff --git a/windows/qstrdefsport.h b/windows/qstrdefsport.h new file mode 100644 index 0000000000..8a4c47f0b5 --- /dev/null +++ b/windows/qstrdefsport.h @@ -0,0 +1,8 @@ +// qstrs specific to this port + +Q(sys) +Q(argv) +Q(open) +Q(stdin) +Q(stdout) +Q(stderr) \ No newline at end of file