summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ports/windows/Makefile24
-rw-r--r--ports/windows/README.md20
-rw-r--r--ports/windows/micropython.vcxproj2
-rw-r--r--ports/windows/mpconfigport.h19
-rw-r--r--ports/windows/mpconfigport.mk7
-rw-r--r--ports/windows/msvc/common.props9
-rw-r--r--ports/windows/msvc/paths.props9
-rw-r--r--ports/windows/variants/dev/manifest.py1
-rw-r--r--ports/windows/variants/dev/mpconfigvariant.h37
-rw-r--r--ports/windows/variants/dev/mpconfigvariant.mk5
-rw-r--r--ports/windows/variants/dev/mpconfigvariant.props5
-rw-r--r--ports/windows/variants/manifest.py0
-rw-r--r--ports/windows/variants/standard/mpconfigvariant.h28
-rw-r--r--ports/windows/variants/standard/mpconfigvariant.mk3
-rw-r--r--ports/windows/variants/standard/mpconfigvariant.props5
15 files changed, 160 insertions, 14 deletions
diff --git a/ports/windows/Makefile b/ports/windows/Makefile
index cb2ebc22f..b1d2d35c9 100644
--- a/ports/windows/Makefile
+++ b/ports/windows/Makefile
@@ -1,11 +1,27 @@
+# Select the variant to build for.
+VARIANT ?= standard
+
+# If the build directory is not given, make it reflect the variant name.
+BUILD ?= build-$(VARIANT)
+
+VARIANT_DIR ?= variants/$(VARIANT)
+ifeq ($(wildcard $(VARIANT_DIR)/.),)
+$(error Invalid VARIANT specified: $(VARIANT_DIR))
+endif
+
include ../../py/mkenv.mk
-include mpconfigport.mk
+include $(VARIANT_DIR)/mpconfigvariant.mk
+
+FROZEN_MANIFEST ?= variants/manifest.py
-# define main target
-PROG = micropython
+# Define main target
+# This should be configured by the mpconfigvariant.mk
+PROG ?= micropython
# qstr definitions (must come before including py.mk)
QSTR_DEFS = ../unix/qstrdefsport.h
+QSTR_GLOBAL_DEPENDENCIES = $(VARIANT_DIR)/mpconfigvariant.h
# include py core make definitions
include $(TOP)/py/py.mk
@@ -13,6 +29,7 @@ include $(TOP)/py/py.mk
INC += -I.
INC += -I$(TOP)
INC += -I$(BUILD)
+INC += -I$(VARIANT_DIR)
# compiler settings
CFLAGS = $(INC) -Wall -Wpointer-arith -Wdouble-promotion -Werror -std=gnu99 -DUNIX -D__USE_MINGW_ANSI_STDIO=1 $(CFLAGS_MOD) $(COPT) $(CFLAGS_EXTRA)
@@ -41,7 +58,8 @@ SRC_C = \
init.c \
sleep.c \
fmode.c \
- $(SRC_MOD)
+ $(SRC_MOD) \
+ $(wildcard $(VARIANT_DIR)/*.c)
OBJ = $(PY_O) $(addprefix $(BUILD)/, $(SRC_C:.c=.o))
diff --git a/ports/windows/README.md b/ports/windows/README.md
index 55e23de7b..713ea82b8 100644
--- a/ports/windows/README.md
+++ b/ports/windows/README.md
@@ -71,6 +71,26 @@ To build from the command line:
msbuild ../../mpy-cross/mpy-cross.vcxproj
msbuild micropython.vcxproj
+__Variants__
+
+The msvc port supports variants (like the unix and windows mingw ports) and the one which gets built is
+controlled by the `PyVariant` msbuild property. It defaults to `standard`.
+The other variants can be built like:
+
+ msbuild micropython.vcxproj /p:PyVariant=dev
+
+Or by adding a file [Directory.build.props](https://docs.microsoft.com/en-us/visualstudio/msbuild/customize-your-build#directorybuildprops-and-directorybuildtargets) in this directory or a parent directory:
+
+```xml
+<Project>
+ <PropertyGroup>
+ <PyVariant>dev</PyVariant>
+ </PropertyGroup>
+</Project>
+```
+
+See [paths.props](msvc/paths.props) for other related variables like build and variant directories.
+
__Stack usage__
The msvc compiler is quite stack-hungry which might result in a "maximum recursion depth exceeded"
diff --git a/ports/windows/micropython.vcxproj b/ports/windows/micropython.vcxproj
index 1beca9e50..6817d6ed1 100644
--- a/ports/windows/micropython.vcxproj
+++ b/ports/windows/micropython.vcxproj
@@ -64,6 +64,7 @@
</ImportGroup>
<PropertyGroup Label="UserMacros">
<CustomPropsFile Condition="'$(CustomPropsFile)'==''">msvc/user.props</CustomPropsFile>
+ <TargetName>$(PyProg)</TargetName>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile />
@@ -95,6 +96,7 @@
<ClCompile Include="$(PyBaseDir)ports\unix\modos.c"/>
<ClCompile Include="$(PyBaseDir)ports\unix\modtime.c"/>
<ClCompile Include="$(PyBaseDir)ports\unix\modmachine.c" />
+ <ClCompile Include="$(PyVariantDir)*.c" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="@(PyCoreInclude)" />
diff --git a/ports/windows/mpconfigport.h b/ports/windows/mpconfigport.h
index f22af9b7f..96405bc5d 100644
--- a/ports/windows/mpconfigport.h
+++ b/ports/windows/mpconfigport.h
@@ -26,6 +26,9 @@
// options to control how MicroPython is built
+// Variant-specific definitions.
+#include "mpconfigvariant.h"
+
// By default use MicroPython version of readline
#ifndef MICROPY_USE_READLINE
#define MICROPY_USE_READLINE (1)
@@ -54,9 +57,13 @@
#define MICROPY_REPL_AUTO_INDENT (1)
#define MICROPY_HELPER_LEXER_UNIX (1)
#define MICROPY_ENABLE_SOURCE_LINE (1)
+#ifndef MICROPY_FLOAT_IMPL
#define MICROPY_FLOAT_IMPL (MICROPY_FLOAT_IMPL_DOUBLE)
+#endif
#define MICROPY_LONGINT_IMPL (MICROPY_LONGINT_IMPL_MPZ)
+#ifndef MICROPY_STREAMS_NON_BLOCK
#define MICROPY_STREAMS_NON_BLOCK (1)
+#endif
#define MICROPY_STREAMS_POSIX_API (1)
#define MICROPY_OPT_COMPUTED_GOTO (0)
#define MICROPY_MODULE_WEAK_LINKS (1)
@@ -77,8 +84,12 @@
#define MICROPY_PY_BUILTINS_NOTIMPLEMENTED (1)
#define MICROPY_PY_BUILTINS_INPUT (1)
#define MICROPY_PY_BUILTINS_POW3 (1)
+#ifndef MICROPY_PY_BUILTINS_HELP
#define MICROPY_PY_BUILTINS_HELP (1)
+#endif
+#ifndef MICROPY_PY_BUILTINS_HELP_MODULES
#define MICROPY_PY_BUILTINS_HELP_MODULES (1)
+#endif
#define MICROPY_PY_BUILTINS_ROUND_INT (1)
#define MICROPY_PY_MICROPYTHON_MEM_INFO (1)
#define MICROPY_PY_ALL_SPECIAL_METHODS (1)
@@ -97,16 +108,18 @@
#define MICROPY_PY_SYS_EXC_INFO (1)
#define MICROPY_PY_COLLECTIONS_DEQUE (1)
#define MICROPY_PY_COLLECTIONS_ORDEREDDICT (1)
+#ifndef MICROPY_PY_MATH_SPECIAL_FUNCTIONS
#define MICROPY_PY_MATH_SPECIAL_FUNCTIONS (1)
-#define MICROPY_PY_MATH_ISCLOSE (1)
+#endif
+#define MICROPY_PY_MATH_ISCLOSE (MICROPY_PY_MATH_SPECIAL_FUNCTIONS)
#define MICROPY_PY_CMATH (1)
#define MICROPY_PY_IO_IOBASE (1)
#define MICROPY_PY_IO_FILEIO (1)
#define MICROPY_PY_GC_COLLECT_RETVAL (1)
-#define MICROPY_MODULE_FROZEN_STR (0)
-
+#ifndef MICROPY_STACKLESS
#define MICROPY_STACKLESS (0)
#define MICROPY_STACKLESS_STRICT (0)
+#endif
#define MICROPY_PY_UTIME (1)
#define MICROPY_PY_UTIME_MP_HAL (1)
diff --git a/ports/windows/mpconfigport.mk b/ports/windows/mpconfigport.mk
index a2c618f14..3b7cf2100 100644
--- a/ports/windows/mpconfigport.mk
+++ b/ports/windows/mpconfigport.mk
@@ -1,12 +1,9 @@
# Enable/disable modules and 3rd-party libs to be included in interpreter
# Build 32-bit binaries on a 64-bit host
-MICROPY_FORCE_32BIT = 0
+MICROPY_FORCE_32BIT ?= 0
# This variable can take the following values:
# 0 - no readline, just simple stdin input
# 1 - use MicroPython version of readline
-MICROPY_USE_READLINE = 1
-
-# ffi module requires libffi (libffi-dev Debian package)
-MICROPY_PY_FFI = 0
+MICROPY_USE_READLINE ?= 1
diff --git a/ports/windows/msvc/common.props b/ports/windows/msvc/common.props
index fcad5aeb6..ab9b055de 100644
--- a/ports/windows/msvc/common.props
+++ b/ports/windows/msvc/common.props
@@ -1,7 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <!-- Variant support. For compatibility with how it works for the other ports, this gets imported
+ early so variants cannot override build options like the ones specified in the rest of this file.
+ Use CustomPropsFile (see the .vcxproj file) for that. -->
+ <PropertyGroup>
+ <PyVariant Condition="'$(PyVariant)' == ''">standard</PyVariant>
+ <PyBuild Condition="'$(PyBuild)' == ''">build-$(PyVariant)</PyBuild>
+ </PropertyGroup>
<ImportGroup Label="PropertySheets">
<Import Project="paths.props" Condition="'$(PyPathsIncluded)' != 'True'"/>
+ <Import Project="$(PyVariantDir)mpconfigvariant.props"/>
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
@@ -31,6 +39,7 @@
<Destination>$(PyTargetDir)%(FileName)%(Extension)</Destination>
</PyOutputFiles>
<PyCookieFiles Include="$(PyBuildDir)copycookie*" Exclude="$(PyFileCopyCookie)"/>
+ <QstrDependencies Include="$(PyVariantDir)mpconfigvariant.h"/>
</ItemGroup>
<!-- Copy PyOutputFiles to their target destination.
diff --git a/ports/windows/msvc/paths.props b/ports/windows/msvc/paths.props
index cfd43b708..1a4191932 100644
--- a/ports/windows/msvc/paths.props
+++ b/ports/windows/msvc/paths.props
@@ -11,13 +11,15 @@
|- ports/windows [PyWinDir]
|- ...
|- micropython.exe
- |- build [PyBuildDir]
+ |- build-standard [PyBuildDir]
|- Debugx64 [PyOutDir]
| |- ...
| |- micropython.exe
| |- micropython.map
| |- obj [PyIntDir]
|- genhdr
+ |- variants
+ |- standard [PyVariantDir]
Note that the micropython executable will be copied from PyOutDir
to PyWinDir after each build. -->
@@ -25,11 +27,12 @@
<!-- Start from project root -->
<PyBaseDir>$([System.IO.Path]::GetFullPath(`$(MSBuildThisFileDirectory)..\..\..`))\</PyBaseDir>
<PyWinDir>$(PyBaseDir)ports\windows\</PyWinDir>
- <PyBuildDir Condition="'$(PyBuildDir)' == ''">$(PyWinDir)build\</PyBuildDir>
+ <PyBuildDir Condition="'$(PyBuildDir)' == ''">$(PyWinDir)$(PyBuild)\</PyBuildDir>
+ <PyVariantDir Condition="'$(PyVariantDir)' == ''">$(PyWinDir)variants\$(PyVariant)\</PyVariantDir>
<PyTargetDir Condition="'$(PyTargetDir)' == ''">$(PyWinDir)</PyTargetDir>
<!-- All include directories needed for uPy -->
- <PyIncDirs>$(PyIncDirs);$(PyBaseDir);$(PyWinDir);$(PyBuildDir);$(PyWinDir)msvc</PyIncDirs>
+ <PyIncDirs>$(PyIncDirs);$(PyBaseDir);$(PyWinDir);$(PyBuildDir);$(PyWinDir)msvc;$(PyVariantDir)</PyIncDirs>
<!-- Within PyBuildDir different subdirectories are used based on configuration and platform.
By default these are chosen based on the Configuration and Platform properties, but
diff --git a/ports/windows/variants/dev/manifest.py b/ports/windows/variants/dev/manifest.py
new file mode 100644
index 000000000..08295fc67
--- /dev/null
+++ b/ports/windows/variants/dev/manifest.py
@@ -0,0 +1 @@
+include("$(PORT_DIR)/variants/manifest.py")
diff --git a/ports/windows/variants/dev/mpconfigvariant.h b/ports/windows/variants/dev/mpconfigvariant.h
new file mode 100644
index 000000000..2da097714
--- /dev/null
+++ b/ports/windows/variants/dev/mpconfigvariant.h
@@ -0,0 +1,37 @@
+/*
+ * This file is part of the MicroPython project, http://micropython.org/
+ *
+ * The MIT License (MIT)
+ *
+ * Copyright (c) 2019 Damien P. George
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+#define MICROPY_REPL_EMACS_WORDS_MOVE (1)
+#define MICROPY_REPL_EMACS_EXTRA_WORDS_MOVE (1)
+#define MICROPY_ENABLE_SCHEDULER (1)
+
+#define MICROPY_PY_BUILTINS_HELP (1)
+#define MICROPY_PY_BUILTINS_HELP_MODULES (1)
+#define MICROPY_PY_SYS_SETTRACE (1)
+#define MICROPY_PERSISTENT_CODE_SAVE (1)
+#define MICROPY_COMP_CONST (0)
+#define MICROPY_PY_URANDOM_EXTRA_FUNCS (1)
+#define MICROPY_PY_BUILTINS_SLICE_INDICES (1)
diff --git a/ports/windows/variants/dev/mpconfigvariant.mk b/ports/windows/variants/dev/mpconfigvariant.mk
new file mode 100644
index 000000000..b2a0b5bb3
--- /dev/null
+++ b/ports/windows/variants/dev/mpconfigvariant.mk
@@ -0,0 +1,5 @@
+PROG ?= micropython-dev
+
+FROZEN_MANIFEST ?= $(VARIANT_DIR)/manifest.py
+
+MICROPY_ROM_TEXT_COMPRESSION = 1
diff --git a/ports/windows/variants/dev/mpconfigvariant.props b/ports/windows/variants/dev/mpconfigvariant.props
new file mode 100644
index 000000000..d01d74b44
--- /dev/null
+++ b/ports/windows/variants/dev/mpconfigvariant.props
@@ -0,0 +1,5 @@
+<Project>
+ <PropertyGroup>
+ <PyProg>micropython-dev</PyProg>
+ </PropertyGroup>
+</Project>
diff --git a/ports/windows/variants/manifest.py b/ports/windows/variants/manifest.py
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/ports/windows/variants/manifest.py
diff --git a/ports/windows/variants/standard/mpconfigvariant.h b/ports/windows/variants/standard/mpconfigvariant.h
new file mode 100644
index 000000000..3cdcfa8e9
--- /dev/null
+++ b/ports/windows/variants/standard/mpconfigvariant.h
@@ -0,0 +1,28 @@
+/*
+ * This file is part of the MicroPython project, http://micropython.org/
+ *
+ * The MIT License (MIT)
+ *
+ * Copyright (c) 2019 Damien P. George
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+#define MICROPY_PY_BUILTINS_HELP (1)
+#define MICROPY_PY_BUILTINS_HELP_MODULES (1)
diff --git a/ports/windows/variants/standard/mpconfigvariant.mk b/ports/windows/variants/standard/mpconfigvariant.mk
new file mode 100644
index 000000000..9e1f5ae05
--- /dev/null
+++ b/ports/windows/variants/standard/mpconfigvariant.mk
@@ -0,0 +1,3 @@
+# This is the default variant when you `make` the Windows port.
+
+PROG ?= micropython
diff --git a/ports/windows/variants/standard/mpconfigvariant.props b/ports/windows/variants/standard/mpconfigvariant.props
new file mode 100644
index 000000000..0157102fd
--- /dev/null
+++ b/ports/windows/variants/standard/mpconfigvariant.props
@@ -0,0 +1,5 @@
+<Project>
+ <PropertyGroup>
+ <PyProg>micropython</PyProg>
+ </PropertyGroup>
+</Project>