Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/mono.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/msvc
diff options
context:
space:
mode:
authorlateralusX <lateralusx.github@gmail.com>2018-06-14 13:43:51 +0300
committerlateralusX <lateralusx.github@gmail.com>2018-06-20 14:38:49 +0300
commitd37796c71c6aa45c8712d77248d3889b5e474ea8 (patch)
tree5385ccf1192885bf97868341b6fb12386b9bf59e /msvc
parent9b9e4f4bb6d579cd70ed8f2667a5d2edef67dc26 (diff)
Add LLVM AOT/Full AOT support on Windows x64.
Uses mono LLVM master branch, build using cmake and VisualStudio 2015/2017. Commit adds support for AOT/Full AOT LLVM codegen for Windows x64 Visual Studio build mono runtime. Normal configure/make using cygwin won’t support LLVM and will trigger an error if configured. In order to build using LLVM first mono LLVM master branch must be build using static linked LLVM configuration (dynamic loading can be added later), NOTE mono LLVM build needs to include the following commit, https://github.com/mono/llvm/commit/9b92b4b87607e137266f84dc307181b8842fe54a in order to successfully build on Windows x64. Build mono LLVM branch using the following cmake configuration: -DCMAKE_BUILD_TYPE=Release -DLLVM_ENABLE_ZLIB=OFF -DLLVM_TARGETS_TO_BUILD="X86" -DCMAKE_CROSSCOMPILING=False -DCMAKE_SYSTEM_NAME=Windows Use cmake with -G "Visual Studio 14 2015 Win64" to generate VS 2015 x64 targets. NOTE, if mono runtime is build using VS 2017, then LLVM should be build using the same VS version using -G "Visual Studio 15 2017 Win64" To enable LLVM build in mono.sln, set MONO_ENABLE_LLVM to “true” and make sure MONO_LLVM_INSTALL_DIR_PREFIX points to the install directory used in LLVM build above, default msvc/dist/llvm. Above LLVM properties can also be set if build using msbuild. A sample LLVM configure script has been included in msvc/llvm-cmake-config.bat.
Diffstat (limited to 'msvc')
-rw-r--r--msvc/build-init.vcxproj38
-rw-r--r--msvc/build-init.vcxproj.filters1
-rw-r--r--msvc/libmini-llvm.targets13
-rw-r--r--msvc/libmini.vcxproj8
-rw-r--r--msvc/libmono-dynamic.vcxproj20
-rw-r--r--msvc/llvm-cmake-config.bat52
-rw-r--r--msvc/mono.props26
-rw-r--r--msvc/mono.vcxproj16
8 files changed, 141 insertions, 33 deletions
diff --git a/msvc/build-init.vcxproj b/msvc/build-init.vcxproj
index e4bd714670e..46b4b18a967 100644
--- a/msvc/build-init.vcxproj
+++ b/msvc/build-init.vcxproj
@@ -20,7 +20,6 @@
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\config.h" />
- <ClInclude Include="..\eglib\config.h" />
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{92AE7622-5F58-4234-9A26-9EC71876B3F4}</ProjectGuid>
@@ -99,7 +98,8 @@
<SDLCheck>true</SDLCheck>
</ClCompile>
<PostBuildEvent>
- <Command>winsetup.bat</Command>
+ <Command>
+ </Command>
</PostBuildEvent>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
@@ -109,7 +109,8 @@
<SDLCheck>true</SDLCheck>
</ClCompile>
<PostBuildEvent>
- <Command>winsetup.bat</Command>
+ <Command>
+ </Command>
</PostBuildEvent>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
@@ -125,7 +126,8 @@
<OptimizeReferences>true</OptimizeReferences>
</Link>
<PostBuildEvent>
- <Command>winsetup.bat</Command>
+ <Command>
+ </Command>
</PostBuildEvent>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
@@ -141,10 +143,36 @@
<OptimizeReferences>true</OptimizeReferences>
</Link>
<PostBuildEvent>
- <Command>winsetup.bat</Command>
+ <Command>
+ </Command>
</PostBuildEvent>
</ItemDefinitionGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
+ <PropertyGroup Label="LLVMProperties" Condition="$(MONO_ENABLE_LLVM)=='true'">
+ <LLVMConfig>$(MONO_LLVM_BIN_DIR)/llvm-config.exe</LLVMConfig>
+ </PropertyGroup>
+ <Target Name="AfterBuildWinSetup">
+ <Exec Command="winsetup.bat">
+ <Output TaskParameter="ExitCode" PropertyName="WinSetupExitCode" />
+ </Exec>
+ <Error Text="Failed running winsetup.bat" Condition="$(WinSetupExitCode) != 0" />
+ </Target>
+ <Target Name="AfterBuildLLVMSetup" Condition="$(MONO_ENABLE_LLVM)=='true'">
+ <Message Importance="high" Text="Validating LLVM configuration..." />
+ <Error Text="LLVM executable $(LLVMConfig) not found." Condition="!Exists($(LLVMConfig))" />
+ <Message Importance="high" Text="LLVM Version:" />
+ <Exec Command="$(MONO_LLVM_BIN_DIR)/llvm-config.exe --version" ConsoleToMSBuild="true">
+ <Output TaskParameter="ConsoleOutput" PropertyName="MonoLLVMVersion" />
+ </Exec>
+ <Message Importance="high" Text="LLVM API Version:" />
+ <Exec Command="$(MONO_LLVM_BIN_DIR)/llvm-config.exe --mono-api-version" ConsoleToMSBuild="true" EchoOff="true">
+ <Output TaskParameter="ConsoleOutput" PropertyName="MonoLLVMAPIVersion" />
+ </Exec>
+ <Error Text="Compiling with stock LLVM is not supported, please use the Mono LLVM repo at https://github.com/mono/llvm." Condition="!$(MonoLLVMVersion.Contains('mono'))" />
+ <Error Text="Expected llvm version 4, but llvm-config --version returned $(MonoLLVMAPIVersion)." Condition="$(MonoLLVMAPIVersion) != '4'" />
+ <Message Importance="high" Text="Successfully validated LLVM configuration." />
+ </Target>
+ <Target Name="AfterBuild" DependsOnTargets="AfterBuildWinSetup;AfterBuildLLVMSetup" />
</Project> \ No newline at end of file
diff --git a/msvc/build-init.vcxproj.filters b/msvc/build-init.vcxproj.filters
index bcde289799b..4cdc322a7b1 100644
--- a/msvc/build-init.vcxproj.filters
+++ b/msvc/build-init.vcxproj.filters
@@ -1,7 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
- <ClInclude Include="..\eglib\config.h" />
<ClInclude Include="..\config.h" />
</ItemGroup>
</Project> \ No newline at end of file
diff --git a/msvc/libmini-llvm.targets b/msvc/libmini-llvm.targets
index f4b6737f6f4..47ecbde4416 100644
--- a/msvc/libmini-llvm.targets
+++ b/msvc/libmini-llvm.targets
@@ -1,23 +1,24 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
- <ExcludeFromWindowsBuild>true</ExcludeFromWindowsBuild>
+ <ExcludeLLVMFromWindowsBuild Condition="'$(MONO_ENABLE_LLVM)'=='true'">false</ExcludeLLVMFromWindowsBuild>
+ <ExcludeLLVMFromWindowsBuild Condition="'$(MONO_ENABLE_LLVM)'=='' Or '$(MONO_ENABLE_LLVM)'!='true'">true</ExcludeLLVMFromWindowsBuild>
</PropertyGroup>
<ItemGroup Label="llvm_sources">
<ClCompile Include="$(MonoSourceLocation)\mono\mini\mini-llvm-loaded.c">
- <ExcludedFromBuild>$(ExcludeFromWindowsBuild)</ExcludedFromBuild>
+ <ExcludedFromBuild>$(ExcludeLLVMFromWindowsBuild)</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="$(MonoSourceLocation)\mono\mini\mini-llvm.c">
- <ExcludedFromBuild>$(ExcludeFromWindowsBuild)</ExcludedFromBuild>
+ <ExcludedFromBuild>$(ExcludeLLVMFromWindowsBuild)</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="$(MonoSourceLocation)\mono\mini\llvm-runtime.cpp">
- <ExcludedFromBuild>$(ExcludeFromWindowsBuild)</ExcludedFromBuild>
+ <ExcludedFromBuild>$(ExcludeLLVMFromWindowsBuild)</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="$(MonoSourceLocation)\mono\mini\mini-llvm-cpp.cpp">
- <ExcludedFromBuild>$(ExcludeFromWindowsBuild)</ExcludedFromBuild>
+ <ExcludedFromBuild>$(ExcludeLLVMFromWindowsBuild)</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="$(MonoSourceLocation)\mono\mini\llvm-jit.cpp">
- <ExcludedFromBuild>$(ExcludeFromWindowsBuild)</ExcludedFromBuild>
+ <ExcludedFromBuild>$(ExcludeLLVMFromWindowsBuild)</ExcludedFromBuild>
</ClCompile>
</ItemGroup>
</Project>
diff --git a/msvc/libmini.vcxproj b/msvc/libmini.vcxproj
index 63f573ac737..62e9def9d79 100644
--- a/msvc/libmini.vcxproj
+++ b/msvc/libmini.vcxproj
@@ -100,7 +100,7 @@
<ClCompile>
<AdditionalOptions>/D /NODEFAULTLIB:LIBCD" " %(AdditionalOptions)</AdditionalOptions>
<Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_INCLUDE_DIR);$(LIBGC_CPPFLAGS_INCLUDE);$(GLIB_CFLAGS_INCLUDE);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_INCLUDE_DIR);$(LIBGC_CPPFLAGS_INCLUDE);$(GLIB_CFLAGS_INCLUDE);$(MONO_LLVM_INCLUDE_DIR);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PrecompiledHeader>
</PrecompiledHeader>
@@ -125,7 +125,7 @@
<ClCompile>
<AdditionalOptions>/D /NODEFAULTLIB:LIBCD" " %(AdditionalOptions)</AdditionalOptions>
<Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_INCLUDE_DIR);$(LIBGC_CPPFLAGS_INCLUDE);$(GLIB_CFLAGS_INCLUDE);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_INCLUDE_DIR);$(LIBGC_CPPFLAGS_INCLUDE);$(GLIB_CFLAGS_INCLUDE);$(MONO_LLVM_INCLUDE_DIR);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;WIN64;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PrecompiledHeader>
</PrecompiledHeader>
@@ -150,7 +150,7 @@
<ClCompile>
<AdditionalOptions>/D /NODEFAULTLIB:LIBCD" " %(AdditionalOptions)</AdditionalOptions>
<IntrinsicFunctions>true</IntrinsicFunctions>
- <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_INCLUDE_DIR);$(LIBGC_CPPFLAGS_INCLUDE);$(GLIB_CFLAGS_INCLUDE);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_INCLUDE_DIR);$(LIBGC_CPPFLAGS_INCLUDE);$(GLIB_CFLAGS_INCLUDE);$(MONO_LLVM_INCLUDE_DIR);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PrecompiledHeader>
</PrecompiledHeader>
@@ -176,7 +176,7 @@
<ClCompile>
<AdditionalOptions>/D /NODEFAULTLIB:LIBCD" " %(AdditionalOptions)</AdditionalOptions>
<IntrinsicFunctions>true</IntrinsicFunctions>
- <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_INCLUDE_DIR);$(LIBGC_CPPFLAGS_INCLUDE);$(GLIB_CFLAGS_INCLUDE);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_INCLUDE_DIR);$(LIBGC_CPPFLAGS_INCLUDE);$(GLIB_CFLAGS_INCLUDE);$(MONO_LLVM_INCLUDE_DIR);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;WIN64;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PrecompiledHeader>
</PrecompiledHeader>
diff --git a/msvc/libmono-dynamic.vcxproj b/msvc/libmono-dynamic.vcxproj
index 186bd7ffc31..21e64c3495d 100644
--- a/msvc/libmono-dynamic.vcxproj
+++ b/msvc/libmono-dynamic.vcxproj
@@ -97,7 +97,7 @@
<ClCompile>
<AdditionalOptions>/D /NODEFAULTLIB:LIBCD" " %(AdditionalOptions)</AdditionalOptions>
<Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_INCLUDE_DIR);$(LIBGC_CPPFLAGS_INCLUDE);$(GLIB_CFLAGS_INCLUDE);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_INCLUDE_DIR);$(LIBGC_CPPFLAGS_INCLUDE);$(GLIB_CFLAGS_INCLUDE);$(MONO_LLVM_INCLUDE_DIR);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;$(GC_DEFINES);MONO_DLL_EXPORT;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PrecompiledHeader>
</PrecompiledHeader>
@@ -114,12 +114,13 @@
</ProjectReference>
<Link>
<AdditionalDependencies Condition="'$(MONO_TARGET_GC)'=='boehm'">$(GC_LIB);%(AdditionalDependencies)</AdditionalDependencies>
- <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+ <AdditionalLibraryDirectories>$(MONO_LLVM_LIB_DIR);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<ModuleDefinitionFile>
</ModuleDefinitionFile>
<DataExecutionPrevention>
</DataExecutionPrevention>
<ImportLibrary>$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\$(TargetName).lib</ImportLibrary>
+ <AdditionalDependencies>$(MONO_LLVM_LIBS);%(AdditionalDependencies)</AdditionalDependencies>
</Link>
<PostBuildEvent>
<Command>.\libmono.bat "$(MONO_INCLUDE_DIR)" "$(SolutionDir)include\mono" -q</Command>
@@ -136,7 +137,7 @@
<ClCompile>
<AdditionalOptions>/D /NODEFAULTLIB:LIBCD" " %(AdditionalOptions)</AdditionalOptions>
<Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_INCLUDE_DIR);$(LIBGC_CPPFLAGS_INCLUDE);$(GLIB_CFLAGS_INCLUDE);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_INCLUDE_DIR);$(LIBGC_CPPFLAGS_INCLUDE);$(GLIB_CFLAGS_INCLUDE);$(MONO_LLVM_INCLUDE_DIR);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;$(GC_DEFINES);MONO_DLL_EXPORT;WIN64;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PrecompiledHeader>
</PrecompiledHeader>
@@ -153,10 +154,11 @@
</ProjectReference>
<Link>
<AdditionalDependencies Condition="'$(MONO_TARGET_GC)'=='boehm'">$(GC_LIB);%(AdditionalDependencies)</AdditionalDependencies>
- <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+ <AdditionalLibraryDirectories>$(MONO_LLVM_LIB_DIR);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<ModuleDefinitionFile>
</ModuleDefinitionFile>
<ImportLibrary>$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\$(TargetName).lib</ImportLibrary>
+ <AdditionalDependencies>$(MONO_LLVM_LIBS);%(AdditionalDependencies)</AdditionalDependencies>
</Link>
<PostBuildEvent>
<Command>.\libmono.bat "$(MONO_INCLUDE_DIR)" "$(SolutionDir)include\mono" -q</Command>
@@ -170,7 +172,7 @@
<ClCompile>
<AdditionalOptions>/D /NODEFAULTLIB:LIBCD" " %(AdditionalOptions)</AdditionalOptions>
<IntrinsicFunctions>true</IntrinsicFunctions>
- <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_INCLUDE_DIR);$(LIBGC_CPPFLAGS_INCLUDE);$(GLIB_CFLAGS_INCLUDE);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_INCLUDE_DIR);$(LIBGC_CPPFLAGS_INCLUDE);$(GLIB_CFLAGS_INCLUDE);$(MONO_LLVM_INCLUDE_DIR);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;$(GC_DEFINES);MONO_DLL_EXPORT;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<StringPooling>true</StringPooling>
<PrecompiledHeader>
@@ -184,12 +186,13 @@
<ProjectReference />
<Link>
<AdditionalDependencies Condition="'$(MONO_TARGET_GC)'=='boehm'">$(GC_LIB);%(AdditionalDependencies)</AdditionalDependencies>
- <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+ <AdditionalLibraryDirectories>$(MONO_LLVM_LIB_DIR);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<ModuleDefinitionFile>
</ModuleDefinitionFile>
<DataExecutionPrevention>
</DataExecutionPrevention>
<ImportLibrary>$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\$(TargetName).lib</ImportLibrary>
+ <AdditionalDependencies>$(MONO_LLVM_LIBS);%(AdditionalDependencies)</AdditionalDependencies>
</Link>
<PostBuildEvent>
<Command>.\libmono.bat "$(MONO_INCLUDE_DIR)" "$(SolutionDir)include\mono" -q</Command>
@@ -209,7 +212,7 @@
<ClCompile>
<AdditionalOptions>/D /NODEFAULTLIB:LIBCD" " %(AdditionalOptions)</AdditionalOptions>
<IntrinsicFunctions>true</IntrinsicFunctions>
- <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_INCLUDE_DIR);$(LIBGC_CPPFLAGS_INCLUDE);$(GLIB_CFLAGS_INCLUDE);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories>$(MONO_DIR);$(MONO_INCLUDE_DIR);$(LIBGC_CPPFLAGS_INCLUDE);$(GLIB_CFLAGS_INCLUDE);$(MONO_LLVM_INCLUDE_DIR);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;$(GC_DEFINES);MONO_DLL_EXPORT;WIN64;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<StringPooling>true</StringPooling>
<PrecompiledHeader>
@@ -223,10 +226,11 @@
<ProjectReference />
<Link>
<AdditionalDependencies Condition="'$(MONO_TARGET_GC)'=='boehm'">$(GC_LIB);%(AdditionalDependencies)</AdditionalDependencies>
- <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+ <AdditionalLibraryDirectories>$(MONO_LLVM_LIB_DIR);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<ModuleDefinitionFile>
</ModuleDefinitionFile>
<ImportLibrary>$(MONO_BUILD_DIR_PREFIX)$(Platform)\lib\$(Configuration)\$(TargetName).lib</ImportLibrary>
+ <AdditionalDependencies>$(MONO_LLVM_LIBS);%(AdditionalDependencies)</AdditionalDependencies>
</Link>
<PostBuildEvent>
<Command>.\libmono.bat "$(MONO_INCLUDE_DIR)" "$(SolutionDir)include\mono" -q</Command>
diff --git a/msvc/llvm-cmake-config.bat b/msvc/llvm-cmake-config.bat
new file mode 100644
index 00000000000..43bf8d6b58a
--- /dev/null
+++ b/msvc/llvm-cmake-config.bat
@@ -0,0 +1,52 @@
+@ECHO OFF
+
+SET TEMP_PATH=%PATH%
+
+REM Update PATH to include local cmake and phython installations.
+REM SET PATH="C:\tools\cmake-3.10.2-win32-x86\bin";"C:\tools\python2.2.7.15\tools\";%PATH%
+
+SET TOP=%1
+IF "" == "%TOP%" (
+ ECHO Error, first script parameter should be LLVM source folder.
+ GOTO ON_ERROR
+)
+
+IF NOT EXIST "%TOP%" (
+ ECHO Error, could not find "%TOP%".
+ GOTO ON_ERROR
+)
+
+IF NOT EXIST "%~dp0mono.sln" (
+ ECHO Error, script bust be located in same directory as mono.sln file.
+ GOTO ON_ERROR
+)
+
+SET LLVM_SRC_PATH=%TOP%
+SET LLVM_BUILD_PATH=%TOP%\llvm-build
+
+REM Update to reflect value used in mono.props, MONO_LLVM_INSTALL_DIR_PREFIX property.
+SET LLVM_INSTALL_PATH=%~dp0dist\llvm
+
+SET CROSS_CMAKE_FLAGS=^
+-DCMAKE_INSTALL_PREFIX="%LLVM_INSTALL_PATH%" ^
+-DCMAKE_BUILD_TYPE=Release ^
+-DLLVM_ENABLE_ZLIB=OFF ^
+-DLLVM_TARGETS_TO_BUILD="X86" ^
+-DCMAKE_CROSSCOMPILING=False ^
+-DCMAKE_SYSTEM_NAME=Windows
+
+SET TEMP_WD=%CD%
+cd %LLVM_BUILD_PATH%
+ECHO cmake.exe -G "Visual Studio 14 2015 Win64" %CROSS_CMAKE_FLAGS% %LLVM_SRC_PATH%
+cmake.exe -G "Visual Studio 14 2015 Win64" %CROSS_CMAKE_FLAGS% %LLVM_SRC_PATH%
+cd %TEMP_WD%
+
+:ON_ERROR
+ SET CONFIG_RESULT=ERRORLEVEL
+ GOTO ON_EXIT
+
+:ON_EXIT
+ SET PATH=%TEMP_PATH%
+ EXIT /b %CONFIG_RESULT%
+
+@ECHO ON \ No newline at end of file
diff --git a/msvc/mono.props b/msvc/mono.props
index c9bd97e59e9..4c93b8dc47b 100644
--- a/msvc/mono.props
+++ b/msvc/mono.props
@@ -5,6 +5,8 @@
<MONO_BUILD_DIR_PREFIX>$(MSBuildProjectDirectory)/./build/</MONO_BUILD_DIR_PREFIX>
<!-- Change this to custom distribution tree location to enable out of source tree distribution, example c:/mono-dist/ -->
<MONO_INSTALL_DIR_PREFIX>$(MSBuildProjectDirectory)/./dist/</MONO_INSTALL_DIR_PREFIX>
+ <!-- Change this to custom install tree location to enable out of source tree builds, example c:/mono-llvm/ -->
+ <MONO_LLVM_INSTALL_DIR_PREFIX>$(MONO_INSTALL_DIR_PREFIX)llvm/</MONO_LLVM_INSTALL_DIR_PREFIX>
<!-- GC in use, sgen or boehm, default is sgen. -->
<MONO_TARGET_GC>sgen</MONO_TARGET_GC>
<!-- When true, build targets will get a suffix based on used GC. Makes it possible to have builds using different GC's in same build folders, sharing common targets. -->
@@ -15,6 +17,8 @@
<MONO_USE_STATIC_C_RUNTIME>false</MONO_USE_STATIC_C_RUNTIME>
<!-- When true, mono binaries will link using static libmono. When false, mono binaries will link using dynamic libmono. -->
<MONO_USE_STATIC_LIBMONO>false</MONO_USE_STATIC_LIBMONO>
+ <!-- When true, mono binaries will link and include llvm. When false, mono binaries will not link and include llvm. -->
+ <MONO_ENABLE_LLVM>false</MONO_ENABLE_LLVM>
</PropertyGroup>
<PropertyGroup Label="MonoDirectories">
<MonoSourceLocation Condition="'$(MonoSourceLocation)' == '' ">..</MonoSourceLocation>
@@ -30,6 +34,11 @@
<LIBGC_CPPFLAGS_INCLUDE>$(MONO_LIBGC_INCLUDE_DIR)</LIBGC_CPPFLAGS_INCLUDE>
<GLIB_CFLAGS_INCLUDE>$(MONO_EGLIB_SOURCE_DIR)</GLIB_CFLAGS_INCLUDE>
</PropertyGroup>
+ <PropertyGroup Label="MonoLLVMDirectories">
+ <MONO_LLVM_INCLUDE_DIR>$(MONO_LLVM_INSTALL_DIR_PREFIX)include</MONO_LLVM_INCLUDE_DIR>
+ <MONO_LLVM_LIB_DIR>$(MONO_LLVM_INSTALL_DIR_PREFIX)lib</MONO_LLVM_LIB_DIR>
+ <MONO_LLVM_BIN_DIR>$(MONO_LLVM_INSTALL_DIR_PREFIX)bin</MONO_LLVM_BIN_DIR>
+ </PropertyGroup>
<PropertyGroup Label="Static-C-Runtime" Condition="$(MONO_USE_STATIC_C_RUNTIME)=='true'">
<MONO_C_RUNTIME Condition="'$(Configuration)'=='Debug'">MultiThreadedDebug</MONO_C_RUNTIME>
<MONO_C_RUNTIME Condition="'$(Configuration)'!='Debug'">MultiThreaded</MONO_C_RUNTIME>
@@ -66,6 +75,12 @@
<PropertyGroup Label="MonoProfiler">
<VTUNE_INCLUDE_DIR>$(ProgramFiles)/Intel/VTune Amplifier XE 2013/include</VTUNE_INCLUDE_DIR>
</PropertyGroup>
+ <PropertyGroup Label="MONO_ENABLE_LLVM" Condition="$(MONO_ENABLE_LLVM)=='true'">
+ <MONO_LLVM_CODEGEN_LIBS>LLVMX86CodeGen.lib;LLVMX86Desc.lib;LLVMX86Info.lib;LLVMObject.lib;LLVMBitReader.lib;LLVMMCDisassembler.lib;LLVMX86AsmPrinter.lib;LLVMX86Utils.lib;LLVMSelectionDAG.lib;LLVMAsmPrinter.lib;LLVMMCParser.lib;LLVMCodeGen.lib;LLVMScalarOpts.lib;LLVMInstCombine.lib;LLVMTransformUtils.lib;LLVMipa.lib</MONO_LLVM_CODEGEN_LIBS>
+ <MONO_LLVM_JIT_LIBS>LLVMMCJIT.lib;LLVMRuntimeDyld.lib;LLVMObject.lib;LLVMMCParser.lib;LLVMBitReader.lib;LLVMJIT.lib;LLVMExecutionEngine.lib;LLVMCodeGen.lib;LLVMScalarOpts.lib;LLVMInstCombine.lib;LLVMTransformUtils.lib</MONO_LLVM_JIT_LIBS>
+ <MONO_LLVM_LIBS>$(MONO_LLVM_CODEGEN_LIBS);$(MONO_LLVM_JIT_LIBS);LLVMBitWriter.lib;LLVMAnalysis.lib;LLVMTarget.lib;LLVMMC.lib;LLVMCore.lib;LLVMSupport.lib</MONO_LLVM_LIBS>
+ <MONO_ADDITIONAL_PREPROCESSOR_DEFINITIONS>ENABLE_LLVM=1;$(MONO_ADDITIONAL_PREPROCESSOR_DEFINITIONS)</MONO_ADDITIONAL_PREPROCESSOR_DEFINITIONS>
+ </PropertyGroup>
<ItemGroup>
<BuildMacro Include="MONO_BUILD_DIR_PREFIX">
<Value>$(MONO_BUILD_DIR_PREFIX)</Value>
@@ -73,6 +88,9 @@
<BuildMacro Include="MONO_INSTALL_DIR_PREFIX">
<Value>$(MONO_INSTALL_DIR_PREFIX)</Value>
</BuildMacro>
+ <BuildMacro Include="MONO_LLVM_INSTALL_DIR_PREFIX">
+ <Value>$(MONO_LLVM_INSTALL_DIR_PREFIX)</Value>
+ </BuildMacro>
<BuildMacro Include="MONO_TARGET_GC">
<Value>$(MONO_TARGET_GC)</Value>
</BuildMacro>
@@ -88,12 +106,18 @@
<BuildMacro Include="MONO_USE_STATIC_LIBMONO">
<Value>$(MONO_USE_STATIC_LIBMONO)</Value>
</BuildMacro>
+ <BuildMacro Include="MONO_ENABLE_LLVM">
+ <Value>$(MONO_ENABLE_LLVM)</Value>
+ </BuildMacro>
</ItemGroup>
+ <PropertyGroup Label="MonoDefaultPreprocessorDefinitions">
+ <MONO_PREPROCESSOR_DEFINITIONS>__default_codegen__;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;HAVE_CONFIG_H;GC_NOT_DLL;WIN32_THREADS;WINVER=0x0600;_WIN32_WINNT=0x0600;_WIN32_IE=0x0501;_UNICODE;UNICODE;FD_SETSIZE=1024;NVALGRIND;$(MONO_ADDITIONAL_PREPROCESSOR_DEFINITIONS)</MONO_PREPROCESSOR_DEFINITIONS>
+ </PropertyGroup>
<ItemDefinitionGroup>
<ClCompile>
<DllExportPreprocessorDefinitions>MONO_DLL_EXPORT</DllExportPreprocessorDefinitions>
<DllImportPreprocessorDefinitions>MONO_DLL_IMPORT</DllImportPreprocessorDefinitions>
- <PreprocessorDefinitions>__default_codegen__;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;HAVE_CONFIG_H;GC_NOT_DLL;WIN32_THREADS;WINVER=0x0600;_WIN32_WINNT=0x0600;_WIN32_IE=0x0501;_UNICODE;UNICODE;FD_SETSIZE=1024;NVALGRIND;%(PreprocessorDefinitions);</PreprocessorDefinitions>
+ <PreprocessorDefinitions>$(MONO_PREPROCESSOR_DEFINITIONS);%(PreprocessorDefinitions)</PreprocessorDefinitions>
<DisableSpecificWarnings>4273;4005;4152;4221;4214;4204;4201</DisableSpecificWarnings>
<RuntimeLibrary>$(MONO_C_RUNTIME)</RuntimeLibrary>
</ClCompile>
diff --git a/msvc/mono.vcxproj b/msvc/mono.vcxproj
index 0c3eba152b2..7567c5e3b98 100644
--- a/msvc/mono.vcxproj
+++ b/msvc/mono.vcxproj
@@ -103,8 +103,8 @@
</ClCompile>
<ProjectReference />
<Link>
- <AdditionalDependencies>$(MONO_LIBMONO_LIB);%(AdditionalDependencies)</AdditionalDependencies>
- <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+ <AdditionalDependencies>$(MONO_LIBMONO_LIB);$(MONO_LLVM_LIBS);%(AdditionalDependencies)</AdditionalDependencies>
+ <AdditionalLibraryDirectories>$(MONO_LLVM_LIB_DIR);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<SubSystem>Console</SubSystem>
<DataExecutionPrevention>
</DataExecutionPrevention>
@@ -131,8 +131,8 @@
<LinkLibraryDependencies>false</LinkLibraryDependencies>
</ProjectReference>
<Link>
- <AdditionalDependencies>$(MONO_LIBMONO_LIB);%(AdditionalDependencies)</AdditionalDependencies>
- <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+ <AdditionalDependencies>$(MONO_LIBMONO_LIB);$(MONO_LLVM_LIBS);%(AdditionalDependencies)</AdditionalDependencies>
+ <AdditionalLibraryDirectories>$(MONO_LLVM_LIB_DIR);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<SubSystem>Console</SubSystem>
<ShowProgress>
</ShowProgress>
@@ -152,8 +152,8 @@
<LinkLibraryDependencies>false</LinkLibraryDependencies>
</ProjectReference>
<Link>
- <AdditionalDependencies>$(MONO_LIBMONO_LIB);%(AdditionalDependencies)</AdditionalDependencies>
- <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+ <AdditionalDependencies>$(MONO_LIBMONO_LIB);$(MONO_LLVM_LIBS);%(AdditionalDependencies)</AdditionalDependencies>
+ <AdditionalLibraryDirectories>$(MONO_LLVM_LIB_DIR);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<SubSystem>Console</SubSystem>
<DataExecutionPrevention>
</DataExecutionPrevention>
@@ -176,8 +176,8 @@
<LinkLibraryDependencies>false</LinkLibraryDependencies>
</ProjectReference>
<Link>
- <AdditionalDependencies>$(MONO_LIBMONO_LIB);%(AdditionalDependencies)</AdditionalDependencies>
- <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+ <AdditionalDependencies>$(MONO_LIBMONO_LIB);$(MONO_LLVM_LIBS);%(AdditionalDependencies)</AdditionalDependencies>
+ <AdditionalLibraryDirectories>$(MONO_LLVM_LIB_DIR);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<SubSystem>Console</SubSystem>
</Link>
</ItemDefinitionGroup>