mirror of
https://github.com/Colton1skees/Dna
synced 2026-06-21 13:42:09 +00:00
Get the project to build with a new dependency setup
This commit is contained in:
@@ -10,3 +10,6 @@
|
||||
[submodule "Simplifier"]
|
||||
path = Simplifier
|
||||
url = https://github.com/mazeworks-security/Simplifier.git
|
||||
[submodule "Dna.LLVMInterop/dependencies/remill"]
|
||||
path = Dna.LLVMInterop/dependencies/remill
|
||||
url = https://github.com/lifting-bits/remill
|
||||
|
||||
@@ -1,9 +1,8 @@
|
||||
#pragma once
|
||||
|
||||
#include <llvm/IR/Module.h>
|
||||
#include "llvm-c/Transforms/PassManagerBuilder.h"
|
||||
#include "llvm/ADT/SmallVector.h"
|
||||
#include "llvm/ADT/Triple.h"
|
||||
#include "llvm/TargetParser/Triple.h"
|
||||
#include "llvm/Analysis/BasicAliasAnalysis.h"
|
||||
#include "llvm/Analysis/ScalarEvolutionAliasAnalysis.h"
|
||||
#include "llvm/Analysis/GlobalsModRef.h"
|
||||
@@ -25,7 +24,6 @@
|
||||
#include "llvm/Transforms/IPO/ForceFunctionAttrs.h"
|
||||
#include "llvm/Transforms/IPO/FunctionAttrs.h"
|
||||
#include "llvm/Transforms/IPO/InferFunctionAttrs.h"
|
||||
#include "llvm/Transforms/IPO/PassManagerBuilder.h"
|
||||
#include "llvm/Transforms/InstCombine/InstCombine.h"
|
||||
#include "llvm/Transforms/Instrumentation.h"
|
||||
#include "llvm/Transforms/Scalar.h"
|
||||
|
||||
@@ -1,9 +1,8 @@
|
||||
#pragma once
|
||||
|
||||
#include <llvm/IR/LegacyPassManager.h>
|
||||
#include <llvm/Transforms/IPO/PassManagerBuilder.h>
|
||||
// LLVM's legacy PassManagerBuilder API was removed before LLVM 17.
|
||||
// Dna.LLVMInterop now uses the new pass manager through llvm/Passes/PassBuilder.h.
|
||||
// This placeholder remains only to preserve the old project file structure while
|
||||
// managed callers are migrated away from Dna.LLVMInterop.API.LLVMBindings.Transforms.IPO.
|
||||
|
||||
#include <API/ExportDef.h>
|
||||
|
||||
using namespace llvm;
|
||||
using namespace llvm::legacy;
|
||||
|
||||
@@ -1,286 +1,250 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup Label="ProjectConfigurations">
|
||||
<ProjectConfiguration Include="Debug|Win32">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|Win32">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Debug|x64">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|x64">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
</ItemGroup>
|
||||
<PropertyGroup Label="Globals">
|
||||
<VCProjectVersion>16.0</VCProjectVersion>
|
||||
<Keyword>Win32Proj</Keyword>
|
||||
<ProjectGuid>{e6a58095-9b8b-4830-bfea-2947c4f2681a}</ProjectGuid>
|
||||
<RootNamespace>DnaLLVMInterop</RootNamespace>
|
||||
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<PlatformToolset>ClangCL</PlatformToolset>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<PlatformToolset>ClangCL</PlatformToolset>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<ImportGroup Label="ExtensionSettings">
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="Shared">
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<PropertyGroup Label="UserMacros" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<LinkIncremental>true</LinkIncremental>
|
||||
<IncludePath>C:\Users\colton\source\repos\klee\include;C:\Users\colton\source\repos\DnaOld\Dna\Dna.LLVMInterop\souper\include;C:\Users\colton\source\repos\cxx-common-cmake-win\cxx-common-cmake\build\remill-prefix\src\remill\include;C:\Users\colton\source\repos\DnaOld\Dna\Dna.LLVMInterop;C:\Users\colton\source\repos\cxx-common-cmake-win\cxx-common-cmake\build\install\include;$(IncludePath)</IncludePath>
|
||||
<LibraryPath>C:\Users\colton\source\repos\cxx-common-cmake-win\cxx-common-cmake\build\install\lib;$(LibraryPath)</LibraryPath>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<IncludePath>C:\Users\colton\source\repos\Dna\llvm-15.0.3-win64\include;$(IncludePath)</IncludePath>
|
||||
<LibraryPath>C:\Users\colton\source\repos\Dna\llvm-15.0.3-win64\lib;$(LibraryPath)</LibraryPath>
|
||||
</PropertyGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<PreprocessorDefinitions>WIN32;_DEBUG;DNALLVMINTEROP_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<PrecompiledHeader>Use</PrecompiledHeader>
|
||||
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<EnableUAC>false</EnableUAC>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<PreprocessorDefinitions>WIN32;NDEBUG;DNALLVMINTEROP_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<PrecompiledHeader>Use</PrecompiledHeader>
|
||||
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<EnableUAC>false</EnableUAC>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<PreprocessorDefinitions>_DEBUG;DNALLVMINTEROP_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
||||
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
|
||||
<LanguageStandard>stdcpplatest</LanguageStandard>
|
||||
<LanguageStandard_C>stdc17</LanguageStandard_C>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
<GenerateDebugInformation>DebugFastLink</GenerateDebugInformation>
|
||||
<EnableUAC>false</EnableUAC>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<AdditionalDependencies>LLVM-C.lib;LLVMAggressiveInstCombine.lib;LLVMAnalysis.lib;LLVMAsmParser.lib;LLVMAsmPrinter.lib;LLVMBinaryFormat.lib;LLVMBitReader.lib;LLVMBitstreamReader.lib;LLVMBitWriter.lib;LLVMCFGuard.lib;LLVMCFIVerify.lib;LLVMCodeGen.lib;LLVMCore.lib;LLVMCoroutines.lib;LLVMCoverage.lib;LLVMDebugInfoCodeView.lib;LLVMDebuginfod.lib;LLVMDebugInfoDWARF.lib;LLVMDebugInfoGSYM.lib;LLVMDebugInfoMSF.lib;LLVMDebugInfoPDB.lib;LLVMDemangle.lib;LLVMDiff.lib;LLVMDlltoolDriver.lib;LLVMDWARFLinker.lib;LLVMDWP.lib;LLVMExecutionEngine.lib;LLVMExegesis.lib;LLVMExegesisAArch64.lib;LLVMExegesisMips.lib;LLVMExegesisPowerPC.lib;LLVMExegesisX86.lib;LLVMExtensions.lib;LLVMFileCheck.lib;LLVMFrontendOpenACC.lib;LLVMFrontendOpenMP.lib;LLVMFuzzerCLI.lib;LLVMFuzzMutate.lib;LLVMGlobalISel.lib;LLVMInstCombine.lib;LLVMInstrumentation.lib;LLVMInterfaceStub.lib;LLVMInterpreter.lib;LLVMipo.lib;LLVMIRReader.lib;LLVMJITLink.lib;LLVMLibDriver.lib;LLVMLineEditor.lib;LLVMLinker.lib;LLVMLTO.lib;LLVMMC.lib;LLVMMCA.lib;LLVMMCDisassembler.lib;LLVMMCJIT.lib;LLVMMCParser.lib;LLVMMIRParser.lib;LLVMNVPTXCodeGen.lib;LLVMNVPTXDesc.lib;LLVMNVPTXInfo.lib;LLVMObjCARCOpts.lib;LLVMObjCopy.lib;LLVMObject.lib;LLVMObjectYAML.lib;LLVMOption.lib;LLVMOrcJIT.lib;LLVMOrcShared.lib;LLVMOrcTargetProcess.lib;LLVMPasses.lib;LLVMProfileData.lib;LLVMRemarks.lib;LLVMRuntimeDyld.lib;LLVMScalarOpts.lib;LLVMSelectionDAG.lib;LLVMSupport.lib;LLVMSymbolize.lib;LLVMSystemZAsmParser.lib;LLVMSystemZCodeGen.lib;LLVMSystemZDesc.lib;LLVMSystemZDisassembler.lib;LLVMSystemZInfo.lib;LLVMTableGen.lib;LLVMTableGenGlobalISel.lib;LLVMTarget.lib;LLVMTextAPI.lib;LLVMTransformUtils.lib;LLVMVEAsmParser.lib;LLVMVECodeGen.lib;LLVMVectorize.lib;LLVMVEDesc.lib;LLVMVEDisassembler.lib;LLVMVEInfo.lib;LLVMWindowsDriver.lib;LLVMWindowsManifest.lib;LLVMX86AsmParser.lib;LLVMX86CodeGen.lib;LLVMX86Desc.lib;LLVMX86Disassembler.lib;LLVMX86Info.lib;LLVMX86TargetMCA.lib;LLVMXCoreCodeGen.lib;LLVMXCoreDesc.lib;LLVMXCoreDisassembler.lib;LLVMXCoreInfo.lib;LLVMXRay.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<PreprocessorDefinitions>NDEBUG;DNALLVMINTEROP_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
||||
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
|
||||
<LanguageStandard>stdcpp17</LanguageStandard>
|
||||
<LanguageStandard_C>stdc17</LanguageStandard_C>
|
||||
<Optimization>Disabled</Optimization>
|
||||
<InlineFunctionExpansion>Disabled</InlineFunctionExpansion>
|
||||
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<GenerateDebugInformation>DebugFull</GenerateDebugInformation>
|
||||
<EnableUAC>false</EnableUAC>
|
||||
<AdditionalDependencies>clangHandleLLVM.lib;LLVMAArch64AsmParser.lib;LLVMAArch64CodeGen.lib;LLVMAArch64Desc.lib;LLVMAArch64Disassembler.lib;LLVMAArch64Info.lib;LLVMAArch64Utils.lib;LLVMAggressiveInstCombine.lib;LLVMAMDGPUAsmParser.lib;LLVMAMDGPUCodeGen.lib;LLVMAMDGPUDesc.lib;LLVMAMDGPUDisassembler.lib;LLVMAMDGPUInfo.lib;LLVMAMDGPUTargetMCA.lib;LLVMAMDGPUUtils.lib;LLVMAnalysis.lib;LLVMARMAsmParser.lib;LLVMARMCodeGen.lib;LLVMARMDesc.lib;LLVMARMDisassembler.lib;LLVMARMInfo.lib;LLVMARMUtils.lib;LLVMAsmParser.lib;LLVMAsmPrinter.lib;LLVMAVRAsmParser.lib;LLVMAVRCodeGen.lib;LLVMAVRDesc.lib;LLVMAVRDisassembler.lib;LLVMAVRInfo.lib;LLVMBinaryFormat.lib;LLVMBitReader.lib;LLVMBitstreamReader.lib;LLVMBitWriter.lib;LLVMBPFAsmParser.lib;LLVMBPFCodeGen.lib;LLVMBPFDesc.lib;LLVMBPFDisassembler.lib;LLVMBPFInfo.lib;LLVMCFGuard.lib;LLVMCFIVerify.lib;LLVMCodeGen.lib;LLVMCodeGenTypes.lib;LLVMCore.lib;LLVMCoroutines.lib;LLVMCoverage.lib;LLVMDebugInfoBTF.lib;LLVMDebugInfoCodeView.lib;LLVMDebuginfod.lib;LLVMDebugInfoDWARF.lib;LLVMDebugInfoGSYM.lib;LLVMDebugInfoLogicalView.lib;LLVMDebugInfoMSF.lib;LLVMDebugInfoPDB.lib;LLVMDemangle.lib;LLVMDiff.lib;LLVMDlltoolDriver.lib;LLVMDWARFLinker.lib;LLVMDWARFLinkerParallel.lib;LLVMDWP.lib;LLVMExecutionEngine.lib;LLVMExegesis.lib;LLVMExegesisAArch64.lib;LLVMExegesisMips.lib;LLVMExegesisPowerPC.lib;LLVMExegesisX86.lib;LLVMExtensions.lib;LLVMFileCheck.lib;LLVMFrontendHLSL.lib;LLVMFrontendOpenACC.lib;LLVMFrontendOpenMP.lib;LLVMFuzzerCLI.lib;LLVMFuzzMutate.lib;LLVMGlobalISel.lib;LLVMHexagonAsmParser.lib;LLVMHexagonCodeGen.lib;LLVMHexagonDesc.lib;LLVMHexagonDisassembler.lib;LLVMHexagonInfo.lib;LLVMInstCombine.lib;LLVMInstrumentation.lib;LLVMInterfaceStub.lib;LLVMInterpreter.lib;LLVMipo.lib;LLVMIRPrinter.lib;LLVMIRReader.lib;LLVMJITLink.lib;LLVMLanaiAsmParser.lib;LLVMLanaiCodeGen.lib;LLVMLanaiDesc.lib;LLVMLanaiDisassembler.lib;LLVMLanaiInfo.lib;LLVMLibDriver.lib;LLVMLineEditor.lib;LLVMLinker.lib;LLVMLoongArchAsmParser.lib;LLVMLoongArchCodeGen.lib;LLVMLoongArchDesc.lib;LLVMLoongArchDisassembler.lib;LLVMLoongArchInfo.lib;LLVMLTO.lib;LLVMMC.lib;LLVMMCA.lib;LLVMMCDisassembler.lib;LLVMMCJIT.lib;LLVMMCParser.lib;LLVMMipsAsmParser.lib;LLVMMipsCodeGen.lib;LLVMMipsDesc.lib;LLVMMipsDisassembler.lib;LLVMMipsInfo.lib;LLVMMIRParser.lib;LLVMMSP430AsmParser.lib;LLVMMSP430CodeGen.lib;LLVMMSP430Desc.lib;LLVMMSP430Disassembler.lib;LLVMMSP430Info.lib;LLVMNVPTXCodeGen.lib;LLVMNVPTXDesc.lib;LLVMNVPTXInfo.lib;LLVMObjCARCOpts.lib;LLVMObjCopy.lib;LLVMObject.lib;LLVMObjectYAML.lib;LLVMOption.lib;LLVMOrcJIT.lib;LLVMOrcShared.lib;LLVMOrcTargetProcess.lib;LLVMPasses.lib;LLVMPowerPCAsmParser.lib;LLVMPowerPCCodeGen.lib;LLVMPowerPCDesc.lib;LLVMPowerPCDisassembler.lib;LLVMPowerPCInfo.lib;LLVMProfileData.lib;LLVMRemarks.lib;LLVMRISCVAsmParser.lib;LLVMRISCVCodeGen.lib;LLVMRISCVDesc.lib;LLVMRISCVDisassembler.lib;LLVMRISCVInfo.lib;LLVMRISCVTargetMCA.lib;LLVMRuntimeDyld.lib;LLVMScalarOpts.lib;LLVMSelectionDAG.lib;LLVMSparcAsmParser.lib;LLVMSparcCodeGen.lib;LLVMSparcDesc.lib;LLVMSparcDisassembler.lib;LLVMSparcInfo.lib;LLVMSupport.lib;LLVMSymbolize.lib;LLVMSystemZAsmParser.lib;LLVMSystemZCodeGen.lib;LLVMSystemZDesc.lib;LLVMSystemZDisassembler.lib;LLVMSystemZInfo.lib;LLVMTableGen.lib;LLVMTableGenCommon.lib;LLVMTableGenGlobalISel.lib;LLVMTarget.lib;LLVMTargetParser.lib;LLVMTextAPI.lib;LLVMTransformUtils.lib;LLVMVEAsmParser.lib;LLVMVECodeGen.lib;LLVMVectorize.lib;LLVMVEDesc.lib;LLVMVEDisassembler.lib;LLVMVEInfo.lib;LLVMWebAssemblyAsmParser.lib;LLVMWebAssemblyCodeGen.lib;LLVMWebAssemblyDesc.lib;LLVMWebAssemblyDisassembler.lib;LLVMWebAssemblyInfo.lib;LLVMWebAssemblyUtils.lib;LLVMWindowsDriver.lib;LLVMWindowsManifest.lib;LLVMX86AsmParser.lib;LLVMX86CodeGen.lib;LLVMX86Desc.lib;LLVMX86Disassembler.lib;LLVMX86Info.lib;LLVMX86TargetMCA.lib;LLVMXCoreCodeGen.lib;LLVMXCoreDesc.lib;LLVMXCoreDisassembler.lib;LLVMXCoreInfo.lib;LLVMXRay.lib;remill_arch.lib;remill_bc.lib;remill_os.lib;remill_version.lib;remill_arch_aarch64.lib;remill_arch_sleigh.lib;remill_arch_sparc32.lib;remill_arch_sparc64.lib;remill_arch_x86.lib;decomp.lib;sla.lib;slaSupport.lib;gflags_static.lib;gflags_nothreads_static.lib;glog.lib;xed.lib;xed-ild.lib;shlwapi.lib;libz3.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<StackReserveSize>536870912</StackReserveSize>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="..\..\Devirtualizer\Dna.LLVMInterop\Passes\AdhocInstCombinePass.h" />
|
||||
<ClInclude Include="..\..\Devirtualizer\Dna.LLVMInterop\Passes\MultiUseCloningPass.h" />
|
||||
<ClInclude Include="..\..\Devirtualizer\Dna.LLVMInterop\Passes\OpaqueStackVarEliminationPass.h" />
|
||||
<ClInclude Include="API\ExportDef.h" />
|
||||
<ClInclude Include="API\ExportedAPI.h" />
|
||||
<ClInclude Include="API\ImmutableManagedPair.h" />
|
||||
<ClInclude Include="API\LLVMC.hpp" />
|
||||
<ClInclude Include="API\LLVM\Analysis\ConstantFolding.h" />
|
||||
<ClInclude Include="API\LLVM\Analysis\KnownBits.h" />
|
||||
<ClInclude Include="API\LLVM\Analysis\LoopInfo.h" />
|
||||
<ClInclude Include="API\LLVM\Analysis\MemorySSA.h" />
|
||||
<ClInclude Include="API\LLVM\IR\CFG.h" />
|
||||
<ClInclude Include="API\LLVM\IR\Dominators.h" />
|
||||
<ClInclude Include="API\LLVM\IR\LegacyPassManager.h" />
|
||||
<ClInclude Include="API\LLVM\Pass.h" />
|
||||
<ClInclude Include="API\LLVM\Transforms\IPO\PassManagerBuilder.h" />
|
||||
<ClInclude Include="API\LLVM\Transforms\Scalar.h" />
|
||||
<ClInclude Include="API\ImmutableManagedVector.h" />
|
||||
<ClInclude Include="API\LLVM\Transforms\Utils.h" />
|
||||
<ClInclude Include="API\LLVM\Transforms\Utils\Cloning.h" />
|
||||
<ClInclude Include="API\OptimizationAPI\OptimizationAPI.h" />
|
||||
<ClInclude Include="API\OptimizationAPI\OptimizationUtils.h" />
|
||||
<ClInclude Include="API\Passes\Passes.h" />
|
||||
<ClInclude Include="API\RegionAPI\BaseRegionAPI.h" />
|
||||
<ClInclude Include="API\RegionAPI\ComplexRegionAPI.h" />
|
||||
<ClInclude Include="API\RegionAPI\IfThenElseRegionAPI.h" />
|
||||
<ClInclude Include="API\RegionAPI\IfThenRegionAPI.h" />
|
||||
<ClInclude Include="API\RegionAPI\RegionAPI.h" />
|
||||
<ClInclude Include="API\RegionAPI\ReturnRegionAPI.h" />
|
||||
<ClInclude Include="API\Remill\Arch\Arch.h" />
|
||||
<ClInclude Include="API\Remill\Arch\Context.h" />
|
||||
<ClInclude Include="API\Remill\Arch\Instruction.h" />
|
||||
<ClInclude Include="API\Remill\BC\InstructionLifter.h" />
|
||||
<ClInclude Include="API\Remill\BC\IntrinsicTable.h" />
|
||||
<ClInclude Include="API\Remill\BC\Optimizer.h" />
|
||||
<ClInclude Include="API\Remill\BC\Util.h" />
|
||||
<ClInclude Include="API\souper\SouperExprBuilder.h" />
|
||||
<ClInclude Include="API\souper\SouperCandidates.h" />
|
||||
<ClInclude Include="API\souper\SouperInst.h" />
|
||||
<ClInclude Include="Arch\X86\X86Registers.h" />
|
||||
<ClInclude Include="Passes\BoundsSolver.h" />
|
||||
<ClInclude Include="Passes\ClassifyingAliasAnalysisPass.h" />
|
||||
<ClInclude Include="Passes\compilercore_assert.h" />
|
||||
<ClInclude Include="Passes\ConstantConcretizationPass.h" />
|
||||
<ClInclude Include="Passes\ControlFlowStructuringPass.h" />
|
||||
<ClInclude Include="Passes\ControlledNodeSplittingPass.h" />
|
||||
<ClInclude Include="Passes\generator_jit_ast_compute.h" />
|
||||
<ClInclude Include="Passes\generator_jit_sl_function.h" />
|
||||
<ClInclude Include="Passes\JumpTableAnalysisPass.h" />
|
||||
<ClInclude Include="Passes\mdl_assert.h" />
|
||||
<ClInclude Include="Passes\PassUtilities.h" />
|
||||
<ClInclude Include="Pipeline\Pipeline.h" />
|
||||
<ClInclude Include="souper\include\souper\Codegen\Codegen.h" />
|
||||
<ClInclude Include="souper\include\souper\Extractor\Candidates.h" />
|
||||
<ClInclude Include="souper\include\souper\Extractor\ExprBuilder.h" />
|
||||
<ClInclude Include="souper\include\souper\Infer\AbstractInterpreter.h" />
|
||||
<ClInclude Include="souper\include\souper\Infer\AliveDriver.h" />
|
||||
<ClInclude Include="souper\include\souper\Infer\ConstantSynthesis.h" />
|
||||
<ClInclude Include="souper\include\souper\Infer\EnumerativeSynthesis.h" />
|
||||
<ClInclude Include="souper\include\souper\Infer\InstSynthesis.h" />
|
||||
<ClInclude Include="souper\include\souper\Infer\Interpreter.h" />
|
||||
<ClInclude Include="souper\include\souper\Infer\Preconditions.h" />
|
||||
<ClInclude Include="souper\include\souper\Infer\Pruning.h" />
|
||||
<ClInclude Include="souper\include\souper\Infer\Verification.h" />
|
||||
<ClInclude Include="souper\include\souper\Infer\Z3Driver.h" />
|
||||
<ClInclude Include="souper\include\souper\Infer\Z3Expr.h" />
|
||||
<ClInclude Include="souper\include\souper\Inst\Inst.h" />
|
||||
<ClInclude Include="souper\include\souper\Inst\InstGraph.h" />
|
||||
<ClInclude Include="souper\include\souper\KVStore\KVStore.h" />
|
||||
<ClInclude Include="souper\include\souper\Parser\Parser.h" />
|
||||
<ClInclude Include="souper\include\souper\SMTLIB2\Solver.h" />
|
||||
<ClInclude Include="souper\include\souper\Tool\CandidateMapUtils.h" />
|
||||
<ClInclude Include="souper\include\souper\Tool\GetSolver.h" />
|
||||
<ClInclude Include="souper\include\souper\Util\DfaUtils.h" />
|
||||
<ClInclude Include="souper\include\souper\Util\LLVMUtils.h" />
|
||||
<ClInclude Include="souper\include\souper\Util\UniqueNameSet.h" />
|
||||
<ClInclude Include="Utilities\magic_enum.hpp" />
|
||||
<ClInclude Include="Utilities\magic_enum_containers.hpp" />
|
||||
<ClInclude Include="Utilities\magic_enum_format.hpp" />
|
||||
<ClInclude Include="Utilities\magic_enum_fuse.hpp" />
|
||||
<ClInclude Include="Utilities\magic_enum_switch.hpp" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="..\..\..\klee\lib\Expr\Expr.cpp" />
|
||||
<ClCompile Include="..\..\..\klee\lib\Expr\ExprPPrinter.cpp" />
|
||||
<ClCompile Include="..\..\..\klee\lib\Expr\ExprSMTLIBPrinter.cpp" />
|
||||
<ClCompile Include="..\..\..\klee\lib\Expr\Updates.cpp" />
|
||||
<ClCompile Include="dllmain.cpp" />
|
||||
<ClCompile Include="Passes\ClassifyingAliasAnalysisPass.cpp" />
|
||||
<ClCompile Include="Passes\compilercore_assert.cpp" />
|
||||
<ClCompile Include="Passes\ConstantConcretizationPass.cpp" />
|
||||
<ClCompile Include="Passes\ControlledNodeSplittingPass.cpp" />
|
||||
<ClCompile Include="Passes\generator_jit_ast_compute.cpp" />
|
||||
<ClCompile Include="souper\lib\Codegen\Codegen.cpp" />
|
||||
<ClCompile Include="souper\lib\Codegen\MachineCost.cpp" />
|
||||
<ClCompile Include="souper\lib\Extractor\Candidates.cpp" />
|
||||
<ClCompile Include="souper\lib\Extractor\ExprBuilder.cpp" />
|
||||
<ClCompile Include="souper\lib\Extractor\KLEEBuilder.cpp" />
|
||||
<ClCompile Include="souper\lib\Extractor\Solver.cpp" />
|
||||
<ClCompile Include="souper\lib\Infer\AbstractInterpreter.cpp" />
|
||||
<ClCompile Include="souper\lib\Infer\AliveDriver.cpp" />
|
||||
<ClCompile Include="souper\lib\Infer\ConstantSynthesis.cpp" />
|
||||
<ClCompile Include="souper\lib\Infer\EnumerativeSynthesis.cpp" />
|
||||
<ClCompile Include="souper\lib\Infer\InstSynthesis.cpp" />
|
||||
<ClCompile Include="souper\lib\Infer\Interpreter.cpp" />
|
||||
<ClCompile Include="souper\lib\Infer\Preconditions.cpp" />
|
||||
<ClCompile Include="souper\lib\Infer\Pruning.cpp" />
|
||||
<ClCompile Include="souper\lib\Infer\Verification.cpp" />
|
||||
<ClCompile Include="souper\lib\Infer\Z3Driver.cpp" />
|
||||
<ClCompile Include="souper\lib\Infer\Z3Expr.cpp" />
|
||||
<ClCompile Include="souper\lib\Inst\Inst.cpp" />
|
||||
<ClCompile Include="souper\lib\KVStore\KVStore.cpp" />
|
||||
<ClCompile Include="souper\lib\Parser\Parser.cpp" />
|
||||
<ClCompile Include="souper\lib\Pass\Pass.cpp" />
|
||||
<ClCompile Include="souper\lib\SMTLIB2\smtlib_Solver.cpp" />
|
||||
<ClCompile Include="souper\lib\Tool\CandidateMapUtils.cpp" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="souper\include\souper\KVStore\KVSocket.h.in" />
|
||||
<None Include="souper\include\souper\Tool\GetSolver.h.in" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
<ImportGroup Label="ExtensionTargets">
|
||||
</ImportGroup>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup Label="ProjectConfigurations">
|
||||
<ProjectConfiguration Include="Debug|x64">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|x64">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
</ItemGroup>
|
||||
<PropertyGroup Label="Globals">
|
||||
<VCProjectVersion>16.0</VCProjectVersion>
|
||||
<Keyword>Win32Proj</Keyword>
|
||||
<ProjectGuid>{e6a58095-9b8b-4830-bfea-2947c4f2681a}</ProjectGuid>
|
||||
<RootNamespace>DnaLLVMInterop</RootNamespace>
|
||||
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<PlatformToolset>ClangCL</PlatformToolset>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<PlatformToolset>ClangCL</PlatformToolset>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<ImportGroup Label="ExtensionSettings">
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="Shared">
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<PropertyGroup Label="UserMacros" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<LinkIncremental>true</LinkIncremental>
|
||||
<LinkToolExe>link.exe</LinkToolExe>
|
||||
<UseLldLink>false</UseLldLink>
|
||||
<IncludePath>$(ProjectDir)klee\include;$(ProjectDir)souper\include;$(ProjectDir);$(ProjectDir)dependencies\install\include;$(IncludePath)</IncludePath>
|
||||
<LibraryPath>$(ProjectDir)dependencies\install\lib;$(LibraryPath)</LibraryPath>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<LinkToolExe>link.exe</LinkToolExe>
|
||||
<UseLldLink>false</UseLldLink>
|
||||
<IncludePath>$(ProjectDir)klee\include;$(ProjectDir)souper\include;$(ProjectDir);$(ProjectDir)dependencies\install\include;$(IncludePath)</IncludePath>
|
||||
<LibraryPath>$(ProjectDir)dependencies\install\lib;$(LibraryPath)</LibraryPath>
|
||||
</PropertyGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<PreprocessorDefinitions>_DEBUG;DNALLVMINTEROP_EXPORTS;_WINDOWS;_USRDLL;LLVM_VERSION_MAJOR=17;LLVM_VERSION_MINOR=0;LLVM_VERSION_PATCH=2;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
||||
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
|
||||
<LanguageStandard>stdcpplatest</LanguageStandard>
|
||||
<LanguageStandard_C>stdc17</LanguageStandard_C>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
<GenerateDebugInformation>DebugFastLink</GenerateDebugInformation>
|
||||
<EnableUAC>false</EnableUAC>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<AdditionalLibraryDirectories>$(ProjectDir)dependencies\install\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||
<AdditionalDependencies>/INCLUDE:Z3_mk_int;libz3.lib;LLVMX86AsmParser.lib;LLVMX86Disassembler.lib;LLVMX86TargetMCA.lib;LLVMAArch64AsmParser.lib;LLVMAArch64CodeGen.lib;LLVMAArch64Desc.lib;LLVMAArch64Disassembler.lib;LLVMAArch64Info.lib;LLVMAArch64Utils.lib;LLVMOrcJIT.lib;LLVMWindowsDriver.lib;LLVMJITLink.lib;LLVMOption.lib;LLVMMCJIT.lib;LLVMX86CodeGen.lib;LLVMX86Desc.lib;LLVMX86Info.lib;LLVMMCDisassembler.lib;LLVMGlobalISel.lib;LLVMSelectionDAG.lib;LLVMCFGuard.lib;LLVMAsmPrinter.lib;LLVMExecutionEngine.lib;LLVMInterpreter.lib;LLVMRuntimeDyld.lib;LLVMOrcTargetProcess.lib;LLVMOrcShared.lib;LLVMPasses.lib;LLVMIRPrinter.lib;LLVMCoroutines.lib;LLVMCodeGen.lib;LLVMTarget.lib;LLVMObjCARCOpts.lib;LLVMCodeGenTypes.lib;LLVMipo.lib;LLVMInstrumentation.lib;LLVMVectorize.lib;LLVMLinker.lib;LLVMFrontendOpenMP.lib;LLVMBitWriter.lib;LLVMScalarOpts.lib;LLVMInstCombine.lib;LLVMAggressiveInstCombine.lib;LLVMTransformUtils.lib;LLVMAnalysis.lib;LLVMProfileData.lib;LLVMSymbolize.lib;LLVMDebugInfoBTF.lib;LLVMDebugInfoPDB.lib;LLVMDebugInfoMSF.lib;LLVMDebugInfoDWARF.lib;LLVMObject.lib;LLVMTextAPI.lib;LLVMMCParser.lib;LLVMIRReader.lib;LLVMAsmParser.lib;LLVMMC.lib;LLVMDebugInfoCodeView.lib;LLVMBitReader.lib;LLVMCore.lib;LLVMRemarks.lib;LLVMBitstreamReader.lib;LLVMBinaryFormat.lib;LLVMTargetParser.lib;LLVMSupport.lib;LLVMDemangle.lib;remill_arch.lib;remill_bc.lib;remill_os.lib;remill_version.lib;remill_arch_aarch64.lib;remill_arch_sleigh.lib;remill_arch_sparc32.lib;remill_arch_sparc64.lib;remill_arch_x86.lib;decomp.lib;sla.lib;slaSupport.lib;gflags_static.lib;gflags_nothreads_static.lib;glog.lib;xed.lib;xed-ild.lib;shlwapi.lib;psapi.lib;dbghelp.lib;shell32.lib;ole32.lib;uuid.lib;advapi32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<PreprocessorDefinitions>NDEBUG;DNALLVMINTEROP_EXPORTS;_WINDOWS;_USRDLL;LLVM_VERSION_MAJOR=17;LLVM_VERSION_MINOR=0;LLVM_VERSION_PATCH=2;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
||||
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
|
||||
<LanguageStandard>stdcpp17</LanguageStandard>
|
||||
<LanguageStandard_C>stdc17</LanguageStandard_C>
|
||||
<Optimization>Disabled</Optimization>
|
||||
<InlineFunctionExpansion>Disabled</InlineFunctionExpansion>
|
||||
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<AdditionalLibraryDirectories>$(ProjectDir)dependencies\install\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||
<GenerateDebugInformation>DebugFull</GenerateDebugInformation>
|
||||
<EnableUAC>false</EnableUAC>
|
||||
<AdditionalDependencies>/INCLUDE:Z3_mk_int;libz3.lib;LLVMX86AsmParser.lib;LLVMX86Disassembler.lib;LLVMX86TargetMCA.lib;LLVMAArch64AsmParser.lib;LLVMAArch64CodeGen.lib;LLVMAArch64Desc.lib;LLVMAArch64Disassembler.lib;LLVMAArch64Info.lib;LLVMAArch64Utils.lib;LLVMOrcJIT.lib;LLVMWindowsDriver.lib;LLVMJITLink.lib;LLVMOption.lib;LLVMMCJIT.lib;LLVMX86CodeGen.lib;LLVMX86Desc.lib;LLVMX86Info.lib;LLVMMCDisassembler.lib;LLVMGlobalISel.lib;LLVMSelectionDAG.lib;LLVMCFGuard.lib;LLVMAsmPrinter.lib;LLVMExecutionEngine.lib;LLVMInterpreter.lib;LLVMRuntimeDyld.lib;LLVMOrcTargetProcess.lib;LLVMOrcShared.lib;LLVMPasses.lib;LLVMIRPrinter.lib;LLVMCoroutines.lib;LLVMCodeGen.lib;LLVMTarget.lib;LLVMObjCARCOpts.lib;LLVMCodeGenTypes.lib;LLVMipo.lib;LLVMInstrumentation.lib;LLVMVectorize.lib;LLVMLinker.lib;LLVMFrontendOpenMP.lib;LLVMBitWriter.lib;LLVMScalarOpts.lib;LLVMInstCombine.lib;LLVMAggressiveInstCombine.lib;LLVMTransformUtils.lib;LLVMAnalysis.lib;LLVMProfileData.lib;LLVMSymbolize.lib;LLVMDebugInfoBTF.lib;LLVMDebugInfoPDB.lib;LLVMDebugInfoMSF.lib;LLVMDebugInfoDWARF.lib;LLVMObject.lib;LLVMTextAPI.lib;LLVMMCParser.lib;LLVMIRReader.lib;LLVMAsmParser.lib;LLVMMC.lib;LLVMDebugInfoCodeView.lib;LLVMBitReader.lib;LLVMCore.lib;LLVMRemarks.lib;LLVMBitstreamReader.lib;LLVMBinaryFormat.lib;LLVMTargetParser.lib;LLVMSupport.lib;LLVMDemangle.lib;remill_arch.lib;remill_bc.lib;remill_os.lib;remill_version.lib;remill_arch_aarch64.lib;remill_arch_sleigh.lib;remill_arch_sparc32.lib;remill_arch_sparc64.lib;remill_arch_x86.lib;decomp.lib;sla.lib;slaSupport.lib;gflags_static.lib;gflags_nothreads_static.lib;glog.lib;xed.lib;xed-ild.lib;shlwapi.lib;psapi.lib;dbghelp.lib;shell32.lib;ole32.lib;uuid.lib;advapi32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<StackReserveSize>536870912</StackReserveSize>
|
||||
<AdditionalOptions>/ignore:4099 %(AdditionalOptions)</AdditionalOptions>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="..\..\Devirtualizer\Dna.LLVMInterop\Passes\AdhocInstCombinePass.h" />
|
||||
<ClInclude Include="..\..\Devirtualizer\Dna.LLVMInterop\Passes\MultiUseCloningPass.h" />
|
||||
<ClInclude Include="..\..\Devirtualizer\Dna.LLVMInterop\Passes\OpaqueStackVarEliminationPass.h" />
|
||||
<ClInclude Include="API\ExportDef.h" />
|
||||
<ClInclude Include="API\ExportedAPI.h" />
|
||||
<ClInclude Include="API\ImmutableManagedPair.h" />
|
||||
<ClInclude Include="API\LLVMC.hpp" />
|
||||
<ClInclude Include="API\LLVM\Analysis\ConstantFolding.h" />
|
||||
<ClInclude Include="API\LLVM\Analysis\KnownBits.h" />
|
||||
<ClInclude Include="API\LLVM\Analysis\LoopInfo.h" />
|
||||
<ClInclude Include="API\LLVM\Analysis\MemorySSA.h" />
|
||||
<ClInclude Include="API\LLVM\IR\CFG.h" />
|
||||
<ClInclude Include="API\LLVM\IR\Dominators.h" />
|
||||
<ClInclude Include="API\LLVM\IR\LegacyPassManager.h" />
|
||||
<ClInclude Include="API\LLVM\Pass.h" />
|
||||
<ClInclude Include="API\LLVM\Transforms\IPO\PassManagerBuilder.h" />
|
||||
<ClInclude Include="API\LLVM\Transforms\Scalar.h" />
|
||||
<ClInclude Include="API\ImmutableManagedVector.h" />
|
||||
<ClInclude Include="API\LLVM\Transforms\Utils.h" />
|
||||
<ClInclude Include="API\LLVM\Transforms\Utils\Cloning.h" />
|
||||
<ClInclude Include="API\OptimizationAPI\OptimizationAPI.h" />
|
||||
<ClInclude Include="API\OptimizationAPI\OptimizationUtils.h" />
|
||||
<ClInclude Include="API\Passes\Passes.h" />
|
||||
<ClInclude Include="API\RegionAPI\BaseRegionAPI.h" />
|
||||
<ClInclude Include="API\RegionAPI\ComplexRegionAPI.h" />
|
||||
<ClInclude Include="API\RegionAPI\IfThenElseRegionAPI.h" />
|
||||
<ClInclude Include="API\RegionAPI\IfThenRegionAPI.h" />
|
||||
<ClInclude Include="API\RegionAPI\RegionAPI.h" />
|
||||
<ClInclude Include="API\RegionAPI\ReturnRegionAPI.h" />
|
||||
<ClInclude Include="API\Remill\Arch\Arch.h" />
|
||||
<ClInclude Include="API\Remill\Arch\Context.h" />
|
||||
<ClInclude Include="API\Remill\Arch\Instruction.h" />
|
||||
<ClInclude Include="API\Remill\BC\InstructionLifter.h" />
|
||||
<ClInclude Include="API\Remill\BC\IntrinsicTable.h" />
|
||||
<ClInclude Include="API\Remill\BC\Optimizer.h" />
|
||||
<ClInclude Include="API\Remill\BC\Util.h" />
|
||||
<ClInclude Include="API\souper\SouperExprBuilder.h" />
|
||||
<ClInclude Include="API\souper\SouperCandidates.h" />
|
||||
<ClInclude Include="API\souper\SouperInst.h" />
|
||||
<ClInclude Include="Arch\X86\X86Registers.h" />
|
||||
<ClInclude Include="Passes\BoundsSolver.h" />
|
||||
<ClInclude Include="Passes\ClassifyingAliasAnalysisPass.h" />
|
||||
<ClInclude Include="Passes\compilercore_assert.h" />
|
||||
<ClInclude Include="Passes\ConstantConcretizationPass.h" />
|
||||
<ClInclude Include="Passes\ControlFlowStructuringPass.h" />
|
||||
<ClInclude Include="Passes\ControlledNodeSplittingPass.h" />
|
||||
<ClInclude Include="Passes\generator_jit_ast_compute.h" />
|
||||
<ClInclude Include="Passes\generator_jit_sl_function.h" />
|
||||
<ClInclude Include="Passes\JumpTableAnalysisPass.h" />
|
||||
<ClInclude Include="Passes\mdl_assert.h" />
|
||||
<ClInclude Include="Passes\PassUtilities.h" />
|
||||
<ClInclude Include="Pipeline\Pipeline.h" />
|
||||
<ClInclude Include="klee\include\klee\Config\config.h" />
|
||||
<ClInclude Include="klee\include\klee\Config\Version.h" />
|
||||
<ClInclude Include="klee\include\klee\Constraints.h" />
|
||||
<ClInclude Include="klee\include\klee\Expr.h" />
|
||||
<ClInclude Include="klee\include\klee\Internal\Support\IntEvaluation.h" />
|
||||
<ClInclude Include="klee\include\klee\Solver.h" />
|
||||
<ClInclude Include="klee\include\klee\util\Bits.h" />
|
||||
<ClInclude Include="klee\include\klee\util\ExprPPrinter.h" />
|
||||
<ClInclude Include="klee\include\klee\util\ExprSMTLIBPrinter.h" />
|
||||
<ClInclude Include="klee\include\klee\util\PrintContext.h" />
|
||||
<ClInclude Include="klee\include\klee\util\Ref.h" />
|
||||
<ClInclude Include="souper\include\klee\Config\config.h" />
|
||||
<ClInclude Include="souper\include\souper\Codegen\Codegen.h" />
|
||||
<ClInclude Include="souper\include\souper\Extractor\Candidates.h" />
|
||||
<ClInclude Include="souper\include\souper\Extractor\ExprBuilder.h" />
|
||||
<ClInclude Include="souper\include\souper\Extractor\Solver.h" />
|
||||
<ClInclude Include="souper\include\souper\Infer\AbstractInterpreter.h" />
|
||||
<ClInclude Include="souper\include\souper\Infer\AliveDriver.h" />
|
||||
<ClInclude Include="souper\include\souper\Infer\ConstantSynthesis.h" />
|
||||
<ClInclude Include="souper\include\souper\Infer\EnumerativeSynthesis.h" />
|
||||
<ClInclude Include="souper\include\souper\Infer\InstSynthesis.h" />
|
||||
<ClInclude Include="souper\include\souper\Infer\Interpreter.h" />
|
||||
<ClInclude Include="souper\include\souper\Infer\Preconditions.h" />
|
||||
<ClInclude Include="souper\include\souper\Infer\Pruning.h" />
|
||||
<ClInclude Include="souper\include\souper\Infer\Verification.h" />
|
||||
<ClInclude Include="souper\include\souper\Infer\Z3Driver.h" />
|
||||
<ClInclude Include="souper\include\souper\Infer\Z3Expr.h" />
|
||||
<ClInclude Include="souper\include\souper\Inst\Inst.h" />
|
||||
<ClInclude Include="souper\include\souper\Inst\InstGraph.h" />
|
||||
<ClInclude Include="souper\include\souper\KVStore\KVStore.h" />
|
||||
<ClInclude Include="souper\include\souper\Parser\Parser.h" />
|
||||
<ClInclude Include="souper\include\souper\SMTLIB2\Solver.h" />
|
||||
<ClInclude Include="souper\include\souper\Tool\CandidateMapUtils.h" />
|
||||
<ClInclude Include="souper\include\souper\Tool\GetSolver.h" />
|
||||
<ClInclude Include="souper\include\souper\Util\DfaUtils.h" />
|
||||
<ClInclude Include="souper\include\souper\Util\LLVMUtils.h" />
|
||||
<ClInclude Include="souper\include\souper\Util\UniqueNameSet.h" />
|
||||
<ClInclude Include="Utilities\magic_enum.hpp" />
|
||||
<ClInclude Include="Utilities\magic_enum_containers.hpp" />
|
||||
<ClInclude Include="Utilities\magic_enum_format.hpp" />
|
||||
<ClInclude Include="Utilities\magic_enum_fuse.hpp" />
|
||||
<ClInclude Include="Utilities\magic_enum_switch.hpp" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="klee\lib\Expr\Expr.cpp" />
|
||||
<ClCompile Include="klee\lib\Expr\ExprPPrinter.cpp" />
|
||||
<ClCompile Include="klee\lib\Expr\ExprSMTLIBPrinter.cpp" />
|
||||
<ClCompile Include="klee\lib\Expr\Updates.cpp" />
|
||||
<ClCompile Include="dllmain.cpp" />
|
||||
<ClCompile Include="Passes\ClassifyingAliasAnalysisPass.cpp" />
|
||||
<ClCompile Include="Passes\compilercore_assert.cpp" />
|
||||
<ClCompile Include="Passes\ConstantConcretizationPass.cpp" />
|
||||
<ClCompile Include="Passes\ControlledNodeSplittingPass.cpp" />
|
||||
<ClCompile Include="Passes\generator_jit_ast_compute.cpp" />
|
||||
<ClCompile Include="souper\lib\Codegen\Codegen.cpp" />
|
||||
<ClCompile Include="souper\lib\Codegen\MachineCost.cpp" />
|
||||
<ClCompile Include="souper\lib\Extractor\Candidates.cpp" />
|
||||
<ClCompile Include="souper\lib\Extractor\ExprBuilder.cpp" />
|
||||
<ClCompile Include="souper\lib\Extractor\KLEEBuilder.cpp" />
|
||||
<ClCompile Include="souper\lib\Extractor\Solver.cpp" />
|
||||
<ClCompile Include="souper\lib\Infer\AbstractInterpreter.cpp" />
|
||||
<ClCompile Include="souper\lib\Infer\AliveDriver.cpp" />
|
||||
<ClCompile Include="souper\lib\Infer\ConstantSynthesis.cpp" />
|
||||
<ClCompile Include="souper\lib\Infer\EnumerativeSynthesis.cpp" />
|
||||
<ClCompile Include="souper\lib\Infer\InstSynthesis.cpp" />
|
||||
<ClCompile Include="souper\lib\Infer\Interpreter.cpp" />
|
||||
<ClCompile Include="souper\lib\Infer\Preconditions.cpp" />
|
||||
<ClCompile Include="souper\lib\Infer\Pruning.cpp" />
|
||||
<ClCompile Include="souper\lib\Infer\Verification.cpp" />
|
||||
<ClCompile Include="souper\lib\Infer\Z3Driver.cpp" />
|
||||
<ClCompile Include="souper\lib\Infer\Z3Expr.cpp" />
|
||||
<ClCompile Include="souper\lib\Inst\Inst.cpp" />
|
||||
<ClCompile Include="souper\lib\KVStore\KVStore.cpp" />
|
||||
<ClCompile Include="souper\lib\Parser\Parser.cpp" />
|
||||
<ClCompile Include="souper\lib\Pass\Pass.cpp" />
|
||||
<ClCompile Include="souper\lib\SMTLIB2\smtlib_Solver.cpp" />
|
||||
<ClCompile Include="souper\lib\Tool\CandidateMapUtils.cpp" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="klee\include\klee\Config\config.h.in" />
|
||||
<None Include="klee\LICENSE.TXT" />
|
||||
<None Include="klee\README.txt" />
|
||||
<None Include="souper\include\souper\KVStore\KVSocket.h.in" />
|
||||
<None Include="souper\include\souper\Tool\GetSolver.h.in" />
|
||||
<None Include="souper\LICENSE" />
|
||||
<None Include="souper\README.txt" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
<ImportGroup Label="ExtensionTargets">
|
||||
</ImportGroup>
|
||||
</Project>
|
||||
@@ -139,6 +139,42 @@
|
||||
<ClInclude Include="API\LLVM\IR\Dominators.h">
|
||||
<Filter>API\LLVM\IR</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="klee\include\klee\Config\config.h">
|
||||
<Filter>klee</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="klee\include\klee\Config\Version.h">
|
||||
<Filter>klee</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="klee\include\klee\Constraints.h">
|
||||
<Filter>klee</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="klee\include\klee\Expr.h">
|
||||
<Filter>klee</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="klee\include\klee\Internal\Support\IntEvaluation.h">
|
||||
<Filter>klee</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="klee\include\klee\Solver.h">
|
||||
<Filter>klee</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="klee\include\klee\util\Bits.h">
|
||||
<Filter>klee</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="klee\include\klee\util\ExprPPrinter.h">
|
||||
<Filter>klee</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="klee\include\klee\util\ExprSMTLIBPrinter.h">
|
||||
<Filter>klee</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="klee\include\klee\util\PrintContext.h">
|
||||
<Filter>klee</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="klee\include\klee\util\Ref.h">
|
||||
<Filter>klee</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="souper\include\klee\Config\config.h">
|
||||
<Filter>souper</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="souper\include\souper\Util\LLVMUtils.h">
|
||||
<Filter>souper</Filter>
|
||||
</ClInclude>
|
||||
@@ -196,6 +232,9 @@
|
||||
<ClInclude Include="souper\include\souper\Extractor\ExprBuilder.h">
|
||||
<Filter>souper</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="souper\include\souper\Extractor\Solver.h">
|
||||
<Filter>souper</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="souper\include\souper\Codegen\Codegen.h">
|
||||
<Filter>souper</Filter>
|
||||
</ClInclude>
|
||||
@@ -322,16 +361,16 @@
|
||||
<ClCompile Include="souper\lib\Codegen\MachineCost.cpp">
|
||||
<Filter>souper</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\klee\lib\Expr\Expr.cpp">
|
||||
<ClCompile Include="klee\lib\Expr\Expr.cpp">
|
||||
<Filter>klee</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\klee\lib\Expr\ExprPPrinter.cpp">
|
||||
<ClCompile Include="klee\lib\Expr\ExprPPrinter.cpp">
|
||||
<Filter>klee</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\klee\lib\Expr\ExprSMTLIBPrinter.cpp">
|
||||
<ClCompile Include="klee\lib\Expr\ExprSMTLIBPrinter.cpp">
|
||||
<Filter>klee</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\klee\lib\Expr\Updates.cpp">
|
||||
<ClCompile Include="klee\lib\Expr\Updates.cpp">
|
||||
<Filter>klee</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="souper\lib\Infer\Z3Driver.cpp">
|
||||
@@ -410,11 +449,26 @@
|
||||
</Filter>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="klee\include\klee\Config\config.h.in">
|
||||
<Filter>klee</Filter>
|
||||
</None>
|
||||
<None Include="klee\LICENSE.TXT">
|
||||
<Filter>klee</Filter>
|
||||
</None>
|
||||
<None Include="klee\README.txt">
|
||||
<Filter>klee</Filter>
|
||||
</None>
|
||||
<None Include="souper\include\souper\Tool\GetSolver.h.in">
|
||||
<Filter>souper</Filter>
|
||||
</None>
|
||||
<None Include="souper\include\souper\KVStore\KVSocket.h.in">
|
||||
<Filter>souper</Filter>
|
||||
</None>
|
||||
<None Include="souper\LICENSE">
|
||||
<Filter>souper</Filter>
|
||||
</None>
|
||||
<None Include="souper\README.txt">
|
||||
<Filter>souper</Filter>
|
||||
</None>
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
@@ -4,7 +4,6 @@
|
||||
#include "llvm/ADT/APInt.h"
|
||||
#include "llvm/ADT/ArrayRef.h"
|
||||
#include "llvm/ADT/DenseMap.h"
|
||||
#include "llvm/ADT/None.h"
|
||||
#include "llvm/ADT/SmallPtrSet.h"
|
||||
#include "llvm/ADT/SmallVector.h"
|
||||
#include "llvm/ADT/Statistic.h"
|
||||
|
||||
@@ -4,7 +4,6 @@
|
||||
#include "llvm/ADT/APInt.h"
|
||||
#include "llvm/ADT/ArrayRef.h"
|
||||
#include "llvm/ADT/DenseMap.h"
|
||||
#include "llvm/ADT/None.h"
|
||||
#include "llvm/ADT/SmallPtrSet.h"
|
||||
#include "llvm/ADT/SmallVector.h"
|
||||
#include "llvm/ADT/Statistic.h"
|
||||
|
||||
@@ -1,9 +1,8 @@
|
||||
#pragma once
|
||||
|
||||
#include <llvm/IR/Module.h>
|
||||
#include "llvm-c/Transforms/PassManagerBuilder.h"
|
||||
#include "llvm/ADT/SmallVector.h"
|
||||
#include "llvm/ADT/Triple.h"
|
||||
#include "llvm/TargetParser/Triple.h"
|
||||
#include "llvm/Analysis/BasicAliasAnalysis.h"
|
||||
#include "llvm/Analysis/ScalarEvolutionAliasAnalysis.h"
|
||||
#include "llvm/Analysis/GlobalsModRef.h"
|
||||
@@ -24,7 +23,6 @@
|
||||
#include "llvm/Transforms/IPO/ForceFunctionAttrs.h"
|
||||
#include "llvm/Transforms/IPO/FunctionAttrs.h"
|
||||
#include "llvm/Transforms/IPO/InferFunctionAttrs.h"
|
||||
#include "llvm/Transforms/IPO/PassManagerBuilder.h"
|
||||
#include "llvm/Transforms/InstCombine/InstCombine.h"
|
||||
#include "llvm/Transforms/Instrumentation.h"
|
||||
#include "llvm/Transforms/Scalar.h"
|
||||
|
||||
@@ -0,0 +1,2 @@
|
||||
build*/
|
||||
install*/
|
||||
@@ -0,0 +1,53 @@
|
||||
# https://alexreinking.com/blog/how-to-use-cmake-without-the-agonizing-pain-part-1.html
|
||||
cmake_minimum_required(VERSION 3.21)
|
||||
|
||||
# Default to a Release config. Required before project() because Windows defaults to Debug
|
||||
set(CMAKE_BUILD_TYPE "RelWithDebInfo" CACHE STRING "")
|
||||
if(CMAKE_BUILD_TYPE STREQUAL "")
|
||||
set(CMAKE_BUILD_TYPE "RelWithDebInfo" CACHE STRING "" FORCE)
|
||||
endif()
|
||||
|
||||
project(dependencies)
|
||||
|
||||
option(USE_PRECOMPILED_LLVM "Do not compile LLVM as part of the superbuild, use a precompiled one instead" OFF)
|
||||
option(USE_SANITIZERS "Use ASan and UBSan" OFF)
|
||||
|
||||
if(USE_PRECOMPILED_LLVM)
|
||||
# NOTE: We only search in ./install because that's where VS expects them
|
||||
find_package(LLVM CONFIG REQUIRED NO_DEFAULT_PATH
|
||||
PATHS ${PROJECT_SOURCE_DIR}/install
|
||||
)
|
||||
message(STATUS "LLVM ${LLVM_PACKAGE_VERSION}: ${LLVM_DIR}")
|
||||
endif()
|
||||
|
||||
if(USE_SANITIZERS)
|
||||
list(APPEND CMAKE_C_FLAGS "-fsanitize=address,undefined")
|
||||
list(APPEND CMAKE_CXX_FLAGS "-fsanitize=address,undefined")
|
||||
endif()
|
||||
|
||||
include(superbuild.cmake)
|
||||
|
||||
simple_git(https://github.com/Z3Prover/z3 z3-4.16.0
|
||||
"-DZ3_BUILD_LIBZ3_SHARED:STRING=OFF"
|
||||
)
|
||||
|
||||
simple_git(https://github.com/gflags/gflags 52e94563eba1968783864942fedf6e87e3c611f4
|
||||
)
|
||||
simple_git(https://github.com/google/glog v0.7.1
|
||||
"-DGFLAGS_USE_TARGET_NAMESPACE:STRING=ON"
|
||||
"-DBUILD_TESTING:STRING=OFF"
|
||||
)
|
||||
simple_git(https://github.com/google/googletest v1.17.0
|
||||
"-Dgtest_force_shared_crt:STRING=ON"
|
||||
"-DGFLAGS_USE_TARGET_NAMESPACE:STRING=ON"
|
||||
)
|
||||
|
||||
include(xed.cmake)
|
||||
|
||||
if(NOT USE_PRECOMPILED_LLVM)
|
||||
include(llvm.cmake)
|
||||
endif()
|
||||
|
||||
simple_submodule(remill
|
||||
"-DREMILL_ENABLE_TESTING:STRING=OFF"
|
||||
)
|
||||
@@ -0,0 +1,49 @@
|
||||
# Dna.LLVMInterop native dependency superbuild
|
||||
|
||||
This folder is for CMake superbuild scripts that build/install the external
|
||||
native dependencies consumed directly by Dna.LLVMInterop.dll, such as LLVM,
|
||||
Remill, Z3, XED, gflags, glog, and sleigh libraries.
|
||||
|
||||
The intended generated prefix is:
|
||||
|
||||
```
|
||||
Dna.LLVMInterop/dependencies/install
|
||||
```
|
||||
|
||||
Dna.LLVMInterop.vcxproj expects headers and libraries at:
|
||||
|
||||
```
|
||||
$(ProjectDir)dependencies\install\include
|
||||
$(ProjectDir)dependencies\install\lib
|
||||
```
|
||||
|
||||
Generated build/install/download folders are gitignored. Commit only the
|
||||
superbuild scripts, patches, lock/version notes, and documentation needed to
|
||||
reproduce the dependency prefix.
|
||||
|
||||
This setup is based on [LLVMParty/packages](https://github.com/LLVMParty/packages).
|
||||
|
||||
## Building
|
||||
|
||||
From a Visual Studio x64 command prompt:
|
||||
|
||||
```bash
|
||||
cmake -B build -G Ninja -DCMAKE_C_COMPILER=clang-cl -DCMAKE_CXX_COMPILER=clang-cl
|
||||
cmake --build build
|
||||
```
|
||||
|
||||
Or if you have a precompiled LLVM, you need to copy it into the `install` folder to get this layout:
|
||||
|
||||
```
|
||||
install/bin/clang.exe
|
||||
install/include/llvm/IR/Value.h
|
||||
install/lib/LLVMPasses.lib
|
||||
install/lib/cmake/llvm/LLVMConfig.cmake
|
||||
```
|
||||
|
||||
Then configure:
|
||||
|
||||
```bash
|
||||
cmake -B build -G Ninja -DCMAKE_C_COMPILER=clang-cl -DCMAKE_CXX_COMPILER=clang-cl -DUSE_PRECOMPILED_LLVM=ON
|
||||
cmake --build build
|
||||
```
|
||||
@@ -0,0 +1,25 @@
|
||||
# Reference: https://github.com/lifting-bits/cxx-common/blob/e0063b2f5986582ed8dcab0c2863abf0893b3082/ports/xed/XEDConfig.cmake
|
||||
|
||||
if(XED_FOUND)
|
||||
return()
|
||||
endif()
|
||||
|
||||
get_filename_component(PACKAGE_PREFIX_DIR "${CMAKE_CURRENT_LIST_DIR}/../../../" ABSOLUTE)
|
||||
|
||||
find_library(XED_LIBRARY xed PATHS "${PACKAGE_PREFIX_DIR}/lib" NO_CACHE REQUIRED NO_DEFAULT_PATH)
|
||||
add_library(XED::XED STATIC IMPORTED)
|
||||
set_target_properties(XED::XED PROPERTIES
|
||||
IMPORTED_CONFIGURATIONS "NOCONFIG"
|
||||
IMPORTED_LOCATION_NOCONFIG "${XED_LIBRARY}"
|
||||
INTERFACE_INCLUDE_DIRECTORIES "${PACKAGE_PREFIX_DIR}/include"
|
||||
)
|
||||
|
||||
find_library(ILD_LIBRARY xed-ild PATHS "${PACKAGE_PREFIX_DIR}/lib" NO_CACHE REQUIRED NO_DEFAULT_PATH)
|
||||
add_library(XED::ILD STATIC IMPORTED)
|
||||
set_target_properties(XED::ILD PROPERTIES
|
||||
IMPORTED_CONFIGURATIONS "NOCONFIG"
|
||||
IMPORTED_LOCATION_NOCONFIG "${XED_LIBRARY}"
|
||||
INTERFACE_INCLUDE_DIRECTORIES "${PACKAGE_PREFIX_DIR}/include"
|
||||
)
|
||||
|
||||
set(XED_FOUND ON)
|
||||
@@ -0,0 +1,63 @@
|
||||
option(LLVM_ENABLE_ASSERTIONS "Enable assertions in LLVM" ON)
|
||||
|
||||
# Default values for LLVM_URL and LLVM_SHA256. This is required because "-DLLVM_URL=" would be an empty URL
|
||||
if("${LLVM_URL}" STREQUAL "")
|
||||
set(LLVM_URL "https://github.com/llvm/llvm-project/releases/download/llvmorg-17.0.6/llvm-project-17.0.6.src.tar.xz")
|
||||
endif()
|
||||
if("${LLVM_SHA256}" STREQUAL "")
|
||||
set(LLVM_SHA256 "58a8818c60e6627064f312dbf46c02d9949956558340938b71cf731ad8bc0813")
|
||||
endif()
|
||||
|
||||
set(LLVM_ARGS
|
||||
"-DLLVM_ENABLE_PROJECTS:STRING=lld;clang;clang-tools-extra"
|
||||
"-DLLVM_ENABLE_ASSERTIONS:STRING=${LLVM_ENABLE_ASSERTIONS}"
|
||||
"-DLLVM_ENABLE_DUMP:STRING=${LLVM_ENABLE_ASSERTIONS}"
|
||||
"-DLLVM_ENABLE_RTTI:STRING=ON"
|
||||
"-DLLVM_ENABLE_LIBEDIT:STRING=OFF"
|
||||
"-DLLVM_PARALLEL_LINK_JOBS:STRING=1"
|
||||
"-DLLVM_ENABLE_DIA_SDK:STRING=OFF"
|
||||
# This is meant for LLVM development, we use the DYLIB option instead
|
||||
"-DBUILD_SHARED_LIBS:STRING=OFF"
|
||||
"-DLLVM_LINK_LLVM_DYLIB:STRING=${BUILD_SHARED_LIBS}"
|
||||
)
|
||||
|
||||
# LLVM has a bug on Windows where using clang.exe as the compiler fails to detect
|
||||
# the host target triple, so we have to specify it manually.
|
||||
# Reference: https://github.com/lifting-bits/remill/issues/735#issuecomment-3590986077
|
||||
if(WIN32)
|
||||
if(CMAKE_CXX_COMPILER_ID MATCHES "Clang" AND NOT CMAKE_CXX_COMPILER_FRONTEND_VARIANT MATCHES "^MSVC$")
|
||||
message(WARNING
|
||||
"Using clang.exe as the compiler on Windows is not well supported.\n"
|
||||
"If you run into issues, use clang-cl instead:\n"
|
||||
" cmake -DCMAKE_C_COMPILER=clang-cl -DCMAKE_CXX_COMPILER=clang-cl ...\n"
|
||||
)
|
||||
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
|
||||
if(CMAKE_SYSTEM_PROCESSOR MATCHES "^(ARM64|arm64|aarch64)$")
|
||||
set(LLVM_ARCH "aarch64")
|
||||
else()
|
||||
set(LLVM_ARCH "x86_64")
|
||||
endif()
|
||||
else()
|
||||
set(LLVM_ARCH "i686")
|
||||
endif()
|
||||
list(APPEND LLVM_ARGS "-DLLVM_HOST_TRIPLE:STRING=${LLVM_ARCH}-pc-windows-msvc")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(USE_SANITIZERS)
|
||||
list(APPEND LLVM_ARGS "-DLLVM_USE_SANITIZER:STRING=Address;Undefined")
|
||||
endif()
|
||||
|
||||
ExternalProject_Add(llvm
|
||||
URL
|
||||
${LLVM_URL}
|
||||
URL_HASH
|
||||
"SHA256=${LLVM_SHA256}"
|
||||
CMAKE_CACHE_ARGS
|
||||
${CMAKE_ARGS}
|
||||
${LLVM_ARGS}
|
||||
CMAKE_GENERATOR
|
||||
"Ninja"
|
||||
SOURCE_SUBDIR
|
||||
"llvm"
|
||||
)
|
||||
Submodule
+1
Submodule Dna.LLVMInterop/dependencies/remill added at 0e324aee8c
@@ -0,0 +1,204 @@
|
||||
include_guard()
|
||||
|
||||
option(BUILD_SHARED_LIBS "Build using shared libraries" OFF)
|
||||
|
||||
# Bail out early for multi-config generators
|
||||
if(CMAKE_CONFIGURATION_TYPES)
|
||||
message(FATAL_ERROR "Multi-config generators are not supported. Use Make/NMake/Ninja instead")
|
||||
endif()
|
||||
|
||||
if(CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR)
|
||||
message(FATAL_ERROR "In-tree builds are not supported. Run CMake from a separate directory: cmake -B build")
|
||||
endif()
|
||||
|
||||
if(CMAKE_BUILD_TYPE STREQUAL "")
|
||||
message(FATAL_ERROR "CMAKE_BUILD_TYPE is not set")
|
||||
endif()
|
||||
message(STATUS "Configuration: ${CMAKE_BUILD_TYPE}")
|
||||
|
||||
# Default to build/install (setting this variable is not recommended and might cause conflicts)
|
||||
if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
|
||||
set(CMAKE_INSTALL_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/../install" CACHE PATH "Install prefix" FORCE)
|
||||
endif()
|
||||
cmake_path(ABSOLUTE_PATH CMAKE_INSTALL_PREFIX NORMALIZE)
|
||||
set(CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}" CACHE PATH "Install prefix" FORCE)
|
||||
message(STATUS "Install prefix: ${CMAKE_INSTALL_PREFIX}")
|
||||
|
||||
# Verify build configuration hasn't changed
|
||||
set(BUILD_CONFIG_FILE "${CMAKE_INSTALL_PREFIX}/.build_config")
|
||||
string(JOIN "\n" CURRENT_BUILD_CONFIG
|
||||
"CMAKE_SYSTEM=${CMAKE_SYSTEM}"
|
||||
"CMAKE_SYSTEM_PROCESSOR=${CMAKE_SYSTEM_PROCESSOR}"
|
||||
"CMAKE_CXX_COMPILER_ID=${CMAKE_CXX_COMPILER_ID}"
|
||||
"CMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}"
|
||||
"CMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}"
|
||||
)
|
||||
|
||||
if(EXISTS "${BUILD_CONFIG_FILE}")
|
||||
file(READ "${BUILD_CONFIG_FILE}" PREVIOUS_BUILD_CONFIG)
|
||||
if(NOT PREVIOUS_BUILD_CONFIG STREQUAL CURRENT_BUILD_CONFIG)
|
||||
message(FATAL_ERROR
|
||||
"Build configuration changed!\n"
|
||||
"[previous]\n${PREVIOUS_BUILD_CONFIG}\n"
|
||||
"[current]\n${CURRENT_BUILD_CONFIG}\n"
|
||||
"\n"
|
||||
"Please delete the build and install directories, then reconfigure:\n"
|
||||
" cmake -E rm -rf \"${CMAKE_BINARY_DIR}\"\n"
|
||||
" cmake -E rm -rf \"${CMAKE_INSTALL_PREFIX}\"\n"
|
||||
)
|
||||
endif()
|
||||
else()
|
||||
file(MAKE_DIRECTORY "${CMAKE_INSTALL_PREFIX}")
|
||||
file(WRITE "${BUILD_CONFIG_FILE}" "${CURRENT_BUILD_CONFIG}")
|
||||
endif()
|
||||
|
||||
# Git is necessary for submodules
|
||||
find_package(Git REQUIRED)
|
||||
message(STATUS "Git: ${GIT_EXECUTABLE}")
|
||||
|
||||
# Ninja is necessary for building the dependencies
|
||||
find_program(ninja_EXECUTABLE ninja NO_CACHE NO_PACKAGE_ROOT_PATH NO_CMAKE_PATH NO_CMAKE_ENVIRONMENT_PATH NO_CMAKE_SYSTEM_PATH NO_CMAKE_INSTALL_PREFIX NO_CMAKE_FIND_ROOT_PATH)
|
||||
if(ninja_EXECUTABLE STREQUAL "ninja_EXECUTABLE-NOTFOUND")
|
||||
message(FATAL_ERROR "Could not find 'ninja' in the PATH")
|
||||
endif()
|
||||
message(STATUS "Ninja: ${ninja_EXECUTABLE}")
|
||||
|
||||
# Documentation: https://cmake.org/cmake/help/latest/module/ExternalProject.html
|
||||
include(ExternalProject)
|
||||
|
||||
# Hook for ExternalProject_Add to make sure projects build in order
|
||||
function(ExternalProject_Add name)
|
||||
# The DEPENDS argument is fully implicit
|
||||
cmake_parse_arguments(HOOK "" "" DEPENDS ${ARGN})
|
||||
if(HOOK_DEPENDS)
|
||||
message(FATAL_ERROR "Explicit DEPENDS (${HOOK_DEPENDS}) not supported")
|
||||
endif()
|
||||
|
||||
# Update the LAST_EXTERNAL_PROJECT property
|
||||
get_property(LAST_EXTERNAL_PROJECT GLOBAL PROPERTY LAST_EXTERNAL_PROJECT)
|
||||
set_property(GLOBAL PROPERTY LAST_EXTERNAL_PROJECT ${name})
|
||||
|
||||
# Pass the previous project as a dependency to this call
|
||||
if(LAST_EXTERNAL_PROJECT)
|
||||
set(HOOK_ARGS DEPENDS "${LAST_EXTERNAL_PROJECT}")
|
||||
message(STATUS "ExternalProject: ${name} depends on ${LAST_EXTERNAL_PROJECT}")
|
||||
else()
|
||||
message(STATUS "ExternalProject: ${name}")
|
||||
endif()
|
||||
_ExternalProject_Add(${name} ${ARGN} ${HOOK_ARGS}
|
||||
# Reference: https://www.scivision.dev/cmake-external-project-ninja-verbose/
|
||||
USES_TERMINAL_DOWNLOAD ON
|
||||
USES_TERMINAL_UPDATE ON
|
||||
USES_TERMINAL_PATCH ON
|
||||
USES_TERMINAL_CONFIGURE ON
|
||||
USES_TERMINAL_BUILD ON
|
||||
USES_TERMINAL_INSTALL ON
|
||||
USES_TERMINAL_TEST ON
|
||||
DOWNLOAD_EXTRACT_TIMESTAMP ON
|
||||
)
|
||||
endfunction()
|
||||
|
||||
if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
|
||||
if(CMAKE_CXX_SIMULATE_ID STREQUAL "MSVC")
|
||||
# Suppress warnings for clang-cl builds, some of these cause compilation errors.
|
||||
list(APPEND ADDITIONAL_FLAGS "-w")
|
||||
elseif(UNIX AND NOT APPLE)
|
||||
# To compile shared libraries, everything needs to be compiled as position independent code when using clang on linux
|
||||
list(APPEND ADDITIONAL_FLAGS "-fPIC")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# Convert a CMake list to a space-separated list
|
||||
list(JOIN ADDITIONAL_FLAGS " " ADDITIONAL_FLAGS)
|
||||
|
||||
# Default cache variables for all projects
|
||||
list(APPEND CMAKE_ARGS
|
||||
"-DCMAKE_PREFIX_PATH:PATH=${CMAKE_INSTALL_PREFIX};${CMAKE_PREFIX_PATH}"
|
||||
"-DCMAKE_INSTALL_PREFIX:PATH=${CMAKE_INSTALL_PREFIX}"
|
||||
"-DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE}"
|
||||
"-DBUILD_SHARED_LIBS:STRING=${BUILD_SHARED_LIBS}"
|
||||
"-DCMAKE_C_COMPILER:FILEPATH=${CMAKE_C_COMPILER}"
|
||||
"-DCMAKE_CXX_COMPILER:FILEPATH=${CMAKE_CXX_COMPILER}"
|
||||
"-DCMAKE_C_FLAGS:STRING=${CMAKE_C_FLAGS} ${ADDITIONAL_FLAGS}"
|
||||
"-DCMAKE_CXX_FLAGS:STRING=${CMAKE_CXX_FLAGS} ${ADDITIONAL_FLAGS}"
|
||||
"-DCMAKE_POSITION_INDEPENDENT_CODE:STRING=ON"
|
||||
"-DCMAKE_ERROR_DEPRECATED:STRING=OFF"
|
||||
"-DCMAKE_ERROR_DEVELOPER_WARNINGS:STRING=OFF"
|
||||
"-DCMAKE_POLICY_DEFAULT_CMP0091:STRING=NEW" # Needed to make sure gflags respects CMAKE_MSVC_RUNTIME_LIBRARY as their minimum CMake version is older than 3.15.
|
||||
)
|
||||
|
||||
# Only propagate the MSVC runtime selection if the parent project explicitly set
|
||||
# one. Passing an empty CMAKE_MSVC_RUNTIME_LIBRARY to external projects on
|
||||
# Windows suppresses the CRT selection and breaks clang's compiler checks.
|
||||
if(DEFINED CMAKE_MSVC_RUNTIME_LIBRARY
|
||||
AND NOT CMAKE_MSVC_RUNTIME_LIBRARY STREQUAL "")
|
||||
list(APPEND CMAKE_ARGS
|
||||
"-DCMAKE_MSVC_RUNTIME_LIBRARY:STRING=${CMAKE_MSVC_RUNTIME_LIBRARY}"
|
||||
)
|
||||
endif()
|
||||
|
||||
if(CMAKE_VERSION VERSION_GREATER_EQUAL "4.0")
|
||||
list(APPEND CMAKE_ARGS
|
||||
"-DCMAKE_POLICY_VERSION_MINIMUM:STRING=${CMAKE_MINIMUM_REQUIRED_VERSION}"
|
||||
)
|
||||
endif()
|
||||
|
||||
if(CMAKE_C_COMPILER_LAUNCHER)
|
||||
list(APPEND CMAKE_ARGS "-DCMAKE_C_COMPILER_LAUNCHER:FILEPATH=${CMAKE_C_COMPILER_LAUNCHER}")
|
||||
endif()
|
||||
if(CMAKE_CXX_COMPILER_LAUNCHER)
|
||||
list(APPEND CMAKE_ARGS "-DCMAKE_CXX_COMPILER_LAUNCHER:FILEPATH=${CMAKE_CXX_COMPILER_LAUNCHER}")
|
||||
endif()
|
||||
|
||||
message(STATUS "Compiling all dependencies with the following CMake arguments:")
|
||||
foreach(CMAKE_ARG ${CMAKE_ARGS})
|
||||
message("\t${CMAKE_ARG}")
|
||||
endforeach()
|
||||
|
||||
function(simple_git repo tag)
|
||||
get_filename_component(name "${repo}" NAME_WE)
|
||||
ExternalProject_Add(${name}
|
||||
GIT_REPOSITORY
|
||||
"${repo}"
|
||||
GIT_TAG
|
||||
"${tag}"
|
||||
GIT_PROGRESS
|
||||
ON
|
||||
CMAKE_CACHE_ARGS
|
||||
${CMAKE_ARGS}
|
||||
${ARGN}
|
||||
CMAKE_GENERATOR
|
||||
"Ninja"
|
||||
)
|
||||
endfunction()
|
||||
|
||||
function(simple_submodule folder)
|
||||
set(folder_path "${CMAKE_CURRENT_SOURCE_DIR}/${folder}")
|
||||
if(NOT EXISTS "${folder_path}" OR NOT EXISTS "${folder_path}/CMakeLists.txt")
|
||||
message(STATUS "Submodule '${folder}' not initialized, running git...")
|
||||
execute_process(
|
||||
COMMAND "${GIT_EXECUTABLE}" rev-parse --show-toplevel
|
||||
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
|
||||
OUTPUT_VARIABLE git_root
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||
COMMAND_ERROR_IS_FATAL ANY
|
||||
)
|
||||
execute_process(
|
||||
COMMAND "${GIT_EXECUTABLE}" submodule update --init
|
||||
WORKING_DIRECTORY "${git_root}"
|
||||
COMMAND_ERROR_IS_FATAL ANY
|
||||
)
|
||||
endif()
|
||||
ExternalProject_Add(${folder}
|
||||
SOURCE_DIR
|
||||
"${folder_path}"
|
||||
CMAKE_CACHE_ARGS
|
||||
${CMAKE_ARGS}
|
||||
${ARGN}
|
||||
CMAKE_GENERATOR
|
||||
"Ninja"
|
||||
# Always trigger the build step (necessary because there is no download step)
|
||||
BUILD_ALWAYS
|
||||
ON
|
||||
)
|
||||
endfunction()
|
||||
@@ -0,0 +1,119 @@
|
||||
find_package(Python3 COMPONENTS Interpreter REQUIRED)
|
||||
message(STATUS "Python3: ${Python3_EXECUTABLE}")
|
||||
|
||||
# Reference: https://github.com/lifting-bits/cxx-common/blob/e0063b2f5986582ed8dcab0c2863abf0893b3082/ports/xed/portfile.cmake
|
||||
|
||||
# TODO: pass compiler flags
|
||||
|
||||
if(CMAKE_SYSTEM_NAME STREQUAL "Windows" AND MSVC)
|
||||
set(compiler ms) #msvc or clang-cl
|
||||
elseif(CMAKE_CXX_COMPILER_ID MATCHES "^(Apple)?Clang$")
|
||||
set(compiler clang)
|
||||
elseif(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
|
||||
set(compiler gnu)
|
||||
else()
|
||||
message(FATAL_ERROR "Unknown compiler: ${CMAKE_CXX_COMPILER_ID}")
|
||||
endif()
|
||||
|
||||
set(MFILE_ARGS
|
||||
"install"
|
||||
"--install-dir=install"
|
||||
"--cc=${CMAKE_C_COMPILER}"
|
||||
"--cxx=${CMAKE_CXX_COMPILER}"
|
||||
"--compiler=${compiler}"
|
||||
)
|
||||
|
||||
# XED is built by mbuild, not CMake, so it does not honor
|
||||
# CMAKE_MSVC_RUNTIME_LIBRARY. mbuild also ties "--static" to /MT by default.
|
||||
# Dna.LLVMInterop and the CMake-built dependencies use the DLL CRT (/MD), so
|
||||
# disable mbuild's implicit CRT flag and pass the matching MSVC runtime flag
|
||||
# explicitly. Without this, xed.lib/xed-ild.lib embed /DEFAULTLIB:libcmt.lib
|
||||
# and the Dna.LLVMInterop link emits LNK4098.
|
||||
if(CMAKE_SYSTEM_NAME STREQUAL "Windows" AND MSVC)
|
||||
set(xed_msvc_runtime_flag "")
|
||||
if(DEFINED CMAKE_MSVC_RUNTIME_LIBRARY AND NOT CMAKE_MSVC_RUNTIME_LIBRARY STREQUAL "")
|
||||
if(CMAKE_MSVC_RUNTIME_LIBRARY MATCHES "DebugDLL$")
|
||||
set(xed_msvc_runtime_flag "/MDd")
|
||||
elseif(CMAKE_MSVC_RUNTIME_LIBRARY MATCHES "DLL$")
|
||||
set(xed_msvc_runtime_flag "/MD")
|
||||
elseif(CMAKE_MSVC_RUNTIME_LIBRARY MATCHES "Debug$")
|
||||
set(xed_msvc_runtime_flag "/MTd")
|
||||
else()
|
||||
set(xed_msvc_runtime_flag "/MT")
|
||||
endif()
|
||||
elseif(CMAKE_BUILD_TYPE STREQUAL "Debug")
|
||||
set(xed_msvc_runtime_flag "/MDd")
|
||||
else()
|
||||
set(xed_msvc_runtime_flag "/MD")
|
||||
endif()
|
||||
|
||||
list(APPEND MFILE_ARGS
|
||||
"--no-mscrt"
|
||||
"--extra-ccflags=${xed_msvc_runtime_flag}"
|
||||
"--extra-cxxflags=${xed_msvc_runtime_flag}"
|
||||
)
|
||||
endif()
|
||||
|
||||
if(CMAKE_OSX_SYSROOT)
|
||||
list(APPEND MFILE_ARGS "--extra-ccflags=-isysroot ${CMAKE_OSX_SYSROOT}")
|
||||
list(APPEND MFILE_ARGS "--extra-cxxflags=-isysroot ${CMAKE_OSX_SYSROOT}")
|
||||
endif()
|
||||
|
||||
if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
|
||||
list(APPEND MFILE_ARGS "--extra-ccflags=${ADDITIONAL_FLAGS}")
|
||||
list(APPEND MFILE_ARGS "--extra-cxxflags=${ADDITIONAL_FLAGS}")
|
||||
endif()
|
||||
|
||||
if(USE_SANITIZERS)
|
||||
list(APPEND MFILE_ARGS "--extra-ccflags=-fsanitize=address,undefined")
|
||||
list(APPEND MFILE_ARGS "--extra-cxxflags=-fsanitize=address,undefined")
|
||||
endif()
|
||||
|
||||
if(BUILD_SHARED_LIBS)
|
||||
list(APPEND MFILE_ARGS "--shared")
|
||||
else()
|
||||
list(APPEND MFILE_ARGS "--static")
|
||||
endif()
|
||||
|
||||
if(CMAKE_AR)
|
||||
list(APPEND MFILE_ARGS "--ar=${CMAKE_AR}")
|
||||
endif()
|
||||
|
||||
ExternalProject_Add(mbuild
|
||||
GIT_REPOSITORY
|
||||
"https://github.com/intelxed/mbuild"
|
||||
GIT_TAG
|
||||
"v2024.11.04"
|
||||
GIT_PROGRESS
|
||||
ON
|
||||
CONFIGURE_COMMAND
|
||||
"${CMAKE_COMMAND}" -E true
|
||||
BUILD_COMMAND
|
||||
"${CMAKE_COMMAND}" -E true
|
||||
INSTALL_COMMAND
|
||||
"${CMAKE_COMMAND}" -E true
|
||||
PREFIX
|
||||
xed-prefix
|
||||
)
|
||||
|
||||
ExternalProject_Add(xed
|
||||
GIT_REPOSITORY
|
||||
"https://github.com/intelxed/xed"
|
||||
GIT_TAG
|
||||
"v2025.06.08"
|
||||
GIT_PROGRESS
|
||||
ON
|
||||
CMAKE_CACHE_ARGS
|
||||
${CMAKE_ARGS}
|
||||
CONFIGURE_COMMAND
|
||||
"${CMAKE_COMMAND}" -E true
|
||||
BUILD_COMMAND
|
||||
"${Python3_EXECUTABLE}" "<SOURCE_DIR>/mfile.py" ${MFILE_ARGS}
|
||||
INSTALL_COMMAND
|
||||
"${CMAKE_COMMAND}" -E copy_directory <BINARY_DIR>/install "${CMAKE_INSTALL_PREFIX}"
|
||||
PREFIX
|
||||
xed-prefix
|
||||
)
|
||||
|
||||
# TODO: generate XEDVersion.cmake as well file
|
||||
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/XEDConfig.cmake.in" "${CMAKE_INSTALL_PREFIX}/lib/cmake/XED/XEDConfig.cmake" @ONLY)
|
||||
@@ -0,0 +1,62 @@
|
||||
==============================================================================
|
||||
klee Release License
|
||||
==============================================================================
|
||||
University of Illinois/NCSA
|
||||
Open Source License
|
||||
|
||||
Copyright (c) 2007-2009 Stanford University.
|
||||
All rights reserved.
|
||||
|
||||
Developed by:
|
||||
|
||||
klee Team
|
||||
|
||||
Stanford Checking Group
|
||||
|
||||
http://klee.llvm.org
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
this software and associated documentation files (the "Software"), to deal with
|
||||
the Software without restriction, including without limitation the rights to
|
||||
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
||||
of the Software, and to permit persons to whom the Software is furnished to do
|
||||
so, subject to the following conditions:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimers.
|
||||
|
||||
* Redistributions in binary form must reproduce the above copyright notice,
|
||||
this list of conditions and the following disclaimers in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
* Neither the names of the klee Team, Stanford University, nor the
|
||||
names of its contributors may be used to endorse or promote
|
||||
products derived from this Software without specific prior
|
||||
written permission.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
|
||||
SOFTWARE.
|
||||
|
||||
==============================================================================
|
||||
The klee software contains code written by third parties. Such software will
|
||||
have its own individual LICENSE.TXT file in the directory in which it appears.
|
||||
This file will describe the copyrights, license, and restrictions which apply
|
||||
to that code.
|
||||
|
||||
The disclaimer of warranty in the University of Illinois Open Source License
|
||||
applies to all code in the klee Distribution, and nothing in any of the other
|
||||
licenses gives permission to use the names of the klee Team or Stanford
|
||||
University to endorse or promote products derived from this Software.
|
||||
|
||||
The following pieces of software have additional or alternate copyrights,
|
||||
licenses, and/or restrictions:
|
||||
|
||||
Program Directory
|
||||
------- ---------
|
||||
klee-libc runtime/klee-libc
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
Dna.LLVMInterop KLEE vendor notes
|
||||
=================================
|
||||
|
||||
This directory is a limited, checked-in vendor copy of KLEE source used by the
|
||||
vendored Souper KLEE expression/SMTLIB backend. It is intentionally not a git
|
||||
submodule and it is not a full KLEE checkout.
|
||||
|
||||
Likely upstream base
|
||||
--------------------
|
||||
|
||||
The local source used for this vendor refresh was:
|
||||
|
||||
repository: https://github.com/Colton1skees/klee
|
||||
branch: klee-for-souper-13
|
||||
commit: 63a8acc1bf8d113aed72560708a505ae569b91fe
|
||||
("make klee compile on windows")
|
||||
|
||||
Vendored subset
|
||||
---------------
|
||||
|
||||
Keep the upstream KLEE directory layout for the subset we vendor:
|
||||
|
||||
include/klee/...
|
||||
lib/Expr/...
|
||||
|
||||
Dna currently vendors the KLEE headers and Expr implementation files needed by
|
||||
Souper's KLEEBuilder/SMTLIB printer. Dna.LLVMInterop compiles these sources
|
||||
directly into Dna.LLVMInterop.dll rather than linking a separate KLEE library.
|
||||
|
||||
The upstream KLEE tree generates include/klee/Config/config.h from
|
||||
config.h.in. Because this is a partial checked-in vendor copy, Dna also checks
|
||||
in a generated config.h configured for the LLVM 17 build used by this project.
|
||||
|
||||
When refreshing KLEE, copy only the needed files while preserving their upstream
|
||||
relative paths, then reapply any Dna build/configuration adjustments.
|
||||
@@ -0,0 +1,13 @@
|
||||
// Generated vendored KLEE configuration for Dna.LLVMInterop.
|
||||
//
|
||||
// The upstream KLEE source keeps this file generated from config.h.in. Dna
|
||||
// vendors only the small Expr/SMTLIB subset needed by Souper, so the generated
|
||||
// configuration is checked in with the vendored files.
|
||||
|
||||
#ifndef KLEE_CONFIG_CONFIG_H
|
||||
#define KLEE_CONFIG_CONFIG_H
|
||||
|
||||
#define LLVM_VERSION_MAJOR 17
|
||||
#define LLVM_VERSION_MINOR 0
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,79 @@
|
||||
//===-- Constraints.h -------------------------------------------*- C++ -*-===//
|
||||
//
|
||||
// The KLEE Symbolic Virtual Machine
|
||||
//
|
||||
// This file is distributed under the University of Illinois Open Source
|
||||
// License. See LICENSE.TXT for details.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#ifndef KLEE_CONSTRAINTS_H
|
||||
#define KLEE_CONSTRAINTS_H
|
||||
|
||||
#include "klee/Expr.h"
|
||||
|
||||
// FIXME: Currently we use ConstraintManager for two things: to pass
|
||||
// sets of constraints around, and to optimize constraints. We should
|
||||
// move the first usage into a separate data structure
|
||||
// (ConstraintSet?) which ConstraintManager could embed if it likes.
|
||||
namespace klee {
|
||||
|
||||
class ExprVisitor;
|
||||
|
||||
class ConstraintManager {
|
||||
public:
|
||||
typedef std::vector< ref<Expr> > constraints_ty;
|
||||
typedef constraints_ty::iterator iterator;
|
||||
typedef constraints_ty::const_iterator const_iterator;
|
||||
|
||||
ConstraintManager() {}
|
||||
|
||||
// create from constraints with no optimization
|
||||
explicit
|
||||
ConstraintManager(const std::vector< ref<Expr> > &_constraints) :
|
||||
constraints(_constraints) {}
|
||||
|
||||
ConstraintManager(const ConstraintManager &cs) : constraints(cs.constraints) {}
|
||||
|
||||
typedef std::vector< ref<Expr> >::const_iterator constraint_iterator;
|
||||
|
||||
// given a constraint which is known to be valid, attempt to
|
||||
// simplify the existing constraint set
|
||||
void simplifyForValidConstraint(ref<Expr> e);
|
||||
|
||||
ref<Expr> simplifyExpr(ref<Expr> e) const;
|
||||
|
||||
void addConstraint(ref<Expr> e);
|
||||
|
||||
bool empty() const {
|
||||
return constraints.empty();
|
||||
}
|
||||
ref<Expr> back() const {
|
||||
return constraints.back();
|
||||
}
|
||||
constraint_iterator begin() const {
|
||||
return constraints.begin();
|
||||
}
|
||||
constraint_iterator end() const {
|
||||
return constraints.end();
|
||||
}
|
||||
size_t size() const {
|
||||
return constraints.size();
|
||||
}
|
||||
|
||||
bool operator==(const ConstraintManager &other) const {
|
||||
return constraints == other.constraints;
|
||||
}
|
||||
|
||||
private:
|
||||
std::vector< ref<Expr> > constraints;
|
||||
|
||||
// returns true iff the constraints were modified
|
||||
bool rewriteConstraints(ExprVisitor &visitor);
|
||||
|
||||
void addConstraintInternal(ref<Expr> e);
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif /* KLEE_CONSTRAINTS_H */
|
||||
@@ -439,7 +439,7 @@ public:
|
||||
}
|
||||
|
||||
/// isAllOnes - Is this constant all ones.
|
||||
bool isAllOnes() const { return getAPValue().isAllOnesValue(); }
|
||||
bool isAllOnes() const { return getAPValue().isAllOnes(); }
|
||||
|
||||
/* Constant Operations */
|
||||
|
||||
|
||||
@@ -0,0 +1,164 @@
|
||||
//===-- IntEvaluation.h -----------------------------------------*- C++ -*-===//
|
||||
//
|
||||
// The KLEE Symbolic Virtual Machine
|
||||
//
|
||||
// This file is distributed under the University of Illinois Open Source
|
||||
// License. See LICENSE.TXT for details.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#ifndef KLEE_UTIL_INTEVALUATION_H
|
||||
#define KLEE_UTIL_INTEVALUATION_H
|
||||
|
||||
#include "klee/util/Bits.h"
|
||||
|
||||
#define MAX_BITS (sizeof(uint64_t) * 8)
|
||||
|
||||
// ASSUMPTION: invalid bits in each uint64_t are 0. the trade-off here is
|
||||
// between making trunc/zext/sext fast and making operations that depend
|
||||
// on the invalid bits being 0 fast.
|
||||
|
||||
namespace klee {
|
||||
namespace ints {
|
||||
|
||||
// add of l and r
|
||||
inline uint64_t add(uint64_t l, uint64_t r, unsigned inWidth) {
|
||||
return bits64::truncateToNBits(l + r, inWidth);
|
||||
}
|
||||
|
||||
// difference of l and r
|
||||
inline uint64_t sub(uint64_t l, uint64_t r, unsigned inWidth) {
|
||||
return bits64::truncateToNBits(l - r, inWidth);
|
||||
}
|
||||
|
||||
// product of l and r
|
||||
inline uint64_t mul(uint64_t l, uint64_t r, unsigned inWidth) {
|
||||
return bits64::truncateToNBits(l * r, inWidth);
|
||||
}
|
||||
|
||||
// truncation of l to outWidth bits
|
||||
inline uint64_t trunc(uint64_t l, unsigned outWidth, unsigned inWidth) {
|
||||
return bits64::truncateToNBits(l, outWidth);
|
||||
}
|
||||
|
||||
// zero-extension of l from inWidth to outWidth bits
|
||||
inline uint64_t zext(uint64_t l, unsigned outWidth, unsigned inWidth) {
|
||||
return l;
|
||||
}
|
||||
|
||||
// sign-extension of l from inWidth to outWidth bits
|
||||
inline uint64_t sext(uint64_t l, unsigned outWidth, unsigned inWidth) {
|
||||
uint32_t numInvalidBits = MAX_BITS - inWidth;
|
||||
return bits64::truncateToNBits(((int64_t)(l << numInvalidBits)) >> numInvalidBits, outWidth);
|
||||
}
|
||||
|
||||
// unsigned divide of l by r
|
||||
inline uint64_t udiv(uint64_t l, uint64_t r, unsigned inWidth) {
|
||||
return bits64::truncateToNBits(l / r, inWidth);
|
||||
}
|
||||
|
||||
// unsigned mod of l by r
|
||||
inline uint64_t urem(uint64_t l, uint64_t r, unsigned inWidth) {
|
||||
return bits64::truncateToNBits(l % r, inWidth);
|
||||
}
|
||||
|
||||
// signed divide of l by r
|
||||
inline uint64_t sdiv(uint64_t l, uint64_t r, unsigned inWidth) {
|
||||
// sign extend operands so that signed operation on 64-bits works correctly
|
||||
int64_t sl = sext(l, MAX_BITS, inWidth);
|
||||
int64_t sr = sext(r, MAX_BITS, inWidth);
|
||||
return bits64::truncateToNBits(sl / sr, inWidth);
|
||||
}
|
||||
|
||||
// signed mod of l by r
|
||||
inline uint64_t srem(uint64_t l, uint64_t r, unsigned inWidth) {
|
||||
// sign extend operands so that signed operation on 64-bits works correctly
|
||||
int64_t sl = sext(l, MAX_BITS, inWidth);
|
||||
int64_t sr = sext(r, MAX_BITS, inWidth);
|
||||
return bits64::truncateToNBits(sl % sr, inWidth);
|
||||
}
|
||||
|
||||
// arithmetic shift right of l by r bits
|
||||
inline uint64_t ashr(uint64_t l, uint64_t shift, unsigned inWidth) {
|
||||
int64_t sl = sext(l, MAX_BITS, inWidth);
|
||||
return bits64::truncateToNBits(sl >> shift, inWidth);
|
||||
}
|
||||
|
||||
// logical shift right of l by r bits
|
||||
inline uint64_t lshr(uint64_t l, uint64_t shift, unsigned inWidth) {
|
||||
return l >> shift;
|
||||
}
|
||||
|
||||
// shift left of l by r bits
|
||||
inline uint64_t shl(uint64_t l, uint64_t shift, unsigned inWidth) {
|
||||
return bits64::truncateToNBits(l << shift, inWidth);
|
||||
}
|
||||
|
||||
// logical AND of l and r
|
||||
inline uint64_t land(uint64_t l, uint64_t r, unsigned inWidth) {
|
||||
return l & r;
|
||||
}
|
||||
|
||||
// logical OR of l and r
|
||||
inline uint64_t lor(uint64_t l, uint64_t r, unsigned inWidth) {
|
||||
return l | r;
|
||||
}
|
||||
|
||||
// logical XOR of l and r
|
||||
inline uint64_t lxor(uint64_t l, uint64_t r, unsigned inWidth) {
|
||||
return l ^ r;
|
||||
}
|
||||
|
||||
// comparison operations
|
||||
inline uint64_t eq(uint64_t l, uint64_t r, unsigned inWidth) {
|
||||
return l == r;
|
||||
}
|
||||
|
||||
inline uint64_t ne(uint64_t l, uint64_t r, unsigned inWidth) {
|
||||
return l != r;
|
||||
}
|
||||
|
||||
inline uint64_t ult(uint64_t l, uint64_t r, unsigned inWidth) {
|
||||
return l < r;
|
||||
}
|
||||
|
||||
inline uint64_t ule(uint64_t l, uint64_t r, unsigned inWidth) {
|
||||
return l <= r;
|
||||
}
|
||||
|
||||
inline uint64_t ugt(uint64_t l, uint64_t r, unsigned inWidth) {
|
||||
return l > r;
|
||||
}
|
||||
|
||||
inline uint64_t uge(uint64_t l, uint64_t r, unsigned inWidth) {
|
||||
return l >= r;
|
||||
}
|
||||
|
||||
inline uint64_t slt(uint64_t l, uint64_t r, unsigned inWidth) {
|
||||
int64_t sl = sext(l, MAX_BITS, inWidth);
|
||||
int64_t sr = sext(r, MAX_BITS, inWidth);
|
||||
return sl < sr;
|
||||
}
|
||||
|
||||
inline uint64_t sle(uint64_t l, uint64_t r, unsigned inWidth) {
|
||||
int64_t sl = sext(l, MAX_BITS, inWidth);
|
||||
int64_t sr = sext(r, MAX_BITS, inWidth);
|
||||
return sl <= sr;
|
||||
}
|
||||
|
||||
inline uint64_t sgt(uint64_t l, uint64_t r, unsigned inWidth) {
|
||||
int64_t sl = sext(l, MAX_BITS, inWidth);
|
||||
int64_t sr = sext(r, MAX_BITS, inWidth);
|
||||
return sl > sr;
|
||||
}
|
||||
|
||||
inline uint64_t sge(uint64_t l, uint64_t r, unsigned inWidth) {
|
||||
int64_t sl = sext(l, MAX_BITS, inWidth);
|
||||
int64_t sr = sext(r, MAX_BITS, inWidth);
|
||||
return sl >= sr;
|
||||
}
|
||||
|
||||
} // end namespace ints
|
||||
} // end namespace klee
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,293 @@
|
||||
//===-- Solver.h ------------------------------------------------*- C++ -*-===//
|
||||
//
|
||||
// The KLEE Symbolic Virtual Machine
|
||||
//
|
||||
// This file is distributed under the University of Illinois Open Source
|
||||
// License. See LICENSE.TXT for details.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#ifndef KLEE_SOLVER_H
|
||||
#define KLEE_SOLVER_H
|
||||
|
||||
#include "klee/Expr.h"
|
||||
|
||||
#include <vector>
|
||||
|
||||
namespace klee {
|
||||
class ConstraintManager;
|
||||
class Expr;
|
||||
class SolverImpl;
|
||||
|
||||
struct Query {
|
||||
public:
|
||||
const ConstraintManager &constraints;
|
||||
ref<Expr> expr;
|
||||
|
||||
Query(const ConstraintManager& _constraints, ref<Expr> _expr)
|
||||
: constraints(_constraints), expr(_expr) {
|
||||
}
|
||||
|
||||
/// withExpr - Return a copy of the query with the given expression.
|
||||
Query withExpr(ref<Expr> _expr) const {
|
||||
return Query(constraints, _expr);
|
||||
}
|
||||
|
||||
/// withFalse - Return a copy of the query with a false expression.
|
||||
Query withFalse() const {
|
||||
return Query(constraints, ConstantExpr::alloc(0, Expr::Bool));
|
||||
}
|
||||
|
||||
/// negateExpr - Return a copy of the query with the expression negated.
|
||||
Query negateExpr() const {
|
||||
return withExpr(Expr::createIsZero(expr));
|
||||
}
|
||||
};
|
||||
|
||||
class Solver {
|
||||
// DO NOT IMPLEMENT.
|
||||
Solver(const Solver&);
|
||||
void operator=(const Solver&);
|
||||
|
||||
public:
|
||||
enum Validity {
|
||||
True = 1,
|
||||
False = -1,
|
||||
Unknown = 0
|
||||
};
|
||||
|
||||
public:
|
||||
/// validity_to_str - Return the name of given Validity enum value.
|
||||
static const char *validity_to_str(Validity v);
|
||||
|
||||
public:
|
||||
SolverImpl *impl;
|
||||
|
||||
public:
|
||||
Solver(SolverImpl *_impl) : impl(_impl) {}
|
||||
virtual ~Solver();
|
||||
|
||||
/// evaluate - Determine for a particular state if the query
|
||||
/// expression is provably true, provably false or neither.
|
||||
///
|
||||
/// \param [out] result - if
|
||||
/// \f[ \forall X constraints(X) \to query(X) \f]
|
||||
/// then Solver::True,
|
||||
/// else if
|
||||
/// \f[ \forall X constraints(X) \to \lnot query(X) \f]
|
||||
/// then Solver::False,
|
||||
/// else
|
||||
/// Solver::Unknown
|
||||
///
|
||||
/// \return True on success.
|
||||
bool evaluate(const Query&, Validity &result);
|
||||
|
||||
/// mustBeTrue - Determine if the expression is provably true.
|
||||
///
|
||||
/// This evaluates the following logical formula:
|
||||
///
|
||||
/// \f[ \forall X constraints(X) \to query(X) \f]
|
||||
///
|
||||
/// which is equivalent to
|
||||
///
|
||||
/// \f[ \lnot \exists X constraints(X) \land \lnot query(X) \f]
|
||||
///
|
||||
/// Where \f$X\f$ is some assignment, \f$constraints(X)\f$ are the constraints
|
||||
/// in the query and \f$query(X)\f$ is the query expression.
|
||||
///
|
||||
/// \param [out] result - On success, true iff the logical formula is true
|
||||
///
|
||||
/// \return True on success.
|
||||
bool mustBeTrue(const Query&, bool &result);
|
||||
|
||||
/// mustBeFalse - Determine if the expression is provably false.
|
||||
///
|
||||
/// This evaluates the following logical formula:
|
||||
///
|
||||
/// \f[ \lnot \exists X constraints(X) \land query(X) \f]
|
||||
///
|
||||
/// which is equivalent to
|
||||
///
|
||||
/// \f[ \forall X constraints(X) \to \lnot query(X) \f]
|
||||
///
|
||||
/// Where \f$X\f$ is some assignment, \f$constraints(X)\f$ are the constraints
|
||||
/// in the query and \f$query(X)\f$ is the query expression.
|
||||
///
|
||||
/// \param [out] result - On success, true iff the logical formula is false
|
||||
///
|
||||
/// \return True on success.
|
||||
bool mustBeFalse(const Query&, bool &result);
|
||||
|
||||
/// mayBeTrue - Determine if there is a valid assignment for the given state
|
||||
/// in which the expression evaluates to true.
|
||||
///
|
||||
/// This evaluates the following logical formula:
|
||||
///
|
||||
/// \f[ \exists X constraints(X) \land query(X) \f]
|
||||
///
|
||||
/// which is equivalent to
|
||||
///
|
||||
/// \f[ \lnot \forall X constraints(X) \to \lnot query(X) \f]
|
||||
///
|
||||
/// Where \f$X\f$ is some assignment, \f$constraints(X)\f$ are the constraints
|
||||
/// in the query and \f$query(X)\f$ is the query expression.
|
||||
///
|
||||
/// \param [out] result - On success, true iff the logical formula may be true
|
||||
///
|
||||
/// \return True on success.
|
||||
bool mayBeTrue(const Query&, bool &result);
|
||||
|
||||
/// mayBeFalse - Determine if there is a valid assignment for the given
|
||||
/// state in which the expression evaluates to false.
|
||||
///
|
||||
/// This evaluates the following logical formula:
|
||||
///
|
||||
/// \f[ \exists X constraints(X) \land \lnot query(X) \f]
|
||||
///
|
||||
/// which is equivalent to
|
||||
///
|
||||
/// \f[ \lnot \forall X constraints(X) \to query(X) \f]
|
||||
///
|
||||
/// Where \f$X\f$ is some assignment, \f$constraints(X)\f$ are the constraints
|
||||
/// in the query and \f$query(X)\f$ is the query expression.
|
||||
///
|
||||
/// \param [out] result - On success, true iff the logical formula may be false
|
||||
///
|
||||
/// \return True on success.
|
||||
bool mayBeFalse(const Query&, bool &result);
|
||||
|
||||
/// getValue - Compute one possible value for the given expression.
|
||||
///
|
||||
/// \param [out] result - On success, a value for the expression in some
|
||||
/// satisfying assignment.
|
||||
///
|
||||
/// \return True on success.
|
||||
bool getValue(const Query&, ref<ConstantExpr> &result);
|
||||
|
||||
/// getInitialValues - Compute the initial values for a list of objects.
|
||||
///
|
||||
/// \param [out] result - On success, this vector will be filled in with an
|
||||
/// array of bytes for each given object (with length matching the object
|
||||
/// size). The bytes correspond to the initial values for the objects for
|
||||
/// some satisfying assignment.
|
||||
///
|
||||
/// \return True on success.
|
||||
///
|
||||
/// NOTE: This function returns failure if there is no satisfying
|
||||
/// assignment.
|
||||
//
|
||||
// FIXME: This API is lame. We should probably just provide an API which
|
||||
// returns an Assignment object, then clients can get out whatever values
|
||||
// they want. This also allows us to optimize the representation.
|
||||
bool getInitialValues(const Query&,
|
||||
const std::vector<const Array*> &objects,
|
||||
std::vector< std::vector<unsigned char> > &result);
|
||||
|
||||
/// getRange - Compute a tight range of possible values for a given
|
||||
/// expression.
|
||||
///
|
||||
/// \return - A pair with (min, max) values for the expression.
|
||||
///
|
||||
/// \post(mustBeTrue(min <= e <= max) &&
|
||||
/// mayBeTrue(min == e) &&
|
||||
/// mayBeTrue(max == e))
|
||||
//
|
||||
// FIXME: This should go into a helper class, and should handle failure.
|
||||
virtual std::pair< ref<Expr>, ref<Expr> > getRange(const Query&);
|
||||
|
||||
virtual char *getConstraintLog(const Query& query);
|
||||
virtual void setCoreSolverTimeout(double timeout);
|
||||
};
|
||||
|
||||
/// STPSolver - A complete solver based on STP.
|
||||
class STPSolver : public Solver {
|
||||
public:
|
||||
/// STPSolver - Construct a new STPSolver.
|
||||
///
|
||||
/// \param useForkedSTP - Whether STP should be run in a separate process
|
||||
/// (required for using timeouts).
|
||||
/// \param optimizeDivides - Whether constant division operations should
|
||||
/// be optimized into add/shift/multiply operations.
|
||||
STPSolver(bool useForkedSTP, bool optimizeDivides = true);
|
||||
|
||||
/// getConstraintLog - Return the constraint log for the given state in CVC
|
||||
/// format.
|
||||
virtual char *getConstraintLog(const Query&);
|
||||
|
||||
/// setCoreSolverTimeout - Set constraint solver timeout delay to the given value; 0
|
||||
/// is off.
|
||||
virtual void setCoreSolverTimeout(double timeout);
|
||||
};
|
||||
|
||||
|
||||
#ifdef SUPPORT_METASMT
|
||||
|
||||
template<typename SolverContext>
|
||||
class MetaSMTSolver : public Solver {
|
||||
public:
|
||||
MetaSMTSolver(bool useForked, bool optimizeDivides);
|
||||
virtual ~MetaSMTSolver();
|
||||
|
||||
virtual char *getConstraintLog(const Query&);
|
||||
virtual void setCoreSolverTimeout(double timeout);
|
||||
};
|
||||
|
||||
#endif /* SUPPORT_METASMT */
|
||||
|
||||
/* *** */
|
||||
|
||||
/// createValidatingSolver - Create a solver which will validate all query
|
||||
/// results against an oracle, used for testing that an optimized solver has
|
||||
/// the same results as an unoptimized one. This solver will assert on any
|
||||
/// mismatches.
|
||||
///
|
||||
/// \param s - The primary underlying solver to use.
|
||||
/// \param oracle - The solver to check query results against.
|
||||
Solver *createValidatingSolver(Solver *s, Solver *oracle);
|
||||
|
||||
/// createCachingSolver - Create a solver which will cache the queries in
|
||||
/// memory (without eviction).
|
||||
///
|
||||
/// \param s - The underlying solver to use.
|
||||
Solver *createCachingSolver(Solver *s);
|
||||
|
||||
/// createCexCachingSolver - Create a counterexample caching solver. This is a
|
||||
/// more sophisticated cache which records counterexamples for a constraint
|
||||
/// set and uses subset/superset relations among constraints to try and
|
||||
/// quickly find satisfying assignments.
|
||||
///
|
||||
/// \param s - The underlying solver to use.
|
||||
Solver *createCexCachingSolver(Solver *s);
|
||||
|
||||
/// createFastCexSolver - Create a "fast counterexample solver", which tries
|
||||
/// to quickly compute a satisfying assignment for a constraint set using
|
||||
/// value propogation and range analysis.
|
||||
///
|
||||
/// \param s - The underlying solver to use.
|
||||
Solver *createFastCexSolver(Solver *s);
|
||||
|
||||
/// createIndependentSolver - Create a solver which will eliminate any
|
||||
/// unnecessary constraints before propogating the query to the underlying
|
||||
/// solver.
|
||||
///
|
||||
/// \param s - The underlying solver to use.
|
||||
Solver *createIndependentSolver(Solver *s);
|
||||
|
||||
/// createPCLoggingSolver - Create a solver which will forward all queries
|
||||
/// after writing them to the given path in .pc format.
|
||||
Solver *createPCLoggingSolver(Solver *s, std::string path,
|
||||
int minQueryTimeToLog);
|
||||
|
||||
/// createSMTLIBLoggingSolver - Create a solver which will forward all queries
|
||||
/// after writing them to the given path in .smt2 format.
|
||||
Solver *createSMTLIBLoggingSolver(Solver *s, std::string path,
|
||||
int minQueryTimeToLog);
|
||||
|
||||
|
||||
/// createDummySolver - Create a dummy solver implementation which always
|
||||
/// fails.
|
||||
Solver *createDummySolver();
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,389 @@
|
||||
//===-- ExprSMTLIBPrinter.h ------------------------------------------*- C++
|
||||
//-*-===//
|
||||
//
|
||||
// The KLEE Symbolic Virtual Machine
|
||||
//
|
||||
// This file is distributed under the University of Illinois Open Source
|
||||
// License. See LICENSE.TXT for details.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#ifndef KLEE_EXPRSMTLIBPRINTER_H
|
||||
#define KLEE_EXPRSMTLIBPRINTER_H
|
||||
|
||||
#include <string>
|
||||
#include <set>
|
||||
#include <map>
|
||||
#include <klee/Constraints.h>
|
||||
#include <klee/Expr.h>
|
||||
#include <klee/util/PrintContext.h>
|
||||
#include <klee/Solver.h>
|
||||
|
||||
namespace llvm {
|
||||
class raw_ostream;
|
||||
}
|
||||
|
||||
namespace klee {
|
||||
|
||||
/// Base Class for SMTLIBv2 printer for KLEE Queries. It uses the QF_ABV logic.
|
||||
/// Note however the logic can be
|
||||
/// set to QF_AUFBV because some solvers (e.g. STP) complain if this logic is
|
||||
/// set to QF_ABV.
|
||||
///
|
||||
/// This printer abbreviates expressions according to its abbreviation mode.
|
||||
///
|
||||
/// It is intended to be used as follows
|
||||
/// -# Create instance of this class
|
||||
/// -# Set output ( setOutput() )
|
||||
/// -# Set query to print ( setQuery() )
|
||||
/// -# Set options using the methods prefixed with the word "set".
|
||||
/// -# Call generateOutput()
|
||||
///
|
||||
/// The class can then be used again on another query ( setQuery() ).
|
||||
/// The options set are persistent across queries (apart from
|
||||
/// setArrayValuesToGet() and PRODUCE_MODELS).
|
||||
///
|
||||
///
|
||||
/// Note that in KLEE at the lowest level the solver checks for validity of the
|
||||
/// query, i.e.
|
||||
///
|
||||
/// \f[ \forall X constraints(X) \to query(X) \f]
|
||||
///
|
||||
/// Where \f$X\f$ is some assignment, \f$constraints(X)\f$ are the constraints
|
||||
/// in the query and \f$query(X)\f$ is the query expression.
|
||||
/// If the above formula is true the query is said to be **valid**, otherwise it
|
||||
/// is
|
||||
/// **invalid**.
|
||||
///
|
||||
/// The SMTLIBv2 language works in terms of satisfiability rather than validity
|
||||
/// so instead
|
||||
/// this class must ask the equivalent query but in terms of satisfiability
|
||||
/// which is:
|
||||
///
|
||||
/// \f[ \lnot \exists X constraints(X) \land \lnot query(X) \f]
|
||||
///
|
||||
/// The printed SMTLIBv2 query actually asks the following:
|
||||
///
|
||||
/// \f[ \exists X constraints(X) \land \lnot query(X) \f]
|
||||
/// Hence the printed SMTLIBv2 query will just assert the constraints and the
|
||||
/// negation
|
||||
/// of the query expression.
|
||||
///
|
||||
/// If a SMTLIBv2 solver says the printed query is satisfiable the then original
|
||||
/// query passed to this class was **invalid** and if a SMTLIBv2 solver says the
|
||||
/// printed
|
||||
/// query is unsatisfiable then the original query passed to this class was
|
||||
/// **valid**.
|
||||
///
|
||||
class ExprSMTLIBPrinter {
|
||||
public:
|
||||
/// Different SMTLIBv2 logics supported by this class
|
||||
/// \sa setLogic()
|
||||
enum SMTLIBv2Logic {
|
||||
QF_BV, ///< Logic using Theory of Bitvectors
|
||||
QF_ABV, ///< Logic using Theory of Arrays and Theory of Bitvectors
|
||||
QF_AUFBV ///< Logic using Theory of Arrays and Theory of Bitvectors and has
|
||||
///< uninterpreted functions
|
||||
};
|
||||
|
||||
/// Different SMTLIBv2 options that have a boolean value that can be set
|
||||
/// \sa setSMTLIBboolOption
|
||||
enum SMTLIBboolOptions {
|
||||
PRINT_SUCCESS, ///< print-success SMTLIBv2 option
|
||||
PRODUCE_MODELS, ///< produce-models SMTLIBv2 option
|
||||
INTERACTIVE_MODE ///< interactive-mode SMTLIBv2 option
|
||||
};
|
||||
|
||||
/// Different SMTLIBv2 bool option values
|
||||
/// \sa setSMTLIBboolOption
|
||||
enum SMTLIBboolValues {
|
||||
OPTION_TRUE, ///< Set option to true
|
||||
OPTION_FALSE, ///< Set option to false
|
||||
OPTION_DEFAULT ///< Use solver's defaults (the option will not be set in
|
||||
///< output)
|
||||
};
|
||||
|
||||
enum ConstantDisplayMode {
|
||||
BINARY, ///< Display bit vector constants in binary e.g. #b00101101
|
||||
HEX, ///< Display bit vector constants in Hexidecimal e.g.#x2D
|
||||
DECIMAL ///< Display bit vector constants in Decimal e.g. (_ bv45 8)
|
||||
};
|
||||
|
||||
/// How to abbreviate repeatedly mentioned expressions. Some solvers do not
|
||||
/// understand all of them, hence the flexibility.
|
||||
enum AbbreviationMode {
|
||||
ABBR_NONE, ///< Do not abbreviate.
|
||||
ABBR_LET, ///< Abbreviate with let.
|
||||
ABBR_NAMED ///< Abbreviate with :named annotations.
|
||||
};
|
||||
|
||||
/// Different supported SMTLIBv2 sorts (a.k.a type) in QF_AUFBV
|
||||
enum SMTLIB_SORT { SORT_BITVECTOR, SORT_BOOL };
|
||||
|
||||
/// Allows the way Constant bitvectors are printed to be changed.
|
||||
/// This setting is persistent across queries.
|
||||
/// \return true if setting the mode was successful
|
||||
bool setConstantDisplayMode(ConstantDisplayMode cdm);
|
||||
|
||||
ConstantDisplayMode getConstantDisplayMode() { return cdm; }
|
||||
|
||||
void setAbbreviationMode(AbbreviationMode am) { abbrMode = am; }
|
||||
|
||||
/// Create a new printer that will print a query in the SMTLIBv2 language.
|
||||
ExprSMTLIBPrinter();
|
||||
|
||||
/// Set the output stream that will be printed to.
|
||||
/// This call is persistent across queries.
|
||||
void setOutput(llvm::raw_ostream &output);
|
||||
|
||||
/// Set the query to print. This will setArrayValuesToGet()
|
||||
/// to none (i.e. no array values will be requested using
|
||||
/// the SMTLIBv2 (get-value ()) command).
|
||||
void setQuery(const Query &q);
|
||||
|
||||
~ExprSMTLIBPrinter();
|
||||
|
||||
/// Print the query to the llvm::raw_ostream
|
||||
/// setOutput() and setQuery() must be called before calling this.
|
||||
///
|
||||
/// All options should be set before calling this.
|
||||
/// \sa setConstantDisplayMode
|
||||
/// \sa setLogic()
|
||||
/// \sa setHumanReadable
|
||||
/// \sa setSMTLIBboolOption
|
||||
/// \sa setArrayValuesToGet
|
||||
///
|
||||
/// Mostly it does not matter what order the options are set in. However
|
||||
/// calling
|
||||
/// setArrayValuesToGet() implies PRODUCE_MODELS is set so, if a call to
|
||||
/// setSMTLIBboolOption()
|
||||
/// is made that uses the PRODUCE_MODELS before calling setArrayValuesToGet()
|
||||
/// then the setSMTLIBboolOption()
|
||||
/// call will be ineffective.
|
||||
void generateOutput();
|
||||
|
||||
/// Set which SMTLIBv2 logic to use.
|
||||
/// This only affects what logic is used in the (set-logic <logic>) command.
|
||||
/// The rest of the printed SMTLIBv2 commands are the same regardless of the
|
||||
/// logic used.
|
||||
///
|
||||
/// \return true if setting logic was successful.
|
||||
bool setLogic(SMTLIBv2Logic l);
|
||||
|
||||
/// Sets how readable the printed SMTLIBv2 commands are.
|
||||
/// \param hr If set to true the printed commands are made more human
|
||||
/// readable.
|
||||
///
|
||||
/// The printed commands are made human readable by...
|
||||
/// - Indenting and line breaking.
|
||||
/// - Adding comments
|
||||
void setHumanReadable(bool hr);
|
||||
|
||||
/// Set SMTLIB options.
|
||||
/// These options will be printed when generateOutput() is called via
|
||||
/// the SMTLIBv2 command (set-option :option-name <value>)
|
||||
///
|
||||
/// By default no options will be printed so the SMTLIBv2 solver will use
|
||||
/// its default values for all options.
|
||||
///
|
||||
/// \return true if option was successfully set.
|
||||
///
|
||||
/// The options set are persistent across calls to setQuery() apart from the
|
||||
/// PRODUCE_MODELS option which this printer may automatically set/unset.
|
||||
bool setSMTLIBboolOption(SMTLIBboolOptions option, SMTLIBboolValues value);
|
||||
|
||||
/// Set the array names that the SMTLIBv2 solver will be asked to determine.
|
||||
/// Calling this method implies the PRODUCE_MODELS option is true and will
|
||||
/// change
|
||||
/// any previously set value.
|
||||
///
|
||||
/// If no call is made to this function before
|
||||
/// ExprSMTLIBPrinter::generateOutput() then
|
||||
/// the solver will only be asked to check satisfiability.
|
||||
///
|
||||
/// If the passed vector is not empty then the values of those arrays will be
|
||||
/// requested
|
||||
/// via (get-value ()) SMTLIBv2 command in the output stream in the same order
|
||||
/// as vector.
|
||||
void setArrayValuesToGet(const std::vector<const Array *> &a);
|
||||
|
||||
/// \return True if human readable mode is switched on
|
||||
bool isHumanReadable();
|
||||
|
||||
protected:
|
||||
/// Contains the arrays found during scans
|
||||
std::set<const Array *> usedArrays;
|
||||
|
||||
/// Set of expressions seen during scan.
|
||||
std::set<ref<Expr> > seenExprs;
|
||||
|
||||
typedef std::map<const ref<Expr>, int> BindingMap;
|
||||
|
||||
/// Let expression binding number map. Under the :named abbreviation mode,
|
||||
/// negative binding numbers indicate that the abbreviation has already been
|
||||
/// emitted, so it may be used.
|
||||
BindingMap bindings;
|
||||
|
||||
/// An ordered list of expression bindings.
|
||||
/// Exprs in BindingMap at index i depend on Exprs in BindingMap at i-1.
|
||||
/// Exprs in orderedBindings[0] have no dependencies.
|
||||
std::vector<BindingMap> orderedBindings;
|
||||
|
||||
/// Output stream to write to
|
||||
llvm::raw_ostream *o;
|
||||
|
||||
/// The query to print
|
||||
const Query *query;
|
||||
|
||||
/// Determine the SMTLIBv2 sort of the expression
|
||||
SMTLIB_SORT getSort(const ref<Expr> &e);
|
||||
|
||||
/// Print an expression but cast it to a particular SMTLIBv2 sort first.
|
||||
void printCastToSort(const ref<Expr> &e, ExprSMTLIBPrinter::SMTLIB_SORT sort);
|
||||
|
||||
// Resets various internal objects for a new query
|
||||
void reset();
|
||||
|
||||
// Scan all constraints and the query
|
||||
void scanAll();
|
||||
|
||||
// Print an initial SMTLIBv2 comment before anything else is printed
|
||||
void printNotice();
|
||||
|
||||
// Print SMTLIBv2 options e.g. (set-option :option-name <value>) command
|
||||
void printOptions();
|
||||
|
||||
// Print SMTLIBv2 logic to use e.g. (set-logic QF_ABV)
|
||||
void printSetLogic();
|
||||
|
||||
// Print SMTLIBv2 bitvector declarations
|
||||
void printBvDeclarations();
|
||||
|
||||
// Print SMTLIBv2 assertions for constant arrays
|
||||
void printArrayDeclarations();
|
||||
|
||||
// Print SMTLIBv2 for the query optimised for human readability
|
||||
void printHumanReadableQuery();
|
||||
|
||||
// Print SMTLIBv2 for the query optimised for minimal query size.
|
||||
// This does not imply ABBR_LET or ABBR_NAMED (although it would be wise
|
||||
// to use them to minimise the query size further)
|
||||
void printMachineReadableQuery();
|
||||
|
||||
void printQueryInSingleAssert();
|
||||
|
||||
/// Print the SMTLIBv2 command to check satisfiability and also optionally
|
||||
/// request for values
|
||||
/// \sa setArrayValuesToGet()
|
||||
void printAction();
|
||||
|
||||
/// Print the SMTLIBv2 command to exit
|
||||
void printExit();
|
||||
|
||||
/// Print a Constant in the format specified by the current "Constant Display
|
||||
/// Mode"
|
||||
void printConstant(const ref<ConstantExpr> &e);
|
||||
|
||||
/// Recursively print expression
|
||||
/// \param e is the expression to print
|
||||
/// \param expectedSort is the sort we want. If "e" is not of the right type a
|
||||
/// cast will be performed.
|
||||
/// \param abbrMode the abbreviation mode to use for this expression
|
||||
void printExpression(const ref<Expr> &e, SMTLIB_SORT expectedSort);
|
||||
|
||||
/// Scan Expression recursively for Arrays in expressions. Found arrays are
|
||||
/// added to
|
||||
/// the usedArrays vector.
|
||||
void scan(const ref<Expr> &e);
|
||||
|
||||
/// Scan bindings for expression intra-dependencies. The result is written
|
||||
/// to the orderedBindings vector that is later used for nested expression
|
||||
/// printing in the let abbreviation mode.
|
||||
void scanBindingExprDeps();
|
||||
|
||||
/* Rules of recursion for "Special Expression handlers" and
|
||||
*printSortArgsExpr()
|
||||
*
|
||||
* 1. The parent of the recursion will have created an indent level for you so
|
||||
*you don't need to add another initially.
|
||||
* 2. You do not need to add a line break (via printSeperator() ) at the end,
|
||||
*the parent caller will handle that.
|
||||
* 3. The effect of a single recursive call should not affect the depth of the
|
||||
*indent stack (nor the contents
|
||||
* of the indent stack prior to the call). I.e. After executing a single
|
||||
*recursive call the indent stack
|
||||
* should have the same size and contents as before executing the recursive
|
||||
*call.
|
||||
*/
|
||||
|
||||
// Special Expression handlers
|
||||
void printReadExpr(const ref<ReadExpr> &e);
|
||||
void printExtractExpr(const ref<ExtractExpr> &e);
|
||||
void printCastExpr(const ref<CastExpr> &e);
|
||||
void printNotEqualExpr(const ref<NeExpr> &e);
|
||||
void printSelectExpr(const ref<SelectExpr> &e,
|
||||
ExprSMTLIBPrinter::SMTLIB_SORT s);
|
||||
|
||||
// For the set of operators that take sort "s" arguments
|
||||
void printSortArgsExpr(const ref<Expr> &e,
|
||||
ExprSMTLIBPrinter::SMTLIB_SORT s);
|
||||
|
||||
/// For the set of operators that come in two sorts (e.g. (and () ()) (bvand
|
||||
/// () ()) )
|
||||
/// These are and,xor,or,not
|
||||
/// \param e the Expression to print
|
||||
/// \param s the sort of the expression we want
|
||||
void printLogicalOrBitVectorExpr(const ref<Expr> &e,
|
||||
ExprSMTLIBPrinter::SMTLIB_SORT s);
|
||||
|
||||
/// Recursively prints updatesNodes
|
||||
void printUpdatesAndArray(const UpdateNode *un, const Array *root);
|
||||
|
||||
/// This method does the translation between Expr classes and SMTLIBv2
|
||||
/// keywords
|
||||
/// \return A C-string of the SMTLIBv2 keyword
|
||||
const char *getSMTLIBKeyword(const ref<Expr> &e);
|
||||
|
||||
void printSeperator();
|
||||
|
||||
/// Helper function for scan() that scans the expressions of an update node
|
||||
void scanUpdates(const UpdateNode *un);
|
||||
|
||||
/// Helper printer class
|
||||
PrintContext *p;
|
||||
|
||||
/// This contains the query from the solver but negated for our purposes.
|
||||
/// \sa negateQueryExpression()
|
||||
ref<Expr> queryAssert;
|
||||
|
||||
/// Indicates if there were any constant arrays founds during a scan()
|
||||
bool haveConstantArray;
|
||||
|
||||
private:
|
||||
SMTLIBv2Logic logicToUse;
|
||||
|
||||
volatile bool humanReadable;
|
||||
|
||||
// Map of enabled SMTLIB Options
|
||||
std::map<SMTLIBboolOptions, bool> smtlibBoolOptions;
|
||||
|
||||
// Print a SMTLIBv2 option as a C-string
|
||||
const char *
|
||||
getSMTLIBOptionString(ExprSMTLIBPrinter::SMTLIBboolOptions option);
|
||||
|
||||
/// Print expression without top-level abbreviations
|
||||
void printFullExpression(const ref<Expr> &e, SMTLIB_SORT expectedSort);
|
||||
|
||||
/// Print an assert statement for the given expr.
|
||||
void printAssert(const ref<Expr> &e);
|
||||
|
||||
// Pointer to a vector of Arrays. These will be used for the (get-value () )
|
||||
// call.
|
||||
const std::vector<const Array *> *arraysToCallGetValueOn;
|
||||
|
||||
ConstantDisplayMode cdm;
|
||||
AbbreviationMode abbrMode;
|
||||
};
|
||||
}
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,91 @@
|
||||
#ifndef PRINTCONTEXT_H_
|
||||
#define PRINTCONTEXT_H_
|
||||
|
||||
#include "klee/Expr.h"
|
||||
#include "llvm/Support/raw_ostream.h"
|
||||
#include <sstream>
|
||||
#include <string>
|
||||
#include <stack>
|
||||
|
||||
/// PrintContext - Helper class for pretty printing.
|
||||
/// It provides a basic wrapper around llvm::raw_ostream that keeps track of
|
||||
/// how many characters have been used on the current line.
|
||||
///
|
||||
/// It also provides an optional way keeping track of the various levels of indentation
|
||||
/// by using a stack.
|
||||
/// \sa breakLineI() , \sa pushIndent(), \sa popIndent()
|
||||
class PrintContext {
|
||||
private:
|
||||
llvm::raw_ostream &os;
|
||||
std::string newline;
|
||||
|
||||
///This is used to keep track of the stack of indentations used by
|
||||
/// \sa breakLineI()
|
||||
/// \sa pushIndent()
|
||||
/// \sa popIndent()
|
||||
std::stack<unsigned int> indentStack;
|
||||
|
||||
public:
|
||||
/// Number of characters on the current line.
|
||||
unsigned pos;
|
||||
|
||||
PrintContext(llvm::raw_ostream &_os) : os(_os), newline("\n"), indentStack(), pos()
|
||||
{
|
||||
indentStack.push(pos);
|
||||
}
|
||||
|
||||
void setNewline(const std::string &_newline) {
|
||||
newline = _newline;
|
||||
}
|
||||
|
||||
void breakLine(unsigned indent=0) {
|
||||
os << newline;
|
||||
if (indent)
|
||||
os.indent(indent) << ' ';
|
||||
pos = indent;
|
||||
}
|
||||
|
||||
///Break line using the indent on the top of the indent stack
|
||||
/// \return The PrintContext object so the method is chainable
|
||||
PrintContext& breakLineI()
|
||||
{
|
||||
breakLine(indentStack.top());
|
||||
return *this;
|
||||
}
|
||||
|
||||
///Add the current position on the line to the top of the indent stack
|
||||
/// \return The PrintContext object so the method is chainable
|
||||
PrintContext& pushIndent()
|
||||
{
|
||||
indentStack.push(pos);
|
||||
return *this;
|
||||
}
|
||||
|
||||
///Pop the top off the indent stack
|
||||
/// \return The PrintContext object so the method is chainable
|
||||
PrintContext& popIndent()
|
||||
{
|
||||
indentStack.pop();
|
||||
return *this;
|
||||
}
|
||||
|
||||
/// write - Output a string to the stream and update the
|
||||
/// position. The stream should not have any newlines.
|
||||
void write(const std::string &s) {
|
||||
os << s;
|
||||
pos += s.length();
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
PrintContext &operator<<(T elt) {
|
||||
std::string str;
|
||||
llvm::raw_string_ostream ss(str);
|
||||
ss << elt;
|
||||
write(ss.str());
|
||||
return *this;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
|
||||
#endif /* PRINTCONTEXT_H_ */
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,552 @@
|
||||
//===-- ExprPPrinter.cpp - ----------------------------------------------===//
|
||||
//
|
||||
// The KLEE Symbolic Virtual Machine
|
||||
//
|
||||
// This file is distributed under the University of Illinois Open Source
|
||||
// License. See LICENSE.TXT for details.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include "klee/util/PrintContext.h"
|
||||
#include "klee/util/ExprPPrinter.h"
|
||||
|
||||
#include "klee/Constraints.h"
|
||||
|
||||
#include "llvm/Support/CommandLine.h"
|
||||
#include "llvm/Support/raw_ostream.h"
|
||||
|
||||
#include <map>
|
||||
#include <vector>
|
||||
|
||||
using namespace klee;
|
||||
|
||||
namespace {
|
||||
llvm::cl::opt<bool>
|
||||
PCWidthAsArg("pc-width-as-arg", llvm::cl::init(true));
|
||||
|
||||
llvm::cl::opt<bool>
|
||||
PCAllWidths("pc-all-widths", llvm::cl::init(false));
|
||||
|
||||
llvm::cl::opt<bool>
|
||||
PCPrefixWidth("pc-prefix-width", llvm::cl::init(true));
|
||||
|
||||
llvm::cl::opt<bool>
|
||||
PCMultibyteReads("pc-multibyte-reads", llvm::cl::init(true));
|
||||
|
||||
llvm::cl::opt<bool>
|
||||
PCAllConstWidths("pc-all-const-widths", llvm::cl::init(false));
|
||||
}
|
||||
|
||||
class PPrinter : public ExprPPrinter {
|
||||
public:
|
||||
std::set<const Array*> usedArrays;
|
||||
private:
|
||||
std::map<ref<Expr>, unsigned> bindings;
|
||||
std::map<const UpdateNode*, unsigned> updateBindings;
|
||||
std::set< ref<Expr> > couldPrint, shouldPrint;
|
||||
std::set<const UpdateNode*> couldPrintUpdates, shouldPrintUpdates;
|
||||
llvm::raw_ostream &os;
|
||||
unsigned counter;
|
||||
unsigned updateCounter;
|
||||
bool hasScan;
|
||||
bool forceNoLineBreaks;
|
||||
std::string newline;
|
||||
|
||||
/// shouldPrintWidth - Predicate for whether this expression should
|
||||
/// be printed with its width.
|
||||
bool shouldPrintWidth(ref<Expr> e) {
|
||||
if (PCAllWidths)
|
||||
return true;
|
||||
return e->getWidth() != Expr::Bool;
|
||||
}
|
||||
|
||||
bool isVerySimple(const ref<Expr> &e) {
|
||||
return isa<ConstantExpr>(e) || bindings.find(e)!=bindings.end();
|
||||
}
|
||||
|
||||
bool isVerySimpleUpdate(const UpdateNode *un) {
|
||||
return !un || updateBindings.find(un)!=updateBindings.end();
|
||||
}
|
||||
|
||||
|
||||
// document me!
|
||||
bool isSimple(const ref<Expr> &e) {
|
||||
if (isVerySimple(e)) {
|
||||
return true;
|
||||
} else if (const ReadExpr *re = dyn_cast<ReadExpr>(e)) {
|
||||
return isVerySimple(re->index) && isVerySimpleUpdate(re->updates.head);
|
||||
} else {
|
||||
Expr *ep = e.get();
|
||||
for (unsigned i=0; i<ep->getNumKids(); i++)
|
||||
if (!isVerySimple(ep->getKid(i)))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
bool hasSimpleKids(const Expr *ep) {
|
||||
for (unsigned i=0; i<ep->getNumKids(); i++)
|
||||
if (!isSimple(ep->getKid(i)))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
void scanUpdate(const UpdateNode *un) {
|
||||
// FIXME: This needs to be non-recursive.
|
||||
if (un) {
|
||||
if (couldPrintUpdates.insert(un).second) {
|
||||
scanUpdate(un->next);
|
||||
scan1(un->index);
|
||||
scan1(un->value);
|
||||
} else {
|
||||
shouldPrintUpdates.insert(un);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void scan1(const ref<Expr> &e) {
|
||||
if (!isa<ConstantExpr>(e)) {
|
||||
if (couldPrint.insert(e).second) {
|
||||
Expr *ep = e.get();
|
||||
for (unsigned i=0; i<ep->getNumKids(); i++)
|
||||
scan1(ep->getKid(i));
|
||||
if (const ReadExpr *re = dyn_cast<ReadExpr>(e)) {
|
||||
usedArrays.insert(re->updates.root);
|
||||
scanUpdate(re->updates.head);
|
||||
}
|
||||
} else {
|
||||
shouldPrint.insert(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void printUpdateList(const UpdateList &updates, PrintContext &PC) {
|
||||
const UpdateNode *head = updates.head;
|
||||
|
||||
// Special case empty list.
|
||||
if (!head) {
|
||||
// FIXME: We need to do something (assert, mangle, etc.) so that printing
|
||||
// distinct arrays with the same name doesn't fail.
|
||||
PC << updates.root->name;
|
||||
return;
|
||||
}
|
||||
|
||||
// FIXME: Explain this breaking policy.
|
||||
bool openedList = false, nextShouldBreak = false;
|
||||
unsigned outerIndent = PC.pos;
|
||||
unsigned middleIndent = 0;
|
||||
for (const UpdateNode *un = head; un; un = un->next) {
|
||||
// We are done if we hit the cache.
|
||||
std::map<const UpdateNode*, unsigned>::iterator it =
|
||||
updateBindings.find(un);
|
||||
if (it!=updateBindings.end()) {
|
||||
if (openedList)
|
||||
PC << "] @ ";
|
||||
PC << "U" << it->second;
|
||||
return;
|
||||
} else if (!hasScan || shouldPrintUpdates.count(un)) {
|
||||
if (openedList)
|
||||
PC << "] @";
|
||||
if (un != head)
|
||||
PC.breakLine(outerIndent);
|
||||
PC << "U" << updateCounter << ":";
|
||||
updateBindings.insert(std::make_pair(un, updateCounter++));
|
||||
openedList = nextShouldBreak = false;
|
||||
}
|
||||
|
||||
if (!openedList) {
|
||||
openedList = 1;
|
||||
PC << '[';
|
||||
middleIndent = PC.pos;
|
||||
} else {
|
||||
PC << ',';
|
||||
printSeparator(PC, !nextShouldBreak, middleIndent);
|
||||
}
|
||||
//PC << "(=";
|
||||
//unsigned innerIndent = PC.pos;
|
||||
print(un->index, PC);
|
||||
//printSeparator(PC, isSimple(un->index), innerIndent);
|
||||
PC << "=";
|
||||
print(un->value, PC);
|
||||
//PC << ')';
|
||||
|
||||
nextShouldBreak = !(isa<ConstantExpr>(un->index) &&
|
||||
isa<ConstantExpr>(un->value));
|
||||
}
|
||||
|
||||
if (openedList)
|
||||
PC << ']';
|
||||
|
||||
PC << " @ " << updates.root->name;
|
||||
}
|
||||
|
||||
void printWidth(PrintContext &PC, ref<Expr> e) {
|
||||
if (!shouldPrintWidth(e))
|
||||
return;
|
||||
|
||||
if (PCWidthAsArg) {
|
||||
PC << ' ';
|
||||
if (PCPrefixWidth)
|
||||
PC << 'w';
|
||||
}
|
||||
|
||||
PC << e->getWidth();
|
||||
}
|
||||
|
||||
|
||||
bool isReadExprAtOffset(ref<Expr> e, const ReadExpr *base, ref<Expr> offset) {
|
||||
const ReadExpr *re = dyn_cast<ReadExpr>(e.get());
|
||||
|
||||
// right now, all Reads are byte reads but some
|
||||
// transformations might change this
|
||||
if (!re || (re->getWidth() != Expr::Int8))
|
||||
return false;
|
||||
|
||||
// Check if the index follows the stride.
|
||||
// FIXME: How aggressive should this be simplified. The
|
||||
// canonicalizing builder is probably the right choice, but this
|
||||
// is yet another area where we would really prefer it to be
|
||||
// global or else use static methods.
|
||||
return SubExpr::create(re->index, base->index) == offset;
|
||||
}
|
||||
|
||||
|
||||
/// hasOrderedReads: \arg e must be a ConcatExpr, \arg stride must
|
||||
/// be 1 or -1.
|
||||
///
|
||||
/// If all children of this Concat are reads or concats of reads
|
||||
/// with consecutive offsets according to the given \arg stride, it
|
||||
/// returns the base ReadExpr according to \arg stride: first Read
|
||||
/// for 1 (MSB), last Read for -1 (LSB). Otherwise, it returns
|
||||
/// null.
|
||||
const ReadExpr* hasOrderedReads(ref<Expr> e, int stride) {
|
||||
assert(e->getKind() == Expr::Concat);
|
||||
assert(stride == 1 || stride == -1);
|
||||
|
||||
const ReadExpr *base = dyn_cast<ReadExpr>(e->getKid(0));
|
||||
|
||||
// right now, all Reads are byte reads but some
|
||||
// transformations might change this
|
||||
if (!base || base->getWidth() != Expr::Int8)
|
||||
return NULL;
|
||||
|
||||
// Get stride expr in proper index width.
|
||||
Expr::Width idxWidth = base->index->getWidth();
|
||||
ref<Expr> strideExpr = ConstantExpr::alloc(stride, idxWidth);
|
||||
ref<Expr> offset = ConstantExpr::create(0, idxWidth);
|
||||
|
||||
e = e->getKid(1);
|
||||
|
||||
// concat chains are unbalanced to the right
|
||||
while (e->getKind() == Expr::Concat) {
|
||||
offset = AddExpr::create(offset, strideExpr);
|
||||
if (!isReadExprAtOffset(e->getKid(0), base, offset))
|
||||
return NULL;
|
||||
|
||||
e = e->getKid(1);
|
||||
}
|
||||
|
||||
offset = AddExpr::create(offset, strideExpr);
|
||||
if (!isReadExprAtOffset(e, base, offset))
|
||||
return NULL;
|
||||
|
||||
if (stride == -1)
|
||||
return cast<ReadExpr>(e.get());
|
||||
else return base;
|
||||
}
|
||||
|
||||
#if 0
|
||||
/// hasAllByteReads - True iff all children are byte level reads or
|
||||
/// concats of byte level reads.
|
||||
bool hasAllByteReads(const Expr *ep) {
|
||||
switch (ep->kind) {
|
||||
Expr::Read: {
|
||||
// right now, all Reads are byte reads but some
|
||||
// transformations might change this
|
||||
return ep->getWidth() == Expr::Int8;
|
||||
}
|
||||
Expr::Concat: {
|
||||
for (unsigned i=0; i<ep->getNumKids(); ++i) {
|
||||
if (!hashAllByteReads(ep->getKid(i)))
|
||||
return false;
|
||||
}
|
||||
}
|
||||
default: return false;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
void printRead(const ReadExpr *re, PrintContext &PC, unsigned indent) {
|
||||
print(re->index, PC);
|
||||
printSeparator(PC, isVerySimple(re->index), indent);
|
||||
printUpdateList(re->updates, PC);
|
||||
}
|
||||
|
||||
void printExtract(const ExtractExpr *ee, PrintContext &PC, unsigned indent) {
|
||||
PC << ee->offset << ' ';
|
||||
print(ee->expr, PC);
|
||||
}
|
||||
|
||||
void printExpr(const Expr *ep, PrintContext &PC, unsigned indent, bool printConstWidth=false) {
|
||||
bool simple = hasSimpleKids(ep);
|
||||
|
||||
print(ep->getKid(0), PC);
|
||||
for (unsigned i=1; i<ep->getNumKids(); i++) {
|
||||
printSeparator(PC, simple, indent);
|
||||
print(ep->getKid(i), PC, printConstWidth);
|
||||
}
|
||||
}
|
||||
|
||||
public:
|
||||
PPrinter(llvm::raw_ostream &_os) : os(_os), newline("\n") {
|
||||
reset();
|
||||
}
|
||||
|
||||
void setNewline(const std::string &_newline) {
|
||||
newline = _newline;
|
||||
}
|
||||
|
||||
void setForceNoLineBreaks(bool _forceNoLineBreaks) {
|
||||
forceNoLineBreaks = _forceNoLineBreaks;
|
||||
}
|
||||
|
||||
void reset() {
|
||||
counter = 0;
|
||||
updateCounter = 0;
|
||||
hasScan = false;
|
||||
forceNoLineBreaks = false;
|
||||
bindings.clear();
|
||||
updateBindings.clear();
|
||||
couldPrint.clear();
|
||||
shouldPrint.clear();
|
||||
couldPrintUpdates.clear();
|
||||
shouldPrintUpdates.clear();
|
||||
}
|
||||
|
||||
void scan(const ref<Expr> &e) {
|
||||
hasScan = true;
|
||||
scan1(e);
|
||||
}
|
||||
|
||||
void print(const ref<Expr> &e, unsigned level=0) {
|
||||
PrintContext PC(os);
|
||||
PC.pos = level;
|
||||
print(e, PC);
|
||||
}
|
||||
|
||||
void printConst(const ref<ConstantExpr> &e, PrintContext &PC,
|
||||
bool printWidth) {
|
||||
if (e->getWidth() == Expr::Bool)
|
||||
PC << (e->isTrue() ? "true" : "false");
|
||||
else {
|
||||
if (PCAllConstWidths)
|
||||
printWidth = true;
|
||||
|
||||
if (printWidth)
|
||||
PC << "(w" << e->getWidth() << " ";
|
||||
|
||||
if (e->getWidth() <= 64) {
|
||||
PC << e->getZExtValue();
|
||||
} else {
|
||||
std::string S;
|
||||
e->toString(S);
|
||||
PC << S;
|
||||
}
|
||||
|
||||
if (printWidth)
|
||||
PC << ")";
|
||||
}
|
||||
}
|
||||
|
||||
void print(const ref<Expr> &e, PrintContext &PC, bool printConstWidth=false) {
|
||||
if (ConstantExpr *CE = dyn_cast<ConstantExpr>(e))
|
||||
printConst(CE, PC, printConstWidth);
|
||||
else {
|
||||
std::map<ref<Expr>, unsigned>::iterator it = bindings.find(e);
|
||||
if (it!=bindings.end()) {
|
||||
PC << 'N' << it->second;
|
||||
} else {
|
||||
if (!hasScan || shouldPrint.count(e)) {
|
||||
PC << 'N' << counter << ':';
|
||||
bindings.insert(std::make_pair(e, counter++));
|
||||
}
|
||||
|
||||
// Detect multibyte reads.
|
||||
// FIXME: Hrm. One problem with doing this is that we are
|
||||
// masking the sharing of the indices which aren't
|
||||
// visible. Need to think if this matters... probably not
|
||||
// because if they are offset reads then its either constant,
|
||||
// or they are (base + offset) and base will get printed with
|
||||
// a declaration.
|
||||
if (PCMultibyteReads && e->getKind() == Expr::Concat) {
|
||||
const ReadExpr *base = hasOrderedReads(e, -1);
|
||||
int isLSB = (base != NULL);
|
||||
if (!isLSB)
|
||||
base = hasOrderedReads(e, 1);
|
||||
if (base) {
|
||||
PC << "(Read" << (isLSB ? "LSB" : "MSB");
|
||||
printWidth(PC, e);
|
||||
PC << ' ';
|
||||
printRead(base, PC, PC.pos);
|
||||
PC << ')';
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
PC << '(' << e->getKind();
|
||||
printWidth(PC, e);
|
||||
PC << ' ';
|
||||
|
||||
// Indent at first argument and dispatch to appropriate print
|
||||
// routine for exprs which require special handling.
|
||||
unsigned indent = PC.pos;
|
||||
if (const ReadExpr *re = dyn_cast<ReadExpr>(e)) {
|
||||
printRead(re, PC, indent);
|
||||
} else if (const ExtractExpr *ee = dyn_cast<ExtractExpr>(e)) {
|
||||
printExtract(ee, PC, indent);
|
||||
} else if (e->getKind() == Expr::Concat || e->getKind() == Expr::SExt)
|
||||
printExpr(e.get(), PC, indent, true);
|
||||
else
|
||||
printExpr(e.get(), PC, indent);
|
||||
PC << ")";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Public utility functions */
|
||||
|
||||
void printSeparator(PrintContext &PC, bool simple, unsigned indent) {
|
||||
if (simple || forceNoLineBreaks) {
|
||||
PC << ' ';
|
||||
} else {
|
||||
PC.breakLine(indent);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
ExprPPrinter *klee::ExprPPrinter::create(llvm::raw_ostream &os) {
|
||||
return new PPrinter(os);
|
||||
}
|
||||
|
||||
void ExprPPrinter::printOne(llvm::raw_ostream &os,
|
||||
const char *message,
|
||||
const ref<Expr> &e) {
|
||||
PPrinter p(os);
|
||||
p.scan(e);
|
||||
|
||||
// FIXME: Need to figure out what to do here. Probably print as a
|
||||
// "forward declaration" with whatever syntax we pick for that.
|
||||
PrintContext PC(os);
|
||||
PC << message << ": ";
|
||||
p.print(e, PC);
|
||||
PC.breakLine();
|
||||
}
|
||||
|
||||
void ExprPPrinter::printSingleExpr(llvm::raw_ostream &os, const ref<Expr> &e) {
|
||||
PPrinter p(os);
|
||||
p.scan(e);
|
||||
|
||||
// FIXME: Need to figure out what to do here. Probably print as a
|
||||
// "forward declaration" with whatever syntax we pick for that.
|
||||
PrintContext PC(os);
|
||||
p.print(e, PC);
|
||||
}
|
||||
|
||||
void ExprPPrinter::printConstraints(llvm::raw_ostream &os,
|
||||
const ConstraintManager &constraints) {
|
||||
printQuery(os, constraints, ConstantExpr::alloc(false, Expr::Bool));
|
||||
}
|
||||
|
||||
|
||||
void ExprPPrinter::printQuery(llvm::raw_ostream &os,
|
||||
const ConstraintManager &constraints,
|
||||
const ref<Expr> &q,
|
||||
const ref<Expr> *evalExprsBegin,
|
||||
const ref<Expr> *evalExprsEnd,
|
||||
const Array * const *evalArraysBegin,
|
||||
const Array * const *evalArraysEnd,
|
||||
bool printArrayDecls) {
|
||||
PPrinter p(os);
|
||||
|
||||
for (ConstraintManager::const_iterator it = constraints.begin(),
|
||||
ie = constraints.end(); it != ie; ++it)
|
||||
p.scan(*it);
|
||||
p.scan(q);
|
||||
|
||||
for (const ref<Expr> *it = evalExprsBegin; it != evalExprsEnd; ++it)
|
||||
p.scan(*it);
|
||||
|
||||
PrintContext PC(os);
|
||||
|
||||
// Print array declarations.
|
||||
if (printArrayDecls) {
|
||||
for (const Array * const* it = evalArraysBegin; it != evalArraysEnd; ++it)
|
||||
p.usedArrays.insert(*it);
|
||||
for (std::set<const Array*>::iterator it = p.usedArrays.begin(),
|
||||
ie = p.usedArrays.end(); it != ie; ++it) {
|
||||
const Array *A = *it;
|
||||
// FIXME: Print correct name, domain, and range.
|
||||
PC << "array " << A->name
|
||||
<< "[" << A->size << "]"
|
||||
<< " : " << "w32" << " -> " << "w8" << " = ";
|
||||
if (A->isSymbolicArray()) {
|
||||
PC << "symbolic";
|
||||
} else {
|
||||
PC << "[";
|
||||
for (unsigned i = 0, e = A->size; i != e; ++i) {
|
||||
if (i)
|
||||
PC << " ";
|
||||
PC << A->constantValues[i];
|
||||
}
|
||||
PC << "]";
|
||||
}
|
||||
PC.breakLine();
|
||||
}
|
||||
}
|
||||
|
||||
PC << "(query [";
|
||||
|
||||
// Ident at constraint list;
|
||||
unsigned indent = PC.pos;
|
||||
for (ConstraintManager::const_iterator it = constraints.begin(),
|
||||
ie = constraints.end(); it != ie;) {
|
||||
p.print(*it, PC);
|
||||
++it;
|
||||
if (it != ie)
|
||||
PC.breakLine(indent);
|
||||
}
|
||||
PC << ']';
|
||||
|
||||
p.printSeparator(PC, constraints.empty(), indent-1);
|
||||
p.print(q, PC);
|
||||
|
||||
// Print expressions to obtain values for, if any.
|
||||
if (evalExprsBegin != evalExprsEnd) {
|
||||
p.printSeparator(PC, q->isFalse(), indent-1);
|
||||
PC << '[';
|
||||
for (const ref<Expr> *it = evalExprsBegin; it != evalExprsEnd; ++it) {
|
||||
p.print(*it, PC, /*printConstWidth*/true);
|
||||
if (it + 1 != evalExprsEnd)
|
||||
PC.breakLine(indent);
|
||||
}
|
||||
PC << ']';
|
||||
}
|
||||
|
||||
// Print arrays to obtain values for, if any.
|
||||
if (evalArraysBegin != evalArraysEnd) {
|
||||
if (evalExprsBegin == evalExprsEnd)
|
||||
PC << " []";
|
||||
|
||||
PC.breakLine(indent - 1);
|
||||
PC << '[';
|
||||
for (const Array * const* it = evalArraysBegin; it != evalArraysEnd; ++it) {
|
||||
PC << (*it)->name;
|
||||
if (it + 1 != evalArraysEnd)
|
||||
PC.breakLine(indent);
|
||||
}
|
||||
PC << ']';
|
||||
}
|
||||
|
||||
PC << ')';
|
||||
PC.breakLine();
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,135 @@
|
||||
//===-- Updates.cpp -------------------------------------------------------===//
|
||||
//
|
||||
// The KLEE Symbolic Virtual Machine
|
||||
//
|
||||
// This file is distributed under the University of Illinois Open Source
|
||||
// License. See LICENSE.TXT for details.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include "klee/Expr.h"
|
||||
|
||||
#include <cassert>
|
||||
|
||||
using namespace klee;
|
||||
|
||||
///
|
||||
|
||||
UpdateNode::UpdateNode(const UpdateNode *_next,
|
||||
const ref<Expr> &_index,
|
||||
const ref<Expr> &_value)
|
||||
: refCount(0),
|
||||
next(_next),
|
||||
index(_index),
|
||||
value(_value) {
|
||||
// FIXME: What we need to check here instead is that _value is of the same width
|
||||
// as the range of the array that the update node is part of.
|
||||
/*
|
||||
assert(_value->getWidth() == Expr::Int8 &&
|
||||
"Update value should be 8-bit wide.");
|
||||
*/
|
||||
computeHash();
|
||||
if (next) {
|
||||
++next->refCount;
|
||||
size = 1 + next->size;
|
||||
}
|
||||
else size = 1;
|
||||
}
|
||||
|
||||
extern "C" void vc_DeleteExpr(void*);
|
||||
|
||||
UpdateNode::~UpdateNode() {
|
||||
}
|
||||
|
||||
int UpdateNode::compare(const UpdateNode &b) const {
|
||||
if (int i = index.compare(b.index))
|
||||
return i;
|
||||
return value.compare(b.value);
|
||||
}
|
||||
|
||||
unsigned UpdateNode::computeHash() {
|
||||
hashValue = index->hash() ^ value->hash();
|
||||
if (next)
|
||||
hashValue ^= next->hash();
|
||||
return hashValue;
|
||||
}
|
||||
|
||||
///
|
||||
|
||||
UpdateList::UpdateList(const Array *_root, const UpdateNode *_head)
|
||||
: root(_root),
|
||||
head(_head) {
|
||||
if (head) ++head->refCount;
|
||||
}
|
||||
|
||||
UpdateList::UpdateList(const UpdateList &b)
|
||||
: root(b.root),
|
||||
head(b.head) {
|
||||
if (head) ++head->refCount;
|
||||
}
|
||||
|
||||
UpdateList::~UpdateList() {
|
||||
// We need to be careful and avoid recursion here. We do this in
|
||||
// cooperation with the private dtor of UpdateNode which does not
|
||||
// recursively free its tail.
|
||||
while (head && --head->refCount==0) {
|
||||
const UpdateNode *n = head->next;
|
||||
delete head;
|
||||
head = n;
|
||||
}
|
||||
}
|
||||
|
||||
UpdateList &UpdateList::operator=(const UpdateList &b) {
|
||||
if (b.head) ++b.head->refCount;
|
||||
if (head && --head->refCount==0) delete head;
|
||||
root = b.root;
|
||||
head = b.head;
|
||||
return *this;
|
||||
}
|
||||
|
||||
void UpdateList::extend(const ref<Expr> &index, const ref<Expr> &value) {
|
||||
|
||||
if (root) {
|
||||
assert(root->getDomain() == index->getWidth());
|
||||
assert(root->getRange() == value->getWidth());
|
||||
}
|
||||
|
||||
if (head) --head->refCount;
|
||||
head = new UpdateNode(head, index, value);
|
||||
++head->refCount;
|
||||
}
|
||||
|
||||
int UpdateList::compare(const UpdateList &b) const {
|
||||
if (root->name != b.root->name)
|
||||
return root->name < b.root->name ? -1 : 1;
|
||||
|
||||
// Check the root itself in case we have separate objects with the
|
||||
// same name.
|
||||
if (root != b.root)
|
||||
return root < b.root ? -1 : 1;
|
||||
|
||||
if (getSize() < b.getSize()) return -1;
|
||||
else if (getSize() > b.getSize()) return 1;
|
||||
|
||||
// XXX build comparison into update, make fast
|
||||
const UpdateNode *an=head, *bn=b.head;
|
||||
for (; an && bn; an=an->next,bn=bn->next) {
|
||||
if (an==bn) { // exploit shared list structure
|
||||
return 0;
|
||||
} else {
|
||||
if (int res = an->compare(*bn))
|
||||
return res;
|
||||
}
|
||||
}
|
||||
assert(!an && !bn);
|
||||
return 0;
|
||||
}
|
||||
|
||||
unsigned UpdateList::hash() const {
|
||||
unsigned res = 0;
|
||||
for (unsigned i = 0, e = root->name.size(); i != e; ++i)
|
||||
res = (res * Expr::MAGIC_HASH_CONSTANT) + root->name[i];
|
||||
if (head)
|
||||
res ^= head->hash();
|
||||
return res;
|
||||
}
|
||||
@@ -0,0 +1,202 @@
|
||||
|
||||
Apache License
|
||||
Version 2.0, January 2004
|
||||
http://www.apache.org/licenses/
|
||||
|
||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||
|
||||
1. Definitions.
|
||||
|
||||
"License" shall mean the terms and conditions for use, reproduction,
|
||||
and distribution as defined by Sections 1 through 9 of this document.
|
||||
|
||||
"Licensor" shall mean the copyright owner or entity authorized by
|
||||
the copyright owner that is granting the License.
|
||||
|
||||
"Legal Entity" shall mean the union of the acting entity and all
|
||||
other entities that control, are controlled by, or are under common
|
||||
control with that entity. For the purposes of this definition,
|
||||
"control" means (i) the power, direct or indirect, to cause the
|
||||
direction or management of such entity, whether by contract or
|
||||
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||
|
||||
"You" (or "Your") shall mean an individual or Legal Entity
|
||||
exercising permissions granted by this License.
|
||||
|
||||
"Source" form shall mean the preferred form for making modifications,
|
||||
including but not limited to software source code, documentation
|
||||
source, and configuration files.
|
||||
|
||||
"Object" form shall mean any form resulting from mechanical
|
||||
transformation or translation of a Source form, including but
|
||||
not limited to compiled object code, generated documentation,
|
||||
and conversions to other media types.
|
||||
|
||||
"Work" shall mean the work of authorship, whether in Source or
|
||||
Object form, made available under the License, as indicated by a
|
||||
copyright notice that is included in or attached to the work
|
||||
(an example is provided in the Appendix below).
|
||||
|
||||
"Derivative Works" shall mean any work, whether in Source or Object
|
||||
form, that is based on (or derived from) the Work and for which the
|
||||
editorial revisions, annotations, elaborations, or other modifications
|
||||
represent, as a whole, an original work of authorship. For the purposes
|
||||
of this License, Derivative Works shall not include works that remain
|
||||
separable from, or merely link (or bind by name) to the interfaces of,
|
||||
the Work and Derivative Works thereof.
|
||||
|
||||
"Contribution" shall mean any work of authorship, including
|
||||
the original version of the Work and any modifications or additions
|
||||
to that Work or Derivative Works thereof, that is intentionally
|
||||
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||
or by an individual or Legal Entity authorized to submit on behalf of
|
||||
the copyright owner. For the purposes of this definition, "submitted"
|
||||
means any form of electronic, verbal, or written communication sent
|
||||
to the Licensor or its representatives, including but not limited to
|
||||
communication on electronic mailing lists, source code control systems,
|
||||
and issue tracking systems that are managed by, or on behalf of, the
|
||||
Licensor for the purpose of discussing and improving the Work, but
|
||||
excluding communication that is conspicuously marked or otherwise
|
||||
designated in writing by the copyright owner as "Not a Contribution."
|
||||
|
||||
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||
on behalf of whom a Contribution has been received by Licensor and
|
||||
subsequently incorporated within the Work.
|
||||
|
||||
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
copyright license to reproduce, prepare Derivative Works of,
|
||||
publicly display, publicly perform, sublicense, and distribute the
|
||||
Work and such Derivative Works in Source or Object form.
|
||||
|
||||
3. Grant of Patent License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
(except as stated in this section) patent license to make, have made,
|
||||
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||
where such license applies only to those patent claims licensable
|
||||
by such Contributor that are necessarily infringed by their
|
||||
Contribution(s) alone or by combination of their Contribution(s)
|
||||
with the Work to which such Contribution(s) was submitted. If You
|
||||
institute patent litigation against any entity (including a
|
||||
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||
or a Contribution incorporated within the Work constitutes direct
|
||||
or contributory patent infringement, then any patent licenses
|
||||
granted to You under this License for that Work shall terminate
|
||||
as of the date such litigation is filed.
|
||||
|
||||
4. Redistribution. You may reproduce and distribute copies of the
|
||||
Work or Derivative Works thereof in any medium, with or without
|
||||
modifications, and in Source or Object form, provided that You
|
||||
meet the following conditions:
|
||||
|
||||
(a) You must give any other recipients of the Work or
|
||||
Derivative Works a copy of this License; and
|
||||
|
||||
(b) You must cause any modified files to carry prominent notices
|
||||
stating that You changed the files; and
|
||||
|
||||
(c) You must retain, in the Source form of any Derivative Works
|
||||
that You distribute, all copyright, patent, trademark, and
|
||||
attribution notices from the Source form of the Work,
|
||||
excluding those notices that do not pertain to any part of
|
||||
the Derivative Works; and
|
||||
|
||||
(d) If the Work includes a "NOTICE" text file as part of its
|
||||
distribution, then any Derivative Works that You distribute must
|
||||
include a readable copy of the attribution notices contained
|
||||
within such NOTICE file, excluding those notices that do not
|
||||
pertain to any part of the Derivative Works, in at least one
|
||||
of the following places: within a NOTICE text file distributed
|
||||
as part of the Derivative Works; within the Source form or
|
||||
documentation, if provided along with the Derivative Works; or,
|
||||
within a display generated by the Derivative Works, if and
|
||||
wherever such third-party notices normally appear. The contents
|
||||
of the NOTICE file are for informational purposes only and
|
||||
do not modify the License. You may add Your own attribution
|
||||
notices within Derivative Works that You distribute, alongside
|
||||
or as an addendum to the NOTICE text from the Work, provided
|
||||
that such additional attribution notices cannot be construed
|
||||
as modifying the License.
|
||||
|
||||
You may add Your own copyright statement to Your modifications and
|
||||
may provide additional or different license terms and conditions
|
||||
for use, reproduction, or distribution of Your modifications, or
|
||||
for any such Derivative Works as a whole, provided Your use,
|
||||
reproduction, and distribution of the Work otherwise complies with
|
||||
the conditions stated in this License.
|
||||
|
||||
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||
any Contribution intentionally submitted for inclusion in the Work
|
||||
by You to the Licensor shall be under the terms and conditions of
|
||||
this License, without any additional terms or conditions.
|
||||
Notwithstanding the above, nothing herein shall supersede or modify
|
||||
the terms of any separate license agreement you may have executed
|
||||
with Licensor regarding such Contributions.
|
||||
|
||||
6. Trademarks. This License does not grant permission to use the trade
|
||||
names, trademarks, service marks, or product names of the Licensor,
|
||||
except as required for reasonable and customary use in describing the
|
||||
origin of the Work and reproducing the content of the NOTICE file.
|
||||
|
||||
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||
agreed to in writing, Licensor provides the Work (and each
|
||||
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||
implied, including, without limitation, any warranties or conditions
|
||||
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||
appropriateness of using or redistributing the Work and assume any
|
||||
risks associated with Your exercise of permissions under this License.
|
||||
|
||||
8. Limitation of Liability. In no event and under no legal theory,
|
||||
whether in tort (including negligence), contract, or otherwise,
|
||||
unless required by applicable law (such as deliberate and grossly
|
||||
negligent acts) or agreed to in writing, shall any Contributor be
|
||||
liable to You for damages, including any direct, indirect, special,
|
||||
incidental, or consequential damages of any character arising as a
|
||||
result of this License or out of the use or inability to use the
|
||||
Work (including but not limited to damages for loss of goodwill,
|
||||
work stoppage, computer failure or malfunction, or any and all
|
||||
other commercial damages or losses), even if such Contributor
|
||||
has been advised of the possibility of such damages.
|
||||
|
||||
9. Accepting Warranty or Additional Liability. While redistributing
|
||||
the Work or Derivative Works thereof, You may choose to offer,
|
||||
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||
or other liability obligations and/or rights consistent with this
|
||||
License. However, in accepting such obligations, You may act only
|
||||
on Your own behalf and on Your sole responsibility, not on behalf
|
||||
of any other Contributor, and only if You agree to indemnify,
|
||||
defend, and hold each Contributor harmless for any liability
|
||||
incurred by, or claims asserted against, such Contributor by reason
|
||||
of your accepting any such warranty or additional liability.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
APPENDIX: How to apply the Apache License to your work.
|
||||
|
||||
To apply the Apache License to your work, attach the following
|
||||
boilerplate notice, with the fields enclosed by brackets "[]"
|
||||
replaced with your own identifying information. (Don't include
|
||||
the brackets!) The text should be enclosed in the appropriate
|
||||
comment syntax for the file format. We also recommend that a
|
||||
file or class name and description of purpose be included on the
|
||||
same "printed page" as the copyright notice for easier
|
||||
identification within third-party archives.
|
||||
|
||||
Copyright [yyyy] [name of copyright owner]
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
@@ -0,0 +1,42 @@
|
||||
Dna.LLVMInterop Souper vendor notes
|
||||
====================================
|
||||
|
||||
This directory is a limited, checked-in vendor copy of Souper source used by
|
||||
Dna.LLVMInterop. It is intentionally not a git submodule and it is not a full
|
||||
Souper checkout.
|
||||
|
||||
Likely upstream base
|
||||
--------------------
|
||||
|
||||
The closest local upstream match found during dependency cleanup was:
|
||||
|
||||
repository: https://github.com/LLVMParty/souper
|
||||
commit: 8648d11 ("Bump to llvm 17 (#875)")
|
||||
|
||||
Earlier local notes also referenced LLVMParty/souper commit 900fb8c
|
||||
("cmake-package-v5"), but the current vendored files match the LLVM 17-era
|
||||
8648d11 tree more closely.
|
||||
|
||||
Patch strategy
|
||||
--------------
|
||||
|
||||
Keep the upstream Souper directory layout for the subset we vendor:
|
||||
|
||||
include/souper/...
|
||||
include/klee/Config/config.h
|
||||
lib/...
|
||||
|
||||
Dna-specific changes are kept directly in this tree. Do not overwrite this
|
||||
folder with a clean upstream checkout unless the Dna patches are reapplied.
|
||||
Known Dna/custom areas include:
|
||||
|
||||
* include/souper/Infer/Z3Driver.h and lib/Infer/Z3Driver.cpp
|
||||
* include/souper/Infer/Z3Expr.h and lib/Infer/Z3Expr.cpp
|
||||
* include/souper/Infer/Verification.h and lib/Infer/Verification.cpp
|
||||
* custom Z3 verification/query solving used by Dna's Souper interop APIs
|
||||
* local ExprBuilder/Candidates changes used for slicing and candidate filtering
|
||||
* Windows/LLVM 17 build adaptations
|
||||
|
||||
When refreshing Souper, diff this directory against the chosen upstream base,
|
||||
rebase the Dna-specific changes, and keep the resulting limited source set in
|
||||
this folder.
|
||||
@@ -12,5 +12,5 @@
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
#define LLVM_VERSION_MAJOR 15
|
||||
#define LLVM_VERSION_MAJOR 17
|
||||
#define LLVM_VERSION_MINOR 0
|
||||
|
||||
@@ -14,7 +14,6 @@
|
||||
|
||||
#include "souper/Codegen/Codegen.h"
|
||||
#include "souper/Inst/Inst.h"
|
||||
#include "llvm/ADT/Optional.h"
|
||||
#include "llvm/ADT/Statistic.h"
|
||||
#include "llvm/IR/Dominators.h"
|
||||
#include "llvm/IR/IRBuilder.h"
|
||||
@@ -32,6 +31,7 @@
|
||||
#include "llvm/Target/TargetMachine.h"
|
||||
#include "llvm/Target/TargetOptions.h"
|
||||
#include <map>
|
||||
#include <optional>
|
||||
|
||||
#define DEBUG_TYPE "souper"
|
||||
|
||||
@@ -104,11 +104,16 @@ void getBackendCost(InstContext &IC, souper::Inst *I, BackendCost &BC) {
|
||||
// TODO is this better than just forcing all clients of this code to
|
||||
// do the init themselves?
|
||||
if (!Init) {
|
||||
InitializeAllTargetInfos();
|
||||
InitializeAllTargets();
|
||||
InitializeAllTargetMCs();
|
||||
InitializeAllAsmParsers();
|
||||
InitializeAllAsmPrinters();
|
||||
LLVMInitializeX86TargetInfo();
|
||||
LLVMInitializeX86Target();
|
||||
LLVMInitializeX86TargetMC();
|
||||
LLVMInitializeX86AsmParser();
|
||||
LLVMInitializeX86AsmPrinter();
|
||||
LLVMInitializeAArch64TargetInfo();
|
||||
LLVMInitializeAArch64Target();
|
||||
LLVMInitializeAArch64TargetMC();
|
||||
LLVMInitializeAArch64AsmParser();
|
||||
LLVMInitializeAArch64AsmPrinter();
|
||||
Init = true;
|
||||
}
|
||||
|
||||
@@ -132,7 +137,7 @@ void getBackendCost(InstContext &IC, souper::Inst *I, BackendCost &BC) {
|
||||
|
||||
auto Features = "";
|
||||
TargetOptions Opt;
|
||||
auto RM = llvm::Optional<Reloc::Model>();
|
||||
auto RM = std::optional<Reloc::Model>();
|
||||
auto TM = Target->createTargetMachine(T.Trip, T.CPU, Features, Opt, RM);
|
||||
|
||||
Cost.C.push_back(getCodeSize(M, TM));
|
||||
|
||||
@@ -18,7 +18,6 @@
|
||||
#include "llvm/ADT/SmallString.h"
|
||||
#include "llvm/ADT/Statistic.h"
|
||||
#include "llvm/ADT/StringRef.h"
|
||||
#include "llvm/ADT/Optional.h"
|
||||
#include "llvm/Support/FileSystem.h"
|
||||
#include "llvm/Support/MemoryBuffer.h"
|
||||
#include "llvm/Support/Program.h"
|
||||
@@ -28,6 +27,7 @@
|
||||
#include <stdio.h>
|
||||
#include <sys/stat.h>
|
||||
#include <sys/types.h>
|
||||
#include <optional>
|
||||
#include <system_error>
|
||||
|
||||
using namespace llvm;
|
||||
@@ -311,7 +311,7 @@ SolverProgram souper::makeExternalSolverProgram(StringRef Path) {
|
||||
std::vector<StringRef> ArgPtrs;
|
||||
ArgPtrs.push_back(PathStr);
|
||||
ArgPtrs.insert(ArgPtrs.end(), Args.begin(), Args.end());
|
||||
Optional<StringRef> Redirects[] = {RedirectIn, RedirectOut, RedirectErr};
|
||||
std::optional<StringRef> Redirects[] = {RedirectIn, RedirectOut, RedirectErr};
|
||||
return sys::ExecuteAndWait(PathStr, ArgPtrs, std::nullopt, Redirects, Timeout);
|
||||
};
|
||||
}
|
||||
|
||||
@@ -1,504 +1,134 @@
|
||||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio Version 17
|
||||
VisualStudioVersion = 17.1.32228.430
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Dna", "Dna\Dna.csproj", "{27764F9E-FD92-4C25-8A67-C76389BF0837}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Dna.ControlFlow", "Dna.ControlFlow\Dna.ControlFlow.csproj", "{0A69F908-3D88-4D0E-9F19-C35C14685CD8}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TritonTranslator", "TritonTranslator\TritonTranslator\TritonTranslator.csproj", "{F2084D58-2087-4CB8-86CC-1112E98B7FF5}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Dna.Example", "Dna.Example\Dna.Example.csproj", "{C440355F-89E8-4D12-A6FF-48F377A3FEF3}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Dna.Synthesis", "Dna.Synthesis\Dna.Synthesis.csproj", "{609DED32-46DB-42F3-99D8-AE73A64FD92E}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Dna.DataStructures", "Dna.DataStructures\Dna.DataStructures.csproj", "{9007DD90-82F1-4950-8009-EF413D44917B}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Unicorn.Net", "unicorn-net\src\Unicorn.Net\Unicorn.Net.csproj", "{47D397E7-098D-4058-9B19-DC01124ED897}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{09C09202-899C-4F09-9884-93AAAD5CF6A5}"
|
||||
ProjectSection(SolutionItems) = preProject
|
||||
.editorconfig = .editorconfig
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Dna.LLVMInterop", "Dna.LLVMInterop\Dna.LLVMInterop.vcxproj", "{E6A58095-9B8B-4830-BFEA-2947C4F2681A}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TritonTranslator.Examples", "TritonTranslator\TritonTranslator.Examples\TritonTranslator.Examples.csproj", "{48698C75-4175-417F-B240-867BF49AD07D}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SemanticExtractor", "TritonTranslator\SemanticExtractor\SemanticExtractor.csproj", "{44DF442D-CD3D-4BC8-86F8-01DE3290CA38}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Dna.GraphViewer", "Dna.GraphViewer", "{04AE44E7-347A-4EFB-ADBD-E446CDEA6E03}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Dna.BinaryTranslator", "Dna.BinaryTranslator\Dna.BinaryTranslator.csproj", "{BE5BAE75-AECF-453B-AE6C-FFF87923E665}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RuntimePatches", "RuntimePatches\RuntimePatches.csproj", "{F2F3F076-8818-42BD-82C8-02683D88DDC4}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LLVMSharp", "LLVMSharp\sources\LLVMSharp\LLVMSharp.csproj", "{E18759AD-2ACD-4801-A05F-7545A62014EA}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LLVMSharp.Interop", "LLVMSharp\sources\LLVMSharp.Interop\LLVMSharp.Interop.csproj", "{D053CF35-18E8-419E-B7A3-ADD1A9711A57}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Espresso", "Simplifier\MSiMBA\Espresso\Espresso.vcxproj", "{C66D6CA2-8FA5-4512-8F14-2311A3BD7E1B}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Mba.FFI", "Simplifier\MSiMBA\Mba.FFI\Mba.FFI.vcxproj", "{FE5E55D5-A764-4CD9-B8A8-EAC3B2149C55}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Mba.Common", "Simplifier\MSiMBA\Mba.Common\Mba.Common.csproj", "{8A615E01-944F-422A-9DDE-ACF968438571}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Mba.Simplifier", "Simplifier\Mba.Simplifier\Mba.Simplifier.csproj", "{3CE05F47-763D-4894-81FD-CDABE33CB744}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
Debug|x64 = Debug|x64
|
||||
Debug|x86 = Debug|x86
|
||||
MinSizeRel|Any CPU = MinSizeRel|Any CPU
|
||||
MinSizeRel|x64 = MinSizeRel|x64
|
||||
MinSizeRel|x86 = MinSizeRel|x86
|
||||
Release|Any CPU = Release|Any CPU
|
||||
Release|x64 = Release|x64
|
||||
Release|x86 = Release|x86
|
||||
RelWithDebInfo|Any CPU = RelWithDebInfo|Any CPU
|
||||
RelWithDebInfo|x64 = RelWithDebInfo|x64
|
||||
RelWithDebInfo|x86 = RelWithDebInfo|x86
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{27764F9E-FD92-4C25-8A67-C76389BF0837}.Debug|Any CPU.ActiveCfg = Release|x64
|
||||
{27764F9E-FD92-4C25-8A67-C76389BF0837}.Debug|Any CPU.Build.0 = Release|x64
|
||||
{27764F9E-FD92-4C25-8A67-C76389BF0837}.Debug|x64.ActiveCfg = Release|x64
|
||||
{27764F9E-FD92-4C25-8A67-C76389BF0837}.Debug|x64.Build.0 = Release|x64
|
||||
{27764F9E-FD92-4C25-8A67-C76389BF0837}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{27764F9E-FD92-4C25-8A67-C76389BF0837}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{27764F9E-FD92-4C25-8A67-C76389BF0837}.MinSizeRel|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{27764F9E-FD92-4C25-8A67-C76389BF0837}.MinSizeRel|Any CPU.Build.0 = Release|Any CPU
|
||||
{27764F9E-FD92-4C25-8A67-C76389BF0837}.MinSizeRel|x64.ActiveCfg = Release|x64
|
||||
{27764F9E-FD92-4C25-8A67-C76389BF0837}.MinSizeRel|x64.Build.0 = Release|x64
|
||||
{27764F9E-FD92-4C25-8A67-C76389BF0837}.MinSizeRel|x86.ActiveCfg = Release|Any CPU
|
||||
{27764F9E-FD92-4C25-8A67-C76389BF0837}.MinSizeRel|x86.Build.0 = Release|Any CPU
|
||||
{27764F9E-FD92-4C25-8A67-C76389BF0837}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{27764F9E-FD92-4C25-8A67-C76389BF0837}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{27764F9E-FD92-4C25-8A67-C76389BF0837}.Release|x64.ActiveCfg = Debug|x64
|
||||
{27764F9E-FD92-4C25-8A67-C76389BF0837}.Release|x64.Build.0 = Debug|x64
|
||||
{27764F9E-FD92-4C25-8A67-C76389BF0837}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{27764F9E-FD92-4C25-8A67-C76389BF0837}.Release|x86.Build.0 = Release|Any CPU
|
||||
{27764F9E-FD92-4C25-8A67-C76389BF0837}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{27764F9E-FD92-4C25-8A67-C76389BF0837}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU
|
||||
{27764F9E-FD92-4C25-8A67-C76389BF0837}.RelWithDebInfo|x64.ActiveCfg = Debug|x64
|
||||
{27764F9E-FD92-4C25-8A67-C76389BF0837}.RelWithDebInfo|x64.Build.0 = Debug|x64
|
||||
{27764F9E-FD92-4C25-8A67-C76389BF0837}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU
|
||||
{27764F9E-FD92-4C25-8A67-C76389BF0837}.RelWithDebInfo|x86.Build.0 = Release|Any CPU
|
||||
{0A69F908-3D88-4D0E-9F19-C35C14685CD8}.Debug|Any CPU.ActiveCfg = Debug|x64
|
||||
{0A69F908-3D88-4D0E-9F19-C35C14685CD8}.Debug|Any CPU.Build.0 = Debug|x64
|
||||
{0A69F908-3D88-4D0E-9F19-C35C14685CD8}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{0A69F908-3D88-4D0E-9F19-C35C14685CD8}.Debug|x64.Build.0 = Debug|x64
|
||||
{0A69F908-3D88-4D0E-9F19-C35C14685CD8}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{0A69F908-3D88-4D0E-9F19-C35C14685CD8}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{0A69F908-3D88-4D0E-9F19-C35C14685CD8}.MinSizeRel|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{0A69F908-3D88-4D0E-9F19-C35C14685CD8}.MinSizeRel|Any CPU.Build.0 = Release|Any CPU
|
||||
{0A69F908-3D88-4D0E-9F19-C35C14685CD8}.MinSizeRel|x64.ActiveCfg = Release|x64
|
||||
{0A69F908-3D88-4D0E-9F19-C35C14685CD8}.MinSizeRel|x64.Build.0 = Release|x64
|
||||
{0A69F908-3D88-4D0E-9F19-C35C14685CD8}.MinSizeRel|x86.ActiveCfg = Release|Any CPU
|
||||
{0A69F908-3D88-4D0E-9F19-C35C14685CD8}.MinSizeRel|x86.Build.0 = Release|Any CPU
|
||||
{0A69F908-3D88-4D0E-9F19-C35C14685CD8}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{0A69F908-3D88-4D0E-9F19-C35C14685CD8}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{0A69F908-3D88-4D0E-9F19-C35C14685CD8}.Release|x64.ActiveCfg = Release|x64
|
||||
{0A69F908-3D88-4D0E-9F19-C35C14685CD8}.Release|x64.Build.0 = Release|x64
|
||||
{0A69F908-3D88-4D0E-9F19-C35C14685CD8}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{0A69F908-3D88-4D0E-9F19-C35C14685CD8}.Release|x86.Build.0 = Release|Any CPU
|
||||
{0A69F908-3D88-4D0E-9F19-C35C14685CD8}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{0A69F908-3D88-4D0E-9F19-C35C14685CD8}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU
|
||||
{0A69F908-3D88-4D0E-9F19-C35C14685CD8}.RelWithDebInfo|x64.ActiveCfg = Debug|x64
|
||||
{0A69F908-3D88-4D0E-9F19-C35C14685CD8}.RelWithDebInfo|x64.Build.0 = Debug|x64
|
||||
{0A69F908-3D88-4D0E-9F19-C35C14685CD8}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU
|
||||
{0A69F908-3D88-4D0E-9F19-C35C14685CD8}.RelWithDebInfo|x86.Build.0 = Release|Any CPU
|
||||
{F2084D58-2087-4CB8-86CC-1112E98B7FF5}.Debug|Any CPU.ActiveCfg = Debug|x64
|
||||
{F2084D58-2087-4CB8-86CC-1112E98B7FF5}.Debug|Any CPU.Build.0 = Debug|x64
|
||||
{F2084D58-2087-4CB8-86CC-1112E98B7FF5}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{F2084D58-2087-4CB8-86CC-1112E98B7FF5}.Debug|x64.Build.0 = Debug|x64
|
||||
{F2084D58-2087-4CB8-86CC-1112E98B7FF5}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{F2084D58-2087-4CB8-86CC-1112E98B7FF5}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{F2084D58-2087-4CB8-86CC-1112E98B7FF5}.MinSizeRel|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{F2084D58-2087-4CB8-86CC-1112E98B7FF5}.MinSizeRel|Any CPU.Build.0 = Release|Any CPU
|
||||
{F2084D58-2087-4CB8-86CC-1112E98B7FF5}.MinSizeRel|x64.ActiveCfg = Release|x64
|
||||
{F2084D58-2087-4CB8-86CC-1112E98B7FF5}.MinSizeRel|x64.Build.0 = Release|x64
|
||||
{F2084D58-2087-4CB8-86CC-1112E98B7FF5}.MinSizeRel|x86.ActiveCfg = Release|Any CPU
|
||||
{F2084D58-2087-4CB8-86CC-1112E98B7FF5}.MinSizeRel|x86.Build.0 = Release|Any CPU
|
||||
{F2084D58-2087-4CB8-86CC-1112E98B7FF5}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{F2084D58-2087-4CB8-86CC-1112E98B7FF5}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{F2084D58-2087-4CB8-86CC-1112E98B7FF5}.Release|x64.ActiveCfg = Release|x64
|
||||
{F2084D58-2087-4CB8-86CC-1112E98B7FF5}.Release|x64.Build.0 = Release|x64
|
||||
{F2084D58-2087-4CB8-86CC-1112E98B7FF5}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{F2084D58-2087-4CB8-86CC-1112E98B7FF5}.Release|x86.Build.0 = Release|Any CPU
|
||||
{F2084D58-2087-4CB8-86CC-1112E98B7FF5}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{F2084D58-2087-4CB8-86CC-1112E98B7FF5}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU
|
||||
{F2084D58-2087-4CB8-86CC-1112E98B7FF5}.RelWithDebInfo|x64.ActiveCfg = Debug|x64
|
||||
{F2084D58-2087-4CB8-86CC-1112E98B7FF5}.RelWithDebInfo|x64.Build.0 = Debug|x64
|
||||
{F2084D58-2087-4CB8-86CC-1112E98B7FF5}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU
|
||||
{F2084D58-2087-4CB8-86CC-1112E98B7FF5}.RelWithDebInfo|x86.Build.0 = Release|Any CPU
|
||||
{C440355F-89E8-4D12-A6FF-48F377A3FEF3}.Debug|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{C440355F-89E8-4D12-A6FF-48F377A3FEF3}.Debug|Any CPU.Build.0 = Release|Any CPU
|
||||
{C440355F-89E8-4D12-A6FF-48F377A3FEF3}.Debug|x64.ActiveCfg = Release|x64
|
||||
{C440355F-89E8-4D12-A6FF-48F377A3FEF3}.Debug|x64.Build.0 = Release|x64
|
||||
{C440355F-89E8-4D12-A6FF-48F377A3FEF3}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{C440355F-89E8-4D12-A6FF-48F377A3FEF3}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{C440355F-89E8-4D12-A6FF-48F377A3FEF3}.MinSizeRel|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{C440355F-89E8-4D12-A6FF-48F377A3FEF3}.MinSizeRel|Any CPU.Build.0 = Release|Any CPU
|
||||
{C440355F-89E8-4D12-A6FF-48F377A3FEF3}.MinSizeRel|x64.ActiveCfg = Release|x64
|
||||
{C440355F-89E8-4D12-A6FF-48F377A3FEF3}.MinSizeRel|x64.Build.0 = Release|x64
|
||||
{C440355F-89E8-4D12-A6FF-48F377A3FEF3}.MinSizeRel|x86.ActiveCfg = Release|Any CPU
|
||||
{C440355F-89E8-4D12-A6FF-48F377A3FEF3}.MinSizeRel|x86.Build.0 = Release|Any CPU
|
||||
{C440355F-89E8-4D12-A6FF-48F377A3FEF3}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{C440355F-89E8-4D12-A6FF-48F377A3FEF3}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{C440355F-89E8-4D12-A6FF-48F377A3FEF3}.Release|x64.ActiveCfg = Debug|x64
|
||||
{C440355F-89E8-4D12-A6FF-48F377A3FEF3}.Release|x64.Build.0 = Debug|x64
|
||||
{C440355F-89E8-4D12-A6FF-48F377A3FEF3}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{C440355F-89E8-4D12-A6FF-48F377A3FEF3}.Release|x86.Build.0 = Release|Any CPU
|
||||
{C440355F-89E8-4D12-A6FF-48F377A3FEF3}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{C440355F-89E8-4D12-A6FF-48F377A3FEF3}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU
|
||||
{C440355F-89E8-4D12-A6FF-48F377A3FEF3}.RelWithDebInfo|x64.ActiveCfg = Debug|x64
|
||||
{C440355F-89E8-4D12-A6FF-48F377A3FEF3}.RelWithDebInfo|x64.Build.0 = Debug|x64
|
||||
{C440355F-89E8-4D12-A6FF-48F377A3FEF3}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU
|
||||
{C440355F-89E8-4D12-A6FF-48F377A3FEF3}.RelWithDebInfo|x86.Build.0 = Release|Any CPU
|
||||
{609DED32-46DB-42F3-99D8-AE73A64FD92E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{609DED32-46DB-42F3-99D8-AE73A64FD92E}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{609DED32-46DB-42F3-99D8-AE73A64FD92E}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{609DED32-46DB-42F3-99D8-AE73A64FD92E}.Debug|x64.Build.0 = Debug|x64
|
||||
{609DED32-46DB-42F3-99D8-AE73A64FD92E}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{609DED32-46DB-42F3-99D8-AE73A64FD92E}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{609DED32-46DB-42F3-99D8-AE73A64FD92E}.MinSizeRel|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{609DED32-46DB-42F3-99D8-AE73A64FD92E}.MinSizeRel|Any CPU.Build.0 = Debug|Any CPU
|
||||
{609DED32-46DB-42F3-99D8-AE73A64FD92E}.MinSizeRel|x64.ActiveCfg = Debug|Any CPU
|
||||
{609DED32-46DB-42F3-99D8-AE73A64FD92E}.MinSizeRel|x64.Build.0 = Debug|Any CPU
|
||||
{609DED32-46DB-42F3-99D8-AE73A64FD92E}.MinSizeRel|x86.ActiveCfg = Debug|Any CPU
|
||||
{609DED32-46DB-42F3-99D8-AE73A64FD92E}.MinSizeRel|x86.Build.0 = Debug|Any CPU
|
||||
{609DED32-46DB-42F3-99D8-AE73A64FD92E}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{609DED32-46DB-42F3-99D8-AE73A64FD92E}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{609DED32-46DB-42F3-99D8-AE73A64FD92E}.Release|x64.ActiveCfg = Release|x64
|
||||
{609DED32-46DB-42F3-99D8-AE73A64FD92E}.Release|x64.Build.0 = Release|x64
|
||||
{609DED32-46DB-42F3-99D8-AE73A64FD92E}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{609DED32-46DB-42F3-99D8-AE73A64FD92E}.Release|x86.Build.0 = Release|Any CPU
|
||||
{609DED32-46DB-42F3-99D8-AE73A64FD92E}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{609DED32-46DB-42F3-99D8-AE73A64FD92E}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU
|
||||
{609DED32-46DB-42F3-99D8-AE73A64FD92E}.RelWithDebInfo|x64.ActiveCfg = Debug|Any CPU
|
||||
{609DED32-46DB-42F3-99D8-AE73A64FD92E}.RelWithDebInfo|x64.Build.0 = Debug|Any CPU
|
||||
{609DED32-46DB-42F3-99D8-AE73A64FD92E}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU
|
||||
{609DED32-46DB-42F3-99D8-AE73A64FD92E}.RelWithDebInfo|x86.Build.0 = Release|Any CPU
|
||||
{9007DD90-82F1-4950-8009-EF413D44917B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{9007DD90-82F1-4950-8009-EF413D44917B}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{9007DD90-82F1-4950-8009-EF413D44917B}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{9007DD90-82F1-4950-8009-EF413D44917B}.Debug|x64.Build.0 = Debug|x64
|
||||
{9007DD90-82F1-4950-8009-EF413D44917B}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{9007DD90-82F1-4950-8009-EF413D44917B}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{9007DD90-82F1-4950-8009-EF413D44917B}.MinSizeRel|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{9007DD90-82F1-4950-8009-EF413D44917B}.MinSizeRel|Any CPU.Build.0 = Debug|Any CPU
|
||||
{9007DD90-82F1-4950-8009-EF413D44917B}.MinSizeRel|x64.ActiveCfg = Debug|Any CPU
|
||||
{9007DD90-82F1-4950-8009-EF413D44917B}.MinSizeRel|x64.Build.0 = Debug|Any CPU
|
||||
{9007DD90-82F1-4950-8009-EF413D44917B}.MinSizeRel|x86.ActiveCfg = Debug|Any CPU
|
||||
{9007DD90-82F1-4950-8009-EF413D44917B}.MinSizeRel|x86.Build.0 = Debug|Any CPU
|
||||
{9007DD90-82F1-4950-8009-EF413D44917B}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{9007DD90-82F1-4950-8009-EF413D44917B}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{9007DD90-82F1-4950-8009-EF413D44917B}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{9007DD90-82F1-4950-8009-EF413D44917B}.Release|x64.Build.0 = Release|Any CPU
|
||||
{9007DD90-82F1-4950-8009-EF413D44917B}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{9007DD90-82F1-4950-8009-EF413D44917B}.Release|x86.Build.0 = Release|Any CPU
|
||||
{9007DD90-82F1-4950-8009-EF413D44917B}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{9007DD90-82F1-4950-8009-EF413D44917B}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU
|
||||
{9007DD90-82F1-4950-8009-EF413D44917B}.RelWithDebInfo|x64.ActiveCfg = Debug|Any CPU
|
||||
{9007DD90-82F1-4950-8009-EF413D44917B}.RelWithDebInfo|x64.Build.0 = Debug|Any CPU
|
||||
{9007DD90-82F1-4950-8009-EF413D44917B}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU
|
||||
{9007DD90-82F1-4950-8009-EF413D44917B}.RelWithDebInfo|x86.Build.0 = Release|Any CPU
|
||||
{47D397E7-098D-4058-9B19-DC01124ED897}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{47D397E7-098D-4058-9B19-DC01124ED897}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{47D397E7-098D-4058-9B19-DC01124ED897}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{47D397E7-098D-4058-9B19-DC01124ED897}.Debug|x64.Build.0 = Debug|x64
|
||||
{47D397E7-098D-4058-9B19-DC01124ED897}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{47D397E7-098D-4058-9B19-DC01124ED897}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{47D397E7-098D-4058-9B19-DC01124ED897}.MinSizeRel|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{47D397E7-098D-4058-9B19-DC01124ED897}.MinSizeRel|Any CPU.Build.0 = Debug|Any CPU
|
||||
{47D397E7-098D-4058-9B19-DC01124ED897}.MinSizeRel|x64.ActiveCfg = Debug|Any CPU
|
||||
{47D397E7-098D-4058-9B19-DC01124ED897}.MinSizeRel|x64.Build.0 = Debug|Any CPU
|
||||
{47D397E7-098D-4058-9B19-DC01124ED897}.MinSizeRel|x86.ActiveCfg = Debug|Any CPU
|
||||
{47D397E7-098D-4058-9B19-DC01124ED897}.MinSizeRel|x86.Build.0 = Debug|Any CPU
|
||||
{47D397E7-098D-4058-9B19-DC01124ED897}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{47D397E7-098D-4058-9B19-DC01124ED897}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{47D397E7-098D-4058-9B19-DC01124ED897}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{47D397E7-098D-4058-9B19-DC01124ED897}.Release|x64.Build.0 = Release|Any CPU
|
||||
{47D397E7-098D-4058-9B19-DC01124ED897}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{47D397E7-098D-4058-9B19-DC01124ED897}.Release|x86.Build.0 = Release|Any CPU
|
||||
{47D397E7-098D-4058-9B19-DC01124ED897}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{47D397E7-098D-4058-9B19-DC01124ED897}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU
|
||||
{47D397E7-098D-4058-9B19-DC01124ED897}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU
|
||||
{47D397E7-098D-4058-9B19-DC01124ED897}.RelWithDebInfo|x64.Build.0 = Release|Any CPU
|
||||
{47D397E7-098D-4058-9B19-DC01124ED897}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU
|
||||
{47D397E7-098D-4058-9B19-DC01124ED897}.RelWithDebInfo|x86.Build.0 = Release|Any CPU
|
||||
{E6A58095-9B8B-4830-BFEA-2947C4F2681A}.Debug|Any CPU.ActiveCfg = Release|x64
|
||||
{E6A58095-9B8B-4830-BFEA-2947C4F2681A}.Debug|Any CPU.Build.0 = Release|x64
|
||||
{E6A58095-9B8B-4830-BFEA-2947C4F2681A}.Debug|x64.ActiveCfg = Release|x64
|
||||
{E6A58095-9B8B-4830-BFEA-2947C4F2681A}.Debug|x64.Build.0 = Release|x64
|
||||
{E6A58095-9B8B-4830-BFEA-2947C4F2681A}.Debug|x86.ActiveCfg = Debug|Win32
|
||||
{E6A58095-9B8B-4830-BFEA-2947C4F2681A}.Debug|x86.Build.0 = Debug|Win32
|
||||
{E6A58095-9B8B-4830-BFEA-2947C4F2681A}.MinSizeRel|Any CPU.ActiveCfg = Debug|x64
|
||||
{E6A58095-9B8B-4830-BFEA-2947C4F2681A}.MinSizeRel|Any CPU.Build.0 = Debug|x64
|
||||
{E6A58095-9B8B-4830-BFEA-2947C4F2681A}.MinSizeRel|x64.ActiveCfg = Debug|x64
|
||||
{E6A58095-9B8B-4830-BFEA-2947C4F2681A}.MinSizeRel|x64.Build.0 = Debug|x64
|
||||
{E6A58095-9B8B-4830-BFEA-2947C4F2681A}.MinSizeRel|x86.ActiveCfg = Debug|Win32
|
||||
{E6A58095-9B8B-4830-BFEA-2947C4F2681A}.MinSizeRel|x86.Build.0 = Debug|Win32
|
||||
{E6A58095-9B8B-4830-BFEA-2947C4F2681A}.Release|Any CPU.ActiveCfg = Release|x64
|
||||
{E6A58095-9B8B-4830-BFEA-2947C4F2681A}.Release|Any CPU.Build.0 = Release|x64
|
||||
{E6A58095-9B8B-4830-BFEA-2947C4F2681A}.Release|x64.ActiveCfg = Release|x64
|
||||
{E6A58095-9B8B-4830-BFEA-2947C4F2681A}.Release|x64.Build.0 = Release|x64
|
||||
{E6A58095-9B8B-4830-BFEA-2947C4F2681A}.Release|x86.ActiveCfg = Release|Win32
|
||||
{E6A58095-9B8B-4830-BFEA-2947C4F2681A}.Release|x86.Build.0 = Release|Win32
|
||||
{E6A58095-9B8B-4830-BFEA-2947C4F2681A}.RelWithDebInfo|Any CPU.ActiveCfg = Release|x64
|
||||
{E6A58095-9B8B-4830-BFEA-2947C4F2681A}.RelWithDebInfo|Any CPU.Build.0 = Release|x64
|
||||
{E6A58095-9B8B-4830-BFEA-2947C4F2681A}.RelWithDebInfo|x64.ActiveCfg = Release|x64
|
||||
{E6A58095-9B8B-4830-BFEA-2947C4F2681A}.RelWithDebInfo|x64.Build.0 = Release|x64
|
||||
{E6A58095-9B8B-4830-BFEA-2947C4F2681A}.RelWithDebInfo|x86.ActiveCfg = Release|Win32
|
||||
{E6A58095-9B8B-4830-BFEA-2947C4F2681A}.RelWithDebInfo|x86.Build.0 = Release|Win32
|
||||
{48698C75-4175-417F-B240-867BF49AD07D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{48698C75-4175-417F-B240-867BF49AD07D}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{48698C75-4175-417F-B240-867BF49AD07D}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{48698C75-4175-417F-B240-867BF49AD07D}.Debug|x64.Build.0 = Debug|x64
|
||||
{48698C75-4175-417F-B240-867BF49AD07D}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{48698C75-4175-417F-B240-867BF49AD07D}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{48698C75-4175-417F-B240-867BF49AD07D}.MinSizeRel|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{48698C75-4175-417F-B240-867BF49AD07D}.MinSizeRel|Any CPU.Build.0 = Debug|Any CPU
|
||||
{48698C75-4175-417F-B240-867BF49AD07D}.MinSizeRel|x64.ActiveCfg = Debug|Any CPU
|
||||
{48698C75-4175-417F-B240-867BF49AD07D}.MinSizeRel|x64.Build.0 = Debug|Any CPU
|
||||
{48698C75-4175-417F-B240-867BF49AD07D}.MinSizeRel|x86.ActiveCfg = Debug|Any CPU
|
||||
{48698C75-4175-417F-B240-867BF49AD07D}.MinSizeRel|x86.Build.0 = Debug|Any CPU
|
||||
{48698C75-4175-417F-B240-867BF49AD07D}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{48698C75-4175-417F-B240-867BF49AD07D}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{48698C75-4175-417F-B240-867BF49AD07D}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{48698C75-4175-417F-B240-867BF49AD07D}.Release|x64.Build.0 = Release|Any CPU
|
||||
{48698C75-4175-417F-B240-867BF49AD07D}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{48698C75-4175-417F-B240-867BF49AD07D}.Release|x86.Build.0 = Release|Any CPU
|
||||
{48698C75-4175-417F-B240-867BF49AD07D}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{48698C75-4175-417F-B240-867BF49AD07D}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU
|
||||
{48698C75-4175-417F-B240-867BF49AD07D}.RelWithDebInfo|x64.ActiveCfg = Debug|Any CPU
|
||||
{48698C75-4175-417F-B240-867BF49AD07D}.RelWithDebInfo|x64.Build.0 = Debug|Any CPU
|
||||
{48698C75-4175-417F-B240-867BF49AD07D}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU
|
||||
{48698C75-4175-417F-B240-867BF49AD07D}.RelWithDebInfo|x86.Build.0 = Release|Any CPU
|
||||
{44DF442D-CD3D-4BC8-86F8-01DE3290CA38}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{44DF442D-CD3D-4BC8-86F8-01DE3290CA38}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{44DF442D-CD3D-4BC8-86F8-01DE3290CA38}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{44DF442D-CD3D-4BC8-86F8-01DE3290CA38}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{44DF442D-CD3D-4BC8-86F8-01DE3290CA38}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{44DF442D-CD3D-4BC8-86F8-01DE3290CA38}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{44DF442D-CD3D-4BC8-86F8-01DE3290CA38}.MinSizeRel|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{44DF442D-CD3D-4BC8-86F8-01DE3290CA38}.MinSizeRel|Any CPU.Build.0 = Debug|Any CPU
|
||||
{44DF442D-CD3D-4BC8-86F8-01DE3290CA38}.MinSizeRel|x64.ActiveCfg = Debug|Any CPU
|
||||
{44DF442D-CD3D-4BC8-86F8-01DE3290CA38}.MinSizeRel|x64.Build.0 = Debug|Any CPU
|
||||
{44DF442D-CD3D-4BC8-86F8-01DE3290CA38}.MinSizeRel|x86.ActiveCfg = Debug|Any CPU
|
||||
{44DF442D-CD3D-4BC8-86F8-01DE3290CA38}.MinSizeRel|x86.Build.0 = Debug|Any CPU
|
||||
{44DF442D-CD3D-4BC8-86F8-01DE3290CA38}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{44DF442D-CD3D-4BC8-86F8-01DE3290CA38}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{44DF442D-CD3D-4BC8-86F8-01DE3290CA38}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{44DF442D-CD3D-4BC8-86F8-01DE3290CA38}.Release|x64.Build.0 = Release|Any CPU
|
||||
{44DF442D-CD3D-4BC8-86F8-01DE3290CA38}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{44DF442D-CD3D-4BC8-86F8-01DE3290CA38}.Release|x86.Build.0 = Release|Any CPU
|
||||
{44DF442D-CD3D-4BC8-86F8-01DE3290CA38}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{44DF442D-CD3D-4BC8-86F8-01DE3290CA38}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU
|
||||
{44DF442D-CD3D-4BC8-86F8-01DE3290CA38}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU
|
||||
{44DF442D-CD3D-4BC8-86F8-01DE3290CA38}.RelWithDebInfo|x64.Build.0 = Release|Any CPU
|
||||
{44DF442D-CD3D-4BC8-86F8-01DE3290CA38}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU
|
||||
{44DF442D-CD3D-4BC8-86F8-01DE3290CA38}.RelWithDebInfo|x86.Build.0 = Release|Any CPU
|
||||
{BE5BAE75-AECF-453B-AE6C-FFF87923E665}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{BE5BAE75-AECF-453B-AE6C-FFF87923E665}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{BE5BAE75-AECF-453B-AE6C-FFF87923E665}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{BE5BAE75-AECF-453B-AE6C-FFF87923E665}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{BE5BAE75-AECF-453B-AE6C-FFF87923E665}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{BE5BAE75-AECF-453B-AE6C-FFF87923E665}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{BE5BAE75-AECF-453B-AE6C-FFF87923E665}.MinSizeRel|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{BE5BAE75-AECF-453B-AE6C-FFF87923E665}.MinSizeRel|Any CPU.Build.0 = Debug|Any CPU
|
||||
{BE5BAE75-AECF-453B-AE6C-FFF87923E665}.MinSizeRel|x64.ActiveCfg = Debug|Any CPU
|
||||
{BE5BAE75-AECF-453B-AE6C-FFF87923E665}.MinSizeRel|x64.Build.0 = Debug|Any CPU
|
||||
{BE5BAE75-AECF-453B-AE6C-FFF87923E665}.MinSizeRel|x86.ActiveCfg = Debug|Any CPU
|
||||
{BE5BAE75-AECF-453B-AE6C-FFF87923E665}.MinSizeRel|x86.Build.0 = Debug|Any CPU
|
||||
{BE5BAE75-AECF-453B-AE6C-FFF87923E665}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{BE5BAE75-AECF-453B-AE6C-FFF87923E665}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{BE5BAE75-AECF-453B-AE6C-FFF87923E665}.Release|x64.ActiveCfg = Debug|x64
|
||||
{BE5BAE75-AECF-453B-AE6C-FFF87923E665}.Release|x64.Build.0 = Debug|x64
|
||||
{BE5BAE75-AECF-453B-AE6C-FFF87923E665}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{BE5BAE75-AECF-453B-AE6C-FFF87923E665}.Release|x86.Build.0 = Release|Any CPU
|
||||
{BE5BAE75-AECF-453B-AE6C-FFF87923E665}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{BE5BAE75-AECF-453B-AE6C-FFF87923E665}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU
|
||||
{BE5BAE75-AECF-453B-AE6C-FFF87923E665}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU
|
||||
{BE5BAE75-AECF-453B-AE6C-FFF87923E665}.RelWithDebInfo|x64.Build.0 = Release|Any CPU
|
||||
{BE5BAE75-AECF-453B-AE6C-FFF87923E665}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU
|
||||
{BE5BAE75-AECF-453B-AE6C-FFF87923E665}.RelWithDebInfo|x86.Build.0 = Release|Any CPU
|
||||
{F2F3F076-8818-42BD-82C8-02683D88DDC4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{F2F3F076-8818-42BD-82C8-02683D88DDC4}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{F2F3F076-8818-42BD-82C8-02683D88DDC4}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{F2F3F076-8818-42BD-82C8-02683D88DDC4}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{F2F3F076-8818-42BD-82C8-02683D88DDC4}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{F2F3F076-8818-42BD-82C8-02683D88DDC4}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{F2F3F076-8818-42BD-82C8-02683D88DDC4}.MinSizeRel|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{F2F3F076-8818-42BD-82C8-02683D88DDC4}.MinSizeRel|Any CPU.Build.0 = Debug|Any CPU
|
||||
{F2F3F076-8818-42BD-82C8-02683D88DDC4}.MinSizeRel|x64.ActiveCfg = Debug|Any CPU
|
||||
{F2F3F076-8818-42BD-82C8-02683D88DDC4}.MinSizeRel|x64.Build.0 = Debug|Any CPU
|
||||
{F2F3F076-8818-42BD-82C8-02683D88DDC4}.MinSizeRel|x86.ActiveCfg = Debug|Any CPU
|
||||
{F2F3F076-8818-42BD-82C8-02683D88DDC4}.MinSizeRel|x86.Build.0 = Debug|Any CPU
|
||||
{F2F3F076-8818-42BD-82C8-02683D88DDC4}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{F2F3F076-8818-42BD-82C8-02683D88DDC4}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{F2F3F076-8818-42BD-82C8-02683D88DDC4}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{F2F3F076-8818-42BD-82C8-02683D88DDC4}.Release|x64.Build.0 = Release|Any CPU
|
||||
{F2F3F076-8818-42BD-82C8-02683D88DDC4}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{F2F3F076-8818-42BD-82C8-02683D88DDC4}.Release|x86.Build.0 = Release|Any CPU
|
||||
{F2F3F076-8818-42BD-82C8-02683D88DDC4}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{F2F3F076-8818-42BD-82C8-02683D88DDC4}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU
|
||||
{F2F3F076-8818-42BD-82C8-02683D88DDC4}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU
|
||||
{F2F3F076-8818-42BD-82C8-02683D88DDC4}.RelWithDebInfo|x64.Build.0 = Release|Any CPU
|
||||
{F2F3F076-8818-42BD-82C8-02683D88DDC4}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU
|
||||
{F2F3F076-8818-42BD-82C8-02683D88DDC4}.RelWithDebInfo|x86.Build.0 = Release|Any CPU
|
||||
{E18759AD-2ACD-4801-A05F-7545A62014EA}.Debug|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{E18759AD-2ACD-4801-A05F-7545A62014EA}.Debug|Any CPU.Build.0 = Release|Any CPU
|
||||
{E18759AD-2ACD-4801-A05F-7545A62014EA}.Debug|x64.ActiveCfg = Release|Any CPU
|
||||
{E18759AD-2ACD-4801-A05F-7545A62014EA}.Debug|x64.Build.0 = Release|Any CPU
|
||||
{E18759AD-2ACD-4801-A05F-7545A62014EA}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{E18759AD-2ACD-4801-A05F-7545A62014EA}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{E18759AD-2ACD-4801-A05F-7545A62014EA}.MinSizeRel|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{E18759AD-2ACD-4801-A05F-7545A62014EA}.MinSizeRel|Any CPU.Build.0 = Debug|Any CPU
|
||||
{E18759AD-2ACD-4801-A05F-7545A62014EA}.MinSizeRel|x64.ActiveCfg = Debug|Any CPU
|
||||
{E18759AD-2ACD-4801-A05F-7545A62014EA}.MinSizeRel|x64.Build.0 = Debug|Any CPU
|
||||
{E18759AD-2ACD-4801-A05F-7545A62014EA}.MinSizeRel|x86.ActiveCfg = Debug|Any CPU
|
||||
{E18759AD-2ACD-4801-A05F-7545A62014EA}.MinSizeRel|x86.Build.0 = Debug|Any CPU
|
||||
{E18759AD-2ACD-4801-A05F-7545A62014EA}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{E18759AD-2ACD-4801-A05F-7545A62014EA}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{E18759AD-2ACD-4801-A05F-7545A62014EA}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{E18759AD-2ACD-4801-A05F-7545A62014EA}.Release|x64.Build.0 = Release|Any CPU
|
||||
{E18759AD-2ACD-4801-A05F-7545A62014EA}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{E18759AD-2ACD-4801-A05F-7545A62014EA}.Release|x86.Build.0 = Release|Any CPU
|
||||
{E18759AD-2ACD-4801-A05F-7545A62014EA}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{E18759AD-2ACD-4801-A05F-7545A62014EA}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU
|
||||
{E18759AD-2ACD-4801-A05F-7545A62014EA}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU
|
||||
{E18759AD-2ACD-4801-A05F-7545A62014EA}.RelWithDebInfo|x64.Build.0 = Release|Any CPU
|
||||
{E18759AD-2ACD-4801-A05F-7545A62014EA}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU
|
||||
{E18759AD-2ACD-4801-A05F-7545A62014EA}.RelWithDebInfo|x86.Build.0 = Release|Any CPU
|
||||
{D053CF35-18E8-419E-B7A3-ADD1A9711A57}.Debug|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{D053CF35-18E8-419E-B7A3-ADD1A9711A57}.Debug|Any CPU.Build.0 = Release|Any CPU
|
||||
{D053CF35-18E8-419E-B7A3-ADD1A9711A57}.Debug|x64.ActiveCfg = Release|Any CPU
|
||||
{D053CF35-18E8-419E-B7A3-ADD1A9711A57}.Debug|x64.Build.0 = Release|Any CPU
|
||||
{D053CF35-18E8-419E-B7A3-ADD1A9711A57}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{D053CF35-18E8-419E-B7A3-ADD1A9711A57}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{D053CF35-18E8-419E-B7A3-ADD1A9711A57}.MinSizeRel|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{D053CF35-18E8-419E-B7A3-ADD1A9711A57}.MinSizeRel|Any CPU.Build.0 = Debug|Any CPU
|
||||
{D053CF35-18E8-419E-B7A3-ADD1A9711A57}.MinSizeRel|x64.ActiveCfg = Debug|Any CPU
|
||||
{D053CF35-18E8-419E-B7A3-ADD1A9711A57}.MinSizeRel|x64.Build.0 = Debug|Any CPU
|
||||
{D053CF35-18E8-419E-B7A3-ADD1A9711A57}.MinSizeRel|x86.ActiveCfg = Debug|Any CPU
|
||||
{D053CF35-18E8-419E-B7A3-ADD1A9711A57}.MinSizeRel|x86.Build.0 = Debug|Any CPU
|
||||
{D053CF35-18E8-419E-B7A3-ADD1A9711A57}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{D053CF35-18E8-419E-B7A3-ADD1A9711A57}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{D053CF35-18E8-419E-B7A3-ADD1A9711A57}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{D053CF35-18E8-419E-B7A3-ADD1A9711A57}.Release|x64.Build.0 = Release|Any CPU
|
||||
{D053CF35-18E8-419E-B7A3-ADD1A9711A57}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{D053CF35-18E8-419E-B7A3-ADD1A9711A57}.Release|x86.Build.0 = Release|Any CPU
|
||||
{D053CF35-18E8-419E-B7A3-ADD1A9711A57}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{D053CF35-18E8-419E-B7A3-ADD1A9711A57}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU
|
||||
{D053CF35-18E8-419E-B7A3-ADD1A9711A57}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU
|
||||
{D053CF35-18E8-419E-B7A3-ADD1A9711A57}.RelWithDebInfo|x64.Build.0 = Release|Any CPU
|
||||
{D053CF35-18E8-419E-B7A3-ADD1A9711A57}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU
|
||||
{D053CF35-18E8-419E-B7A3-ADD1A9711A57}.RelWithDebInfo|x86.Build.0 = Release|Any CPU
|
||||
{C66D6CA2-8FA5-4512-8F14-2311A3BD7E1B}.Debug|Any CPU.ActiveCfg = Release|x64
|
||||
{C66D6CA2-8FA5-4512-8F14-2311A3BD7E1B}.Debug|Any CPU.Build.0 = Release|x64
|
||||
{C66D6CA2-8FA5-4512-8F14-2311A3BD7E1B}.Debug|x64.ActiveCfg = Release|x64
|
||||
{C66D6CA2-8FA5-4512-8F14-2311A3BD7E1B}.Debug|x64.Build.0 = Release|x64
|
||||
{C66D6CA2-8FA5-4512-8F14-2311A3BD7E1B}.Debug|x86.ActiveCfg = Release|Win32
|
||||
{C66D6CA2-8FA5-4512-8F14-2311A3BD7E1B}.Debug|x86.Build.0 = Release|Win32
|
||||
{C66D6CA2-8FA5-4512-8F14-2311A3BD7E1B}.MinSizeRel|Any CPU.ActiveCfg = Release|x64
|
||||
{C66D6CA2-8FA5-4512-8F14-2311A3BD7E1B}.MinSizeRel|Any CPU.Build.0 = Release|x64
|
||||
{C66D6CA2-8FA5-4512-8F14-2311A3BD7E1B}.MinSizeRel|x64.ActiveCfg = Release|x64
|
||||
{C66D6CA2-8FA5-4512-8F14-2311A3BD7E1B}.MinSizeRel|x64.Build.0 = Release|x64
|
||||
{C66D6CA2-8FA5-4512-8F14-2311A3BD7E1B}.MinSizeRel|x86.ActiveCfg = Release|Win32
|
||||
{C66D6CA2-8FA5-4512-8F14-2311A3BD7E1B}.MinSizeRel|x86.Build.0 = Release|Win32
|
||||
{C66D6CA2-8FA5-4512-8F14-2311A3BD7E1B}.Release|Any CPU.ActiveCfg = Release|x64
|
||||
{C66D6CA2-8FA5-4512-8F14-2311A3BD7E1B}.Release|Any CPU.Build.0 = Release|x64
|
||||
{C66D6CA2-8FA5-4512-8F14-2311A3BD7E1B}.Release|x64.ActiveCfg = Release|x64
|
||||
{C66D6CA2-8FA5-4512-8F14-2311A3BD7E1B}.Release|x64.Build.0 = Release|x64
|
||||
{C66D6CA2-8FA5-4512-8F14-2311A3BD7E1B}.Release|x86.ActiveCfg = Release|Win32
|
||||
{C66D6CA2-8FA5-4512-8F14-2311A3BD7E1B}.Release|x86.Build.0 = Release|Win32
|
||||
{C66D6CA2-8FA5-4512-8F14-2311A3BD7E1B}.RelWithDebInfo|Any CPU.ActiveCfg = Release|x64
|
||||
{C66D6CA2-8FA5-4512-8F14-2311A3BD7E1B}.RelWithDebInfo|Any CPU.Build.0 = Release|x64
|
||||
{C66D6CA2-8FA5-4512-8F14-2311A3BD7E1B}.RelWithDebInfo|x64.ActiveCfg = Release|x64
|
||||
{C66D6CA2-8FA5-4512-8F14-2311A3BD7E1B}.RelWithDebInfo|x64.Build.0 = Release|x64
|
||||
{C66D6CA2-8FA5-4512-8F14-2311A3BD7E1B}.RelWithDebInfo|x86.ActiveCfg = Release|Win32
|
||||
{C66D6CA2-8FA5-4512-8F14-2311A3BD7E1B}.RelWithDebInfo|x86.Build.0 = Release|Win32
|
||||
{FE5E55D5-A764-4CD9-B8A8-EAC3B2149C55}.Debug|Any CPU.ActiveCfg = Release|x64
|
||||
{FE5E55D5-A764-4CD9-B8A8-EAC3B2149C55}.Debug|Any CPU.Build.0 = Release|x64
|
||||
{FE5E55D5-A764-4CD9-B8A8-EAC3B2149C55}.Debug|x64.ActiveCfg = Release|x64
|
||||
{FE5E55D5-A764-4CD9-B8A8-EAC3B2149C55}.Debug|x64.Build.0 = Release|x64
|
||||
{FE5E55D5-A764-4CD9-B8A8-EAC3B2149C55}.Debug|x86.ActiveCfg = Release|x64
|
||||
{FE5E55D5-A764-4CD9-B8A8-EAC3B2149C55}.Debug|x86.Build.0 = Release|x64
|
||||
{FE5E55D5-A764-4CD9-B8A8-EAC3B2149C55}.MinSizeRel|Any CPU.ActiveCfg = Release|x64
|
||||
{FE5E55D5-A764-4CD9-B8A8-EAC3B2149C55}.MinSizeRel|Any CPU.Build.0 = Release|x64
|
||||
{FE5E55D5-A764-4CD9-B8A8-EAC3B2149C55}.MinSizeRel|x64.ActiveCfg = Release|x64
|
||||
{FE5E55D5-A764-4CD9-B8A8-EAC3B2149C55}.MinSizeRel|x64.Build.0 = Release|x64
|
||||
{FE5E55D5-A764-4CD9-B8A8-EAC3B2149C55}.MinSizeRel|x86.ActiveCfg = Release|x64
|
||||
{FE5E55D5-A764-4CD9-B8A8-EAC3B2149C55}.MinSizeRel|x86.Build.0 = Release|x64
|
||||
{FE5E55D5-A764-4CD9-B8A8-EAC3B2149C55}.Release|Any CPU.ActiveCfg = Release|x64
|
||||
{FE5E55D5-A764-4CD9-B8A8-EAC3B2149C55}.Release|Any CPU.Build.0 = Release|x64
|
||||
{FE5E55D5-A764-4CD9-B8A8-EAC3B2149C55}.Release|x64.ActiveCfg = Release|x64
|
||||
{FE5E55D5-A764-4CD9-B8A8-EAC3B2149C55}.Release|x64.Build.0 = Release|x64
|
||||
{FE5E55D5-A764-4CD9-B8A8-EAC3B2149C55}.Release|x86.ActiveCfg = Release|x64
|
||||
{FE5E55D5-A764-4CD9-B8A8-EAC3B2149C55}.Release|x86.Build.0 = Release|x64
|
||||
{FE5E55D5-A764-4CD9-B8A8-EAC3B2149C55}.RelWithDebInfo|Any CPU.ActiveCfg = Release|x64
|
||||
{FE5E55D5-A764-4CD9-B8A8-EAC3B2149C55}.RelWithDebInfo|Any CPU.Build.0 = Release|x64
|
||||
{FE5E55D5-A764-4CD9-B8A8-EAC3B2149C55}.RelWithDebInfo|x64.ActiveCfg = Release|x64
|
||||
{FE5E55D5-A764-4CD9-B8A8-EAC3B2149C55}.RelWithDebInfo|x64.Build.0 = Release|x64
|
||||
{FE5E55D5-A764-4CD9-B8A8-EAC3B2149C55}.RelWithDebInfo|x86.ActiveCfg = Release|x64
|
||||
{FE5E55D5-A764-4CD9-B8A8-EAC3B2149C55}.RelWithDebInfo|x86.Build.0 = Release|x64
|
||||
{8A615E01-944F-422A-9DDE-ACF968438571}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{8A615E01-944F-422A-9DDE-ACF968438571}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{8A615E01-944F-422A-9DDE-ACF968438571}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{8A615E01-944F-422A-9DDE-ACF968438571}.Debug|x64.Build.0 = Debug|x64
|
||||
{8A615E01-944F-422A-9DDE-ACF968438571}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{8A615E01-944F-422A-9DDE-ACF968438571}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{8A615E01-944F-422A-9DDE-ACF968438571}.MinSizeRel|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{8A615E01-944F-422A-9DDE-ACF968438571}.MinSizeRel|Any CPU.Build.0 = Debug|Any CPU
|
||||
{8A615E01-944F-422A-9DDE-ACF968438571}.MinSizeRel|x64.ActiveCfg = Debug|x64
|
||||
{8A615E01-944F-422A-9DDE-ACF968438571}.MinSizeRel|x64.Build.0 = Debug|x64
|
||||
{8A615E01-944F-422A-9DDE-ACF968438571}.MinSizeRel|x86.ActiveCfg = Debug|Any CPU
|
||||
{8A615E01-944F-422A-9DDE-ACF968438571}.MinSizeRel|x86.Build.0 = Debug|Any CPU
|
||||
{8A615E01-944F-422A-9DDE-ACF968438571}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{8A615E01-944F-422A-9DDE-ACF968438571}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{8A615E01-944F-422A-9DDE-ACF968438571}.Release|x64.ActiveCfg = Release|x64
|
||||
{8A615E01-944F-422A-9DDE-ACF968438571}.Release|x64.Build.0 = Release|x64
|
||||
{8A615E01-944F-422A-9DDE-ACF968438571}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{8A615E01-944F-422A-9DDE-ACF968438571}.Release|x86.Build.0 = Release|Any CPU
|
||||
{8A615E01-944F-422A-9DDE-ACF968438571}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{8A615E01-944F-422A-9DDE-ACF968438571}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU
|
||||
{8A615E01-944F-422A-9DDE-ACF968438571}.RelWithDebInfo|x64.ActiveCfg = Release|x64
|
||||
{8A615E01-944F-422A-9DDE-ACF968438571}.RelWithDebInfo|x64.Build.0 = Release|x64
|
||||
{8A615E01-944F-422A-9DDE-ACF968438571}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU
|
||||
{8A615E01-944F-422A-9DDE-ACF968438571}.RelWithDebInfo|x86.Build.0 = Release|Any CPU
|
||||
{3CE05F47-763D-4894-81FD-CDABE33CB744}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{3CE05F47-763D-4894-81FD-CDABE33CB744}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{3CE05F47-763D-4894-81FD-CDABE33CB744}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{3CE05F47-763D-4894-81FD-CDABE33CB744}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{3CE05F47-763D-4894-81FD-CDABE33CB744}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{3CE05F47-763D-4894-81FD-CDABE33CB744}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{3CE05F47-763D-4894-81FD-CDABE33CB744}.MinSizeRel|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{3CE05F47-763D-4894-81FD-CDABE33CB744}.MinSizeRel|Any CPU.Build.0 = Debug|Any CPU
|
||||
{3CE05F47-763D-4894-81FD-CDABE33CB744}.MinSizeRel|x64.ActiveCfg = Debug|Any CPU
|
||||
{3CE05F47-763D-4894-81FD-CDABE33CB744}.MinSizeRel|x64.Build.0 = Debug|Any CPU
|
||||
{3CE05F47-763D-4894-81FD-CDABE33CB744}.MinSizeRel|x86.ActiveCfg = Debug|Any CPU
|
||||
{3CE05F47-763D-4894-81FD-CDABE33CB744}.MinSizeRel|x86.Build.0 = Debug|Any CPU
|
||||
{3CE05F47-763D-4894-81FD-CDABE33CB744}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{3CE05F47-763D-4894-81FD-CDABE33CB744}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{3CE05F47-763D-4894-81FD-CDABE33CB744}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{3CE05F47-763D-4894-81FD-CDABE33CB744}.Release|x64.Build.0 = Release|Any CPU
|
||||
{3CE05F47-763D-4894-81FD-CDABE33CB744}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{3CE05F47-763D-4894-81FD-CDABE33CB744}.Release|x86.Build.0 = Release|Any CPU
|
||||
{3CE05F47-763D-4894-81FD-CDABE33CB744}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{3CE05F47-763D-4894-81FD-CDABE33CB744}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU
|
||||
{3CE05F47-763D-4894-81FD-CDABE33CB744}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU
|
||||
{3CE05F47-763D-4894-81FD-CDABE33CB744}.RelWithDebInfo|x64.Build.0 = Release|Any CPU
|
||||
{3CE05F47-763D-4894-81FD-CDABE33CB744}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU
|
||||
{3CE05F47-763D-4894-81FD-CDABE33CB744}.RelWithDebInfo|x86.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
SolutionGuid = {BBB4F831-939D-4106-9DEC-1108E2436B46}
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio Version 17
|
||||
VisualStudioVersion = 17.1.32228.430
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Dna", "Dna\Dna.csproj", "{27764F9E-FD92-4C25-8A67-C76389BF0837}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Dna.ControlFlow", "Dna.ControlFlow\Dna.ControlFlow.csproj", "{0A69F908-3D88-4D0E-9F19-C35C14685CD8}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TritonTranslator", "TritonTranslator\TritonTranslator\TritonTranslator.csproj", "{F2084D58-2087-4CB8-86CC-1112E98B7FF5}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Dna.Example", "Dna.Example\Dna.Example.csproj", "{C440355F-89E8-4D12-A6FF-48F377A3FEF3}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Dna.Synthesis", "Dna.Synthesis\Dna.Synthesis.csproj", "{609DED32-46DB-42F3-99D8-AE73A64FD92E}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Dna.DataStructures", "Dna.DataStructures\Dna.DataStructures.csproj", "{9007DD90-82F1-4950-8009-EF413D44917B}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Unicorn.Net", "unicorn-net\src\Unicorn.Net\Unicorn.Net.csproj", "{47D397E7-098D-4058-9B19-DC01124ED897}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{09C09202-899C-4F09-9884-93AAAD5CF6A5}"
|
||||
ProjectSection(SolutionItems) = preProject
|
||||
.editorconfig = .editorconfig
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Dna.LLVMInterop", "Dna.LLVMInterop\Dna.LLVMInterop.vcxproj", "{E6A58095-9B8B-4830-BFEA-2947C4F2681A}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TritonTranslator.Examples", "TritonTranslator\TritonTranslator.Examples\TritonTranslator.Examples.csproj", "{48698C75-4175-417F-B240-867BF49AD07D}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SemanticExtractor", "TritonTranslator\SemanticExtractor\SemanticExtractor.csproj", "{44DF442D-CD3D-4BC8-86F8-01DE3290CA38}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Dna.GraphViewer", "Dna.GraphViewer", "{04AE44E7-347A-4EFB-ADBD-E446CDEA6E03}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Dna.BinaryTranslator", "Dna.BinaryTranslator\Dna.BinaryTranslator.csproj", "{BE5BAE75-AECF-453B-AE6C-FFF87923E665}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RuntimePatches", "RuntimePatches\RuntimePatches.csproj", "{F2F3F076-8818-42BD-82C8-02683D88DDC4}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LLVMSharp", "LLVMSharp\sources\LLVMSharp\LLVMSharp.csproj", "{E18759AD-2ACD-4801-A05F-7545A62014EA}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LLVMSharp.Interop", "LLVMSharp\sources\LLVMSharp.Interop\LLVMSharp.Interop.csproj", "{D053CF35-18E8-419E-B7A3-ADD1A9711A57}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Espresso", "Simplifier\MSiMBA\Espresso\Espresso.vcxproj", "{C66D6CA2-8FA5-4512-8F14-2311A3BD7E1B}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Mba.FFI", "Simplifier\MSiMBA\Mba.FFI\Mba.FFI.vcxproj", "{FE5E55D5-A764-4CD9-B8A8-EAC3B2149C55}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Mba.Common", "Simplifier\MSiMBA\Mba.Common\Mba.Common.csproj", "{8A615E01-944F-422A-9DDE-ACF968438571}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Mba.Simplifier", "Simplifier\Mba.Simplifier\Mba.Simplifier.csproj", "{3CE05F47-763D-4894-81FD-CDABE33CB744}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|x64 = Debug|x64
|
||||
Release|x64 = Release|x64
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{27764F9E-FD92-4C25-8A67-C76389BF0837}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{27764F9E-FD92-4C25-8A67-C76389BF0837}.Debug|x64.Build.0 = Debug|x64
|
||||
{27764F9E-FD92-4C25-8A67-C76389BF0837}.Release|x64.ActiveCfg = Release|x64
|
||||
{27764F9E-FD92-4C25-8A67-C76389BF0837}.Release|x64.Build.0 = Release|x64
|
||||
{0A69F908-3D88-4D0E-9F19-C35C14685CD8}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{0A69F908-3D88-4D0E-9F19-C35C14685CD8}.Debug|x64.Build.0 = Debug|x64
|
||||
{0A69F908-3D88-4D0E-9F19-C35C14685CD8}.Release|x64.ActiveCfg = Release|x64
|
||||
{0A69F908-3D88-4D0E-9F19-C35C14685CD8}.Release|x64.Build.0 = Release|x64
|
||||
{F2084D58-2087-4CB8-86CC-1112E98B7FF5}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{F2084D58-2087-4CB8-86CC-1112E98B7FF5}.Debug|x64.Build.0 = Debug|x64
|
||||
{F2084D58-2087-4CB8-86CC-1112E98B7FF5}.Release|x64.ActiveCfg = Release|x64
|
||||
{F2084D58-2087-4CB8-86CC-1112E98B7FF5}.Release|x64.Build.0 = Release|x64
|
||||
{C440355F-89E8-4D12-A6FF-48F377A3FEF3}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{C440355F-89E8-4D12-A6FF-48F377A3FEF3}.Debug|x64.Build.0 = Debug|x64
|
||||
{C440355F-89E8-4D12-A6FF-48F377A3FEF3}.Release|x64.ActiveCfg = Release|x64
|
||||
{C440355F-89E8-4D12-A6FF-48F377A3FEF3}.Release|x64.Build.0 = Release|x64
|
||||
{609DED32-46DB-42F3-99D8-AE73A64FD92E}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{609DED32-46DB-42F3-99D8-AE73A64FD92E}.Debug|x64.Build.0 = Debug|x64
|
||||
{609DED32-46DB-42F3-99D8-AE73A64FD92E}.Release|x64.ActiveCfg = Release|x64
|
||||
{609DED32-46DB-42F3-99D8-AE73A64FD92E}.Release|x64.Build.0 = Release|x64
|
||||
{9007DD90-82F1-4950-8009-EF413D44917B}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{9007DD90-82F1-4950-8009-EF413D44917B}.Debug|x64.Build.0 = Debug|x64
|
||||
{9007DD90-82F1-4950-8009-EF413D44917B}.Release|x64.ActiveCfg = Release|x64
|
||||
{9007DD90-82F1-4950-8009-EF413D44917B}.Release|x64.Build.0 = Release|x64
|
||||
{47D397E7-098D-4058-9B19-DC01124ED897}.Debug|x64.ActiveCfg = Debug|AnyCPU
|
||||
{47D397E7-098D-4058-9B19-DC01124ED897}.Debug|x64.Build.0 = Debug|AnyCPU
|
||||
{47D397E7-098D-4058-9B19-DC01124ED897}.Release|x64.ActiveCfg = Release|AnyCPU
|
||||
{47D397E7-098D-4058-9B19-DC01124ED897}.Release|x64.Build.0 = Release|AnyCPU
|
||||
{E6A58095-9B8B-4830-BFEA-2947C4F2681A}.Debug|x64.ActiveCfg = Release|x64
|
||||
{E6A58095-9B8B-4830-BFEA-2947C4F2681A}.Debug|x64.Build.0 = Release|x64
|
||||
{E6A58095-9B8B-4830-BFEA-2947C4F2681A}.Release|x64.ActiveCfg = Release|x64
|
||||
{E6A58095-9B8B-4830-BFEA-2947C4F2681A}.Release|x64.Build.0 = Release|x64
|
||||
{48698C75-4175-417F-B240-867BF49AD07D}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{48698C75-4175-417F-B240-867BF49AD07D}.Debug|x64.Build.0 = Debug|x64
|
||||
{48698C75-4175-417F-B240-867BF49AD07D}.Release|x64.ActiveCfg = Release|x64
|
||||
{48698C75-4175-417F-B240-867BF49AD07D}.Release|x64.Build.0 = Release|x64
|
||||
{44DF442D-CD3D-4BC8-86F8-01DE3290CA38}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{44DF442D-CD3D-4BC8-86F8-01DE3290CA38}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{44DF442D-CD3D-4BC8-86F8-01DE3290CA38}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{44DF442D-CD3D-4BC8-86F8-01DE3290CA38}.Release|x64.Build.0 = Release|Any CPU
|
||||
{BE5BAE75-AECF-453B-AE6C-FFF87923E665}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{BE5BAE75-AECF-453B-AE6C-FFF87923E665}.Debug|x64.Build.0 = Debug|x64
|
||||
{BE5BAE75-AECF-453B-AE6C-FFF87923E665}.Release|x64.ActiveCfg = Release|x64
|
||||
{BE5BAE75-AECF-453B-AE6C-FFF87923E665}.Release|x64.Build.0 = Release|x64
|
||||
{F2F3F076-8818-42BD-82C8-02683D88DDC4}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{F2F3F076-8818-42BD-82C8-02683D88DDC4}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{F2F3F076-8818-42BD-82C8-02683D88DDC4}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{F2F3F076-8818-42BD-82C8-02683D88DDC4}.Release|x64.Build.0 = Release|Any CPU
|
||||
{E18759AD-2ACD-4801-A05F-7545A62014EA}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{E18759AD-2ACD-4801-A05F-7545A62014EA}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{E18759AD-2ACD-4801-A05F-7545A62014EA}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{E18759AD-2ACD-4801-A05F-7545A62014EA}.Release|x64.Build.0 = Release|Any CPU
|
||||
{D053CF35-18E8-419E-B7A3-ADD1A9711A57}.Debug|x64.ActiveCfg = Release|Any CPU
|
||||
{D053CF35-18E8-419E-B7A3-ADD1A9711A57}.Debug|x64.Build.0 = Release|Any CPU
|
||||
{D053CF35-18E8-419E-B7A3-ADD1A9711A57}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{D053CF35-18E8-419E-B7A3-ADD1A9711A57}.Release|x64.Build.0 = Release|Any CPU
|
||||
{C66D6CA2-8FA5-4512-8F14-2311A3BD7E1B}.Debug|x64.ActiveCfg = Release|x64
|
||||
{C66D6CA2-8FA5-4512-8F14-2311A3BD7E1B}.Debug|x64.Build.0 = Release|x64
|
||||
{C66D6CA2-8FA5-4512-8F14-2311A3BD7E1B}.Release|x64.ActiveCfg = Release|x64
|
||||
{C66D6CA2-8FA5-4512-8F14-2311A3BD7E1B}.Release|x64.Build.0 = Release|x64
|
||||
{FE5E55D5-A764-4CD9-B8A8-EAC3B2149C55}.Debug|x64.ActiveCfg = Release|x64
|
||||
{FE5E55D5-A764-4CD9-B8A8-EAC3B2149C55}.Debug|x64.Build.0 = Release|x64
|
||||
{FE5E55D5-A764-4CD9-B8A8-EAC3B2149C55}.Release|x64.ActiveCfg = Release|x64
|
||||
{FE5E55D5-A764-4CD9-B8A8-EAC3B2149C55}.Release|x64.Build.0 = Release|x64
|
||||
{8A615E01-944F-422A-9DDE-ACF968438571}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{8A615E01-944F-422A-9DDE-ACF968438571}.Debug|x64.Build.0 = Debug|x64
|
||||
{8A615E01-944F-422A-9DDE-ACF968438571}.Release|x64.ActiveCfg = Release|x64
|
||||
{8A615E01-944F-422A-9DDE-ACF968438571}.Release|x64.Build.0 = Release|x64
|
||||
{3CE05F47-763D-4894-81FD-CDABE33CB744}.Debug|x64.ActiveCfg = Debug|AnyCPU
|
||||
{3CE05F47-763D-4894-81FD-CDABE33CB744}.Debug|x64.Build.0 = Debug|AnyCPU
|
||||
{3CE05F47-763D-4894-81FD-CDABE33CB744}.Release|x64.ActiveCfg = Release|AnyCPU
|
||||
{3CE05F47-763D-4894-81FD-CDABE33CB744}.Release|x64.Build.0 = Release|AnyCPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
SolutionGuid = {BBB4F831-939D-4106-9DEC-1108E2436B46}
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
|
||||
@@ -55,7 +55,6 @@
|
||||
<ProjectReference Include="..\Dna.ControlFlow\Dna.ControlFlow.csproj" />
|
||||
<ProjectReference Include="..\Dna.DataStructures\Dna.DataStructures.csproj" />
|
||||
<ProjectReference Include="..\Dna.LLVMInterop\Dna.LLVMInterop.vcxproj">
|
||||
<IncludeAssets>..\..\llvm-project-15.0.7.src\llvm\build\RelWithDebInfo\bin\LLVM-C.dll</IncludeAssets>
|
||||
<Private>True</Private>
|
||||
<CopyLocalSatelliteAssemblies>True</CopyLocalSatelliteAssemblies>
|
||||
</ProjectReference>
|
||||
@@ -68,10 +67,5 @@
|
||||
<ProjectReference Include="..\unicorn-net\src\Unicorn.Net\Unicorn.Net.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<None Update="..\llvm-15.0.3-win64\bin\LLVM-C.dll" Link="LLVM-C.dll">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</None>
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
||||
+1
-1
Submodule LLVMSharp updated: 03a2280b02...3406af09e3
@@ -0,0 +1,13 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<configuration>
|
||||
<packageSources>
|
||||
<clear />
|
||||
<add key="nuget.org" value="https://api.nuget.org/v3/index.json" />
|
||||
</packageSources>
|
||||
|
||||
<packageSourceMapping>
|
||||
<packageSource key="nuget.org">
|
||||
<package pattern="*" />
|
||||
</packageSource>
|
||||
</packageSourceMapping>
|
||||
</configuration>
|
||||
@@ -32,4 +32,53 @@ Note that `Dna` is currently based on LLVM 17.
|
||||
`Dna` contains a VMProtect devirtualization plugin located in `Dna.BinaryTranslator/VMProtect`. See [this PR](https://github.com/Colton1skees/Dna/pull/8) for more info.
|
||||
|
||||
# Building
|
||||
`Dna` will not build out of the box. Custom patches to remill and souper were needed for this to build on windows. If you would like to work on Dna, open an issue or email me `colton1skees@gmail.com`. At some point I may publish proper build steps, but I make no guarantees.
|
||||
|
||||
Dna currently targets LLVM 17 and is expected to be built on Windows x64 with Visual Studio 2022.
|
||||
Build `Dna.LLVMInterop` in **Release** mode; the native dependency tree is Release-built and Debug interop builds are not supported.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- Visual Studio 2022 with C++/MSBuild tools
|
||||
- CMake
|
||||
- Ninja
|
||||
- clang-cl / LLVM tools available from the VS toolchain
|
||||
- Rust/Cargo, for the EqSat simplifier DLL
|
||||
- .NET SDK 8+
|
||||
|
||||
Run the commands below from a VS x64 developer shell, or another shell with the VS C++ tools on `PATH`.
|
||||
|
||||
## 1. Build native dependencies
|
||||
|
||||
The dependency superbuild installs LLVM 17, Remill, Z3, XED, gflags/glog, and related native libraries into `Dna.LLVMInterop/dependencies/install`.
|
||||
|
||||
```powershell
|
||||
cmake -S Dna.LLVMInterop/dependencies `
|
||||
-B Dna.LLVMInterop/dependencies/build `
|
||||
-G Ninja `
|
||||
-DCMAKE_BUILD_TYPE=Release `
|
||||
-DCMAKE_C_COMPILER=clang-cl `
|
||||
-DCMAKE_CXX_COMPILER=clang-cl
|
||||
|
||||
cmake --build Dna.LLVMInterop/dependencies/build
|
||||
```
|
||||
|
||||
If changing compiler, build type, or CRT settings, delete both `Dna.LLVMInterop/dependencies/build` and `Dna.LLVMInterop/dependencies/install` before reconfiguring.
|
||||
|
||||
## 2. Build the Rust simplifier DLL
|
||||
|
||||
`Dna.Example` and the simplifier projects copy `eq_sat.dll` from the Cargo release output.
|
||||
|
||||
```powershell
|
||||
cargo build --manifest-path Simplifier/EqSat/Cargo.toml --release
|
||||
```
|
||||
|
||||
## 3. Build the solution
|
||||
|
||||
```powershell
|
||||
& "C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Current\Bin\MSBuild.exe" `
|
||||
Dna.sln `
|
||||
/restore `
|
||||
/p:Configuration=Release `
|
||||
/p:Platform=x64 `
|
||||
/m
|
||||
```
|
||||
|
||||
+1
-1
Submodule TritonTranslator updated: fd911f3ac6...e2b1ad9efc
Reference in New Issue
Block a user