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
diff options
context:
space:
mode:
Diffstat (limited to 'msvc/mono.external.targets')
-rw-r--r--msvc/mono.external.targets220
1 files changed, 220 insertions, 0 deletions
diff --git a/msvc/mono.external.targets b/msvc/mono.external.targets
new file mode 100644
index 00000000000..9551a71e9b0
--- /dev/null
+++ b/msvc/mono.external.targets
@@ -0,0 +1,220 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+
+ <UsingTask TaskName="_CheckConfigurationProperty" TaskFactory="CodeTaskFactory" AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll">
+ <ParameterGroup>
+ <ConfFile ParameterType="System.String" Required="true" />
+ <ConfRegEx ParameterType="System.String" Required="true" />
+ <ConfPropertyName ParameterType="System.String" Output="true" />
+ <ConfPropertyValue ParameterType="System.String" Output="true" />
+ <ConfPropertyFoundMatch ParameterType="System.String" Output="true" />
+ </ParameterGroup>
+ <Task>
+ <Code Type="Fragment" Language="cs">
+ <![CDATA[
+
+ ConfPropertyName = "";
+ ConfPropertyValue = "";
+ ConfPropertyFoundMatch = "false";
+
+ var regex = new System.Text.RegularExpressions.Regex (ConfRegEx);
+ using (StreamReader reader = new StreamReader(ConfFile))
+ {
+ string line;
+ while ((line = reader.ReadLine ()) != null)
+ {
+ var match = regex.Match (line);
+ if (match != null && match.Success)
+ {
+ if (match.Groups != null && match.Groups.Count == 1)
+ {
+ var propertyLine = match.Groups[0].ToString ();
+ if (!String.IsNullOrEmpty (propertyLine))
+ {
+ var propertyLineItems = propertyLine.Split ('=');
+ if (propertyLineItems != null && propertyLineItems.Length == 2)
+ {
+ ConfPropertyName = propertyLineItems[0].Trim ();
+ ConfPropertyValue = propertyLineItems[1].Trim ();
+ }
+ }
+ }
+ ConfPropertyFoundMatch = "true";
+ break;
+ }
+ }
+ }
+ ]]>
+ </Code>
+ </Task>
+ </UsingTask>
+
+ <UsingTask TaskName="_GetLLVMConfiguration" TaskFactory="CodeTaskFactory" AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll">
+ <ParameterGroup>
+ <LLVMConfTool ParameterType="System.String" Required="true" />
+ <LLVMConfToolArg ParameterType="System.String" Required="true" />
+ <LLVMConfToolOut ParameterType="System.String" Output="true" />
+ </ParameterGroup>
+ <Task>
+ <Using Namespace="System" />
+ <Using Namespace="System.Text" />
+ <Using Namespace="System.Diagnostics" />
+ <Code Type="Fragment" Language="cs">
+ <![CDATA[
+ var process = new Process ();
+
+ process.StartInfo.FileName = LLVMConfTool;
+ process.StartInfo.Arguments = LLVMConfToolArg;
+ process.StartInfo.UseShellExecute = false;
+ process.StartInfo.RedirectStandardOutput = true;
+ process.Start ();
+
+ LLVMConfToolOut = process.StandardOutput.ReadToEnd ().Trim ();
+ process.WaitForExit ();
+
+ if (LLVMConfToolArg.StartsWith ("--libnames"))
+ {
+ var libs = LLVMConfToolOut.Split (' ');
+ StringBuilder libNames = new StringBuilder ();
+ foreach (var lib in libs)
+ {
+ var libPrefixEnd = lib.StartsWith ("lib") ? 3 : 0;
+ var libExtensionStart = lib.LastIndexOf (".");
+
+ if (libNames.Length != 0)
+ libNames.Append (" ");
+
+ libNames.Append (lib.Substring (libPrefixEnd, libExtensionStart - libPrefixEnd) + ".lib");
+ }
+
+ LLVMConfToolOut = libNames.ToString ();
+ }
+
+ if (process.ExitCode != 0)
+ LLVMConfToolOut = "";
+ ]]>
+ </Code>
+ </Task>
+ </UsingTask>
+
+ <PropertyGroup>
+ <_MonoSourceDir>$([System.IO.Path]::GetFullPath('$(MONO_DIR)').TrimEnd('\'))</_MonoSourceDir>
+ <_MonoOutputDir>$([System.IO.Path]::GetFullPath('$(OutDir)'))</_MonoOutputDir>
+ </PropertyGroup>
+
+ <PropertyGroup>
+ <_LLVMSourceDir>$(MONO_INTERNAL_LLVM_SOURCE_DIR)</_LLVMSourceDir>
+ <_LLVMSourceDir Condition="'$(_LLVMSourceDir)' == ''">$(_MonoSourceDir)\external\llvm</_LLVMSourceDir>
+ <_LLVMBuildDir>$([System.IO.Path]::GetFullPath('$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\external\llvm-build\$(Configuration)'))</_LLVMBuildDir>
+ <_LLVMInstallDir>$(_LLVMBuildDir)\install</_LLVMInstallDir>
+ </PropertyGroup>
+
+ <PropertyGroup>
+ <_BtlsBuildDir>$([System.IO.Path]::GetFullPath('$(MONO_BUILD_DIR_PREFIX)$(Platform)\obj\external\btls-build-shared\$(Configuration)'))</_BtlsBuildDir>
+ </PropertyGroup>
+
+ <Target Name="_CheckEnableBtls" Condition="'$(MONO_ENABLE_BTLS)' != 'true'">
+ <_CheckConfigurationProperty ConfFile="$(MONO_DIR)/cygconfig.h" ConfRegEx=".*#define.*HAVE_BTLS.*1">
+ <Output TaskParameter="ConfPropertyFoundMatch" PropertyName="MONO_ENABLE_BTLS" />
+ </_CheckConfigurationProperty>
+ </Target>
+
+ <Target Name="_CheckEnableLLVM" Condition="'$(MONO_ENABLE_LLVM)' != 'true'">
+ <_CheckConfigurationProperty ConfFile="$(MONO_DIR)/cygconfig.h" ConfRegEx=".*#define.*ENABLE_LLVM.*1">
+ <Output TaskParameter="ConfPropertyFoundMatch" PropertyName="MONO_ENABLE_LLVM" />
+ </_CheckConfigurationProperty>
+ </Target>
+
+ <Target Name="_CheckInternalLLVM" Condition="'$(_MonoEnableInternalLLVM)' != 'true' and '$(_MonoEnableExternalLLVM)' != 'true' and '$(MONO_ENABLE_LLVM)' == 'true'" DependsOnTargets="_CheckEnableLLVM">
+ <_CheckConfigurationProperty ConfFile="$(MONO_DIR)/cygconfig.h" ConfRegEx=".*#define.*INTERNAL_LLVM.*1">
+ <Output TaskParameter="ConfPropertyFoundMatch" PropertyName="_MonoEnableInternalLLVM" />
+ </_CheckConfigurationProperty>
+ </Target>
+
+ <Target Name="_CheckExternalLLVM" Condition="'$(_MonoEnableExternalLLVM)' != 'true' and '$(_MonoEnableInternalLLVM)' != 'true' and '$(MONO_ENABLE_LLVM)' == 'true'" DependsOnTargets="_CheckEnableLLVM">
+ <_CheckConfigurationProperty ConfFile="$(MONO_DIR)\Makefile" ConfRegEx=".*EXTERNAL_LLVM_CONFIG_WIN32.*llvm-config.exe">
+ <Output TaskParameter="ConfPropertyFoundMatch" PropertyName="_MonoEnableExternalLLVM" />
+ <Output TaskParameter="ConfPropertyValue" PropertyName="_CheckExternalLLVMOutput" />
+ </_CheckConfigurationProperty>
+ <PropertyGroup>
+ <_MonoLLVMConfig Condition="'$(_MonoEnableExternalLLVM)' == 'true'">$(_CheckExternalLLVMOutput)</_MonoLLVMConfig>
+ </PropertyGroup>
+ </Target>
+
+ <Target Name="_SetDefaultLLVMProperties" Condition="'$(MONO_ENABLE_LLVM)' == 'true'">
+ <PropertyGroup Condition="'$(MONO_EXTERNAL_LLVM_CONFIG)' != ''">
+ <_MonoEnableExternalLLVM>true</_MonoEnableExternalLLVM>
+ <_MonoEnableInternalLLVM>false</_MonoEnableInternalLLVM>
+ <_MonoLLVMConfig>$(MONO_EXTERNAL_LLVM_CONFIG)</_MonoLLVMConfig>
+ </PropertyGroup>
+
+ <PropertyGroup Condition="'$(MONO_EXTERNAL_LLVM_CONFIG)' == ''">
+ <_MonoEnableExternalLLVM>false</_MonoEnableExternalLLVM>
+ <_MonoEnableInternalLLVM>true</_MonoEnableInternalLLVM>
+ <_MonoLLVMConfig>$(_LLVMInstallDir)\bin\llvm-config.exe</_MonoLLVMConfig>
+ </PropertyGroup>
+ </Target>
+
+ <Target Name="_SetupMonoLLVMBuildProperties" Condition="$(MONO_ENABLE_LLVM)=='true'">
+
+ <Error Text="LLVM config executable $(_MonoLLVMConfig) not found." Condition="!Exists($(_MonoLLVMConfig))" />
+
+ <_GetLLVMConfiguration LLVMConfTool="$(_MonoLLVMConfig)" LLVMConfToolArg="--version">
+ <Output TaskParameter="LLVMConfToolOut" PropertyName="MONO_LLVM_VERSION" />
+ </_GetLLVMConfiguration>
+
+ <Error Text="Compiling with stock LLVM is not supported, please use the Mono LLVM repo at https://github.com/mono/llvm." Condition="!$(MONO_LLVM_VERSION.Contains('mono'))" />
+ <Error Text="Expected llvm version 3.6 or 6.0, but llvm-config --version returned $(MONO_LLVM_VERSION)." Condition="!$(MONO_LLVM_VERSION.StartsWith('3.6')) and !$(MONO_LLVM_VERSION.StartsWith('6.0'))" />
+
+ <_GetLLVMConfiguration LLVMConfTool="$(_MonoLLVMConfig)" LLVMConfToolArg="--mono-api-version">
+ <Output TaskParameter="LLVMConfToolOut" PropertyName="MONO_LLVM_API_VERSION" />
+ </_GetLLVMConfiguration>
+
+ <PropertyGroup>
+ <_MonoLLVMConfigComponents>analysis core bitwriter mcjit x86codegen</_MonoLLVMConfigComponents>
+ <_MonoLLVMConfigComponents Condition="$(MONO_LLVM_API_VERSION) &lt; 600">$(_MonoLLVMConfigComponents) jit</_MonoLLVMConfigComponents>
+ <_MonoLLVMConfigComponents Condition="$(MONO_LLVM_API_VERSION) &gt;= 600">$(_MonoLLVMConfigComponents) orcjit</_MonoLLVMConfigComponents>
+ </PropertyGroup>
+
+ <_GetLLVMConfiguration LLVMConfTool="$(_MonoLLVMConfig)" LLVMConfToolArg="--libnames $(_MonoLLVMConfigComponents)">
+ <Output TaskParameter="LLVMConfToolOut" PropertyName="MONO_LLVM_LIBS" />
+ </_GetLLVMConfiguration>
+
+ <PropertyGroup>
+ <MONO_LLVM_LIBS>$(MONO_LLVM_LIBS.Split(' '))</MONO_LLVM_LIBS>
+ </PropertyGroup>
+
+ <_GetLLVMConfiguration LLVMConfTool="$(_MonoLLVMConfig)" LLVMConfToolArg="--includedir">
+ <Output TaskParameter="LLVMConfToolOut" PropertyName="MONO_LLVM_INCLUDE_DIR" />
+ </_GetLLVMConfiguration>
+
+ <_GetLLVMConfiguration LLVMConfTool="$(_MonoLLVMConfig)" LLVMConfToolArg="--bindir">
+ <Output TaskParameter="LLVMConfToolOut" PropertyName="MONO_LLVM_BIN_DIR" />
+ </_GetLLVMConfiguration>
+
+ <_GetLLVMConfiguration LLVMConfTool="$(_MonoLLVMConfig)" LLVMConfToolArg="--libdir">
+ <Output TaskParameter="LLVMConfToolOut" PropertyName="MONO_LLVM_LIB_DIR" />
+ </_GetLLVMConfiguration>
+
+ <Message Importance="normal" Text="LLVM build properties:" />
+ <Message Importance="normal" Text="MONO_LLVM_VERSION = $(MONO_LLVM_VERSION)" />
+ <Message Importance="normal" Text="MONO_LLVM_API_VERSION = $(MONO_LLVM_API_VERSION)" />
+ <Message Importance="normal" Text="MONO_LLVM_LIBS = $(MONO_LLVM_LIBS)" />
+ <Message Importance="normal" Text="MONO_LLVM_INCLUDE_DIR = $(MONO_LLVM_INCLUDE_DIR)" />
+ <Message Importance="normal" Text="MONO_LLVM_BIN_DIR = $(MONO_LLVM_BIN_DIR)" />
+ <Message Importance="normal" Text="MONO_LLVM_LIB_DIR = $(MONO_LLVM_LIB_DIR)" />
+
+ </Target>
+
+ <Target Name="_ConfigureExternalMonoLLVMBuildEnvironment" DependsOnTargets="_SetDefaultLLVMProperties;_CheckEnableLLVM;_CheckInternalLLVM;_CheckExternalLLVM" />
+ <Target Name="_ConfigureExternalMonoBTLSBuildEnvironment" DependsOnTargets="_CheckEnableBtls" />
+ <Target Name="_ConfigureExternalMonoBuildEnvironment" DependsOnTargets="_ConfigureExternalMonoLLVMBuildEnvironment;_ConfigureExternalMonoBTLSBuildEnvironment" />
+
+ <PropertyGroup>
+ <PrepareForBuildDependsOn>
+ _ConfigureExternalMonoBuildEnvironment;
+ $(PrepareForBuildDependsOn);
+ </PrepareForBuildDependsOn>
+ </PropertyGroup>
+
+</Project> \ No newline at end of file