windows: Add support for build variants to windows port.
Following the unix port. Support for building variants with msvc was done by @stinos.
This commit is contained in:
parent
bfe9eba484
commit
05ed19e73e
|
@ -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
|
||||
|
||||
# define main target
|
||||
PROG = micropython
|
||||
FROZEN_MANIFEST ?= variants/manifest.py
|
||||
|
||||
# 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))
|
||||
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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)" />
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
include("$(PORT_DIR)/variants/manifest.py")
|
|
@ -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)
|
|
@ -0,0 +1,5 @@
|
|||
PROG ?= micropython-dev
|
||||
|
||||
FROZEN_MANIFEST ?= $(VARIANT_DIR)/manifest.py
|
||||
|
||||
MICROPY_ROM_TEXT_COMPRESSION = 1
|
|
@ -0,0 +1,5 @@
|
|||
<Project>
|
||||
<PropertyGroup>
|
||||
<PyProg>micropython-dev</PyProg>
|
||||
</PropertyGroup>
|
||||
</Project>
|
|
@ -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)
|
|
@ -0,0 +1,3 @@
|
|||
# This is the default variant when you `make` the Windows port.
|
||||
|
||||
PROG ?= micropython
|
|
@ -0,0 +1,5 @@
|
|||
<Project>
|
||||
<PropertyGroup>
|
||||
<PyProg>micropython</PyProg>
|
||||
</PropertyGroup>
|
||||
</Project>
|
Loading…
Reference in New Issue