8 Commits

Author SHA1 Message Date
Jean-Baptiste Nahan aa4b050abe Replace x86 by aarch64 2024-11-17 14:34:18 +01:00
Jean-Baptiste Nahan d31971c8d3 Update libffi.vcxproj ARM64 2024-11-17 14:21:44 +01:00
Jean-Baptiste Nahan 3241d7dd93 Update libffi.vcxproj add file 2024-11-17 14:17:49 +01:00
Jean-Baptiste Nahan 1c03488572 Update libffi-msvc.sln ARM64 2024-11-17 14:17:08 +01:00
Jean-Baptiste Nahan d766090376 Update libffi-msvc.sln 2024-11-17 14:14:08 +01:00
Niels Dossche b23cb59f87 x86: Fix MSVC runtime checks interop (#6)
MSVC can add runtime code that checks if a stack frame is mismanaged,
however our custom assembly deliberately accesses and modifies the parent
stack frame.  Fortunately we can disable that specific check for the
function call so do that.

Co-authored-by: Ole André Vadla Ravnås <oleavr@gmail.com>
Co-authored-by: Matthew Waters <matthew@centricular.com>
2024-10-29 18:57:21 +01:00
Christoph M. Becker 43524e5240 Update for VS17 2024-10-29 18:21:37 +01:00
Christoph M. Becker 921491ac93 Add winlibs.mak 2020-11-17 18:46:29 +01:00
9 changed files with 439 additions and 0 deletions
+10
View File
@@ -258,6 +258,13 @@ static const struct abi_params abi_params[FFI_LAST_ABI] = {
extern void FFI_DECLARE_FASTCALL ffi_call_i386(struct call_frame *, char *) FFI_HIDDEN;
/* We perform some black magic here to use some of the parent's stack frame in
* ffi_call_i386() that breaks with the MSVC compiler with the /RTCs or /GZ
* flags. Disable the 'Stack frame run time error checking' for this function
* so we don't hit weird exceptions in debug builds. */
#if defined(_MSC_VER)
#pragma runtime_checks("s", off)
#endif
static void
ffi_call_int (ffi_cif *cif, void (*fn)(void), void *rvalue,
void **avalue, void *closure)
@@ -393,6 +400,9 @@ ffi_call_int (ffi_cif *cif, void (*fn)(void), void *rvalue,
ffi_call_i386 (frame, stack);
}
#if defined(_MSC_VER)
#pragma runtime_checks("s", restore)
#endif
void
ffi_call (ffi_cif *cif, void (*fn)(void), void *rvalue, void **avalue)
+10
View File
@@ -108,6 +108,13 @@ EFI64(ffi_prep_cif_machdep)(ffi_cif *cif)
return FFI_OK;
}
/* We perform some black magic here to use some of the parent's stack frame in
* ffi_call_win64() that breaks with the MSVC compiler with the /RTCs or /GZ
* flags. Disable the 'Stack frame run time error checking' for this function
* so we don't hit weird exceptions in debug builds. */
#if defined(_MSC_VER)
#pragma runtime_checks("s", off)
#endif
static void
ffi_call_int (ffi_cif *cif, void (*fn)(void), void *rvalue,
void **avalue, void *closure)
@@ -172,6 +179,9 @@ ffi_call_int (ffi_cif *cif, void (*fn)(void), void *rvalue,
ffi_call_win64 (stack, frame, closure);
}
#if defined(_MSC_VER)
#pragma runtime_checks("s", restore)
#endif
void
EFI64(ffi_call)(ffi_cif *cif, void (*fn)(void), void *rvalue, void **avalue)
+22
View File
@@ -0,0 +1,22 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 14
VisualStudioVersion = 14.0.23107.0
MinimumVisualStudioVersion = 10.0.40219.1
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libffi", "libffi\libffi.vcxproj", "{793F0ABE-66E5-48C0-9690-3060FF08AFF5}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|arm64 = Debug|arm64
Release|arm64 = Release|arm64
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{793F0ABE-66E5-48C0-9690-3060FF08AFF5}.Debug|arm64.ActiveCfg = Debug|arm64
{793F0ABE-66E5-48C0-9690-3060FF08AFF5}.Debug|arm64.Build.0 = Debug|arm64
{793F0ABE-66E5-48C0-9690-3060FF08AFF5}.Release|arm64.ActiveCfg = Release|arm64
{793F0ABE-66E5-48C0-9690-3060FF08AFF5}.Release|arm64.Build.0 = Release|arm64
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal
+107
View File
@@ -0,0 +1,107 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|arm64">
<Configuration>Debug</Configuration>
<Platform>arm64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|arm64">
<Configuration>Release</Configuration>
<Platform>arm64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{793F0ABE-66E5-48C0-9690-3060FF08AFF5}</ProjectGuid>
<Keyword>Win32Proj</Keyword>
<RootNamespace>libffi</RootNamespace>
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|arm64'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v143</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|arm64'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v143</PlatformToolset>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|arm64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|arm64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup />
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|arm64'">
<ClCompile>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions);FFI_BUILDING</PreprocessorDefinitions>
<AdditionalIncludeDirectories>$(ProjectDir);$(SolutionDir)..\..\include;$(SolutionDir)..\..\src\aarch64;$(SolutionDir)..\..\;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|arm64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<PrecompiledHeader>
</PrecompiledHeader>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions);FFI_BUILDING</PreprocessorDefinitions>
<AdditionalIncludeDirectories>$(ProjectDir);$(SolutionDir)..\..\include;$(SolutionDir)..\..\src\aarch64;$(SolutionDir)..\..\;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<CustomBuild Include="..\..\..\src\aarch64\win64_armasm.S">
<FileType>Document</FileType>
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|arm64'">
cl.exe /EP /I . /I $(SolutionDir)..\.. /I $(SolutionDir)..\..\include /I $(SolutionDir)..\..\src\aarch64 $(SolutionDir)..\..\src\aarch64\win64_armasm.S &gt; $(Configuration)/win64_plain.asm
ml64.exe /c /Cx /Fo $(Configuration)/win64.obj $(Configuration)/win64_plain.asm
</Command>
<Command Condition="'$(Configuration)|$(Platform)'=='Release|arm64'">cl.exe /EP /I . /I $(SolutionDir)..\.. /I $(SolutionDir)..\..\include /I $(SolutionDir)..\..\src\aarch64 $(SolutionDir)..\..\src\aarch64\win64_armasm.S &gt; $(Configuration)/win64_plain.asm
ml64.exe /c /Cx /Fo $(Configuration)/win64.obj $(Configuration)/win64_plain.asm
</Command>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|arm64'">$(Configuration)/win64.obj</Outputs>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|arm64'">$(Configuration)/win64.obj</Outputs>
</CustomBuild>
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\..\..\include\ffi.h" />
<ClInclude Include="..\..\..\fficonfig.h" />
</ItemGroup>
<ItemGroup>
<ClCompile Include="..\..\..\src\closures.c" />
<ClCompile Include="..\..\..\src\prep_cif.c" />
<ClCompile Include="..\..\..\src\raw_api.c" />
<ClCompile Include="..\..\..\src\types.c" />
<ClCompile Include="..\..\..\src\aarch64\ffi.c" />
<ClCompile Include="..\..\..\src\aarch64\ffitarget.c" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>
+22
View File
@@ -0,0 +1,22 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 14
VisualStudioVersion = 14.0.23107.0
MinimumVisualStudioVersion = 10.0.40219.1
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libffi", "libffi\libffi.vcxproj", "{793F0ABE-66E5-48C0-9690-3060FF08AFF5}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|x64 = Debug|x64
Release|x64 = Release|x64
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{793F0ABE-66E5-48C0-9690-3060FF08AFF5}.Debug|x64.ActiveCfg = Debug|x64
{793F0ABE-66E5-48C0-9690-3060FF08AFF5}.Debug|x64.Build.0 = Debug|x64
{793F0ABE-66E5-48C0-9690-3060FF08AFF5}.Release|x64.ActiveCfg = Release|x64
{793F0ABE-66E5-48C0-9690-3060FF08AFF5}.Release|x64.Build.0 = Release|x64
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal
+107
View File
@@ -0,0 +1,107 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<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>{793F0ABE-66E5-48C0-9690-3060FF08AFF5}</ProjectGuid>
<Keyword>Win32Proj</Keyword>
<RootNamespace>libffi</RootNamespace>
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v143</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v143</PlatformToolset>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup />
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions);FFI_BUILDING</PreprocessorDefinitions>
<AdditionalIncludeDirectories>$(ProjectDir);$(SolutionDir)..\..\include;$(SolutionDir)..\..\src\x86;$(SolutionDir)..\..\;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<PrecompiledHeader>
</PrecompiledHeader>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions);FFI_BUILDING</PreprocessorDefinitions>
<AdditionalIncludeDirectories>$(ProjectDir);$(SolutionDir)..\..\include;$(SolutionDir)..\..\src\x86;$(SolutionDir)..\..\;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<CustomBuild Include="..\..\..\src\x86\win64_intel.S">
<FileType>Document</FileType>
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
cl.exe /EP /I . /I $(SolutionDir)..\.. /I $(SolutionDir)..\..\include /I $(SolutionDir)..\..\src\x86 $(SolutionDir)..\..\src\x86\win64_intel.S &gt; $(Configuration)/win64_plain.asm
ml64.exe /c /Cx /Fo $(Configuration)/win64.obj $(Configuration)/win64_plain.asm
</Command>
<Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">cl.exe /EP /I . /I $(SolutionDir)..\.. /I $(SolutionDir)..\..\include /I $(SolutionDir)..\..\src\x86 $(SolutionDir)..\..\src\x86\win64_intel.S &gt; $(Configuration)/win64_plain.asm
ml64.exe /c /Cx /Fo $(Configuration)/win64.obj $(Configuration)/win64_plain.asm
</Command>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Configuration)/win64.obj</Outputs>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Configuration)/win64.obj</Outputs>
</CustomBuild>
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\..\..\include\ffi.h" />
<ClInclude Include="..\..\..\fficonfig.h" />
</ItemGroup>
<ItemGroup>
<ClCompile Include="..\..\..\src\closures.c" />
<ClCompile Include="..\..\..\src\prep_cif.c" />
<ClCompile Include="..\..\..\src\raw_api.c" />
<ClCompile Include="..\..\..\src\types.c" />
<ClCompile Include="..\..\..\src\x86\ffi.c" />
<ClCompile Include="..\..\..\src\x86\ffiw64.c" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>
+22
View File
@@ -0,0 +1,22 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 14
VisualStudioVersion = 14.0.23107.0
MinimumVisualStudioVersion = 10.0.40219.1
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libffi", "libffi\libffi.vcxproj", "{793F0ABE-66E5-48C0-9690-3060FF08AFF5}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Win32 = Debug|Win32
Release|Win32 = Release|Win32
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{793F0ABE-66E5-48C0-9690-3060FF08AFF5}.Debug|Win32.ActiveCfg = Debug|Win32
{793F0ABE-66E5-48C0-9690-3060FF08AFF5}.Debug|Win32.Build.0 = Debug|Win32
{793F0ABE-66E5-48C0-9690-3060FF08AFF5}.Release|Win32.ActiveCfg = Release|Win32
{793F0ABE-66E5-48C0-9690-3060FF08AFF5}.Release|Win32.Build.0 = Release|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal
+105
View File
@@ -0,0 +1,105 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="15.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>
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{793F0ABE-66E5-48C0-9690-3060FF08AFF5}</ProjectGuid>
<Keyword>Win32Proj</Keyword>
<RootNamespace>libffi</RootNamespace>
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v143</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v143</PlatformToolset>
</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" />
</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" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup />
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions);FFI_BUILDING</PreprocessorDefinitions>
<AdditionalIncludeDirectories>$(ProjectDir);$(SolutionDir)..\..\include;$(SolutionDir)..\..\src\x86;$(SolutionDir)..\..\;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<PrecompiledHeader>
</PrecompiledHeader>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions);FFI_BUILDING</PreprocessorDefinitions>
<AdditionalIncludeDirectories>$(ProjectDir);$(SolutionDir)..\..\include;$(SolutionDir)..\..\src\x86;$(SolutionDir)..\..\;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<CustomBuild Include="..\..\..\src\x86\sysv_intel.S">
<FileType>Document</FileType>
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
cl.exe /EP /I . /I $(SolutionDir)..\.. /I $(SolutionDir)..\..\include /I $(SolutionDir)..\..\src\x86 $(SolutionDir)..\..\src\x86\sysv_intel.S &gt; $(Configuration)/win32_plain.asm
ml.exe /c /Cx /coff /safeseh /Fo $(Configuration)/win32.obj $(Configuration)/win32_plain.asm
</Command>
<Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
cl.exe /EP /I . /I $(SolutionDir)..\.. /I $(SolutionDir)..\..\include /I $(SolutionDir)..\..\src\x86 $(SolutionDir)..\..\src\x86\sysv_intel.S &gt; $(Configuration)/win32_plain.asm
ml.exe /c /Cx /coff /safeseh /Fo $(Configuration)/win32.obj $(Configuration)/win32_plain.asm
</Command>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Configuration)/win32.obj</Outputs>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Configuration)/win32.obj</Outputs>
</CustomBuild>
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\..\..\include\ffi.h" />
<ClInclude Include="..\..\..\fficonfig.h" />
</ItemGroup>
<ItemGroup>
<ClCompile Include="..\..\..\src\closures.c" />
<ClCompile Include="..\..\..\src\prep_cif.c" />
<ClCompile Include="..\..\..\src\raw_api.c" />
<ClCompile Include="..\..\..\src\types.c" />
<ClCompile Include="..\..\..\src\x86\ffi.c" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>
+34
View File
@@ -0,0 +1,34 @@
!IFNDEF VERSION
VERSION=unknown
!ENDIF
!IF "$(PHP_SDK_ARCH)" == "x64"
PLATFORM=x64
SUBFOLDER=x64
!ELSE
PLATFORM=Win32
SUBFOLDER=
!ENDIF
OUTPUT=$(MAKEDIR)\..\libffi-$(VERSION)-$(PHP_SDK_VS)-$(PHP_SDK_ARCH)
ARCHIVE=$(OUTPUT).zip
all:
git checkout .
git clean -fdx
cd win32\$(PHP_SDK_VS)_$(PHP_SDK_ARCH)
msbuild libffi-msvc.sln /p:Configuration=Release /p:Platform=$(PLATFORM)
cd ..\..
-rmdir /s /q $(OUTPUT)
xcopy include\ffi.h $(OUTPUT)\include\*
# sed -i "s/#if defined _MSC_VER && !defined FFI_BUILDING/#if 0 \/*defined _MSC_VER \&\& !defined FFI_BUILDING*\//" $(OUTPUT)\include\ffi.h
sed -i "s/#define LIBFFI_H/#define LIBFFI_H\n#define FFI_BUILDING/" $(OUTPUT)\include\ffi.h
xcopy src\x86\ffitarget.h $(OUTPUT)\include\*
xcopy fficonfig.h $(OUTPUT)\include\*
xcopy win32\$(PHP_SDK_VS)_$(PHP_SDK_ARCH)\$(SUBFOLDER)\Release\libffi.lib $(OUTPUT)\lib\*
xcopy win32\$(PHP_SDK_VS)_$(PHP_SDK_ARCH)\libffi\$(SUBFOLDER)\Release\libffi.pdb $(OUTPUT)\lib\*
del $(ARCHIVE)
7za a $(ARCHIVE) $(OUTPUT)\*