kopia lustrzana https://github.com/micropython/micropython
Windows MSVC port
Extend the windows port so it compiles with the toolchain from Visual Studio 2013pull/568/head
rodzic
c1c32d65af
commit
01d6be4d51
|
@ -312,4 +312,6 @@ typedef double mp_float_t;
|
||||||
#endif //INT_FMT
|
#endif //INT_FMT
|
||||||
|
|
||||||
// Modifier for function which doesn't return
|
// Modifier for function which doesn't return
|
||||||
|
#ifndef NORETURN
|
||||||
#define NORETURN __attribute__((noreturn))
|
#define NORETURN __attribute__((noreturn))
|
||||||
|
#endif
|
||||||
|
|
7
py/mpz.c
7
py/mpz.c
|
@ -1092,8 +1092,11 @@ mpz_t *mpz_gcd(const mpz_t *z1, const mpz_t *z2) {
|
||||||
*/
|
*/
|
||||||
mpz_t *mpz_lcm(const mpz_t *z1, const mpz_t *z2)
|
mpz_t *mpz_lcm(const mpz_t *z1, const mpz_t *z2)
|
||||||
{
|
{
|
||||||
if (z1->len == 0 || z2->len == 0)
|
// braces below are required for compilation to succeed with CL, see bug report
|
||||||
return mpz_zero();
|
// https://connect.microsoft.com/VisualStudio/feedback/details/864169/compilation-error-when-braces-are-left-out-of-single-line-if-statement
|
||||||
|
if (z1->len == 0 || z2->len == 0) {
|
||||||
|
return mpz_zero();
|
||||||
|
}
|
||||||
|
|
||||||
mpz_t *gcd = mpz_gcd(z1, z2);
|
mpz_t *gcd = mpz_gcd(z1, z2);
|
||||||
mpz_t *quo = mpz_zero();
|
mpz_t *quo = mpz_zero();
|
||||||
|
|
|
@ -303,7 +303,7 @@ STATIC mp_obj_t int_from_bytes(uint n_args, const mp_obj_t *args) {
|
||||||
|
|
||||||
// convert the bytes to an integer
|
// convert the bytes to an integer
|
||||||
machine_uint_t value = 0;
|
machine_uint_t value = 0;
|
||||||
for (const byte* buf = bufinfo.buf + bufinfo.len - 1; buf >= (byte*)bufinfo.buf; buf--) {
|
for (const byte* buf = (const byte*)bufinfo.buf + bufinfo.len - 1; buf >= (byte*)bufinfo.buf; buf--) {
|
||||||
value = (value << 8) | *buf;
|
value = (value << 8) | *buf;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -27,6 +27,7 @@
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
|
#include <alloca.h>
|
||||||
|
|
||||||
#include "mpconfig.h"
|
#include "mpconfig.h"
|
||||||
#include "nlr.h"
|
#include "nlr.h"
|
||||||
|
@ -1074,11 +1075,12 @@ import_error:
|
||||||
uint pkg_name_len;
|
uint pkg_name_len;
|
||||||
const char *pkg_name = mp_obj_str_get_data(dest[0], &pkg_name_len);
|
const char *pkg_name = mp_obj_str_get_data(dest[0], &pkg_name_len);
|
||||||
|
|
||||||
char dot_name[pkg_name_len + 1 + qstr_len(name)];
|
const uint dot_name_len = pkg_name_len + 1 + qstr_len(name);
|
||||||
|
char *dot_name = alloca(dot_name_len);
|
||||||
memcpy(dot_name, pkg_name, pkg_name_len);
|
memcpy(dot_name, pkg_name, pkg_name_len);
|
||||||
dot_name[pkg_name_len] = '.';
|
dot_name[pkg_name_len] = '.';
|
||||||
memcpy(dot_name + pkg_name_len + 1, qstr_str(name), qstr_len(name));
|
memcpy(dot_name + pkg_name_len + 1, qstr_str(name), qstr_len(name));
|
||||||
qstr dot_name_q = qstr_from_strn(dot_name, sizeof(dot_name));
|
qstr dot_name_q = qstr_from_strn(dot_name, dot_name_len);
|
||||||
|
|
||||||
mp_obj_t args[5];
|
mp_obj_t args[5];
|
||||||
args[0] = MP_OBJ_NEW_QSTR(dot_name_q);
|
args[0] = MP_OBJ_NEW_QSTR(dot_name_q);
|
||||||
|
|
|
@ -0,0 +1,9 @@
|
||||||
|
*.user
|
||||||
|
*.*sdf
|
||||||
|
*.suo
|
||||||
|
*.sln
|
||||||
|
*.exe
|
||||||
|
*.pdb
|
||||||
|
*.ilk
|
||||||
|
*.filters
|
||||||
|
/build/*
|
|
@ -1,10 +1,26 @@
|
||||||
This is experimental, community-supported Windows port of MicroPython.
|
This is experimental, community-supported Windows port of MicroPython.
|
||||||
It is based on Unix port, and expected to remain so.
|
It is based on Unix port, and expected to remain so.
|
||||||
|
The port requires additional testing, debugging, and patches. Please
|
||||||
|
consider to contribute.
|
||||||
|
|
||||||
|
|
||||||
To cross-compile under Debian/Ubuntu Linux system:
|
To cross-compile under Debian/Ubuntu Linux system:
|
||||||
|
|
||||||
sudo apt-get install mingw32 mingw32-binutils mingw32-runtime
|
sudo apt-get install mingw32 mingw32-binutils mingw32-runtime
|
||||||
make CROSS_COMPILE=i586-mingw32msvc-
|
make CROSS_COMPILE=i586-mingw32msvc-
|
||||||
|
|
||||||
The port requires additional testing, debugging, and patches. Please
|
|
||||||
consider to contribute.
|
To compile under Cygwin:
|
||||||
|
|
||||||
|
Install following packages using cygwin's setup.exe: mingw-gcc-g++ make
|
||||||
|
make CROSS_COMPILE=i686-pc-mingw32-
|
||||||
|
|
||||||
|
|
||||||
|
To compile using Visual Studio 2013:
|
||||||
|
|
||||||
|
Open micropython.vcxproj and build
|
||||||
|
|
||||||
|
|
||||||
|
To compile using Visual Studio 2013 commandline:
|
||||||
|
|
||||||
|
msbuild micropython.vcxproj
|
||||||
|
|
|
@ -25,7 +25,12 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
void init() {
|
void init() {
|
||||||
|
#ifdef __MINGW32__
|
||||||
putenv("PRINTF_EXPONENT_DIGITS=2");
|
putenv("PRINTF_EXPONENT_DIGITS=2");
|
||||||
|
#else
|
||||||
|
_set_output_format(_TWO_DIGIT_EXPONENT);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,102 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ItemGroup Label="ProjectConfigurations">
|
||||||
|
<ProjectConfiguration Include="Debug|Win32">
|
||||||
|
<Configuration>Debug</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Release|Win32">
|
||||||
|
<Configuration>Release</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Debug|x64">
|
||||||
|
<Configuration>Debug</Configuration>
|
||||||
|
<Platform>x64</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Release|x64">
|
||||||
|
<Configuration>Release</Configuration>
|
||||||
|
<Platform>x64</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
</ItemGroup>
|
||||||
|
<PropertyGroup Label="Globals">
|
||||||
|
<ProjectGuid>{740F3C30-EB6C-4B59-9C50-AE4D5A4A9D12}</ProjectGuid>
|
||||||
|
<RootNamespace>micropython</RootNamespace>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||||
|
<ConfigurationType>Application</ConfigurationType>
|
||||||
|
<UseDebugLibraries>true</UseDebugLibraries>
|
||||||
|
<PlatformToolset>v120</PlatformToolset>
|
||||||
|
<CharacterSet>MultiByte</CharacterSet>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||||
|
<ConfigurationType>Application</ConfigurationType>
|
||||||
|
<UseDebugLibraries>false</UseDebugLibraries>
|
||||||
|
<PlatformToolset>v120</PlatformToolset>
|
||||||
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
|
<CharacterSet>MultiByte</CharacterSet>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
||||||
|
<ConfigurationType>Application</ConfigurationType>
|
||||||
|
<UseDebugLibraries>true</UseDebugLibraries>
|
||||||
|
<PlatformToolset>v120</PlatformToolset>
|
||||||
|
<CharacterSet>MultiByte</CharacterSet>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
||||||
|
<ConfigurationType>Application</ConfigurationType>
|
||||||
|
<UseDebugLibraries>false</UseDebugLibraries>
|
||||||
|
<PlatformToolset>v120</PlatformToolset>
|
||||||
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
|
<CharacterSet>MultiByte</CharacterSet>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||||
|
<ImportGroup Label="ExtensionSettings">
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
<Import Project="msvc/common.props" />
|
||||||
|
<Import Project="msvc/debug.props" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
<Import Project="msvc/common.props" />
|
||||||
|
<Import Project="msvc/release.props" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
<Import Project="msvc/common.props" />
|
||||||
|
<Import Project="msvc/debug.props" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
<Import Project="msvc/common.props" />
|
||||||
|
<Import Project="msvc/release.props" />
|
||||||
|
</ImportGroup>
|
||||||
|
<PropertyGroup Label="UserMacros" />
|
||||||
|
<PropertyGroup />
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
|
<ClCompile />
|
||||||
|
<Link />
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
|
<ClCompile />
|
||||||
|
<Link />
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||||
|
<ClCompile />
|
||||||
|
<Link />
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||||
|
<ClCompile />
|
||||||
|
<Link />
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
</ItemGroup>
|
||||||
|
<Import Project="msvc/sources.props" />
|
||||||
|
<Import Project="msvc/genhdr.targets" />
|
||||||
|
<Target Name="GenHeaders" BeforeTargets="BuildGenerateSources" DependsOnTargets="GenerateHeaders">
|
||||||
|
</Target>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
|
<ImportGroup Label="ExtensionTargets">
|
||||||
|
</ImportGroup>
|
||||||
|
</Project>
|
|
@ -31,6 +31,7 @@
|
||||||
#define MICROPY_USE_READLINE (0)
|
#define MICROPY_USE_READLINE (0)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#define MICROPY_PATH_MAX (260) //see minwindef.h for msvc or limits.h for mingw
|
||||||
#define MICROPY_EMIT_X64 (0)
|
#define MICROPY_EMIT_X64 (0)
|
||||||
#define MICROPY_EMIT_THUMB (0)
|
#define MICROPY_EMIT_THUMB (0)
|
||||||
#define MICROPY_EMIT_INLINE_THUMB (0)
|
#define MICROPY_EMIT_INLINE_THUMB (0)
|
||||||
|
@ -46,9 +47,12 @@
|
||||||
|
|
||||||
// type definitions for the specific machine
|
// type definitions for the specific machine
|
||||||
|
|
||||||
#ifdef __LP64__
|
#if defined( __MINGW32__ ) && defined( __LP64__ )
|
||||||
typedef long machine_int_t; // must be pointer size
|
typedef long machine_int_t; // must be pointer size
|
||||||
typedef unsigned long machine_uint_t; // must be pointer size
|
typedef unsigned long machine_uint_t; // must be pointer size
|
||||||
|
#elif defined ( _MSC_VER ) && defined( _WIN64 )
|
||||||
|
typedef __int64 machine_int_t;
|
||||||
|
typedef unsigned __int64 machine_uint_t;
|
||||||
#else
|
#else
|
||||||
// These are definitions for machines where sizeof(int) == sizeof(void*),
|
// These are definitions for machines where sizeof(int) == sizeof(void*),
|
||||||
// regardless for actual size.
|
// regardless for actual size.
|
||||||
|
@ -67,3 +71,43 @@ extern const struct _mp_obj_fun_native_t mp_builtin_open_obj;
|
||||||
|
|
||||||
#include "realpath.h"
|
#include "realpath.h"
|
||||||
#include "init.h"
|
#include "init.h"
|
||||||
|
|
||||||
|
|
||||||
|
// MSVC specifics
|
||||||
|
#ifdef _MSC_VER
|
||||||
|
|
||||||
|
// Sanity check
|
||||||
|
|
||||||
|
#if ( _MSC_VER < 1800 )
|
||||||
|
#error Can only build with Visual Studio 2013 toolset
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
// CL specific overrides from mpconfig
|
||||||
|
|
||||||
|
#define NORETURN __declspec(noreturn)
|
||||||
|
#define MICROPY_EXTRA_CONSTANTS { "dummy", 0 } //can't have zero-sized array
|
||||||
|
|
||||||
|
|
||||||
|
// CL specific definitions
|
||||||
|
|
||||||
|
#define restrict
|
||||||
|
#define inline __inline
|
||||||
|
#define STDIN_FILENO 0
|
||||||
|
#define STDOUT_FILENO 1
|
||||||
|
#define STDERR_FILENO 2
|
||||||
|
#define PATH_MAX MICROPY_PATH_MAX
|
||||||
|
#define S_ISREG(m) (((m) & S_IFMT) == S_IFREG)
|
||||||
|
#define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR)
|
||||||
|
|
||||||
|
|
||||||
|
// System headers (needed e.g. for nlr.h)
|
||||||
|
|
||||||
|
#include <stddef.h> //for NULL
|
||||||
|
#include <assert.h> //for assert
|
||||||
|
|
||||||
|
|
||||||
|
// Functions implemented in platform code
|
||||||
|
|
||||||
|
int snprintf(char *dest, size_t count, const char *format, ...);
|
||||||
|
#endif
|
||||||
|
|
|
@ -0,0 +1,22 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ImportGroup Label="PropertySheets" />
|
||||||
|
<PropertyGroup Label="UserMacros" />
|
||||||
|
<PropertyGroup>
|
||||||
|
<OutDir>$(ProjectDir)</OutDir>
|
||||||
|
<IntDir>$(ProjectDir)build\$(Configuration)$(Platform)\</IntDir>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemDefinitionGroup>
|
||||||
|
<ClCompile>
|
||||||
|
<AdditionalIncludeDirectories>.\;.\build;.\msvc;..\py</AdditionalIncludeDirectories>
|
||||||
|
<PreprocessorDefinitions>_USE_MATH_DEFINES;_CRT_SECURE_NO_WARNINGS;_MBCS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<SDLCheck>false</SDLCheck>
|
||||||
|
<WarningLevel>Level1</WarningLevel>
|
||||||
|
<ExceptionHandling>false</ExceptionHandling>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
|
</Link>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemGroup />
|
||||||
|
</Project>
|
|
@ -0,0 +1,13 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ImportGroup Label="PropertySheets" />
|
||||||
|
<PropertyGroup Label="UserMacros" />
|
||||||
|
<PropertyGroup>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemDefinitionGroup>
|
||||||
|
<ClCompile>
|
||||||
|
<PreprocessorDefinitions>DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
</ClCompile>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemGroup />
|
||||||
|
</Project>
|
|
@ -0,0 +1,76 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="GenerateHeaders">
|
||||||
|
|
||||||
|
<Target Name="GenerateHeaders" DependsOnTargets="MakeQstrData;MakeVersionHeader">
|
||||||
|
</Target>
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<SrcDir>$(MsBuildThisFileDirectory)..\..\py\</SrcDir>
|
||||||
|
<DestDir>$(MsBuildThisFileDirectory)..\build\genhdr\</DestDir>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<Target Name="MakeDestDir">
|
||||||
|
<MakeDir Directories="$(DestDir)"/>
|
||||||
|
</Target>
|
||||||
|
|
||||||
|
<!--don't let regenerating these files trigger builds-->
|
||||||
|
<UsingTask TaskName="MakeSameWriteTime" TaskFactory="CodeTaskFactory" AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll" >
|
||||||
|
<ParameterGroup>
|
||||||
|
<SourceFile Required="true" ParameterType="System.String"/>
|
||||||
|
<DestFile Required="true" ParameterType="System.String"/>
|
||||||
|
</ParameterGroup>
|
||||||
|
<Task>
|
||||||
|
<Code Type="Fragment" Language="cs">
|
||||||
|
<![CDATA[
|
||||||
|
System.IO.File.SetLastWriteTime( DestFile, System.IO.File.GetLastWriteTime( SourceFile ) );
|
||||||
|
]]>
|
||||||
|
</Code>
|
||||||
|
</Task>
|
||||||
|
</UsingTask>
|
||||||
|
|
||||||
|
<!--see py/py.mk under #qstr data-->
|
||||||
|
<Target Name="MakeQstrData" DependsOnTargets="MakeDestDir">
|
||||||
|
<PropertyGroup>
|
||||||
|
<PreProc>$(DestDir)qstrdefs.preprocessed.h</PreProc>
|
||||||
|
<QstrDefs>$(MsBuildThisFileDirectory)..\..\unix\qstrdefsport.h</QstrDefs>
|
||||||
|
<DestFile>$(DestDir)qstrdefs.generated.h</DestFile>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Exec Command="cl /I$(SrcDir) /I$(MsBuildThisFileDirectory).. /Fi$(PreProc) /P $(SrcDir)qstrdefs.h"/>
|
||||||
|
<Exec Command="python $(SrcDir)makeqstrdata.py $(PreProc) $(QstrDefs) > $(DestFile)"/>
|
||||||
|
<MakeSameWriteTime SourceFile="$(MsBuildThisFile)" DestFile="$(DestFile)"/>
|
||||||
|
</Target>
|
||||||
|
|
||||||
|
<!--see py/py-version.sh-->
|
||||||
|
<Target Name="GetGitState">
|
||||||
|
<Exec Command="git describe --dirty --always" ConsoleToMSBuild="true" IgnoreExitCode="true">
|
||||||
|
<Output TaskParameter="ConsoleOutput" PropertyName="GitTag" />
|
||||||
|
</Exec>
|
||||||
|
<Exec Command="git rev-parse --short HEAD 2>NUL || echo unknown" ConsoleToMSBuild="true" IgnoreExitCode="true">
|
||||||
|
<Output TaskParameter="ConsoleOutput" PropertyName="GitHash" />
|
||||||
|
</Exec>
|
||||||
|
<Exec Command="git diff --no-ext-diff --quiet --exit-code 2>NUL || echo 0" ConsoleToMSBuild="true" IgnoreExitCode="true">
|
||||||
|
<Output TaskParameter="ConsoleOutput" PropertyName="GitFilesAreClean" />
|
||||||
|
</Exec>
|
||||||
|
<Exec Command="git diff-index --cached --quiet HEAD -- 2>NUL || echo 0" ConsoleToMSBuild="true" IgnoreExitCode="true" Condition="'$(GitFilesAreClean)'==''">
|
||||||
|
<Output TaskParameter="ConsoleOutput" PropertyName="GitFilesAreClean" />
|
||||||
|
</Exec>
|
||||||
|
</Target>
|
||||||
|
|
||||||
|
<Target Name="MakeVersionHeader" DependsOnTargets="MakeDestDir;GetGitState">
|
||||||
|
<PropertyGroup Condition="'$(GitFilesAreClean)'=='0'">
|
||||||
|
<GitHash>$(GitHash)-dirty</GitHash>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup>
|
||||||
|
<DestFile>$(DestDir)py-version.h</DestFile>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Lines Include="// This file was generated by $([System.IO.Path]::GetFileName(`$(MsBuildThisFile)`))"/>
|
||||||
|
<Lines Include="#define MICROPY_GIT_TAG "$(GitTag)""/>
|
||||||
|
<Lines Include="#define MICROPY_GIT_HASH "$(GitHash)""/>
|
||||||
|
<Lines Include="#define MICROPY_BUILD_DATE "$([System.DateTime]::Now.ToString(`yyyy-MM-dd`))""/>
|
||||||
|
</ItemGroup>
|
||||||
|
<WriteLinesToFile Lines="@(Lines)" File="$(DestFile)" Overwrite="true"/>
|
||||||
|
<MakeSameWriteTime SourceFile="$(MsBuildThisFile)" DestFile="$(DestFile)"/>
|
||||||
|
</Target>
|
||||||
|
|
||||||
|
</Project>
|
|
@ -0,0 +1,16 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ImportGroup Label="PropertySheets" />
|
||||||
|
<PropertyGroup Label="UserMacros" />
|
||||||
|
<PropertyGroup />
|
||||||
|
<ItemDefinitionGroup>
|
||||||
|
<Link>
|
||||||
|
<OptimizeReferences>true</OptimizeReferences>
|
||||||
|
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||||
|
</Link>
|
||||||
|
<ClCompile>
|
||||||
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
|
</ClCompile>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemGroup />
|
||||||
|
</Project>
|
|
@ -0,0 +1,44 @@
|
||||||
|
/*
|
||||||
|
* This file is part of the Micro Python project, http://micropython.org/
|
||||||
|
*
|
||||||
|
* The MIT License (MIT)
|
||||||
|
*
|
||||||
|
* Copyright (c) 2013, 2014 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdarg.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <malloc.h>
|
||||||
|
|
||||||
|
// _snprintf/vsnprintf are fine, except the 'F' specifier is not handled
|
||||||
|
int snprintf(char *dest, size_t count, const char *format, ...) {
|
||||||
|
const size_t fmtLen = strlen(format) + 1;
|
||||||
|
char *fixedFmt = alloca(fmtLen);
|
||||||
|
for (size_t i = 0; i < fmtLen; ++i)
|
||||||
|
fixedFmt[i] = format[i] == 'F' ? 'f' : format[i];
|
||||||
|
|
||||||
|
va_list args;
|
||||||
|
va_start(args, format);
|
||||||
|
const int ret = vsnprintf(dest, count, fixedFmt, args);
|
||||||
|
va_end(args);
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
|
@ -0,0 +1,17 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<PropertyGroup>
|
||||||
|
<PyBaseDir>$(MsbuildThisFileDirectory)..\..\</PyBaseDir>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClCompile Include="$(PyBaseDir)py\*.c" />
|
||||||
|
<ClCompile Include="$(PyBaseDir)unix\*.c" Exclude="$(PyBaseDir)unix\mod*.c" />
|
||||||
|
<ClCompile Include="$(PyBaseDir)windows\*.c" />
|
||||||
|
<ClCompile Include="$(PyBaseDir)windows\msvc\*.c" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClInclude Include="$(PyBaseDir)py\*.h" />
|
||||||
|
<ClInclude Include="$(PyBaseDir)windows\*.h" />
|
||||||
|
<ClInclude Include="$(PyBaseDir)windows\msvc\*.h" />
|
||||||
|
</ItemGroup>
|
||||||
|
</Project>
|
|
@ -0,0 +1,28 @@
|
||||||
|
/*
|
||||||
|
* This file is part of the Micro Python project, http://micropython.org/
|
||||||
|
*
|
||||||
|
* The MIT License (MIT)
|
||||||
|
*
|
||||||
|
* Copyright (c) 2013, 2014 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
// There's no unistd.h, but this is the equivalent
|
||||||
|
#include <io.h>
|
Ładowanie…
Reference in New Issue