diff --git a/common_default_clang_cl.props b/common_default_clang_cl.props new file mode 100644 index 0000000000..8a64d1bdf9 --- /dev/null +++ b/common_default_clang_cl.props @@ -0,0 +1,27 @@ + + + + + + + 10.0 + + + + false + + + + stdcpplatest + _SILENCE_CXX17_ITERATOR_BASE_CLASS_DEPRECATION_WARNING=1;_HAS_EXCEPTIONS=0;%(PreprocessorDefinitions) + false + %(AdditionalOptions) + MultiThreaded + MultiThreadedDebug + + + %(AdditionalOptions) + + + + \ No newline at end of file diff --git a/llvm b/llvm index 716bb292ba..5d8643e8eb 160000 --- a/llvm +++ b/llvm @@ -1 +1 @@ -Subproject commit 716bb292ba3b4e5c0ceff72fee911ed2b53232cf +Subproject commit 5d8643e8eb3fcc60d8ca04b0aa61f6fd0722a0a8 diff --git a/llvm_build/UpdateProjectFiles.bat b/llvm_build/UpdateProjectFiles.bat deleted file mode 100644 index c2b80811aa..0000000000 --- a/llvm_build/UpdateProjectFiles.bat +++ /dev/null @@ -1,29 +0,0 @@ -REM You need cmake and python to update the project files -REM this script relies on CWD being the path that this script is in - -cmake -G "Visual Studio 16 2019 Win64" -DCMAKE_CONFIGURATION_TYPES="Debug;Release" -DLLVM_TARGETS_TO_BUILD=X86 -DLLVM_DEFAULT_TARGET_TRIPLE:STRING=x86_64-pc-windows-msvc -DLLVM_HOST_TRIPLE:STRING=x86_64-pc-windows-msvc -DLLVM_BUILD_RUNTIME=OFF -DLLVM_BUILD_TOOLS=OFF -DLLVM_INCLUDE_DOCS=OFF -DLLVM_INCLUDE_EXAMPLES=OFF -DLLVM_INCLUDE_TESTS=OFF -DLLVM_INCLUDE_TOOLS=OFF -DLLVM_INCLUDE_BENCHMARKS=OFF -DLLVM_INCLUDE_UTILS=OFF -DLLVM_USE_INTEL_JITEVENTS=ON -DLLVM_ENABLE_Z3_SOLVER=OFF -DCMAKE_SYSTEM_VERSION=6.1 -DCMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION=10.0 -DLLVM_USE_CRT_DEBUG=MTd -DLLVM_USE_CRT_RELEASE=MT ../llvm - -RD /S /Q cmake -RD /S /Q CMakeFiles -RD /S /Q projects -RD /S /Q share -RD /S /Q tools -DEL ALL_BUILD.vcxproj -DEL ALL_BUILD.vcxproj.filters -DEL CMakeCache.txt -DEL cmake_install.cmake -DEL CPackConfig.cmake -DEL CPackSourceConfig.cmake -DEL DummyConfigureOutput -DEL INSTALL.vcxproj -DEL INSTALL.vcxproj.filters -DEL LLVM.sdf -DEL LLVM.sln -DEL LLVMBuild.cmake -DEL PACKAGE.vcxproj -DEL PACKAGE.vcxproj.filters -DEL ZERO_CHECK.vcxproj -DEL ZERO_CHECK.vcxproj.filters -DEL include\llvm\llvm_headers_do_not_build.vcxproj -DEL include\llvm\llvm_headers_do_not_build.vcxproj.filters -python make_paths_relative.py diff --git a/llvm_build/llvm_build.vcxproj b/llvm_build/llvm_build.vcxproj index 31a1b4ab99..041225b7ae 100644 --- a/llvm_build/llvm_build.vcxproj +++ b/llvm_build/llvm_build.vcxproj @@ -38,32 +38,51 @@ - "Visual Studio $(VisualStudioVersion.Substring(0,2))" - cmake -G $(CmakeGenerator) -A x64 -Thost=x64 -DCMAKE_CONFIGURATION_TYPES="Debug;Release" -DLLVM_TARGETS_TO_BUILD=X86 -DLLVM_BUILD_RUNTIME=OFF -DLLVM_BUILD_TOOLS=OFF -DLLVM_INCLUDE_DOCS=OFF -DLLVM_INCLUDE_EXAMPLES=OFF -DLLVM_INCLUDE_TESTS=OFF -DLLVM_INCLUDE_TOOLS=OFF -DLLVM_INCLUDE_UTILS=OFF -DCMAKE_SYSTEM_VERSION=6.1 -DLLVM_TEMPORARILY_ALLOW_OLD_TOOLCHAIN=ON -DCMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION=$(WindowsTargetPlatformVersion) -DLLVM_USE_CRT_DEBUG=MTd -DLLVM_USE_CRT_RELEASE=MT ../llvm + call vsdevcmd.bat -arch=amd64 + cmake -G Ninja -DCMAKE_BUILD_TYPE="Release" -DCMAKE_INSTALL_PREFIX="./Release" -DLLVM_TARGETS_TO_BUILD=X86 -DLLVM_DEFAULT_TARGET_TRIPLE:STRING=x86_64-pc-windows-msvc -DLLVM_HOST_TRIPLE:STRING=x86_64-pc-windows-msvc -DLLVM_BUILD_RUNTIME=OFF -DLLVM_BUILD_TOOLS=OFF -DLLVM_INCLUDE_DOCS=OFF -DLLVM_INCLUDE_EXAMPLES=OFF -DLLVM_INCLUDE_TESTS=OFF -DLLVM_INCLUDE_TOOLS=OFF -DLLVM_INCLUDE_UTILS=OFF -DCMAKE_SYSTEM_VERSION=6.1 -DLLVM_TEMPORARILY_ALLOW_OLD_TOOLCHAIN=ON -DCMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION=$(WindowsTargetPlatformVersion) -DLLVM_USE_CRT_DEBUG=MTd -DLLVM_USE_CRT_RELEASE=MT ../llvm + call vsdevcmd.bat -arch=amd64 + cmake -G Ninja -DCMAKE_BUILD_TYPE="Debug" -DCMAKE_INSTALL_PREFIX="./Debug" -DLLVM_TARGETS_TO_BUILD=X86 -DLLVM_DEFAULT_TARGET_TRIPLE:STRING=x86_64-pc-windows-msvc -DLLVM_HOST_TRIPLE:STRING=x86_64-pc-windows-msvc -DLLVM_BUILD_RUNTIME=OFF -DLLVM_BUILD_TOOLS=OFF -DLLVM_INCLUDE_DOCS=OFF -DLLVM_INCLUDE_EXAMPLES=OFF -DLLVM_INCLUDE_TESTS=OFF -DLLVM_INCLUDE_TOOLS=OFF -DLLVM_INCLUDE_UTILS=OFF -DCMAKE_SYSTEM_VERSION=6.1 -DLLVM_TEMPORARILY_ALLOW_OLD_TOOLCHAIN=ON -DCMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION=$(WindowsTargetPlatformVersion) -DLLVM_USE_CRT_DEBUG=MTd -DLLVM_USE_CRT_RELEASE=MT ../llvm + echo Cleaning.. + for /F "delims= eol=|" %%f in (' + dir /b ^| findstr /V "[^.]*\build[^.]*\.vcxproj"') do ( + echo Deleting .\%%f + if exist %%f\nul ( + rmdir .\%%f /s /q + ) else ( + del .\%%f /q + ) + ) + - $(CmakeCLI) - msbuild.exe ALL_BUILD.vcxproj /t:build /p:Configuration=Debug /p:ForceImportBeforeCppTargets=$(SolutionDir)common_default.props /m + $(CmakeDebugCLI) + ninja + ninja install - $(CmakeCLI) - msbuild.exe ALL_BUILD.vcxproj /t:rebuild /p:Configuration=Debug /p:ForceImportBeforeCppTargets=$(SolutionDir)common_default.props /m + del CMakeCache.txt + $(CmakeDebugCLI) + ninja + ninja install - $(CmakeCLI) - msbuild.exe ALL_BUILD.vcxproj /t:clean /p:Configuration=Debug /p:ForceImportBeforeCppTargets=$(SolutionDir)common_default.props /m + + $(CmakeCleanCLI) - $(CmakeCLI) - msbuild.exe ALL_BUILD.vcxproj /t:build /p:Configuration=Release /p:ForceImportBeforeCppTargets=$(SolutionDir)common_default.props /m + $(CmakeReleaseCLI) + ninja + ninja install - $(CmakeCLI) - msbuild.exe ALL_BUILD.vcxproj /t:rebuild /p:Configuration=Release /p:ForceImportBeforeCppTargets=$(SolutionDir)common_default.props /m + del CMakeCache.txt + $(CmakeReleaseCLI) + ninja + ninja install - $(CmakeCLI) - msbuild.exe ALL_BUILD.vcxproj /t:clean /p:Configuration=Release /p:ForceImportBeforeCppTargets=$(SolutionDir)common_default.props /m + + $(CmakeCleanCLI) diff --git a/llvm_build/llvm_build_clang_cl.vcxproj b/llvm_build/llvm_build_clang_cl.vcxproj new file mode 100644 index 0000000000..711fe2c8db --- /dev/null +++ b/llvm_build/llvm_build_clang_cl.vcxproj @@ -0,0 +1,93 @@ + + + + + Debug + x64 + + + Release + x64 + + + + {A37E4273-85DB-4217-B775-CE971B87D9DF} + MakeFileProj + + + + + + Makefile + true + + + Makefile + false + + + + x64 + + + + + + + + + + + call vsdevcmd.bat -arch=amd64 + cmake -G Ninja -DCMAKE_CXX_COMPILER="clang-cl.exe" -DCMAKE_C_COMPILER="clang-cl.exe" -DCMAKE_BUILD_TYPE="Release" -DLLVM_TARGETS_TO_BUILD=X86 -DLLVM_DEFAULT_TARGET_TRIPLE:STRING=x86_64-pc-windows-msvc -DLLVM_HOST_TRIPLE:STRING=x86_64-pc-windows-msvc -DCMAKE_INSTALL_PREFIX="./Release" -DLLVM_BUILD_RUNTIME=OFF -DLLVM_BUILD_TOOLS=OFF -DLLVM_INCLUDE_DOCS=OFF -DLLVM_INCLUDE_EXAMPLES=OFF -DLLVM_INCLUDE_TESTS=OFF -DLLVM_INCLUDE_TOOLS=OFF -DLLVM_INCLUDE_UTILS=OFF -DCMAKE_SYSTEM_VERSION=6.1 -DLLVM_TEMPORARILY_ALLOW_OLD_TOOLCHAIN=ON -DCMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION=$(WindowsTargetPlatformVersion) -DLLVM_USE_CRT_DEBUG=MTd -DLLVM_USE_CRT_RELEASE=MT ../llvm + call vsdevcmd.bat -arch=amd64 + cmake -G Ninja -DCMAKE_CXX_COMPILER="clang-cl.exe" -DCMAKE_C_COMPILER="clang-cl.exe" -DCMAKE_BUILD_TYPE="Debug" -DLLVM_TARGETS_TO_BUILD=X86 -DLLVM_DEFAULT_TARGET_TRIPLE:STRING=x86_64-pc-windows-msvc -DLLVM_HOST_TRIPLE:STRING=x86_64-pc-windows-msvc -DCMAKE_INSTALL_PREFIX="./Debug" -DLLVM_BUILD_RUNTIME=OFF -DLLVM_BUILD_TOOLS=OFF -DLLVM_INCLUDE_DOCS=OFF -DLLVM_INCLUDE_EXAMPLES=OFF -DLLVM_INCLUDE_TESTS=OFF -DLLVM_INCLUDE_TOOLS=OFF -DLLVM_INCLUDE_UTILS=OFF -DCMAKE_SYSTEM_VERSION=6.1 -DLLVM_TEMPORARILY_ALLOW_OLD_TOOLCHAIN=ON -DCMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION=$(WindowsTargetPlatformVersion) -DLLVM_USE_CRT_DEBUG=MTd -DLLVM_USE_CRT_RELEASE=MT ../llvm + echo Cleaning.. + for /F "delims= eol=|" %%f in (' + dir /b ^| findstr /V "[^.]*\build[^.]*\.vcxproj"') do ( + echo Deleting .\%%f + if exist %%f\nul ( + rmdir .\%%f /s /q + ) else ( + del .\%%f /q + ) + ) + + + + + + $(CmakeDebugCLI) + ninja + ninja install + + del CMakeCache.txt + $(CmakeDebugCLI) + ninja + ninja install + + + $(CmakeCleanCLI) + + + + + $(CmakeReleaseCLI) + ninja + ninja install + + del CMakeCache.txt + $(CmakeReleaseCLI) + ninja + ninja install + + + $(CmakeCleanCLI) + + + + + + + + \ No newline at end of file diff --git a/llvm_build/llvm_build_clang_cl.vcxproj.filters b/llvm_build/llvm_build_clang_cl.vcxproj.filters new file mode 100644 index 0000000000..f577ed4062 --- /dev/null +++ b/llvm_build/llvm_build_clang_cl.vcxproj.filters @@ -0,0 +1,17 @@ + + + + + {fad608c4-4182-4423-85ed-9d1813b9c696} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {02fc0ad3-18aa-4762-b24b-8226dfb0e223} + h;hh;hpp;hxx;hm;inl;inc;xsd + + + {22cf2f8c-de87-4f6f-9b26-a5b9b746968c} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + \ No newline at end of file diff --git a/llvm_build/make_paths_relative.py b/llvm_build/make_paths_relative.py deleted file mode 100644 index 72c8bc2cc0..0000000000 --- a/llvm_build/make_paths_relative.py +++ /dev/null @@ -1,169 +0,0 @@ -import os -import re -import shutil -import xml.etree.ElementTree as ET - -RPCS3DIR = "" - -cmake_dirs = ["CMakeFiles"] - -cmake_files = ["INSTALL.vcxproj", - "INSTALL.vcxproj.filters", - "PACKAGE.vcxproj", - "PACKAGE.vcxproj.filters", - "cmake_install.cmake", - ] - -vcxproj_files_blacklist = ["llvm_build.vcxproj", "llvm_build.vcxproj.filters"] - -vcxproj_files = ["lib\Analysis\LLVMAnalysis.vcxproj", - "lib\Analysis\IPA\LLVMipa.vcxproj", - "lib\AsmParser\LLVMAsmParser.vcxproj", - "lib\Bitcode\Reader\LLVMBitReader.vcxproj", - "lib\Bitcode\Writer\LLVMBitWriter.vcxproj", - "lib\CodeGen\LLVMCodeGen.vcxproj", - "lib\CodeGen\AsmPrinter\LLVMAsmPrinter.vcxproj", - "lib\CodeGen\SelectionDAG\LLVMSelectionDAG.vcxproj", - "lib\DebugInfo\LLVMDebugInfo.vcxproj", - "lib\ExecutionEngine\LLVMExecutionEngine.vcxproj", - "lib\ExecutionEngine\Interpreter\LLVMInterpreter.vcxproj", - "lib\ExecutionEngine\JIT\LLVMJIT.vcxproj", - "lib\ExecutionEngine\MCJIT\LLVMMCJIT.vcxproj", - "lib\ExecutionEngine\RuntimeDyld\LLVMRuntimeDyld.vcxproj", - "lib\IR\LLVMCore.vcxproj", - "lib\IRReader\LLVMIRReader.vcxproj", - "lib\LineEditor\LLVMLineEditor.vcxproj", - "lib\Linker\LLVMLinker.vcxproj", - "lib\LTO\LLVMLTO.vcxproj", - "lib\MC\LLVMMC.vcxproj", - "lib\MC\MCAnalysis\LLVMMCAnalysis.vcxproj", - "lib\MC\MCDisassembler\LLVMMCDisassembler.vcxproj", - "lib\MC\MCParser\LLVMMCParser.vcxproj", - "lib\Object\LLVMObject.vcxproj", - "lib\Option\LLVMOption.vcxproj", - "lib\ProfileData\LLVMProfileData.vcxproj", - "lib\Support\LLVMSupport.vcxproj", - "lib\TableGen\LLVMTableGen.vcxproj", - "lib\Target\LLVMTarget.vcxproj", - "lib\Target\X86\LLVMX86CodeGen.vcxproj", - "lib\Target\X86\X86CommonTableGen.vcxproj", - "lib\Target\X86\AsmParser\LLVMX86AsmParser.vcxproj", - "lib\Target\X86\Disassembler\LLVMX86Disassembler.vcxproj", - "lib\Target\X86\InstPrinter\LLVMX86AsmPrinter.vcxproj", - "lib\Target\X86\MCTargetDesc\LLVMX86Desc.vcxproj", - "lib\Target\X86\TargetInfo\LLVMX86Info.vcxproj", - "lib\Target\X86\Utils\LLVMX86Utils.vcxproj", - "lib\Transforms\Hello\LLVMHello.vcxproj", - "lib\Transforms\InstCombine\LLVMInstCombine.vcxproj", - "lib\Transforms\Instrumentation\LLVMInstrumentation.vcxproj", - "lib\Transforms\IPO\LLVMipo.vcxproj", - "lib\Transforms\ObjCARC\LLVMObjCARCOpts.vcxproj", - "lib\Transforms\Scalar\LLVMScalarOpts.vcxproj", - "lib\Transforms\Utils\LLVMTransformUtils.vcxproj", - "lib\Transforms\Vectorize\LLVMVectorize.vcxproj", - "include\llvm\IR\intrinsics_gen.vcxproj", - "utils\TableGen\llvm-tblgen.vcxproj", - ] - - -def get_parent_dir(): - path = os.getcwd() - os.chdir("..") - rpcs3_dir = os.getcwd() - os.chdir(path) - return rpcs3_dir - - -def rem_cmake_files(root_path): - for root, dirs, files in os.walk(root_path): - for directory in dirs: - if directory in cmake_dirs: - print("deleting: {}".format(os.path.join(root, directory))) - shutil.rmtree(os.path.join(root, directory)) - dirs = [item for item in dirs if item not in cmake_dirs] - for file in files: - if file in cmake_files: - print("deleting: {}".format(os.path.join(root, file))) - os.remove(os.path.join(root, file)) - - -def repl_cmake_copy(match): - newtext = "copy /y " - files = match.group(1) - files = files.replace('/', '\\') - return newtext + files - - -def make_paths_relative(file): - global vcxproj_files - global vcxproj_files_blacklist - this_vcxproj = os.path.relpath(file, os.getcwd()) - if this_vcxproj in vcxproj_files_blacklist: - return - if (file.find('.vcxproj') != len(file) - 8) and (file.find('.vcxproj.filters') != len(file) - 16): - print('ERROR: File "{}" is not vcxproj file'.format(file)) - return - proj_path = os.path.dirname(file) - if proj_path[1] != ':': - print('ERROR: Path "{}" is not in the Windows format'.format(proj_path)) - return - # check if we expected this project file - if file[-8:] == '.vcxproj': - if this_vcxproj in vcxproj_files: - vcxproj_files.remove(this_vcxproj) - else: - print('ERROR: unexpected vcxproj file: "{}" please update the script'.format(this_vcxproj)) - return - - # open the file and text-replace the absolute paths - with open(file, 'r') as f: - file_cont = f.read() - rel_path = '$(ProjDir)' + os.path.relpath(RPCS3DIR, proj_path) - file_cont = file_cont.replace(RPCS3DIR, rel_path) - rpcs3_path_alt = RPCS3DIR.replace('\\', '/') - rel_path_alt = rel_path.replace('\\', '/') - file_cont = file_cont.replace(rpcs3_path_alt, rel_path_alt) - - # interpret the XML to remove the cmake commands from the "Command" tags - ET.register_namespace('', 'http://schemas.microsoft.com/developer/msbuild/2003') - tree = ET.fromstring(file_cont) - - for parent in tree.findall('.//{http://schemas.microsoft.com/developer/msbuild/2003}Command/..'): - for element in parent.findall('{http://schemas.microsoft.com/developer/msbuild/2003}Command'): - text = str(element.text) - rgx = re.compile(r'[^\r\n<>]+cmake.exe["]?\s+-E copy_if_different([^\r\n]+)') - text, num_rep = rgx.subn(repl_cmake_copy, text) - rgx = re.compile(r'[^\r\n<>]+cmake.exe([^\r\n]*)') - text, num_rep2 = rgx.subn(r'REM OMMITTED CMAKE COMMAND', text) - num_rep += num_rep2 - rgx = re.compile(r'[^\r\n<>]+ml64.exe"?([^\r\n]*)') - text, num_rep2 = rgx.subn(r'"$(VCInstallDir)bin\x86_amd64\ml64.exe" \1', text) - num_rep += num_rep2 - - if num_rep > 0: - element.text = text - - # re-create the XML and save the file - file_cont = ET.tostring(tree, 'utf-8') - with open(file, 'w') as f: - f.write(file_cont) - - -def iterate_proj_file(root_path): - for root, dirs, files in os.walk(root_path): - for file in files: - if file.find('.vcxproj') != -1: - make_paths_relative(os.path.join(root, file)) - - -def main_func(): - global RPCS3DIR - RPCS3DIR = get_parent_dir() - rem_cmake_files(os.getcwd()) - iterate_proj_file(os.getcwd()) - for a in vcxproj_files: - print('ERROR: project file was not found "{}"'.format(a)) - - -if __name__ == "__main__": - main_func() diff --git a/rpcs3.sln b/rpcs3.sln index 280f6a98ec..f83f619fa5 100644 --- a/rpcs3.sln +++ b/rpcs3.sln @@ -77,6 +77,8 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "spirv-tools-build", "Vulkan EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "3rdParty", "3rdParty", "{6C3B64A0-8F8A-4DC4-8C0B-D71EBEED7FA8}" EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "llvm_build_clang_cl", "llvm_build\llvm_build_clang_cl.vcxproj", "{A37E4273-85DB-4217-B775-CE971B87D9DF}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug - LLVM|x64 = Debug - LLVM|x64 @@ -232,6 +234,13 @@ Global {4CBD3DDD-5555-49A4-A44D-DD3D8CB516A1}.Debug|x64.ActiveCfg = Debug|x64 {4CBD3DDD-5555-49A4-A44D-DD3D8CB516A1}.Release - LLVM|x64.ActiveCfg = Release|x64 {4CBD3DDD-5555-49A4-A44D-DD3D8CB516A1}.Release|x64.ActiveCfg = Release|x64 + {A37E4273-85DB-4217-B775-CE971B87D9DF}.Debug - LLVM|x64.ActiveCfg = Debug|x64 + {A37E4273-85DB-4217-B775-CE971B87D9DF}.Debug - LLVM|x64.Build.0 = Debug|x64 + {A37E4273-85DB-4217-B775-CE971B87D9DF}.Debug|x64.ActiveCfg = Debug|x64 + {A37E4273-85DB-4217-B775-CE971B87D9DF}.Debug|x64.Build.0 = Debug|x64 + {A37E4273-85DB-4217-B775-CE971B87D9DF}.Release - LLVM|x64.ActiveCfg = Release|x64 + {A37E4273-85DB-4217-B775-CE971B87D9DF}.Release|x64.ActiveCfg = Release|x64 + {A37E4273-85DB-4217-B775-CE971B87D9DF}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -256,6 +265,7 @@ Global {73973223-5EE8-41CA-8E88-1D60E89A237B} = {6C3B64A0-8F8A-4DC4-8C0B-D71EBEED7FA8} {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB} = {6C3B64A0-8F8A-4DC4-8C0B-D71EBEED7FA8} {4CBD3DDD-5555-49A4-A44D-DD3D8CB516A1} = {B0AC29FD-7B01-4B5E-9C8D-0A081E4C5668} + {A37E4273-85DB-4217-B775-CE971B87D9DF} = {B0AC29FD-7B01-4B5E-9C8D-0A081E4C5668} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {06CC7920-E085-4B81-9582-8DE8AAD42510}