mirror of
https://github.com/Z3Prover/z3
synced 2025-04-13 12:28:44 +00:00
Merge branch 'unstable' of https://git01.codeplex.com/z3 into unstable
This commit is contained in:
commit
99e94e3263
12
configure.ac
12
configure.ac
|
@ -1,4 +1,6 @@
|
|||
AC_INIT([z3], [4.2])
|
||||
AC_CONFIG_SRCDIR(src/util/util.cpp)
|
||||
AC_PREFIX_DEFAULT(/usr)
|
||||
|
||||
###################
|
||||
#
|
||||
|
@ -80,7 +82,12 @@ fi
|
|||
#
|
||||
###################
|
||||
# Sets CXX
|
||||
AC_PROG_CXX(g++)
|
||||
AC_LANG([C++])
|
||||
AC_PROG_CXX(g++ false)
|
||||
AC_PROG_CC
|
||||
if test $CXX = "false"; then
|
||||
AC_MSG_ERROR([C++ compiler was not found])
|
||||
fi
|
||||
|
||||
AC_PROG_MAKE_SET
|
||||
|
||||
|
@ -108,6 +115,7 @@ host_os=`uname -s`
|
|||
AS_IF([test "$host_os" = "Darwin"], [
|
||||
PLATFORM=osx
|
||||
SO_EXT=.dylib
|
||||
LDFLAGS=
|
||||
SLIBFLAGS="-dynamiclib -fopenmp"
|
||||
SLIBEXTRAFLAGS=""
|
||||
COMP_VERSIONS="-compatibility_version \$(Z3_VERSION) -current_version \$(Z3_VERSION)"
|
||||
|
@ -115,6 +123,7 @@ AS_IF([test "$host_os" = "Darwin"], [
|
|||
], [test "$host_os" = "Linux"], [
|
||||
PLATFORM=linux
|
||||
SO_EXT=.so
|
||||
LDFLAGS=-lrt
|
||||
SLIBFLAGS="-shared -fopenmp"
|
||||
SLIBEXTRAFLAGS=
|
||||
COMP_VERSIONS=
|
||||
|
@ -133,6 +142,7 @@ AS_IF([test "$host_os" = "Darwin"], [
|
|||
AC_MSG_ERROR([Unknown host platform: $host_os])
|
||||
])
|
||||
AC_SUBST(SLIBFLAGS)
|
||||
AC_SUBST(LDFLAGS)
|
||||
AC_SUBST(SLIBEXTRAFLAGS)
|
||||
AC_SUBST(SO_EXT)
|
||||
|
||||
|
|
10
examples/c++/README
Normal file
10
examples/c++/README
Normal file
|
@ -0,0 +1,10 @@
|
|||
Small example using the c++ bindings.
|
||||
To build the example execute
|
||||
make examples
|
||||
in the build directory.
|
||||
|
||||
This command will create the executable cpp_example.
|
||||
On Windows, you can just execute it.
|
||||
On OSX and Linux, you must install z3 first using
|
||||
sudo make install
|
||||
OR update LD_LIBRARY_PATH (Linux) or DYLD_LIBRARY_PATH (OSX) with the build directory. You need that to be able to find the Z3 shared library.
|
|
@ -1,24 +0,0 @@
|
|||
This directory contains scripts to build the test application using
|
||||
Microsoft C compiler, or g++.
|
||||
|
||||
1) Using Microsoft C compiler
|
||||
|
||||
Use 'build.cmd' to build the test application using Microsoft C
|
||||
compiler.
|
||||
|
||||
Remark: The Microsoft C compiler (cl) must be in your path,
|
||||
or you can use the Visual Studio Command Prompt.
|
||||
|
||||
The script 'exec.cmd' adds the bin directory to the path. So,
|
||||
example.exe can find z3.dll.
|
||||
|
||||
2) Using gcc
|
||||
|
||||
You must install Z3 before running this example.
|
||||
To install Z3, execute the following command in the Z3 root directory.
|
||||
|
||||
sudo make install
|
||||
|
||||
Use 'build.sh' to build the test application using g++.
|
||||
It generates the executable 'example'.
|
||||
|
|
@ -1 +0,0 @@
|
|||
cl /EHsc /I ..\..\include /I . ..\..\bin\z3.lib example.cpp
|
|
@ -1 +0,0 @@
|
|||
cl /W3 /EHsc /I ..\lib ..\debug\z3_dbg.lib example.cpp
|
|
@ -1,9 +0,0 @@
|
|||
if g++ -fopenmp -o example example.cpp -lz3; then
|
||||
echo "Example was successfully compiled."
|
||||
echo "To run example, execute:"
|
||||
echo " ./example"
|
||||
else
|
||||
echo "You must install Z3 before compiling this example."
|
||||
echo "To install Z3, execute the following command in the Z3 root directory."
|
||||
echo " sudo make install"
|
||||
fi
|
|
@ -1,5 +0,0 @@
|
|||
@echo off
|
||||
SETLOCAL
|
||||
set PATH=..\..\bin;%PATH%
|
||||
example.exe
|
||||
ENDLOCAL
|
11
examples/c/README
Normal file
11
examples/c/README
Normal file
|
@ -0,0 +1,11 @@
|
|||
Small example using the c++ bindings.
|
||||
To build the example execute
|
||||
make examples
|
||||
in the build directory.
|
||||
|
||||
This command will create the executable c_example.
|
||||
On Windows, you can just execute it.
|
||||
On OSX and Linux, you must install z3 first using
|
||||
sudo make install
|
||||
OR update LD_LIBRARY_PATH (Linux) or DYLD_LIBRARY_PATH (OSX) with the build directory. You need that to be able to find the Z3 shared library.
|
||||
|
7
examples/dotnet/README
Normal file
7
examples/dotnet/README
Normal file
|
@ -0,0 +1,7 @@
|
|||
Small example using the .Net bindings.
|
||||
This example is only built if you have Visual Studio.
|
||||
To build the example execute
|
||||
make examples
|
||||
in the build directory.
|
||||
|
||||
It will create the executable dotnet_example.exe
|
12
examples/maxsat/README
Normal file
12
examples/maxsat/README
Normal file
|
@ -0,0 +1,12 @@
|
|||
Small example using the c++ bindings.
|
||||
To build the example execute
|
||||
make examples
|
||||
in the build directory.
|
||||
|
||||
This command will create the executable maxsat.
|
||||
On Windows, you can just execute it.
|
||||
On OSX and Linux, you must install z3 first using
|
||||
sudo make install
|
||||
OR update LD_LIBRARY_PATH (Linux) or DYLD_LIBRARY_PATH (OSX) with the build directory. You need that to be able to find the Z3 shared library.
|
||||
|
||||
This directory contains a test file (ex.smt) that can be use as input for the maxsat test application.
|
|
@ -1,16 +0,0 @@
|
|||
WARNING: this example still uses the old Z3 (version 3.x) C API.
|
||||
The current version is backward compatible.
|
||||
|
||||
This directory contains scripts to build the MaxSAT application using
|
||||
Microsoft C compiler, or gcc.
|
||||
|
||||
1) Using Microsoft C compiler (with binary release)
|
||||
|
||||
Use 'build.cmd' to build the MaxSAT application using Microsoft C compiler.
|
||||
|
||||
Remark: The Microsoft C compiler (cl) must be in your path,
|
||||
or you can use the Visual Studio Command Prompt.
|
||||
|
||||
The script 'exec.cmd' adds the bin directory to the path. So,
|
||||
maxsat.exe can find z3.dll.
|
||||
|
|
@ -1,28 +0,0 @@
|
|||
WARNING: this example still uses the old Z3 (version 3.x) C API.
|
||||
The current version is backward compatible.
|
||||
|
||||
1) Using Visual Studio (with Z3 source code release)
|
||||
|
||||
The maxsat example application is automatically built when the z3-prover.sln is processed. The following command should be used to compile z3-prover.sln in the Z3 root directory
|
||||
|
||||
msbuild /p:configuration=external
|
||||
|
||||
The maxsat executable is located at
|
||||
|
||||
..\external\maxsat
|
||||
|
||||
To process ex.smt, use
|
||||
|
||||
..\external\maxsat ex.smt
|
||||
|
||||
2) Using gcc (on Linux or OSX)
|
||||
|
||||
Use 'build.sh' to build the MaxSAT application using gcc.
|
||||
|
||||
You must install Z3 before running this example.
|
||||
To install Z3, execute the following command in the Z3 root directory.
|
||||
|
||||
sudo make install
|
||||
|
||||
Use 'build.sh' to build the test application using gcc.
|
||||
It generates the executable 'maxsat'.
|
|
@ -1 +0,0 @@
|
|||
cl /I ..\..\include ..\..\bin\z3.lib maxsat.c
|
|
@ -1,9 +0,0 @@
|
|||
if gcc -fopenmp -o maxsat maxsat.c -lz3; then
|
||||
echo "maxsat example was successfully compiled."
|
||||
echo "To run example, execute:"
|
||||
echo " ./maxsat ex.smt"
|
||||
else
|
||||
echo "You must install Z3 before compiling this example."
|
||||
echo "To install Z3, execute the following command in the Z3 root directory."
|
||||
echo " sudo make install"
|
||||
fi
|
|
@ -1,5 +0,0 @@
|
|||
@echo off
|
||||
SETLOCAL
|
||||
set PATH=..\..\bin;%PATH%
|
||||
maxsat.exe %1
|
||||
ENDLOCAL
|
|
@ -1,295 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup Label="ProjectConfigurations">
|
||||
<ProjectConfiguration Include="commercial|Win32">
|
||||
<Configuration>commercial</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="commercial|x64">
|
||||
<Configuration>commercial</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Debug|Win32">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Debug|x64">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="external|Win32">
|
||||
<Configuration>external</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="external|x64">
|
||||
<Configuration>external</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|Win32">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|x64">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
</ItemGroup>
|
||||
<PropertyGroup Label="Globals">
|
||||
<ProjectGuid>{7C154132-AAAB-4F60-B652-F8C51A63D244}</ProjectGuid>
|
||||
<Keyword>Win32Proj</Keyword>
|
||||
<RootNamespace>maxsat</RootNamespace>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='external|Win32'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='external|x64'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='commercial|Win32'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='commercial|x64'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<CharacterSet>Unicode</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" />
|
||||
</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 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>
|
||||
<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>
|
||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='external|Win32'" 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)'=='external|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)'=='commercial|Win32'" 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)'=='commercial|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 Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<LinkIncremental>true</LinkIncremental>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<LinkIncremental>true</LinkIncremental>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<LinkIncremental>false</LinkIncremental>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<LinkIncremental>false</LinkIncremental>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='external|Win32'">
|
||||
<LinkIncremental>false</LinkIncremental>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='external|x64'">
|
||||
<LinkIncremental>false</LinkIncremental>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='commercial|Win32'">
|
||||
<LinkIncremental>false</LinkIncremental>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='commercial|x64'">
|
||||
<LinkIncremental>false</LinkIncremental>
|
||||
</PropertyGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<ClCompile>
|
||||
<PrecompiledHeader>
|
||||
</PrecompiledHeader>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<Optimization>Disabled</Optimization>
|
||||
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<AdditionalIncludeDirectories>..\lib</AdditionalIncludeDirectories>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<RandomizedBaseAddress>false</RandomizedBaseAddress>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<ClCompile>
|
||||
<PrecompiledHeader>
|
||||
</PrecompiledHeader>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<Optimization>Disabled</Optimization>
|
||||
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<AdditionalIncludeDirectories>..\lib</AdditionalIncludeDirectories>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<RandomizedBaseAddress>false</RandomizedBaseAddress>
|
||||
</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;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<AdditionalIncludeDirectories>..\lib</AdditionalIncludeDirectories>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
</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;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<AdditionalIncludeDirectories>..\lib</AdditionalIncludeDirectories>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='external|Win32'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<PrecompiledHeader>
|
||||
</PrecompiledHeader>
|
||||
<Optimization>MaxSpeed</Optimization>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<AdditionalIncludeDirectories>..\lib</AdditionalIncludeDirectories>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='external|x64'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<PrecompiledHeader>
|
||||
</PrecompiledHeader>
|
||||
<Optimization>MaxSpeed</Optimization>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<PreprocessorDefinitions>_AMD64_;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<AdditionalIncludeDirectories>..\lib</AdditionalIncludeDirectories>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='commercial|Win32'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<PrecompiledHeader>
|
||||
</PrecompiledHeader>
|
||||
<Optimization>MaxSpeed</Optimization>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<AdditionalIncludeDirectories>..\lib</AdditionalIncludeDirectories>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='commercial|x64'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<PrecompiledHeader>
|
||||
</PrecompiledHeader>
|
||||
<Optimization>MaxSpeed</Optimization>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<AdditionalIncludeDirectories>..\lib</AdditionalIncludeDirectories>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="maxsat.c" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\lib\lib.vcxproj">
|
||||
<Project>{4a7e5a93-19d8-4382-8950-fb2edec7a76e}</Project>
|
||||
<Private>true</Private>
|
||||
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
|
||||
<CopyLocalSatelliteAssemblies>false</CopyLocalSatelliteAssemblies>
|
||||
<LinkLibraryDependencies>true</LinkLibraryDependencies>
|
||||
<UseLibraryDependencyInputs>false</UseLibraryDependencyInputs>
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
<ImportGroup Label="ExtensionTargets">
|
||||
</ImportGroup>
|
||||
</Project>
|
4
examples/python/README
Normal file
4
examples/python/README
Normal file
|
@ -0,0 +1,4 @@
|
|||
The example is copied to the build directory during configuration.
|
||||
You can execute it using
|
||||
python example.py
|
||||
in the build directory after you build Z3.
|
|
@ -1,25 +0,0 @@
|
|||
WARNING: this example still uses the old Z3 (version 3.x) C API.
|
||||
The current version is backward compatible.
|
||||
|
||||
1) Using Visual Studio (with Z3 source code release)
|
||||
|
||||
The test_capi application is automatically built when the z3-prover.sln is processed. The following command should be used to compile z3-prover.sln in the Z3 root directory
|
||||
|
||||
msbuild /p:configuration=external
|
||||
|
||||
The maxsat executable is located at
|
||||
|
||||
..\external\test_capi
|
||||
|
||||
2) Using gcc (on Linux or OSX)
|
||||
|
||||
Use 'build.sh' to build the test application using gcc.
|
||||
|
||||
You must install Z3 before running this example.
|
||||
To install Z3, execute the following command in the Z3 root directory.
|
||||
|
||||
sudo make install
|
||||
|
||||
Use 'build.sh' to build the test application using gcc.
|
||||
It generates the executable 'test_capi'.
|
||||
|
|
@ -1,9 +0,0 @@
|
|||
if gcc -fopenmp -o test_capi test_capi.c -lz3; then
|
||||
echo "test_capi applicatio was successfully compiled."
|
||||
echo "To try it, execute:"
|
||||
echo " ./test_capi"
|
||||
else
|
||||
echo "You must install Z3 before compiling this example."
|
||||
echo "To install Z3, execute the following command in the Z3 root directory."
|
||||
echo " sudo make install"
|
||||
fi
|
|
@ -1,430 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup Label="ProjectConfigurations">
|
||||
<ProjectConfiguration Include="commercial|Win32">
|
||||
<Configuration>commercial</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="commercial|x64">
|
||||
<Configuration>commercial</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Debug|Win32">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Debug|x64">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="external|Win32">
|
||||
<Configuration>external</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="external|x64">
|
||||
<Configuration>external</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="release_mt|Win32">
|
||||
<Configuration>release_mt</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="release_mt|x64">
|
||||
<Configuration>release_mt</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|Win32">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|x64">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
</ItemGroup>
|
||||
<PropertyGroup Label="Globals">
|
||||
<ProjectGuid>{9E76526D-EDA2-4B88-9616-A8FC08F31071}</ProjectGuid>
|
||||
<RootNamespace>test_capi</RootNamespace>
|
||||
<Keyword>Win32Proj</Keyword>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='external|Win32'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='commercial|Win32'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='release_mt|Win32'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='external|x64'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='commercial|x64'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='release_mt|x64'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<ImportGroup Label="ExtensionSettings">
|
||||
</ImportGroup>
|
||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" 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)'=='external|Win32'" 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)'=='commercial|Win32'" 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_mt|Win32'" 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)'=='Debug|Win32'" 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>
|
||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='external|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)'=='commercial|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_mt|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)'=='Debug|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>
|
||||
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
|
||||
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)$(Configuration)\</OutDir>
|
||||
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Configuration)\</IntDir>
|
||||
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
|
||||
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
|
||||
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)\$(Configuration)\</IntDir>
|
||||
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental>
|
||||
<OutDir Condition="'$(Configuration)|$(Platform)'=='release_mt|Win32'">$(SolutionDir)$(Configuration)\</OutDir>
|
||||
<IntDir Condition="'$(Configuration)|$(Platform)'=='release_mt|Win32'">$(Configuration)\</IntDir>
|
||||
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='release_mt|Win32'">false</LinkIncremental>
|
||||
<OutDir Condition="'$(Configuration)|$(Platform)'=='release_mt|x64'">$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
|
||||
<IntDir Condition="'$(Configuration)|$(Platform)'=='release_mt|x64'">$(Platform)\$(Configuration)\</IntDir>
|
||||
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='release_mt|x64'">false</LinkIncremental>
|
||||
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)$(Configuration)\</OutDir>
|
||||
<OutDir Condition="'$(Configuration)|$(Platform)'=='external|Win32'">$(SolutionDir)$(Configuration)\</OutDir>
|
||||
<OutDir Condition="'$(Configuration)|$(Platform)'=='commercial|Win32'">$(SolutionDir)$(Configuration)\</OutDir>
|
||||
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Configuration)\</IntDir>
|
||||
<IntDir Condition="'$(Configuration)|$(Platform)'=='external|Win32'">$(Configuration)\</IntDir>
|
||||
<IntDir Condition="'$(Configuration)|$(Platform)'=='commercial|Win32'">$(Configuration)\</IntDir>
|
||||
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
|
||||
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='external|Win32'">false</LinkIncremental>
|
||||
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='commercial|Win32'">false</LinkIncremental>
|
||||
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
|
||||
<OutDir Condition="'$(Configuration)|$(Platform)'=='external|x64'">$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
|
||||
<OutDir Condition="'$(Configuration)|$(Platform)'=='commercial|x64'">$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
|
||||
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)\$(Configuration)\</IntDir>
|
||||
<IntDir Condition="'$(Configuration)|$(Platform)'=='external|x64'">$(Platform)\$(Configuration)\</IntDir>
|
||||
<IntDir Condition="'$(Configuration)|$(Platform)'=='commercial|x64'">$(Platform)\$(Configuration)\</IntDir>
|
||||
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
|
||||
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='external|x64'">false</LinkIncremental>
|
||||
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='commercial|x64'">false</LinkIncremental>
|
||||
<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
|
||||
<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
|
||||
<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
|
||||
<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
|
||||
<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
|
||||
<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
|
||||
<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='release_mt|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
|
||||
<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='release_mt|Win32'" />
|
||||
<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='release_mt|Win32'" />
|
||||
<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='release_mt|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
|
||||
<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='release_mt|x64'" />
|
||||
<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='release_mt|x64'" />
|
||||
<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
|
||||
<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='external|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
|
||||
<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='commercial|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
|
||||
<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
|
||||
<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='external|Win32'" />
|
||||
<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='commercial|Win32'" />
|
||||
<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
|
||||
<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='external|Win32'" />
|
||||
<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='commercial|Win32'" />
|
||||
<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
|
||||
<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='external|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
|
||||
<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='commercial|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
|
||||
<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
|
||||
<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='external|x64'" />
|
||||
<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='commercial|x64'" />
|
||||
<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
|
||||
<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='external|x64'" />
|
||||
<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='commercial|x64'" />
|
||||
</PropertyGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<ClCompile>
|
||||
<Optimization>Disabled</Optimization>
|
||||
<AdditionalIncludeDirectories>..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>WIN32;_CONSOLE;Z3DEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<MinimalRebuild>true</MinimalRebuild>
|
||||
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
|
||||
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
|
||||
<PrecompiledHeader>
|
||||
</PrecompiledHeader>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<DebugInformationFormat>EditAndContinue</DebugInformationFormat>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<RandomizedBaseAddress>false</RandomizedBaseAddress>
|
||||
<DataExecutionPrevention>
|
||||
</DataExecutionPrevention>
|
||||
<TargetMachine>MachineX86</TargetMachine>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<Midl>
|
||||
<TargetEnvironment>X64</TargetEnvironment>
|
||||
</Midl>
|
||||
<ClCompile>
|
||||
<Optimization>Disabled</Optimization>
|
||||
<AdditionalIncludeDirectories>..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>WIN32;_CONSOLE;Z3DEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<MinimalRebuild>true</MinimalRebuild>
|
||||
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
|
||||
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
|
||||
<PrecompiledHeader>
|
||||
</PrecompiledHeader>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<TargetMachine>MachineX64</TargetMachine>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='release_mt|Win32'">
|
||||
<ClCompile>
|
||||
<WholeProgramOptimization>false</WholeProgramOptimization>
|
||||
<AdditionalIncludeDirectories>..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||
<PrecompiledHeader>
|
||||
</PrecompiledHeader>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<AdditionalDependencies>psapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<StackReserveSize>8388608</StackReserveSize>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<RandomizedBaseAddress>false</RandomizedBaseAddress>
|
||||
<DataExecutionPrevention>
|
||||
</DataExecutionPrevention>
|
||||
<TargetMachine>MachineX86</TargetMachine>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='release_mt|x64'">
|
||||
<Midl>
|
||||
<TargetEnvironment>X64</TargetEnvironment>
|
||||
</Midl>
|
||||
<ClCompile>
|
||||
<WholeProgramOptimization>false</WholeProgramOptimization>
|
||||
<AdditionalIncludeDirectories>..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||
<PrecompiledHeader>
|
||||
</PrecompiledHeader>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<AdditionalDependencies>psapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<StackReserveSize>8388608</StackReserveSize>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<TargetMachine>MachineX64</TargetMachine>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<ClCompile>
|
||||
<AdditionalIncludeDirectories>..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>WIN32;_CONSOLE;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
|
||||
<PrecompiledHeader>
|
||||
</PrecompiledHeader>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<RandomizedBaseAddress>false</RandomizedBaseAddress>
|
||||
<DataExecutionPrevention>
|
||||
</DataExecutionPrevention>
|
||||
<TargetMachine>MachineX86</TargetMachine>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='external|Win32'">
|
||||
<ClCompile>
|
||||
<AdditionalIncludeDirectories>..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>WIN32;_CONSOLE;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
|
||||
<PrecompiledHeader>
|
||||
</PrecompiledHeader>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<RandomizedBaseAddress>false</RandomizedBaseAddress>
|
||||
<DataExecutionPrevention>
|
||||
</DataExecutionPrevention>
|
||||
<TargetMachine>MachineX86</TargetMachine>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='commercial|Win32'">
|
||||
<ClCompile>
|
||||
<AdditionalIncludeDirectories>..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>WIN32;_CONSOLE;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
|
||||
<PrecompiledHeader>
|
||||
</PrecompiledHeader>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<RandomizedBaseAddress>false</RandomizedBaseAddress>
|
||||
<DataExecutionPrevention>
|
||||
</DataExecutionPrevention>
|
||||
<TargetMachine>MachineX86</TargetMachine>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<Midl>
|
||||
<TargetEnvironment>X64</TargetEnvironment>
|
||||
</Midl>
|
||||
<ClCompile>
|
||||
<AdditionalIncludeDirectories>..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>WIN32;_CONSOLE;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
|
||||
<PrecompiledHeader>
|
||||
</PrecompiledHeader>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<TargetMachine>MachineX64</TargetMachine>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='external|x64'">
|
||||
<Midl>
|
||||
<TargetEnvironment>X64</TargetEnvironment>
|
||||
</Midl>
|
||||
<ClCompile>
|
||||
<AdditionalIncludeDirectories>..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>WIN32;_CONSOLE;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
|
||||
<PrecompiledHeader>
|
||||
</PrecompiledHeader>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<TargetMachine>MachineX64</TargetMachine>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='commercial|x64'">
|
||||
<Midl>
|
||||
<TargetEnvironment>X64</TargetEnvironment>
|
||||
</Midl>
|
||||
<ClCompile>
|
||||
<AdditionalIncludeDirectories>..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>WIN32;_CONSOLE;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
|
||||
<PrecompiledHeader>
|
||||
</PrecompiledHeader>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<TargetMachine>MachineX64</TargetMachine>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="test_capi.c" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\dll\dll.vcxproj">
|
||||
<Project>{0bf8cb94-61c7-4545-ae55-c58d858aa8b6}</Project>
|
||||
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\lib\lib.vcxproj">
|
||||
<Project>{4a7e5a93-19d8-4382-8950-fb2edec7a76e}</Project>
|
||||
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
<ImportGroup Label="ExtensionTargets">
|
||||
</ImportGroup>
|
||||
</Project>
|
|
@ -1,4 +0,0 @@
|
|||
copy ..\..\external\Microsoft.Z3.dll .
|
||||
copy ..\..\external\Z3.dll .
|
||||
|
||||
csc /reference:..\..\external\Microsoft.Z3.dll /platform:anycpu /reference:System.Numerics.dll Program.cs
|
|
@ -1,133 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">x86</Platform>
|
||||
<ProductVersion>8.0.30703</ProductVersion>
|
||||
<SchemaVersion>2.0</SchemaVersion>
|
||||
<ProjectGuid>{D350BC78-8455-45D3-9759-073394378BF2}</ProjectGuid>
|
||||
<OutputType>Exe</OutputType>
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>test_mapi</RootNamespace>
|
||||
<AssemblyName>test_mapi</AssemblyName>
|
||||
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
|
||||
<TargetFrameworkProfile>Client</TargetFrameworkProfile>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
|
||||
<PlatformTarget>x86</PlatformTarget>
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>bin\Debug\</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
|
||||
<PlatformTarget>x86</PlatformTarget>
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<Optimize>true</Optimize>
|
||||
<OutputPath>bin\Release\</OutputPath>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup>
|
||||
<StartupObject>test_mapi.Program</StartupObject>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|AnyCPU'">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<OutputPath>bin\Debug\</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<DebugType>full</DebugType>
|
||||
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||
<CodeAnalysisLogFile>bin\Debug\test_mapi.exe.CodeAnalysisLog.xml</CodeAnalysisLogFile>
|
||||
<CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
|
||||
<CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
|
||||
<CodeAnalysisRuleSetDirectories>;C:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
|
||||
<CodeAnalysisIgnoreBuiltInRuleSets>true</CodeAnalysisIgnoreBuiltInRuleSets>
|
||||
<CodeAnalysisRuleDirectories>;C:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
|
||||
<CodeAnalysisIgnoreBuiltInRules>true</CodeAnalysisIgnoreBuiltInRules>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|AnyCPU'">
|
||||
<OutputPath>bin\Release\</OutputPath>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<Optimize>true</Optimize>
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||
<CodeAnalysisLogFile>bin\Release\test_mapi.exe.CodeAnalysisLog.xml</CodeAnalysisLogFile>
|
||||
<CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
|
||||
<CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
|
||||
<CodeAnalysisRuleSetDirectories>;C:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
|
||||
<CodeAnalysisIgnoreBuiltInRuleSets>true</CodeAnalysisIgnoreBuiltInRuleSets>
|
||||
<CodeAnalysisRuleDirectories>;C:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
|
||||
<CodeAnalysisIgnoreBuiltInRules>true</CodeAnalysisIgnoreBuiltInRules>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<OutputPath>bin\x64\Debug\</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<DebugType>full</DebugType>
|
||||
<PlatformTarget>x64</PlatformTarget>
|
||||
<CodeAnalysisLogFile>bin\Debug\test_mapi.exe.CodeAnalysisLog.xml</CodeAnalysisLogFile>
|
||||
<CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
|
||||
<CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
|
||||
<CodeAnalysisRuleSetDirectories>;C:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
|
||||
<CodeAnalysisIgnoreBuiltInRuleSets>true</CodeAnalysisIgnoreBuiltInRuleSets>
|
||||
<CodeAnalysisRuleDirectories>;C:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
|
||||
<CodeAnalysisIgnoreBuiltInRules>true</CodeAnalysisIgnoreBuiltInRules>
|
||||
<CodeAnalysisFailOnMissingRules>false</CodeAnalysisFailOnMissingRules>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
|
||||
<OutputPath>bin\x64\Release\</OutputPath>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<Optimize>true</Optimize>
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<PlatformTarget>x64</PlatformTarget>
|
||||
<CodeAnalysisLogFile>bin\Release\test_mapi.exe.CodeAnalysisLog.xml</CodeAnalysisLogFile>
|
||||
<CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
|
||||
<CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
|
||||
<CodeAnalysisRuleSetDirectories>;C:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
|
||||
<CodeAnalysisIgnoreBuiltInRuleSets>true</CodeAnalysisIgnoreBuiltInRuleSets>
|
||||
<CodeAnalysisRuleDirectories>;C:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
|
||||
<CodeAnalysisIgnoreBuiltInRules>true</CodeAnalysisIgnoreBuiltInRules>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Core" />
|
||||
<Reference Include="System.Numerics" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="Program.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Folder Include="Properties\" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\Microsoft.Z3.csproj">
|
||||
<Project>{EC3DB697-B734-42F7-9468-5B62821EEB5A}</Project>
|
||||
<Name>Microsoft.Z3</Name>
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
<PropertyGroup>
|
||||
<PostBuildEvent>
|
||||
</PostBuildEvent>
|
||||
</PropertyGroup>
|
||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||
Other similar extension points exist, see Microsoft.Common.targets.
|
||||
<Target Name="BeforeBuild">
|
||||
</Target>
|
||||
<Target Name="AfterBuild">
|
||||
</Target>
|
||||
-->
|
||||
</Project>
|
|
@ -1,5 +1,5 @@
|
|||
|
||||
|
||||
CC=@CC@
|
||||
PREFIX=@prefix@
|
||||
CXX=@CXX@
|
||||
CXXFLAGS=@CPPFLAGS@ @CXXFLAGS@ -DZ3DEBUG -D_TRACE -c -g -Wall -fopenmp -msse -msse2 -mfpmath=sse
|
||||
CXX_OUT_FLAG=-o
|
||||
|
@ -10,10 +10,11 @@ AR_FLAGS=rcs
|
|||
AR_OUTFLAG=
|
||||
EXE_EXT=
|
||||
LINK=@CXX@
|
||||
LINK_FLAGS=-lpthread -fopenmp
|
||||
LINK_FLAGS=
|
||||
LINK_OUT_FLAG=-o
|
||||
LINK_EXTRA_FLAGS=-lpthread -fopenmp @LDFLAGS@
|
||||
SO_EXT=@SO_EXT@
|
||||
SLINK=@CXX@
|
||||
SLINK_FLAGS=@SLIBFLAGS@
|
||||
SLINK_EXTRA_FLAGS=@SLIBEXTRAFLAGS@
|
||||
SLINK_OUT_FLAG=-o
|
||||
SLINK_OUT_FLAG=-o
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
|
||||
|
||||
CC=@CC@
|
||||
PREFIX=@prefix@
|
||||
CXX=@CXX@
|
||||
CXXFLAGS=@CPPFLAGS@ @CXXFLAGS@ -c -O3 -fomit-frame-pointer -fopenmp -msse -msse2 -mfpmath=sse
|
||||
CXX_OUT_FLAG=-o
|
||||
|
@ -10,10 +10,11 @@ AR_FLAGS=rcs
|
|||
AR_OUTFLAG=
|
||||
EXE_EXT=
|
||||
LINK=@CXX@
|
||||
LINK_FLAGS=-lpthread -fopenmp
|
||||
LINK_FLAGS=
|
||||
LINK_OUT_FLAG=-o
|
||||
LINK_EXTRA_FLAGS=-lpthread -fopenmp @LDFLAGS@
|
||||
SO_EXT=@SO_EXT@
|
||||
SLINK=@CXX@
|
||||
SLINK_FLAGS=@SLIBFLAGS@
|
||||
SLINK_EXTRA_FLAGS=@SLIBEXTRAFLAGS@
|
||||
SLINK_OUT_FLAG=-o
|
||||
SLINK_OUT_FLAG=-o
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
CC=cl
|
||||
CXX=cl
|
||||
CXXFLAGS=/c /Zi /nologo /W3 /WX- /Od /Oy- /D WIN32 /D _AMD64_ /D _DEBUG /D Z3DEBUG /D _CONSOLE /D _TRACE /D _WINDOWS /Gm /EHsc /RTC1 /MDd /GS /fp:precise /Zc:wchar_t /Zc:forScope /openmp /Gd /analyze-
|
||||
CXX_OUT_FLAG=/Fo
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
CC=cl
|
||||
CXX=cl
|
||||
CXXFLAGS=/c /ZI /nologo /W3 /WX- /Od /Oy- /D WIN32 /D _DEBUG /D Z3DEBUG /D _CONSOLE /D _TRACE /D _WINDOWS /Gm /EHsc /RTC1 /MDd /GS /fp:precise /Zc:wchar_t /Zc:forScope /openmp /Gd /analyze-
|
||||
CXXFLAGS=/c /Zi /nologo /W3 /WX- /Od /Oy- /D WIN32 /D _DEBUG /D Z3DEBUG /D _CONSOLE /D _TRACE /D _WINDOWS /Gm /EHsc /RTC1 /MDd /GS /fp:precise /Zc:wchar_t /Zc:forScope /openmp /Gd /analyze- /arch:SSE2
|
||||
CXX_OUT_FLAG=/Fo
|
||||
OBJ_EXT=.obj
|
||||
LIB_EXT=.lib
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
CC=cl
|
||||
CXX=cl
|
||||
CXXFLAGS=/c /Zi /nologo /W3 /WX- /O2 /D _EXTERNAL_RELEASE /D WIN32 /D NDEBUG /D _LIB /D _WINDOWS /D _AMD64_ /D _UNICODE /D UNICODE /Gm- /EHsc /MD /GS /fp:precise /Zc:wchar_t /Zc:forScope /Gd /TP
|
||||
CXX_OUT_FLAG=/Fo
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
CC=cl
|
||||
CXX=cl
|
||||
CXXFLAGS=/nologo /c /W3 /WX- /O2 /Oy- /D _EXTERNAL_RELEASE /D WIN32 /D NDEBUG /D _CONSOLE /D _WINDOWS /D ASYNC_COMMANDS /Gm- /EHsc /GS /fp:precise /Zc:wchar_t /Zc:forScope /openmp /Gd /analyze- /arch:SSE2
|
||||
CXX_OUT_FLAG=/Fo
|
||||
|
|
|
@ -9,6 +9,7 @@
|
|||
from mk_util import *
|
||||
|
||||
parse_options()
|
||||
check_eol()
|
||||
|
||||
add_lib('util', [])
|
||||
add_lib('polynomial', ['util'], 'math/polynomial')
|
||||
|
@ -30,8 +31,8 @@ add_lib('old_params', ['model', 'simplifier'])
|
|||
add_lib('cmd_context', ['tactic', 'rewriter', 'model', 'old_params', 'simplifier'])
|
||||
add_lib('substitution', ['ast'], 'ast/substitution')
|
||||
add_lib('normal_forms', ['rewriter', 'old_params'], 'ast/normal_forms')
|
||||
add_lib('parser_util', ['ast'])
|
||||
add_lib('smt2parser', ['cmd_context', 'parser_util'])
|
||||
add_lib('parser_util', ['ast'], 'parsers/util')
|
||||
add_lib('smt2parser', ['cmd_context', 'parser_util'], 'parsers/smt2')
|
||||
add_lib('pattern', ['normal_forms', 'smt2parser'], 'ast/pattern')
|
||||
add_lib('macros', ['simplifier', 'old_params'], 'ast/macros')
|
||||
add_lib('grobner', ['ast'], 'math/grobner')
|
||||
|
@ -59,14 +60,25 @@ add_lib('smtlogic_tactics', ['arith_tactics', 'bv_tactics', 'nlsat_tactic', 'smt
|
|||
add_lib('ufbv_tactic', ['normal_forms', 'core_tactics', 'macros', 'smt_tactic', 'rewriter'], 'tactic/ufbv')
|
||||
add_lib('portfolio', ['smtlogic_tactics', 'ufbv_tactic', 'fpa', 'aig', 'muz_qe', 'sls_tactic', 'subpaving_tactic'], 'tactic/portfolio')
|
||||
# TODO: delete SMT 1.0 frontend
|
||||
add_lib('api', ['portfolio', 'user_plugin'])
|
||||
add_lib('smtparser', ['portfolio'], 'parsers/smt')
|
||||
add_lib('api', ['portfolio', 'user_plugin', 'smtparser'],
|
||||
includes2install=['z3.h', 'z3_api.h', 'z3_v1.h', 'z3_macros.h'])
|
||||
add_exe('shell', ['api', 'sat', 'extra_cmds'], exe_name='z3')
|
||||
add_exe('test', ['api', 'fuzzing'], exe_name='test-z3')
|
||||
add_exe('test', ['api', 'fuzzing'], exe_name='test-z3', install=False)
|
||||
API_files = ['z3_api.h']
|
||||
add_dll('api_dll', ['api', 'sat', 'extra_cmds'], 'api/dll', reexports=['api'], dll_name='libz3', export_files=API_files)
|
||||
add_dot_net_dll('dotnet', ['api_dll'], 'bindings/dotnet/Microsoft.Z3', dll_name='Microsoft.Z3', assembly_info_dir='Properties')
|
||||
add_dot_net_dll('dotnetV3', ['api_dll'], 'bindings/dotnet/Microsoft.Z3V3', dll_name='Microsoft.Z3V3')
|
||||
set_python_dir('bindings/python')
|
||||
add_dll('api_dll', ['api', 'sat', 'extra_cmds'], 'api/dll',
|
||||
reexports=['api'],
|
||||
dll_name='libz3',
|
||||
export_files=API_files)
|
||||
add_dot_net_dll('dotnet', ['api_dll'], 'bindings/dotnet', dll_name='Microsoft.Z3', assembly_info_dir='Properties')
|
||||
add_hlib('cpp', 'bindings/c++', includes2install=['z3++.h'])
|
||||
set_z3py_dir('bindings/python')
|
||||
# Examples
|
||||
add_cpp_example('cpp_example', 'c++')
|
||||
add_c_example('c_example', 'c')
|
||||
add_c_example('maxsat')
|
||||
add_dotnet_example('dotnet_example', 'dotnet')
|
||||
add_z3py_example('python')
|
||||
|
||||
update_version(4, 2, 0, 0)
|
||||
mk_auto_src()
|
||||
|
|
|
@ -13,18 +13,74 @@ import getopt
|
|||
import sys
|
||||
import shutil
|
||||
from mk_exception import *
|
||||
from fnmatch import fnmatch
|
||||
import distutils.sysconfig
|
||||
import compileall
|
||||
|
||||
PYTHON_PACKAGE_DIR=distutils.sysconfig.get_python_lib()
|
||||
BUILD_DIR='build'
|
||||
REV_BUILD_DIR='..'
|
||||
SRC_DIR='src'
|
||||
EXAMPLE_DIR='examples'
|
||||
# Required Components
|
||||
Z3_DLL_COMPONENT='api_dll'
|
||||
PATTERN_COMPONENT='pattern'
|
||||
UTIL_COMPONENT='util'
|
||||
API_COMPONENT='api'
|
||||
DOTNET_COMPONENT='dotnet'
|
||||
CPP_COMPONENT='cpp'
|
||||
#####################
|
||||
IS_WINDOW=False
|
||||
VERBOSE=True
|
||||
DEBUG_MODE=False
|
||||
SHOW_CPPS = True
|
||||
VS_X64 = False
|
||||
ONLY_MAKEFILES = False
|
||||
PYTHON_DIR=None
|
||||
Z3PY_SRC_DIR=None
|
||||
VS_PROJ = False
|
||||
TRACE = False
|
||||
|
||||
def is_cr_lf(fname):
|
||||
# Check whether text files use cr/lf
|
||||
f = open(fname, 'r')
|
||||
line = f.readline()
|
||||
sz = len(line)
|
||||
return sz >= 2 and line[sz-2] == '\r' and line[sz-1] == '\n'
|
||||
|
||||
# dos2unix in python
|
||||
# cr/lf --> lf
|
||||
def dos2unix(fname):
|
||||
if is_cr_lf(fname):
|
||||
fin = open(fname, 'r')
|
||||
fname_new = '%s.new' % fname
|
||||
fout = open(fname_new, 'w')
|
||||
for line in fin:
|
||||
line = line.rstrip('\r\n')
|
||||
fout.write(line)
|
||||
fout.write('\n')
|
||||
fin.close()
|
||||
fout.close()
|
||||
shutil.move(fname_new, fname)
|
||||
if is_verbose():
|
||||
print "dos2unix '%s'" % fname
|
||||
|
||||
def dos2unix_tree_core(pattern, dir, files):
|
||||
for filename in files:
|
||||
if fnmatch(filename, pattern):
|
||||
fname = os.path.join(dir, filename)
|
||||
if not os.path.isdir(fname):
|
||||
dos2unix(fname)
|
||||
|
||||
def dos2unix_tree():
|
||||
os.path.walk('src', dos2unix_tree_core, '*')
|
||||
|
||||
def check_eol():
|
||||
if not IS_WINDOW:
|
||||
# Linux/OSX/BSD check if the end-of-line is cr/lf
|
||||
if is_cr_lf('LICENSE.txt'):
|
||||
if is_verbose():
|
||||
print "Fixing end of line..."
|
||||
dos2unix_tree()
|
||||
|
||||
if os.name == 'nt':
|
||||
IS_WINDOW=True
|
||||
|
@ -44,20 +100,22 @@ def display_help():
|
|||
print " -m, --makefiles generate only makefiles."
|
||||
print " -c, --showcpp display file .cpp file names before invoking compiler."
|
||||
print " -v, --vsproj generate Visual Studio Project Files."
|
||||
print " -t, --trace enable tracing in release mode."
|
||||
exit(0)
|
||||
|
||||
# Parse configuration option for mk_make script
|
||||
def parse_options():
|
||||
global VERBOSE, DEBUG_MODE, IS_WINDOW, VS_X64, ONLY_MAKEFILES, SHOW_CPPS, VS_PROJ
|
||||
options, remainder = getopt.gnu_getopt(sys.argv[1:], 'b:dsxhmcv', ['build=',
|
||||
'debug',
|
||||
'silent',
|
||||
'x64',
|
||||
'help',
|
||||
'makefiles',
|
||||
'showcpp',
|
||||
'vsproj'
|
||||
])
|
||||
global VERBOSE, DEBUG_MODE, IS_WINDOW, VS_X64, ONLY_MAKEFILES, SHOW_CPPS, VS_PROJ, TRACE
|
||||
options, remainder = getopt.gnu_getopt(sys.argv[1:], 'b:dsxhmcvt', ['build=',
|
||||
'debug',
|
||||
'silent',
|
||||
'x64',
|
||||
'help',
|
||||
'makefiles',
|
||||
'showcpp',
|
||||
'vsproj',
|
||||
'trace'
|
||||
])
|
||||
for opt, arg in options:
|
||||
if opt in ('-b', '--build'):
|
||||
if arg == 'src':
|
||||
|
@ -79,9 +137,11 @@ def parse_options():
|
|||
SHOW_CPPS = True
|
||||
elif opt in ('-v', '--vsproj'):
|
||||
VS_PROJ = True
|
||||
elif opt in ('-t', '--trace'):
|
||||
TRACE = True
|
||||
else:
|
||||
raise MKException("Invalid command line option '%s'" % opt)
|
||||
|
||||
|
||||
# Return a list containing a file names included using '#include' in
|
||||
# the given C/C++ file named fname.
|
||||
def extract_c_includes(fname):
|
||||
|
@ -122,15 +182,23 @@ def set_build_dir(d):
|
|||
BUILD_DIR = d
|
||||
REV_BUILD_DIR = reverse_path(d)
|
||||
|
||||
def set_python_dir(p):
|
||||
global SRC_DIR, PYTHON_DIR
|
||||
def set_z3py_dir(p):
|
||||
global SRC_DIR, Z3PY_SRC_DIR
|
||||
full = '%s/%s' % (SRC_DIR, p)
|
||||
if not os.path.exists(full):
|
||||
raise MKException("Python bindings directory '%s' does not exist" % full)
|
||||
PYTHON_DIR = full
|
||||
Z3PY_SRC_DIR = full
|
||||
if VERBOSE:
|
||||
print "Python bindinds directory was detected."
|
||||
|
||||
def add_z3py_example(p):
|
||||
mk_dir(BUILD_DIR)
|
||||
full = '%s/%s' % (EXAMPLE_DIR, p)
|
||||
for py in filter(lambda f: f.endswith('.py'), os.listdir(full)):
|
||||
shutil.copyfile('%s/%s' % (full, py), '%s/%s' % (BUILD_DIR, py))
|
||||
if is_verbose():
|
||||
print "Copied Z3Py example '%s' to '%s'" % (py, BUILD_DIR)
|
||||
|
||||
_UNIQ_ID = 0
|
||||
|
||||
def mk_fresh_name(prefix):
|
||||
|
@ -150,8 +218,8 @@ def get_component(name):
|
|||
return _Name2Component[name]
|
||||
|
||||
# Return the directory where the python bindings are located.
|
||||
def get_python_dir():
|
||||
return PYTHON_DIR
|
||||
def get_z3py_dir():
|
||||
return Z3PY_SRC_DIR
|
||||
|
||||
# Return true if in verbose mode
|
||||
def is_verbose():
|
||||
|
@ -160,6 +228,12 @@ def is_verbose():
|
|||
def get_cpp_files(path):
|
||||
return filter(lambda f: f.endswith('.cpp'), os.listdir(path))
|
||||
|
||||
def get_c_files(path):
|
||||
return filter(lambda f: f.endswith('.c'), os.listdir(path))
|
||||
|
||||
def get_cs_files(path):
|
||||
return filter(lambda f: f.endswith('.cs'), os.listdir(path))
|
||||
|
||||
def find_all_deps(name, deps):
|
||||
new_deps = []
|
||||
for dep in deps:
|
||||
|
@ -244,7 +318,14 @@ class Component:
|
|||
out.write('\n')
|
||||
if SHOW_CPPS:
|
||||
out.write('\t@echo %s/%s\n' % (self.src_dir, cppfile))
|
||||
out.write('\t@$(CXX) $(CXXFLAGS) $(%s) $(CXX_OUT_FLAG)%s %s\n' % (include_defs, objfile, srcfile))
|
||||
# TRACE is enabled in debug mode by default
|
||||
trace_opt = ''
|
||||
if TRACE and not DEBUG_MODE:
|
||||
if IS_WINDOW:
|
||||
trace_opt = '/D _TRACE'
|
||||
else:
|
||||
trace_opt = '-D _TRACE'
|
||||
out.write('\t@$(CXX) $(CXXFLAGS) %s $(%s) $(CXX_OUT_FLAG)%s %s\n' % (trace_opt, include_defs, objfile, srcfile))
|
||||
|
||||
def mk_makefile(self, out):
|
||||
include_defs = mk_fresh_name('includes')
|
||||
|
@ -272,9 +353,19 @@ class Component:
|
|||
def require_def_file(self):
|
||||
return False
|
||||
|
||||
def mk_install(self, out):
|
||||
return
|
||||
|
||||
def mk_uninstall(self, out):
|
||||
return
|
||||
|
||||
def is_example(self):
|
||||
return False
|
||||
|
||||
class LibComponent(Component):
|
||||
def __init__(self, name, path, deps):
|
||||
def __init__(self, name, path, deps, includes2install):
|
||||
Component.__init__(self, name, path, deps)
|
||||
self.includes2install = includes2install
|
||||
|
||||
def mk_makefile(self, out):
|
||||
Component.mk_makefile(self, out)
|
||||
|
@ -297,6 +388,22 @@ class LibComponent(Component):
|
|||
out.write('\n')
|
||||
out.write('%s: %s\n\n' % (self.name, libfile))
|
||||
|
||||
def mk_install(self, out):
|
||||
for include in self.includes2install:
|
||||
out.write('\t@cp %s/%s $(PREFIX)/include/%s\n' % (self.to_src_dir, include, include))
|
||||
|
||||
def mk_uninstall(self, out):
|
||||
for include in self.includes2install:
|
||||
out.write('\t@rm -f $(PREFIX)/include/%s\n' % include)
|
||||
|
||||
# "Library" containing only .h files. This is just a placeholder for includes files to be installed.
|
||||
class HLibComponent(LibComponent):
|
||||
def __init__(self, name, path, includes2install):
|
||||
LibComponent.__init__(self, name, path, [], includes2install)
|
||||
|
||||
def mk_makefile(self, out):
|
||||
return
|
||||
|
||||
# Auxiliary function for sort_components
|
||||
def comp_components(c1, c2):
|
||||
id1 = get_component(c1).id
|
||||
|
@ -308,11 +415,12 @@ def sort_components(cnames):
|
|||
return sorted(cnames, cmp=comp_components)
|
||||
|
||||
class ExeComponent(Component):
|
||||
def __init__(self, name, exe_name, path, deps):
|
||||
def __init__(self, name, exe_name, path, deps, install):
|
||||
Component.__init__(self, name, path, deps)
|
||||
if exe_name == None:
|
||||
exe_name = name
|
||||
self.exe_name = exe_name
|
||||
self.install = install
|
||||
|
||||
def mk_makefile(self, out):
|
||||
Component.mk_makefile(self, out)
|
||||
|
@ -349,14 +457,26 @@ class ExeComponent(Component):
|
|||
def main_component(self):
|
||||
return True
|
||||
|
||||
def mk_install(self, out):
|
||||
if self.install:
|
||||
exefile = '%s$(EXE_EXT)' % self.exe_name
|
||||
out.write('\t@cp %s $(PREFIX)/bin/%s\n' % (exefile, exefile))
|
||||
|
||||
def mk_uninstall(self, out):
|
||||
if self.install:
|
||||
exefile = '%s$(EXE_EXT)' % self.exe_name
|
||||
out.write('\t@rm -f $(PREFIX)/bin/%s\n' % exefile)
|
||||
|
||||
|
||||
class DLLComponent(Component):
|
||||
def __init__(self, name, dll_name, path, deps, export_files, reexports):
|
||||
def __init__(self, name, dll_name, path, deps, export_files, reexports, install):
|
||||
Component.__init__(self, name, path, deps)
|
||||
if dll_name == None:
|
||||
dll_name = name
|
||||
self.dll_name = dll_name
|
||||
self.export_files = export_files
|
||||
self.reexports = reexports
|
||||
self.install = install
|
||||
|
||||
def mk_makefile(self, out):
|
||||
Component.mk_makefile(self, out)
|
||||
|
@ -406,6 +526,18 @@ class DLLComponent(Component):
|
|||
def require_def_file(self):
|
||||
return IS_WINDOW and self.export_files
|
||||
|
||||
def mk_install(self, out):
|
||||
if self.install:
|
||||
dllfile = '%s$(SO_EXT)' % self.dll_name
|
||||
out.write('\t@cp %s $(PREFIX)/lib/%s\n' % (dllfile, dllfile))
|
||||
out.write('\t@cp %s %s/%s\n' % (dllfile, PYTHON_PACKAGE_DIR, dllfile))
|
||||
|
||||
def mk_uninstall(self, out):
|
||||
if self.install:
|
||||
dllfile = '%s$(SO_EXT)' % self.dll_name
|
||||
out.write('\t@rm -f $(PREFIX)/lib/%s\n' % dllfile)
|
||||
out.write('\t@rm -f %s/%s\n' % (PYTHON_PACKAGE_DIR, dllfile))
|
||||
|
||||
class DotNetDLLComponent(Component):
|
||||
def __init__(self, name, dll_name, path, deps, assembly_info_dir):
|
||||
Component.__init__(self, name, path, deps)
|
||||
|
@ -418,8 +550,31 @@ class DotNetDLLComponent(Component):
|
|||
|
||||
def mk_makefile(self, out):
|
||||
if IS_WINDOW:
|
||||
# TODO
|
||||
out.write('%s: \n\n' % self.name)
|
||||
cs_fp_files = []
|
||||
cs_files = []
|
||||
for cs_file in get_cs_files(self.src_dir):
|
||||
cs_fp_files.append('%s/%s' % (self.to_src_dir, cs_file))
|
||||
cs_files.append(cs_file)
|
||||
if self.assembly_info_dir != '.':
|
||||
for cs_file in get_cs_files('%s/%s' % (self.src_dir, self.assembly_info_dir)):
|
||||
cs_fp_files.append('%s/%s/%s' % (self.to_src_dir, self.assembly_info_dir, cs_file))
|
||||
cs_files.append('%s\%s' % (self.assembly_info_dir, cs_file))
|
||||
dllfile = '%s.dll' % self.dll_name
|
||||
out.write('%s:' % dllfile)
|
||||
for cs_file in cs_fp_files:
|
||||
out.write(' ')
|
||||
out.write(cs_file)
|
||||
out.write('\n')
|
||||
out.write(' cd %s && csc /noconfig /unsafe+ /nowarn:1701,1702 /nostdlib+ /errorreport:prompt /warn:4 /define:DEBUG;TRACE /reference:mscorlib.dll /reference:System.Core.dll /reference:System.dll /reference:System.Numerics.dll /debug+ /debug:full /filealign:512 /optimize- /out:%s.dll /target:library' % (self.to_src_dir, self.dll_name))
|
||||
for cs_file in cs_files:
|
||||
out.write(' ')
|
||||
out.write(cs_file)
|
||||
out.write('\n')
|
||||
# HACK
|
||||
win_to_src_dir = self.to_src_dir.replace('/', '\\')
|
||||
out.write(' move %s\%s\n' % (win_to_src_dir, dllfile))
|
||||
out.write(' move %s\%s.pdb\n' % (win_to_src_dir, self.dll_name))
|
||||
out.write('%s: %s\n\n' % (self.name, dllfile))
|
||||
return
|
||||
|
||||
def main_component(self):
|
||||
|
@ -427,7 +582,89 @@ class DotNetDLLComponent(Component):
|
|||
|
||||
def has_assembly_info(self):
|
||||
return True
|
||||
|
||||
class ExampleComponent(Component):
|
||||
def __init__(self, name, path):
|
||||
Component.__init__(self, name, path, [])
|
||||
self.ex_dir = '%s/%s' % (EXAMPLE_DIR, self.path)
|
||||
self.to_ex_dir = '%s/%s' % (REV_BUILD_DIR, self.ex_dir)
|
||||
|
||||
def is_example(self):
|
||||
return True
|
||||
|
||||
class CppExampleComponent(ExampleComponent):
|
||||
def __init__(self, name, path):
|
||||
ExampleComponent.__init__(self, name, path)
|
||||
|
||||
def compiler(self):
|
||||
return "$(CXX)"
|
||||
|
||||
def src_files(self):
|
||||
return get_cpp_files(self.ex_dir)
|
||||
|
||||
def mk_makefile(self, out):
|
||||
dll_name = get_component(Z3_DLL_COMPONENT).dll_name
|
||||
dll = '%s$(SO_EXT)' % dll_name
|
||||
exefile = '%s$(EXE_EXT)' % self.name
|
||||
out.write('%s: %s' % (exefile, dll))
|
||||
for cppfile in self.src_files():
|
||||
out.write(' ')
|
||||
out.write('%s/%s' % (self.to_ex_dir, cppfile))
|
||||
out.write('\n')
|
||||
out.write('\t%s $(LINK_OUT_FLAG)%s $(LINK_FLAGS)' % (self.compiler(), exefile))
|
||||
# Add include dir components
|
||||
out.write(' -I%s' % get_component(API_COMPONENT).to_src_dir)
|
||||
out.write(' -I%s' % get_component(CPP_COMPONENT).to_src_dir)
|
||||
for cppfile in self.src_files():
|
||||
out.write(' ')
|
||||
out.write('%s/%s' % (self.to_ex_dir, cppfile))
|
||||
out.write(' ')
|
||||
if IS_WINDOW:
|
||||
out.write('%s.lib' % dll_name)
|
||||
else:
|
||||
out.write(dll)
|
||||
out.write(' $(LINK_EXTRA_FLAGS)\n')
|
||||
out.write('_ex_%s: %s\n\n' % (self.name, exefile))
|
||||
|
||||
class CExampleComponent(CppExampleComponent):
|
||||
def __init__(self, name, path):
|
||||
CppExampleComponent.__init__(self, name, path)
|
||||
|
||||
def compiler(self):
|
||||
return "$(CC)"
|
||||
|
||||
def src_files(self):
|
||||
return get_c_files(self.ex_dir)
|
||||
|
||||
class DotNetExampleComponent(ExampleComponent):
|
||||
def __init__(self, name, path):
|
||||
ExampleComponent.__init__(self, name, path)
|
||||
|
||||
def is_example(self):
|
||||
return IS_WINDOW
|
||||
|
||||
def mk_makefile(self, out):
|
||||
if IS_WINDOW:
|
||||
dll_name = get_component(DOTNET_COMPONENT).dll_name
|
||||
dll = '%s.dll' % dll_name
|
||||
exefile = '%s.exe' % self.name
|
||||
out.write('%s: %s' % (exefile, dll))
|
||||
for csfile in get_cs_files(self.ex_dir):
|
||||
out.write(' ')
|
||||
out.write('%s/%s' % (self.to_ex_dir, csfile))
|
||||
out.write('\n')
|
||||
out.write('\tcsc /out:%s /reference:%s /debug:full /reference:System.Numerics.dll' % (exefile, dll))
|
||||
if VS_X64:
|
||||
out.write(' /platform:x64')
|
||||
else:
|
||||
out.write(' /platform:x86')
|
||||
for csfile in get_cs_files(self.ex_dir):
|
||||
out.write(' ')
|
||||
# HACK
|
||||
win_ex_dir = self.to_ex_dir.replace('/', '\\')
|
||||
out.write('%s\\%s' % (win_ex_dir, csfile))
|
||||
out.write('\n')
|
||||
out.write('_ex_%s: %s\n\n' % (self.name, exefile))
|
||||
|
||||
def reg_component(name, c):
|
||||
global _Id, _Components, _ComponentNames, _Name2Component
|
||||
|
@ -439,22 +676,38 @@ def reg_component(name, c):
|
|||
if VERBOSE:
|
||||
print "New component: '%s'" % name
|
||||
|
||||
def add_lib(name, deps=[], path=None):
|
||||
c = LibComponent(name, path, deps)
|
||||
def add_lib(name, deps=[], path=None, includes2install=[]):
|
||||
c = LibComponent(name, path, deps, includes2install)
|
||||
reg_component(name, c)
|
||||
|
||||
def add_exe(name, deps=[], path=None, exe_name=None):
|
||||
c = ExeComponent(name, exe_name, path, deps)
|
||||
def add_hlib(name, path=None, includes2install=[]):
|
||||
c = HLibComponent(name, path, includes2install)
|
||||
reg_component(name, c)
|
||||
|
||||
def add_dll(name, deps=[], path=None, dll_name=None, export_files=[], reexports=[]):
|
||||
c = DLLComponent(name, dll_name, path, deps, export_files, reexports)
|
||||
def add_exe(name, deps=[], path=None, exe_name=None, install=True):
|
||||
c = ExeComponent(name, exe_name, path, deps, install)
|
||||
reg_component(name, c)
|
||||
|
||||
def add_dll(name, deps=[], path=None, dll_name=None, export_files=[], reexports=[], install=True):
|
||||
c = DLLComponent(name, dll_name, path, deps, export_files, reexports, install)
|
||||
reg_component(name, c)
|
||||
|
||||
def add_dot_net_dll(name, deps=[], path=None, dll_name=None, assembly_info_dir=None):
|
||||
c = DotNetDLLComponent(name, dll_name, path, deps, assembly_info_dir)
|
||||
reg_component(name, c)
|
||||
|
||||
def add_cpp_example(name, path=None):
|
||||
c = CppExampleComponent(name, path)
|
||||
reg_component(name, c)
|
||||
|
||||
def add_c_example(name, path=None):
|
||||
c = CExampleComponent(name, path)
|
||||
reg_component(name, c)
|
||||
|
||||
def add_dotnet_example(name, path=None):
|
||||
c = DotNetExampleComponent(name, path)
|
||||
reg_component(name, c)
|
||||
|
||||
# Copy configuration correct file to BUILD_DIR
|
||||
def cp_config_mk():
|
||||
if IS_WINDOW:
|
||||
|
@ -474,6 +727,25 @@ def cp_config_mk():
|
|||
else:
|
||||
shutil.copyfile('scripts/config-release.mk', '%s/config.mk' % BUILD_DIR)
|
||||
|
||||
def mk_install(out):
|
||||
out.write('install:\n')
|
||||
out.write('\t@mkdir -p $(PREFIX)/bin\n')
|
||||
out.write('\t@mkdir -p $(PREFIX)/include\n')
|
||||
out.write('\t@mkdir -p $(PREFIX)/lib\n')
|
||||
for c in _Components:
|
||||
c.mk_install(out)
|
||||
out.write('\t@cp z3*.pyc %s\n' % PYTHON_PACKAGE_DIR)
|
||||
out.write('\t@echo Z3 was successfully installed.\n')
|
||||
out.write('\n')
|
||||
|
||||
def mk_uninstall(out):
|
||||
out.write('uninstall:\n')
|
||||
for c in _Components:
|
||||
c.mk_uninstall(out)
|
||||
out.write('\t@rm -f %s/z3*.pyc\n' % PYTHON_PACKAGE_DIR)
|
||||
out.write('\t@echo Z3 was successfully uninstalled.\n')
|
||||
out.write('\n')
|
||||
|
||||
# Generate the Z3 makefile
|
||||
def mk_makefile():
|
||||
mk_dir(BUILD_DIR)
|
||||
|
@ -488,13 +760,28 @@ def mk_makefile():
|
|||
for c in _Components:
|
||||
if c.main_component():
|
||||
out.write(' %s' % c.name)
|
||||
out.write('\n\n')
|
||||
out.write('\n\t@echo Z3 was successfully built.\n')
|
||||
if not IS_WINDOW:
|
||||
out.write("\t@echo Use the following command to install Z3 at prefix $(PREFIX).\n")
|
||||
out.write('\t@echo " sudo make install"\n')
|
||||
# Generate :examples rule
|
||||
out.write('examples:')
|
||||
for c in _Components:
|
||||
if c.is_example():
|
||||
out.write(' _ex_%s' % c.name)
|
||||
out.write('\n\t@echo Z3 examples were successfully built.\n')
|
||||
# Generate components
|
||||
for c in _Components:
|
||||
c.mk_makefile(out)
|
||||
# Generate install/uninstall rules if not WINDOWS
|
||||
if not IS_WINDOW:
|
||||
mk_install(out)
|
||||
mk_uninstall(out)
|
||||
# Finalize
|
||||
if VERBOSE:
|
||||
print "Makefile was successfully generated."
|
||||
if not IS_WINDOW:
|
||||
print " python packages dir:", PYTHON_PACKAGE_DIR
|
||||
if DEBUG_MODE:
|
||||
print " compilation mode: Debug"
|
||||
else:
|
||||
|
@ -502,12 +789,12 @@ def mk_makefile():
|
|||
if IS_WINDOW:
|
||||
if VS_X64:
|
||||
print " platform: x64\n"
|
||||
print "To build Z3, open a ***Visual Studio x64 Command Prompt***, then"
|
||||
print "To build Z3, open a [Visual Studio x64 Command Prompt], then"
|
||||
else:
|
||||
print " platform: x86"
|
||||
print "To build Z3, open a ***Visual Studio Command Prompt***, then"
|
||||
print "To build Z3, open a [Visual Studio Command Prompt], then"
|
||||
print "type 'cd %s/%s && nmake'\n" % (os.getcwd(), BUILD_DIR)
|
||||
print 'Remark: to open a Visual Studio Command Prompt, go to: "Start > All Programs > Visual Studio > Visual Studio Tools >"'
|
||||
print 'Remark: to open a Visual Studio Command Prompt, go to: "Start > All Programs > Visual Studio > Visual Studio Tools"'
|
||||
else:
|
||||
print "Type 'cd %s; make' to build Z3" % BUILD_DIR
|
||||
|
||||
|
@ -520,7 +807,7 @@ def mk_auto_src():
|
|||
# TODO: delete after src/ast/pattern/expr_pattern_match
|
||||
# database.smt ==> database.h
|
||||
def mk_pat_db():
|
||||
c = get_component('pattern')
|
||||
c = get_component(PATTERN_COMPONENT)
|
||||
fin = open('%s/database.smt2' % c.src_dir, 'r')
|
||||
fout = open('%s/database.h' % c.src_dir, 'w')
|
||||
fout.write('char const * g_pattern_database =\n')
|
||||
|
@ -539,7 +826,7 @@ def update_version(major, minor, build, revision):
|
|||
|
||||
# Update files with the version number
|
||||
def mk_version_dot_h(major, minor, build, revision):
|
||||
c = get_component('util')
|
||||
c = get_component(UTIL_COMPONENT)
|
||||
fout = open('%s/version.h' % c.src_dir, 'w')
|
||||
fout.write('// automatically generated file.\n')
|
||||
fout.write('#define Z3_MAJOR_VERSION %s\n' % major)
|
||||
|
@ -712,23 +999,36 @@ def mk_def_files():
|
|||
if c.require_def_file():
|
||||
mk_def_file(c)
|
||||
|
||||
def cp_z3pyc_to_build():
|
||||
mk_dir(BUILD_DIR)
|
||||
compileall.compile_dir(Z3PY_SRC_DIR, force=1)
|
||||
for pyc in filter(lambda f: f.endswith('.pyc'), os.listdir(Z3PY_SRC_DIR)):
|
||||
try:
|
||||
os.remove('%s/%s' % (BUILD_DIR, pyc))
|
||||
except:
|
||||
pass
|
||||
os.rename('%s/%s' % (Z3PY_SRC_DIR, pyc), '%s/%s' % (BUILD_DIR, pyc))
|
||||
if is_verbose():
|
||||
print "Generated '%s'" % pyc
|
||||
|
||||
def mk_bindings(api_files):
|
||||
if not ONLY_MAKEFILES:
|
||||
mk_z3consts_py(api_files)
|
||||
mk_z3consts_donet(api_files)
|
||||
new_api_files = []
|
||||
api = get_component('api')
|
||||
api = get_component(API_COMPONENT)
|
||||
for api_file in api_files:
|
||||
api_file_path = api.find_file(api_file, api.name)
|
||||
new_api_files.append('%s/%s' % (api_file_path.src_dir, api_file))
|
||||
g = {}
|
||||
g["API_FILES"] = new_api_files
|
||||
execfile('scripts/update_api.py', g) # HACK
|
||||
|
||||
cp_z3pyc_to_build()
|
||||
|
||||
# Extract enumeration types from API files, and add python definitions.
|
||||
def mk_z3consts_py(api_files):
|
||||
if PYTHON_DIR == None:
|
||||
raise MKException("You must invoke set_python_dir(path):")
|
||||
if Z3PY_SRC_DIR == None:
|
||||
raise MKException("You must invoke set_z3py_dir(path):")
|
||||
|
||||
blank_pat = re.compile("^ *$")
|
||||
comment_pat = re.compile("^ *//.*$")
|
||||
|
@ -737,10 +1037,10 @@ def mk_z3consts_py(api_files):
|
|||
openbrace_pat = re.compile("{ *")
|
||||
closebrace_pat = re.compile("}.*;")
|
||||
|
||||
z3consts = open('%s/z3consts.py' % PYTHON_DIR, 'w')
|
||||
z3consts = open('%s/z3consts.py' % Z3PY_SRC_DIR, 'w')
|
||||
z3consts.write('# Automatically generated file\n\n')
|
||||
|
||||
api_dll = get_component('api_dll')
|
||||
api_dll = get_component(Z3_DLL_COMPONENT)
|
||||
|
||||
for api_file in api_files:
|
||||
api_file_c = api_dll.find_file(api_file, api_dll.name)
|
||||
|
@ -800,7 +1100,7 @@ def mk_z3consts_py(api_files):
|
|||
idx = idx + 1
|
||||
linenum = linenum + 1
|
||||
if VERBOSE:
|
||||
print "Generated '%s'" % ('%s/z3consts.py' % PYTHON_DIR)
|
||||
print "Generated '%s'" % ('%s/z3consts.py' % Z3PY_SRC_DIR)
|
||||
|
||||
|
||||
# Extract enumeration types from z3_api.h, and add .Net definitions
|
||||
|
@ -812,9 +1112,9 @@ def mk_z3consts_donet(api_files):
|
|||
openbrace_pat = re.compile("{ *")
|
||||
closebrace_pat = re.compile("}.*;")
|
||||
|
||||
dotnet = get_component('dotnet')
|
||||
dotnet = get_component(DOTNET_COMPONENT)
|
||||
|
||||
DeprecatedEnums = { 'Z3_search_failure' }
|
||||
DeprecatedEnums = [ 'Z3_search_failure' ]
|
||||
z3consts = open('%s/Enumerations.cs' % dotnet.src_dir, 'w')
|
||||
z3consts.write('// Automatically generated file\n\n')
|
||||
z3consts.write('using System;\n\n'
|
||||
|
@ -893,7 +1193,7 @@ def mk_gui_str(id):
|
|||
def mk_vs_proj(name, components):
|
||||
if not VS_PROJ:
|
||||
return
|
||||
proj_name = '%s.vcxproj' % name
|
||||
proj_name = '%s/%s.vcxproj' % (BUILD_DIR, name)
|
||||
modes=['Debug', 'Release']
|
||||
PLATFORMS=['Win32']
|
||||
f = open(proj_name, 'w')
|
||||
|
@ -945,7 +1245,7 @@ def mk_vs_proj(name, components):
|
|||
first = False
|
||||
else:
|
||||
f.write(';')
|
||||
f.write('%s' % get_component(dep).src_dir)
|
||||
f.write(get_component(dep).to_src_dir)
|
||||
f.write('</AdditionalIncludeDirectories>\n')
|
||||
f.write(' </ClCompile>\n')
|
||||
f.write(' <Link>\n')
|
||||
|
@ -965,7 +1265,7 @@ def mk_vs_proj(name, components):
|
|||
for dep in deps:
|
||||
dep = get_component(dep)
|
||||
for cpp in filter(lambda f: f.endswith('.cpp'), os.listdir(dep.src_dir)):
|
||||
f.write(' <ClCompile Include="%s/%s" />\n' % (dep.src_dir, cpp))
|
||||
f.write(' <ClCompile Include="%s/%s" />\n' % (dep.to_src_dir, cpp))
|
||||
f.write(' </ItemGroup>\n')
|
||||
f.write(' <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />\n')
|
||||
f.write(' <ImportGroup Label="ExtensionTargets">\n')
|
||||
|
|
|
@ -27,7 +27,7 @@ dotnet_dir = get_component('dotnet').src_dir
|
|||
log_h = open('%s/api_log_macros.h' % api_dir, 'w')
|
||||
log_c = open('%s/api_log_macros.cpp' % api_dir, 'w')
|
||||
exe_c = open('%s/api_commands.cpp' % api_dir, 'w')
|
||||
core_py = open('%s/z3core.py' % get_python_dir(), 'w')
|
||||
core_py = open('%s/z3core.py' % get_z3py_dir(), 'w')
|
||||
dotnet_fileout = '%s/Native.cs' % dotnet_dir
|
||||
##
|
||||
log_h.write('// Automatically generated file\n')
|
||||
|
@ -311,7 +311,7 @@ def mk_dotnet():
|
|||
dotnet.write(' public unsafe class LIB\n')
|
||||
dotnet.write(' {\n')
|
||||
dotnet.write(' '
|
||||
' const string Z3_DLL_NAME = \"z3.dll\";\n'
|
||||
' const string Z3_DLL_NAME = \"libz3.dll\";\n'
|
||||
' \n');
|
||||
dotnet.write(' [DllImport(Z3_DLL_NAME, CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]\n')
|
||||
dotnet.write(' public extern static void Z3_set_error_handler(Z3_context a0, Z3_error_handler a1);\n\n')
|
||||
|
@ -335,7 +335,7 @@ def mk_dotnet():
|
|||
dotnet.write(' }\n')
|
||||
|
||||
|
||||
DotnetUnwrapped = { 'Z3_del_context' }
|
||||
DotnetUnwrapped = [ 'Z3_del_context' ]
|
||||
|
||||
def mk_dotnet_wrappers():
|
||||
global Type2Str
|
||||
|
@ -671,5 +671,5 @@ if is_verbose():
|
|||
print "Generated '%s'" % ('%s/api_log_macros.h' % api_dir)
|
||||
print "Generated '%s'" % ('%s/api_log_macros.cpp' % api_dir)
|
||||
print "Generated '%s'" % ('%s/api_commands.cpp' % api_dir)
|
||||
print "Generated '%s'" % ('%s/z3core.py' % get_python_dir())
|
||||
print "Generated '%s'" % ('%s/z3core.py' % get_z3py_dir())
|
||||
print "Generated '%s'" % ('%s/Native.cs' % dotnet_dir)
|
||||
|
|
|
@ -23,7 +23,6 @@ Revision History:
|
|||
#include"cmd_context.h"
|
||||
#include"smt2parser.h"
|
||||
#include"smtparser.h"
|
||||
#include"z3_solver.h"
|
||||
|
||||
extern "C" {
|
||||
|
||||
|
@ -248,40 +247,6 @@ extern "C" {
|
|||
return mk_c(c)->m_smtlib_error_buffer.c_str();
|
||||
Z3_CATCH_RETURN("");
|
||||
}
|
||||
|
||||
Z3_ast parse_z3_stream(Z3_context c, std::istream& is) {
|
||||
z3_solver parser(c, is, verbose_stream(), mk_c(c)->fparams(), false);
|
||||
if (!parser.parse()) {
|
||||
SET_ERROR_CODE(Z3_PARSER_ERROR);
|
||||
return of_ast(mk_c(c)->m().mk_true());
|
||||
}
|
||||
expr_ref_vector assumptions(mk_c(c)->m());
|
||||
parser.get_assumptions(assumptions);
|
||||
return of_ast(mk_c(c)->mk_and(assumptions.size(), assumptions.c_ptr()));
|
||||
}
|
||||
|
||||
Z3_ast Z3_API Z3_parse_z3_string(Z3_context c, Z3_string str) {
|
||||
Z3_TRY;
|
||||
LOG_Z3_parse_z3_string(c, str);
|
||||
std::string s(str);
|
||||
std::istringstream is(s);
|
||||
Z3_ast r = parse_z3_stream(c, is);
|
||||
RETURN_Z3(r);
|
||||
Z3_CATCH_RETURN(0);
|
||||
}
|
||||
|
||||
Z3_ast Z3_API Z3_parse_z3_file(Z3_context c, Z3_string file_name) {
|
||||
Z3_TRY;
|
||||
LOG_Z3_parse_z3_file(c, file_name);
|
||||
std::ifstream is(file_name);
|
||||
if (!is) {
|
||||
SET_ERROR_CODE(Z3_PARSER_ERROR);
|
||||
return 0;
|
||||
}
|
||||
Z3_ast r = parse_z3_stream(c, is);
|
||||
RETURN_Z3(r);
|
||||
Z3_CATCH_RETURN(0);
|
||||
}
|
||||
|
||||
// ---------------
|
||||
// Support for SMTLIB2
|
||||
|
|
|
@ -4977,23 +4977,6 @@ BEGIN_MLAPI_EXCLUDE
|
|||
Z3_string Z3_API Z3_get_smtlib_error(__in Z3_context c);
|
||||
END_MLAPI_EXCLUDE
|
||||
|
||||
/**
|
||||
\brief \mlh parse_z3_string c str \endmlh
|
||||
Parse the given string using the Z3 native parser.
|
||||
|
||||
Return the conjunction of asserts made in the input.
|
||||
|
||||
def_API('Z3_parse_z3_string', AST, (_in(CONTEXT), _in(STRING)))
|
||||
*/
|
||||
Z3_ast Z3_API Z3_parse_z3_string(__in Z3_context c, __in Z3_string str);
|
||||
|
||||
/**
|
||||
\brief Similar to #Z3_parse_z3_string, but reads the benchmark from a file.
|
||||
|
||||
def_API('Z3_parse_z3_file', AST, (_in(CONTEXT), _in(STRING)))
|
||||
*/
|
||||
Z3_ast Z3_API Z3_parse_z3_file(__in Z3_context c, __in Z3_string file_name);
|
||||
|
||||
/*@}*/
|
||||
|
||||
#ifdef CorML4
|
||||
|
|
File diff suppressed because it is too large
Load diff
1007
src/api/z3_solver.h
1007
src/api/z3_solver.h
File diff suppressed because it is too large
Load diff
|
@ -1410,6 +1410,51 @@ br_status bv_rewriter::mk_bv_xor(unsigned num, expr * const * args, expr_ref & r
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
// XOR is a mask
|
||||
// All arguments but one is a numeral.
|
||||
//
|
||||
// Apply a transformation of the form:
|
||||
//
|
||||
// (bvxor a 0011) --> (concat ((_ extract 3 2) a) ((_ extract 1 0) (bvnot a)))
|
||||
//
|
||||
if (!v1.is_zero() && num_coeffs == num - 1) {
|
||||
// find argument that is not a numeral
|
||||
expr * t = 0;
|
||||
for (unsigned i = 0; i < num; i++) {
|
||||
t = args[i];
|
||||
if (!is_numeral(t))
|
||||
break;
|
||||
}
|
||||
SASSERT(t != 0);
|
||||
numeral two(2);
|
||||
expr_ref_buffer exs(m());
|
||||
expr_ref not_t(m());
|
||||
not_t = m_util.mk_bv_not(t);
|
||||
unsigned low = 0;
|
||||
unsigned i = 0;
|
||||
while (i < sz) {
|
||||
while (i < sz && mod(v1, two).is_one()) {
|
||||
i++;
|
||||
div(v1, two, v1);
|
||||
}
|
||||
if (i != low) {
|
||||
exs.push_back(m_mk_extract(i-1, low, not_t));
|
||||
low = i;
|
||||
}
|
||||
while (i < sz && mod(v1, two).is_zero()) {
|
||||
i++;
|
||||
div(v1, two, v1);
|
||||
}
|
||||
if (i != low) {
|
||||
exs.push_back(m_mk_extract(i-1, low, t));
|
||||
low = i;
|
||||
}
|
||||
}
|
||||
std::reverse(exs.c_ptr(), exs.c_ptr() + exs.size());
|
||||
result = m_util.mk_concat(exs.size(), exs.c_ptr());
|
||||
return BR_REWRITE3;
|
||||
}
|
||||
|
||||
if (!merged && !flattened && (num_coeffs == 0 || (num_coeffs == 1 && !v1.is_zero() && v1 != (m_util.power_of_two(sz) - numeral(1)))))
|
||||
return BR_FAILED;
|
||||
|
|
|
@ -2853,30 +2853,6 @@ namespace Microsoft.Z3
|
|||
}
|
||||
#endregion
|
||||
|
||||
#region Native Parser
|
||||
/// <summary>
|
||||
/// Parse the given string using the Z3 native parser.
|
||||
/// </summary>
|
||||
/// <returns>A conjunction of asserts made in <paramref name="str"/>.</returns>
|
||||
public Expr ParseZ3String(string str)
|
||||
{
|
||||
Contract.Ensures(Contract.Result<Expr>() != null);
|
||||
|
||||
return Expr.Create(this, Native.Z3_parse_z3_string(nCtx, str));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Parse the given file using the Z3 native parser.
|
||||
/// </summary>
|
||||
/// <returns>A conjunction of asserts made in the file.</returns>
|
||||
public Expr ParseZ3File(string fileName)
|
||||
{
|
||||
Contract.Ensures(Contract.Result<Expr>() != null);
|
||||
|
||||
return Expr.Create(this, Native.Z3_parse_z3_file(nCtx, fileName));
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Goals
|
||||
/// <summary>
|
||||
/// Creates a new Goal.
|
|
@ -24,7 +24,7 @@ Small example:
|
|||
>>> s.check()
|
||||
sat
|
||||
>>> s.model()
|
||||
[x = 1, y = 2]
|
||||
[y = 2, x = 1]
|
||||
|
||||
Z3 exceptions:
|
||||
|
||||
|
@ -1698,9 +1698,9 @@ def Exists(vs, body, weight=1, qid="", skid="", patterns=[], no_patterns=[]):
|
|||
>>> q
|
||||
Exists([x, y], f(x, y) >= x)
|
||||
>>> Tactic('nnf')(q)
|
||||
[[f(x!foo!2, y!foo!1) >= x!foo!2]]
|
||||
[[f(x!foo!1, y!foo!0) >= x!foo!1]]
|
||||
>>> Tactic('nnf')(q).as_expr()
|
||||
f(x!foo!4, y!foo!3) >= x!foo!4
|
||||
f(x!foo!3, y!foo!2) >= x!foo!3
|
||||
"""
|
||||
return _mk_quantifier(False, vs, body, weight, qid, skid, patterns, no_patterns)
|
||||
|
||||
|
@ -6908,7 +6908,7 @@ def solve(*args, **keywords):
|
|||
|
||||
>>> a, b = Ints('a b')
|
||||
>>> solve(a + b == 3, Or(a == 0, a == 1), a != 0)
|
||||
[a = 1, b = 2]
|
||||
[b = 2, a = 1]
|
||||
"""
|
||||
s = Solver()
|
||||
s.set(**keywords)
|
||||
|
|
|
@ -45,6 +45,7 @@ Revision History:
|
|||
#include "cooperate.h"
|
||||
#include "tactical.h"
|
||||
#include "model_v2_pp.h"
|
||||
#include "obj_hashtable.h"
|
||||
|
||||
|
||||
namespace qe {
|
||||
|
@ -723,6 +724,85 @@ namespace qe {
|
|||
}
|
||||
};
|
||||
|
||||
// ----------------------------
|
||||
// def_vector
|
||||
|
||||
void def_vector::normalize() {
|
||||
// apply nested definitions into place.
|
||||
ast_manager& m = m_vars.get_manager();
|
||||
expr_substitution sub(m);
|
||||
scoped_ptr<expr_replacer> rep = mk_expr_simp_replacer(m);
|
||||
if (size() <= 1) {
|
||||
return;
|
||||
}
|
||||
for (unsigned i = size(); i > 0; ) {
|
||||
--i;
|
||||
expr_ref e(m);
|
||||
e = def(i);
|
||||
rep->set_substitution(&sub);
|
||||
(*rep)(e);
|
||||
sub.insert(m.mk_const(var(i)), e);
|
||||
def_ref(i) = e;
|
||||
}
|
||||
}
|
||||
|
||||
void def_vector::project(unsigned num_vars, app* const* vars) {
|
||||
obj_hashtable<func_decl> fns;
|
||||
for (unsigned i = 0; i < num_vars; ++i) {
|
||||
fns.insert(vars[i]->get_decl());
|
||||
}
|
||||
for (unsigned i = 0; i < size(); ++i) {
|
||||
if (fns.contains(m_vars[i].get())) {
|
||||
//
|
||||
// retain only first occurrence of eliminated variable.
|
||||
// later occurrences are just recycling the name.
|
||||
//
|
||||
fns.remove(m_vars[i].get());
|
||||
}
|
||||
else {
|
||||
for (unsigned j = i+1; j < size(); ++j) {
|
||||
m_vars.set(j-1, m_vars.get(j));
|
||||
m_defs.set(j-1, m_defs.get(j));
|
||||
}
|
||||
m_vars.pop_back();
|
||||
m_defs.pop_back();
|
||||
--i;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// ----------------------------
|
||||
// guarded_defs
|
||||
|
||||
std::ostream& guarded_defs::display(std::ostream& out) const {
|
||||
ast_manager& m = m_guards.get_manager();
|
||||
for (unsigned i = 0; i < size(); ++i) {
|
||||
for (unsigned j = 0; j < defs(i).size(); ++j) {
|
||||
out << defs(i).var(j)->get_name() << " := " << mk_pp(defs(i).def(j), m) << "\n";
|
||||
}
|
||||
out << "if " << mk_pp(guard(i), m) << "\n";
|
||||
}
|
||||
return out;
|
||||
}
|
||||
|
||||
bool guarded_defs::inv() {
|
||||
return m_defs.size() == m_guards.size();
|
||||
}
|
||||
|
||||
void guarded_defs::add(expr* guard, def_vector const& defs) {
|
||||
SASSERT(inv());
|
||||
m_defs.push_back(defs);
|
||||
m_guards.push_back(guard);
|
||||
m_defs.back().normalize();
|
||||
SASSERT(inv());
|
||||
}
|
||||
|
||||
void guarded_defs::project(unsigned num_vars, app* const* vars) {
|
||||
for (unsigned i = 0; i < size(); ++i) {
|
||||
m_defs[i].project(num_vars, vars);
|
||||
}
|
||||
}
|
||||
|
||||
// ----------------------------
|
||||
// Obtain atoms in NNF formula.
|
||||
|
||||
|
@ -810,7 +890,7 @@ namespace qe {
|
|||
|
||||
virtual lbool eliminate_exists(
|
||||
unsigned num_vars, app* const* vars,
|
||||
expr_ref& fml, app_ref_vector& free_vars, bool get_first, def_vector* defs) = 0;
|
||||
expr_ref& fml, app_ref_vector& free_vars, bool get_first, guarded_defs* defs) = 0;
|
||||
|
||||
virtual void set_assumption(expr* fml) = 0;
|
||||
|
||||
|
@ -918,40 +998,25 @@ namespace qe {
|
|||
}
|
||||
}
|
||||
|
||||
bool get_leaf_rec(expr_ref& fml, def_vector& defs) {
|
||||
void get_leaves_rec(def_vector& defs, guarded_defs& gdefs) {
|
||||
expr* f = this->fml();
|
||||
unsigned sz = defs.size();
|
||||
defs.append(def());
|
||||
if (m_children.empty() && f && !m.is_false(f) &&
|
||||
m_vars.empty() && !has_var()) {
|
||||
fml = f;
|
||||
return true;
|
||||
gdefs.add(f, defs);
|
||||
}
|
||||
unsigned sz = defs.size();
|
||||
for (unsigned i = 0; i < m_children.size(); ++i) {
|
||||
search_tree* st = m_children[i];
|
||||
defs.append(st->def());
|
||||
if (st->get_leaf_rec(fml, defs)) {
|
||||
return true;
|
||||
else {
|
||||
for (unsigned i = 0; i < m_children.size(); ++i) {
|
||||
m_children[i]->get_leaves_rec(defs, gdefs);
|
||||
}
|
||||
defs.shrink(sz);
|
||||
}
|
||||
return false;
|
||||
defs.shrink(sz);
|
||||
}
|
||||
|
||||
void get_leaf(expr_ref& fml, def_vector& defs) {
|
||||
get_leaf_rec(fml, defs);
|
||||
|
||||
// apply nested definitions into place.
|
||||
expr_substitution sub(m);
|
||||
scoped_ptr<expr_replacer> rep = mk_expr_simp_replacer(m);
|
||||
for (unsigned i = defs.size(); i > 0; ) {
|
||||
--i;
|
||||
expr_ref e(m);
|
||||
e = defs.def(i);
|
||||
rep->set_substitution(&sub);
|
||||
(*rep)(e);
|
||||
sub.insert(m.mk_const(defs.var(i)), e);
|
||||
defs.def_ref(i) = e;
|
||||
}
|
||||
void get_leaves(guarded_defs& gdefs) {
|
||||
def_vector defs(m);
|
||||
get_leaves_rec(defs, gdefs);
|
||||
}
|
||||
|
||||
void reset() {
|
||||
|
@ -1248,7 +1313,7 @@ namespace qe {
|
|||
|
||||
app_ref_vector m_new_vars; // variables added by solvers
|
||||
bool m_get_first; // get first satisfying branch.
|
||||
def_vector* m_defs;
|
||||
guarded_defs* m_defs;
|
||||
nnf_normalizer m_nnf; // nnf conversion
|
||||
|
||||
|
||||
|
@ -1311,7 +1376,7 @@ namespace qe {
|
|||
|
||||
void check(unsigned num_vars, app* const* vars,
|
||||
expr* assumption, expr_ref& fml, bool get_first,
|
||||
app_ref_vector& free_vars, def_vector* defs) {
|
||||
app_ref_vector& free_vars, guarded_defs* defs) {
|
||||
|
||||
reset();
|
||||
m_solver.push();
|
||||
|
@ -1366,9 +1431,11 @@ namespace qe {
|
|||
expr_ref_vector result(m);
|
||||
m_root.get_leaves(result);
|
||||
m_bool_rewriter.mk_or(result.size(), result.c_ptr(), fml);
|
||||
}
|
||||
else if (defs) {
|
||||
m_root.get_leaf(fml, *defs);
|
||||
}
|
||||
|
||||
if (defs) {
|
||||
m_root.get_leaves(*defs);
|
||||
defs->project(num_vars, vars);
|
||||
}
|
||||
|
||||
TRACE("qe",
|
||||
|
@ -1401,7 +1468,7 @@ namespace qe {
|
|||
private:
|
||||
|
||||
void final_check(model_evaluator& model_eval) {
|
||||
TRACE("qe", tout << (m_fml?"fml":"null") << "\n";);
|
||||
TRACE("qe", tout << "\n";);
|
||||
while (can_propagate_assignment(model_eval)) {
|
||||
propagate_assignment(model_eval);
|
||||
}
|
||||
|
@ -1480,7 +1547,7 @@ namespace qe {
|
|||
m_qe.eliminate_exists(1, &var, fml, m_free_vars, false, 0);
|
||||
}
|
||||
|
||||
lbool eliminate_exists(unsigned num_vars, app* const* vars, expr_ref& fml, bool get_first, def_vector* defs) {
|
||||
lbool eliminate_exists(unsigned num_vars, app* const* vars, expr_ref& fml, bool get_first, guarded_defs* defs) {
|
||||
return m_qe.eliminate_exists(num_vars, vars, fml, m_free_vars, get_first, defs);
|
||||
}
|
||||
|
||||
|
@ -1700,7 +1767,7 @@ namespace qe {
|
|||
|
||||
void propagate_assignment(model_evaluator& model_eval) {
|
||||
if (m_fml) {
|
||||
update_current(model_eval, true);
|
||||
update_status st = update_current(model_eval, true);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1982,7 +2049,7 @@ namespace qe {
|
|||
|
||||
virtual lbool eliminate_exists(
|
||||
unsigned num_vars, app* const* vars, expr_ref& fml,
|
||||
app_ref_vector& free_vars, bool get_first, def_vector* defs) {
|
||||
app_ref_vector& free_vars, bool get_first, guarded_defs* defs) {
|
||||
if (get_first) {
|
||||
return eliminate_block(num_vars, vars, fml, free_vars, get_first, defs);
|
||||
}
|
||||
|
@ -2008,7 +2075,7 @@ namespace qe {
|
|||
|
||||
lbool eliminate_block(
|
||||
unsigned num_vars, app* const* vars, expr_ref& fml,
|
||||
app_ref_vector& free_vars, bool get_first, def_vector* defs) {
|
||||
app_ref_vector& free_vars, bool get_first, guarded_defs* defs) {
|
||||
|
||||
checkpoint();
|
||||
|
||||
|
@ -2094,54 +2161,6 @@ namespace qe {
|
|||
|
||||
};
|
||||
|
||||
|
||||
|
||||
#if 0
|
||||
//
|
||||
// Instantiation based quantifier elimination procedure.
|
||||
// try a few loops of checking satisfiability.
|
||||
// substitute in model values for bound variables.
|
||||
//
|
||||
class quant_elim_inst : public quant_elim {
|
||||
ast_manager&
|
||||
public:
|
||||
quant_elim_inst(ast_manager& m): m(m) {}
|
||||
|
||||
virtual lbool eliminate_exists(
|
||||
unsigned num_vars, app* const* vars,
|
||||
expr_ref& fml, app_ref_vector& free_vars, bool get_first, def_vector* defs) {
|
||||
|
||||
}
|
||||
|
||||
virtual void set_assumption(expr* fml) {}
|
||||
|
||||
virtual void collect_statistics(statistics & st) const {
|
||||
m_solver.collect_statistics(st);
|
||||
}
|
||||
|
||||
virtual void eliminate(bool is_forall, unsigned num_vars, app* const* vars, expr_ref& fml) {
|
||||
if (is_forall) {
|
||||
fml = m.mk_not(fml);
|
||||
r = eliminate_exists(num_vars, vars, fml, free_vars, false, defs);
|
||||
fml = m.mk_not(fml);
|
||||
}
|
||||
else {
|
||||
r = eliminate_exists(num_vars, vars, fml, free_vars, false, defs);
|
||||
}
|
||||
}
|
||||
|
||||
virtual void set_cancel(bool f) {
|
||||
m_solver.set_cancel(f);
|
||||
}
|
||||
|
||||
virtual void updt_params(params_ref const& p) {
|
||||
m_solver.updt_params(p);
|
||||
}
|
||||
|
||||
};
|
||||
#endif
|
||||
|
||||
|
||||
// ------------------------------------------------
|
||||
// expr_quant_elim
|
||||
|
||||
|
@ -2310,40 +2329,28 @@ namespace qe {
|
|||
lbool expr_quant_elim::first_elim(unsigned num_vars, app* const* vars, expr_ref& fml, def_vector& defs) {
|
||||
app_ref_vector fvs(m);
|
||||
init_qe();
|
||||
return m_qe->eliminate_exists(num_vars, vars, fml, fvs, true, &defs);
|
||||
}
|
||||
|
||||
bool expr_quant_elim::solve_for_var(app* var, expr* _fml, expr_ref_vector& terms, expr_ref_vector& fmls) {
|
||||
expr_ref assms(m.mk_true(), m);
|
||||
func_decl* v = var->get_decl();
|
||||
init_qe();
|
||||
while (true) {
|
||||
def_vector defs(m);
|
||||
app_ref_vector fvs(m);
|
||||
m_qe->set_assumption(assms);
|
||||
expr_ref fml(_fml, m);
|
||||
lbool is_sat = m_qe->eliminate_exists(1, &var, fml, fvs, true, &defs);
|
||||
switch (is_sat) {
|
||||
case l_false: return true;
|
||||
case l_undef: return false;
|
||||
default: break;
|
||||
}
|
||||
bool found = false;
|
||||
for (unsigned i = 0; !found && i < defs.size(); ++i) {
|
||||
if (defs.var(i) == v) {
|
||||
terms.push_back(defs.def(i));
|
||||
fmls.push_back(fml);
|
||||
found = true;
|
||||
}
|
||||
}
|
||||
if (!found) {
|
||||
NOT_IMPLEMENTED_YET();
|
||||
}
|
||||
assms = m.mk_and(assms, m.mk_not(fml));
|
||||
guarded_defs gdefs(m);
|
||||
lbool res = m_qe->eliminate_exists(num_vars, vars, fml, fvs, true, &gdefs);
|
||||
if (gdefs.size() > 0) {
|
||||
defs.reset();
|
||||
defs.append(gdefs.defs(0));
|
||||
fml = gdefs.guard(0);
|
||||
}
|
||||
return true;
|
||||
return res;
|
||||
}
|
||||
|
||||
bool expr_quant_elim::solve_for_var(app* var, expr* fml, guarded_defs& defs) {
|
||||
return solve_for_vars(1,&var, fml, defs);
|
||||
}
|
||||
|
||||
bool expr_quant_elim::solve_for_vars(unsigned num_vars, app* const* vars, expr* _fml, guarded_defs& defs) {
|
||||
app_ref_vector fvs(m);
|
||||
expr_ref fml(_fml, m);
|
||||
TRACE("qe", tout << mk_pp(fml, m) << "\n";);
|
||||
init_qe();
|
||||
lbool is_sat = m_qe->eliminate_exists(num_vars, vars, fml, fvs, false, &defs);
|
||||
return is_sat != l_undef;
|
||||
}
|
||||
|
||||
void expr_quant_elim::set_cancel(bool f) {
|
||||
if (m_qe) {
|
||||
|
|
|
@ -226,8 +226,10 @@ namespace qe {
|
|||
class def_vector {
|
||||
func_decl_ref_vector m_vars;
|
||||
expr_ref_vector m_defs;
|
||||
def_vector& operator=(def_vector const& other);
|
||||
public:
|
||||
def_vector(ast_manager& m): m_vars(m), m_defs(m) {}
|
||||
def_vector(def_vector const& other): m_vars(other.m_vars), m_defs(other.m_defs) {}
|
||||
void push_back(func_decl* v, expr* e) {
|
||||
m_vars.push_back(v);
|
||||
m_defs.push_back(e);
|
||||
|
@ -240,6 +242,33 @@ namespace qe {
|
|||
func_decl* var(unsigned i) const { return m_vars[i]; }
|
||||
expr* def(unsigned i) const { return m_defs[i]; }
|
||||
expr_ref_vector::element_ref def_ref(unsigned i) { return m_defs[i]; }
|
||||
void normalize();
|
||||
void project(unsigned num_vars, app* const* vars);
|
||||
};
|
||||
|
||||
/**
|
||||
\brief Guarded definitions.
|
||||
|
||||
A realizer to a an existential quantified formula is a disjunction
|
||||
together with a substitution from the existentially quantified variables
|
||||
to terms such that:
|
||||
1. The original formula (exists (vars) fml) is equivalent to the disjunction of guards.
|
||||
2. Each guard is equivalent to fml where 'vars' are replaced by the substitution associated
|
||||
with the guard.
|
||||
*/
|
||||
|
||||
class guarded_defs {
|
||||
expr_ref_vector m_guards;
|
||||
vector<def_vector> m_defs;
|
||||
bool inv();
|
||||
public:
|
||||
guarded_defs(ast_manager& m): m_guards(m) { SASSERT(inv()); }
|
||||
void add(expr* guard, def_vector const& defs);
|
||||
unsigned size() const { return m_guards.size(); }
|
||||
def_vector const& defs(unsigned i) const { return m_defs[i]; }
|
||||
expr* guard(unsigned i) const { return m_guards[i]; }
|
||||
std::ostream& display(std::ostream& out) const;
|
||||
void project(unsigned num_vars, app* const* vars);
|
||||
};
|
||||
|
||||
class quant_elim;
|
||||
|
@ -277,10 +306,12 @@ namespace qe {
|
|||
\brief solve for (exists (var) fml).
|
||||
Return false if operation failed.
|
||||
Return true and list of pairs (t_i, fml_i) in <terms, fmls>
|
||||
such that fml[t_1] \/ ... \/ fml[t_n] == (exists (var) fml)
|
||||
and fml_i == fml[t_1]
|
||||
such that fml_1 \/ ... \/ fml_n == (exists (var) fml)
|
||||
and fml_i => fml[t_i]
|
||||
*/
|
||||
bool solve_for_var(app* var, expr* fml, expr_ref_vector& terms, expr_ref_vector& fmls);
|
||||
bool solve_for_var(app* var, expr* fml, guarded_defs& defs);
|
||||
|
||||
bool solve_for_vars(unsigned num_vars, app* const* vars, expr* fml, guarded_defs& defs);
|
||||
|
||||
|
||||
void set_cancel(bool f);
|
||||
|
|
|
@ -367,16 +367,6 @@ namespace qe {
|
|||
simplify(result);
|
||||
}
|
||||
|
||||
expr_ref mk_idiv(expr* a, numeral const & k) {
|
||||
if (k.is_one()) {
|
||||
return expr_ref(a, m);
|
||||
}
|
||||
expr_ref result(m);
|
||||
result = m_arith.mk_idiv(a, m_arith.mk_numeral(k, true));
|
||||
simplify(result);
|
||||
return result;
|
||||
}
|
||||
|
||||
expr* mk_numeral(numeral const& k, bool is_int = true) { return m_arith.mk_numeral(k, is_int); }
|
||||
|
||||
expr* mk_numeral(int k, bool is_int) { return mk_numeral(numeral(k),is_int); }
|
||||
|
@ -1699,6 +1689,40 @@ public:
|
|||
|
||||
private:
|
||||
|
||||
/**
|
||||
\brief Compute least upper/greatest lower bounds for x.
|
||||
|
||||
Assume:
|
||||
(not (= k 0))
|
||||
(<= 0 (mod m k))
|
||||
(< (mod m k) (abs k))
|
||||
(= m (+ (* k (div m k)) (mod m k)))
|
||||
i.e.
|
||||
k * (e div k) + (e mod k) = e
|
||||
|
||||
|
||||
When k is positive, least upper bound
|
||||
for x such that: k*x <= e is e div k
|
||||
|
||||
When k is negative, greatest lower bound
|
||||
for x such that k*x <= e is e div k
|
||||
|
||||
k * (e div k) + (e mod k) = e
|
||||
*/
|
||||
expr_ref mk_idiv(expr* e, numeral k) {
|
||||
SASSERT(!k.is_zero());
|
||||
arith_util& a = m_util.m_arith;
|
||||
if (k.is_one()) {
|
||||
return expr_ref(e, m);
|
||||
}
|
||||
if (k.is_minus_one()) {
|
||||
return expr_ref(a.mk_uminus(e), m);
|
||||
}
|
||||
SASSERT(a.is_int(e));
|
||||
return expr_ref(a.mk_idiv(e, a.mk_numeral(k, true)), m);
|
||||
}
|
||||
|
||||
|
||||
void get_def(contains_app& contains_x, unsigned v, expr* fml, expr_ref& def) {
|
||||
app* x = contains_x.x();
|
||||
x_subst x_t(m_util);
|
||||
|
@ -1730,35 +1754,30 @@ public:
|
|||
// a*x + term <= 0
|
||||
expr_ref term(bounds.exprs(is_strict, !is_lower)[i], m);
|
||||
rational a = bounds.coeffs(is_strict, !is_lower)[i];
|
||||
|
||||
if (x_t.get_term()) {
|
||||
// a*(c*x' + s) + term <= 0
|
||||
// term <- a*s + term
|
||||
// a <- a*c
|
||||
term = m_util.mk_add(m_util.mk_mul(a,x_t.get_term()), term);
|
||||
a = a * x_t.get_coeff();
|
||||
// x := coeff * x' + s
|
||||
// solve instead for
|
||||
// a*coeff*x' + term + a*s <= 0
|
||||
TRACE("qe", tout << x_t.get_coeff() << "* " << mk_pp(x,m) << " + "
|
||||
<< mk_pp(x_t.get_term(), m) << "\n";);
|
||||
SASSERT(x_t.get_coeff().is_pos());
|
||||
term = m_util.mk_add(term, m_util.mk_mul(a, x_t.get_term()));
|
||||
a = a * x_t.get_coeff();
|
||||
}
|
||||
|
||||
TRACE("qe", tout << a << "* " << mk_pp(x,m) << " + " << mk_pp(term, m) << " <= 0\n";);
|
||||
SASSERT(a.is_int());
|
||||
if (is_lower) {
|
||||
// a*x + t <= 0
|
||||
// <=
|
||||
// x <= -t div a
|
||||
SASSERT(a.is_pos());
|
||||
term = m_util.mk_idiv(m_util.mk_uminus(term), a);
|
||||
}
|
||||
else {
|
||||
// -a*x + t <= 0
|
||||
// <=>
|
||||
// t <= a*x
|
||||
// <=
|
||||
// ((div t a) + 1) <= x
|
||||
term = m_util.mk_idiv(term, abs(a));
|
||||
if (!(abs(a).is_one())) {
|
||||
term = m_util.mk_add(term, m_util.mk_one(x));
|
||||
}
|
||||
}
|
||||
terms.push_back(term);
|
||||
SASSERT(is_lower == a.is_pos());
|
||||
TRACE("qe", tout << is_lower << " " << a << " " << mk_pp(term, m) << "\n";);
|
||||
|
||||
// a*x + t <= 0
|
||||
// <=
|
||||
// x <= -t div a + 1
|
||||
|
||||
term = m_util.mk_uminus(term);
|
||||
term = mk_idiv(term, a);
|
||||
terms.push_back(term);
|
||||
TRACE("qe", tout << "a: " << a << " term: " << mk_pp(term, m) << "\n";);
|
||||
}
|
||||
is_strict = true;
|
||||
sz = bounds.size(is_strict, !is_lower);
|
||||
|
@ -1788,14 +1807,11 @@ public:
|
|||
}
|
||||
|
||||
if (x_t.get_term()) {
|
||||
//
|
||||
// x = x_t.get_coeff()*x' + x_t.get_term()
|
||||
// =>
|
||||
// x' = (x - x_t.get_term()) div x_t.get_coeff()
|
||||
//
|
||||
def = m_util.mk_idiv(m_util.mk_sub(def, x_t.get_term()), x_t.get_coeff());
|
||||
// x := coeff * x + s
|
||||
TRACE("qe", tout << x_t.get_coeff() << "* " << mk_pp(x,m) << " + "
|
||||
<< mk_pp(x_t.get_term(), m) << "\n";);
|
||||
def = m_util.mk_add(m_util.mk_mul(x_t.get_coeff(), def), x_t.get_term());
|
||||
}
|
||||
|
||||
m_util.simplify(def);
|
||||
return;
|
||||
}
|
||||
|
@ -1822,25 +1838,39 @@ public:
|
|||
// assert v => (x <= t_i)
|
||||
//
|
||||
SASSERT(v < bounds.size(is_strict, is_lower));
|
||||
expr_ref t(bounds.exprs(is_strict, is_lower)[v], m);
|
||||
def = bounds.exprs(is_strict, is_lower)[v];
|
||||
rational a = bounds.coeffs(is_strict, is_lower)[v];
|
||||
|
||||
t = x_t.mk_term(a, t);
|
||||
a = x_t.mk_coeff(a);
|
||||
|
||||
def = t;
|
||||
if (a.is_pos()) {
|
||||
def = m_util.mk_uminus(def);
|
||||
}
|
||||
if (x_t.get_term()) {
|
||||
def = m_util.mk_idiv(m_util.mk_sub(def, x_t.get_term()), x_t.get_coeff());
|
||||
// x := coeff * x' + s
|
||||
// solve instead for
|
||||
// a*coeff*x' + term + a*s <= 0
|
||||
TRACE("qe", tout << x_t.get_coeff() << "* " << mk_pp(x,m) << " + "
|
||||
<< mk_pp(x_t.get_term(), m) << "\n";);
|
||||
SASSERT(x_t.get_coeff().is_pos());
|
||||
def = m_util.mk_add(def, m_util.mk_mul(a, x_t.get_term()));
|
||||
a = a * x_t.get_coeff();
|
||||
}
|
||||
if (!a.is_one()) {
|
||||
def = m_util.mk_idiv(def, a);
|
||||
|
||||
SASSERT(a.is_int());
|
||||
SASSERT(is_lower != a.is_pos());
|
||||
|
||||
// a*x + t <= 0
|
||||
// <=
|
||||
// x <= -t div a
|
||||
|
||||
def = m_util.mk_uminus(def);
|
||||
def = mk_idiv(def, a);
|
||||
|
||||
if (x_t.get_term()) {
|
||||
// x := coeff * x + s
|
||||
def = m_util.mk_add(m_util.mk_mul(x_t.get_coeff(), def), x_t.get_term());
|
||||
}
|
||||
|
||||
m_util.simplify(def);
|
||||
|
||||
TRACE("qe", tout << "TBD: " << a << " " << mk_pp(t, m) << "\n";);
|
||||
|
||||
TRACE("qe", tout << "TBD: " << a << " " << mk_pp(def, m) << "\n";);
|
||||
}
|
||||
|
||||
expr_ref mk_not(expr* e) {
|
||||
|
|
|
@ -467,10 +467,10 @@ namespace qe {
|
|||
SASSERT(m_datatype_util.is_datatype(s));
|
||||
TRACE("quant_elim", tout << mk_pp(x.x(), m) << " " << vl << "\n";);
|
||||
if (m_datatype_util.is_recursive(s)) {
|
||||
subst_rec(x, vl, fml);
|
||||
subst_rec(x, vl, fml, def);
|
||||
}
|
||||
else {
|
||||
subst_nonrec(x, vl, fml);
|
||||
subst_nonrec(x, vl, fml, def);
|
||||
}
|
||||
if (def) {
|
||||
*def = 0; // TBD
|
||||
|
@ -501,14 +501,21 @@ namespace qe {
|
|||
|
||||
private:
|
||||
|
||||
void add_def(expr* term, expr_ref* def) {
|
||||
if (def) {
|
||||
*def = term;
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// replace x by C(y1,..,yn) where y1,..,yn are fresh variables.
|
||||
//
|
||||
void subst_constructor(contains_app& x, func_decl* c, expr_ref& fml) {
|
||||
void subst_constructor(contains_app& x, func_decl* c, expr_ref& fml, expr_ref* def) {
|
||||
subst_clos* sub = 0;
|
||||
|
||||
if (m_subst_cache.find(x.x(), c, sub)) {
|
||||
m_replace->apply_substitution(x.x(), sub->first, 0, fml);
|
||||
add_def(sub->first, def);
|
||||
for (unsigned i = 0; i < sub->second.size(); ++i) {
|
||||
m_ctx.add_var(sub->second[i]);
|
||||
}
|
||||
|
@ -529,6 +536,7 @@ namespace qe {
|
|||
m_trail.push_back(c);
|
||||
m_trail.push_back(t);
|
||||
|
||||
add_def(t, def);
|
||||
m_replace->apply_substitution(x.x(), t, 0, fml);
|
||||
sub->first = t;
|
||||
m_subst_cache.insert(x.x(), c, sub);
|
||||
|
@ -643,7 +651,7 @@ namespace qe {
|
|||
}
|
||||
}
|
||||
|
||||
void subst_rec(contains_app& contains_x, rational const& vl, expr_ref& fml) {
|
||||
void subst_rec(contains_app& contains_x, rational const& vl, expr_ref& fml, expr_ref* def) {
|
||||
app* x = contains_x.x();
|
||||
sort* s = x->get_decl()->get_range();
|
||||
SASSERT(m_datatype_util.is_datatype(s));
|
||||
|
@ -661,6 +669,7 @@ namespace qe {
|
|||
app_ref fresh_x(m.mk_fresh_const("x", s), m);
|
||||
m_ctx.add_var(fresh_x);
|
||||
m_replace->apply_substitution(x, fresh_x, 0, fml);
|
||||
add_def(fresh_x, def);
|
||||
TRACE("quant_elim", tout << "Add recognizer " << mk_pp(is_c, m) << "\n";);
|
||||
return;
|
||||
}
|
||||
|
@ -668,7 +677,7 @@ namespace qe {
|
|||
|
||||
if (has_selector(contains_x, fml, c)) {
|
||||
TRACE("quant_elim", tout << "Eliminate selector " << mk_ll_pp(c, m) << "\n";);
|
||||
subst_constructor(contains_x, c, fml);
|
||||
subst_constructor(contains_x, c, fml, def);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -697,6 +706,7 @@ namespace qe {
|
|||
if (idx < eqs.num_eqs()) {
|
||||
expr* t = eqs.eq(idx);
|
||||
expr* c = eqs.eq_cond(idx);
|
||||
add_def(t, def);
|
||||
m_replace->apply_substitution(x, t, fml);
|
||||
if (!m.is_true(c)) {
|
||||
fml = m.mk_and(c, fml);
|
||||
|
@ -710,6 +720,10 @@ namespace qe {
|
|||
for (unsigned i = 0; i < eqs.num_neqs(); ++i) {
|
||||
m_replace->apply_substitution(eqs.neq_atom(i), m.mk_true(), fml);
|
||||
}
|
||||
if (def) {
|
||||
NOT_IMPLEMENTED_YET();
|
||||
// you need to create a diagonal term
|
||||
}
|
||||
}
|
||||
TRACE("quant_elim", tout << "reduced " << mk_pp(fml.get(), m) << "\n";);
|
||||
}
|
||||
|
@ -753,7 +767,7 @@ namespace qe {
|
|||
m_ctx.add_constraint(true, is_c);
|
||||
}
|
||||
|
||||
virtual void subst_nonrec(contains_app& x, rational const& vl, expr_ref& fml) {
|
||||
virtual void subst_nonrec(contains_app& x, rational const& vl, expr_ref& fml, expr_ref* def) {
|
||||
sort* s = x.x()->get_decl()->get_range();
|
||||
SASSERT(m_datatype_util.is_datatype(s));
|
||||
SASSERT(!m_datatype_util.is_recursive(s));
|
||||
|
@ -767,7 +781,7 @@ namespace qe {
|
|||
SASSERT(vl.get_unsigned() < sz);
|
||||
c = (*m_datatype_util.get_datatype_constructors(s))[vl.get_unsigned()];
|
||||
}
|
||||
subst_constructor(x, c, fml);
|
||||
subst_constructor(x, c, fml, def);
|
||||
}
|
||||
|
||||
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -19,11 +19,10 @@ Revision History:
|
|||
#ifndef _SMT_PARSER_H_
|
||||
#define _SMT_PARSER_H_
|
||||
|
||||
#include "ast.h"
|
||||
#include "vector.h"
|
||||
#include "smtlib.h"
|
||||
#include "z3.h"
|
||||
#include <iostream>
|
||||
#include<iostream>
|
||||
#include"ast.h"
|
||||
#include"vector.h"
|
||||
#include"smtlib.h"
|
||||
|
||||
namespace smtlib {
|
||||
class parser {
|
||||
|
@ -42,8 +41,6 @@ namespace smtlib {
|
|||
virtual bool parse_file(char const * path) = 0;
|
||||
virtual bool parse_string(char const * string) = 0;
|
||||
|
||||
virtual bool parse_commands(Z3_context ctx, std::istream& is, std::ostream& os) = 0;
|
||||
|
||||
virtual benchmark * get_benchmark() = 0;
|
||||
};
|
||||
};
|
|
@ -27,7 +27,7 @@ class tactic;
|
|||
tactic * mk_propagate_values_tactic(ast_manager & m, params_ref const & p = params_ref());
|
||||
|
||||
/*
|
||||
ADD_TACTIC_CMD("propagate-values", "propagate constants.", "mk_propagate_values_tactic(m, p)")
|
||||
ADD_TACTIC("propagate-values", "propagate constants.", "mk_propagate_values_tactic(m, p)")
|
||||
*/
|
||||
|
||||
#endif
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue