aboutsummaryrefslogtreecommitdiffstats
path: root/src/qtmsbuild/qt_globals.targets
diff options
context:
space:
mode:
authorMiguel Costa <miguel.costa@qt.io>2020-07-17 15:38:29 +0200
committerMiguel Costa <miguel.costa@qt.io>2020-07-24 13:28:36 +0000
commit35d91e7971876eb5f642007a5eb880974d4d15fe (patch)
tree2bc2cddc6e4183faec9f3135a9b0b62c01e187f7 /src/qtmsbuild/qt_globals.targets
parentebca02da7edfbdb50d14f1d98701bb9e8df3150e (diff)
Add support for cross compilation
Added support for building Qt/MSBuild projects using the Linux development workload of Visual Studio. Projects can be built using a local instance of the Windows Subsystem for Linux (WSL) or by connecting to a build server via SSH. Task-number: QTVSADDINBUG-739 Change-Id: Id5122ab8d3a9d7d808783cd0b35e77ed8a61e9c8 Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
Diffstat (limited to 'src/qtmsbuild/qt_globals.targets')
-rw-r--r--src/qtmsbuild/qt_globals.targets109
1 files changed, 104 insertions, 5 deletions
diff --git a/src/qtmsbuild/qt_globals.targets b/src/qtmsbuild/qt_globals.targets
index 9f5ac49d..54815a97 100644
--- a/src/qtmsbuild/qt_globals.targets
+++ b/src/qtmsbuild/qt_globals.targets
@@ -263,10 +263,10 @@
<!--
///////////////////////////////////////////////////////////////////////////////////////////////
- // Run work in parallel processes
+ // Run work locally in parallel processes
// -->
<QtRunWork
- Condition="'@(QtWork)' != ''
+ Condition="'$(ApplicationType)' != 'Linux' AND '@(QtWork)' != ''
AND '%(QtWork.ParallelBuild)' == 'true'
AND '$(DesignTimeBuild)' != 'true'"
QtWork="@(QtWork)" QtMaxProcs="$(QtMaxProcs)" QtDebug="$(QtDebug)">
@@ -275,10 +275,10 @@
<!--
///////////////////////////////////////////////////////////////////////////////////////////////
- // Run work in a single process
+ // Run work locally in a single process
// -->
<QtRunWork
- Condition="'@(QtWork)' != ''
+ Condition="'$(ApplicationType)' != 'Linux' AND '@(QtWork)' != ''
AND '%(QtWork.ParallelBuild)' != 'true'
AND '$(DesignTimeBuild)' != 'true'"
QtWork="@(QtWork)" QtMaxProcs="1" QtDebug="$(QtDebug)">
@@ -287,6 +287,70 @@
<!--
///////////////////////////////////////////////////////////////////////////////////////////////
+ // Run work in build host
+ // -->
+ <!-- // Translate local paths to host paths -->
+ <Flatten
+ Condition="'$(ApplicationType)' == 'Linux'
+ AND '@(QtWork)' != '' AND '$(DesignTimeBuild)' != 'true'"
+ Items="@(QtWork)" Metadata="ResourceFiles">
+ <Output TaskParameter="Result" ItemName="ResourceFiles"/>
+ </Flatten>
+ <ItemGroup
+ Condition="'$(ApplicationType)' == 'Linux'
+ AND '@(QtWork)' != '' AND '$(DesignTimeBuild)' != 'true'">
+ <LocalPath Include="%(QtWork.Identity)">
+ <Name>InputPath</Name>
+ <Item>%(QtWork.Identity)</Item>
+ <Value>%(QtWork.Identity)</Value>
+ </LocalPath>
+ <LocalPath
+ Condition="'%(ResourceFiles.Identity)' != ''"
+ Include="@(ResourceFiles->'%(Item)')">
+ <Name>InputPath</Name>
+ <Item>@(ResourceFiles->'%(Value)')</Item>
+ <Value>@(ResourceFiles->'%(Value)')</Value>
+ </LocalPath>
+ <LocalPath Include="%(QtWork.Identity)">
+ <Name>OutputPath</Name>
+ <Item>%(QtWork.OutputFile)</Item>
+ <Value>%(QtWork.OutputFile)</Value>
+ </LocalPath>
+ </ItemGroup>
+ <HostTranslatePaths
+ Condition="'$(ApplicationType)' == 'Linux'
+ AND '@(QtWork)' != '' AND '$(DesignTimeBuild)' != 'true'"
+ Items="@(LocalPath)" Names="InputPath;OutputPath">
+ <Output TaskParameter="Result" ItemName="HostPath"/>
+ </HostTranslatePaths>
+ <ItemGroup>
+ <InputPath Include="@(HostPath->WithMetadataValue('Name', 'InputPath'))" />
+ <OutputPath Include="@(HostPath->WithMetadataValue('Name', 'OutputPath'))" />
+ </ItemGroup>
+
+ <!-- // Run command -->
+ <HostExec
+ Condition="'$(ApplicationType)' == 'Linux'
+ AND '%(Identity)' != '' AND '$(DesignTimeBuild)' != 'true'"
+ Message="@(QtWork->'%(WorkType) %(Identity)')"
+ Command="@(QtWork->'%(ToolPath) %(Options)')"
+ Inputs="@(InputPath)"
+ Outputs="@(OutputPath)"
+ RemoteTarget="$(ResolvedRemoteTarget)"
+ RemoteProjectDir="$(_ResolvedRemoteProjectDir)">
+ </HostExec>
+
+ <!-- // Generate result item -->
+ <ItemGroup
+ Condition="'$(ApplicationType)' == 'Linux'
+ AND '@(QtWork)' != '' AND '$(DesignTimeBuild)' != 'true'">
+ <QtWorkResult Include="@(QtWork)">
+ <ExitCode>0</ExitCode>
+ </QtWorkResult>
+ </ItemGroup>
+
+ <!--
+ ///////////////////////////////////////////////////////////////////////////////////////////////
// Save tracking log of files read during build; used by VS to check the up-to-date status
// -->
<ItemGroup Condition="'$(DesignTimeBuild)' != 'true'">
@@ -377,6 +441,11 @@
Condition="Exists('$(QtVarsOutputDir)\qtvars_plugin_import.cpp')"
Include="$(QtVarsOutputDir)\qtvars_plugin_import.cpp"/>
</ItemGroup>
+ <ItemGroup Condition="'$(ApplicationType)' == 'Linux'">
+ <QtWork_ClCompile Condition="'%(QtWork_ClCompile.ObjectFileName)' == ''">
+ <ObjectFileName>$(IntDir)%(Filename).o</ObjectFileName>
+ </QtWork_ClCompile>
+ </ItemGroup>
<!-- // Copy default C++ compiler properties -->
<Expand Condition="'@(QtWork_ClCompile)' != ''"
@@ -386,7 +455,7 @@
</Expand>
<!-- // Force pre-compiled header include -->
- <ItemGroup>
+ <ItemGroup Condition="'$(ApplicationType)' != 'Linux'">
<QtWork_ClCompile_Expanded>
<AdditionalIncludeDirectories
>$(ProjectDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
@@ -433,6 +502,36 @@
<!--
///////////////////////////////////////////////////////////////////////////////////////////////
+ // Fixup WSL include paths
+ // -->
+ <Flatten
+ Condition="'$(ApplicationType)' == 'Linux' AND '$(PlatformToolset)' == 'WSL_1_0'"
+ Items="@(ClCompile)" Metadata="AdditionalIncludeDirectories">
+ <Output
+ TaskParameter="Result" ItemName="IncludePath" />
+ </Flatten>
+ <ItemGroup
+ Condition="'$(ApplicationType)' == 'Linux' AND '$(PlatformToolset)' == 'WSL_1_0'">
+ <IncludePath>
+ <Value Condition="$([System.String]::Copy('%(Value)').StartsWith('/'))">..%(Value)</Value>
+ </IncludePath>
+ </ItemGroup>
+ <ItemGroup
+ Condition="'$(ApplicationType)' == 'Linux' AND '$(PlatformToolset)' == 'WSL_1_0'">
+ <ClCompile>
+ <Item>%(Identity)</Item>
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup
+ Condition="'$(ApplicationType)' == 'Linux' AND '$(PlatformToolset)' == 'WSL_1_0'">
+ <ClCompile Condition="'%(Item)' != ''">
+ <AdditionalIncludeDirectories>@(IncludePath->'%(Value)')</AdditionalIncludeDirectories>
+ <Item/>
+ </ClCompile>
+ </ItemGroup>
+
+ <!--
+ ///////////////////////////////////////////////////////////////////////////////////////////////
// Clean-up
// -->
<ItemGroup>