diff options
author | Miguel Costa <miguel.costa@qt.io> | 2020-07-17 15:38:29 +0200 |
---|---|---|
committer | Miguel Costa <miguel.costa@qt.io> | 2020-07-24 13:28:36 +0000 |
commit | 35d91e7971876eb5f642007a5eb880974d4d15fe (patch) | |
tree | 2bc2cddc6e4183faec9f3135a9b0b62c01e187f7 /src/qtmsbuild/qt_globals.targets | |
parent | ebca02da7edfbdb50d14f1d98701bb9e8df3150e (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.targets | 109 |
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> |