diff options
author | Toni Saario <toni.saario@qt.io> | 2020-05-27 16:24:24 +0300 |
---|---|---|
committer | Alexandru Croitor <alexandru.croitor@qt.io> | 2020-07-24 17:33:13 +0200 |
commit | 684fea131433dcbb6d24feaf261404d1d9cf69b4 (patch) | |
tree | 5b41e80043960b0881d4c6821fcfe8493ca4e7f5 /coin/instructions/cmake_cross_compilation_qtbase_build_instructions.yaml | |
parent | 5ca6db99a9baa249d2f99132a05bf0ea48117687 (diff) |
CMake: Add instructions to re-use host artifacts for target builds
We don't want to build the host Qt configuration every single time we
do a cross-build in Coin.
Coin learned some new qt5.git platform configuration options, which
allow specifying a dependency between a host Coin configuration and a
target one.
This means we can specify a host macOS config as a dependency when
building iOS, and the host artifacts for all dependent repos
(qtbase, qtsvg, qtdeclarative, etc) will be installed into
/home/qt/work/install (as specified by the
{{.AgentWorkingDir}}/install location).
Same for Linux + Android and Linux + qemu.
Modify the qtbase Coin instructions to use these installed host
artifacts if such a dependency is present (platformDependency is not
null). The target artifacts will be installed into a subfolder of the
host installation, called 'target', e.g. /home/qt/work/install/target.
If a dependency is not present, continue to build a host Qt before
doing a target build. This allows gradual conversion of configurations
in case if some of them don't work, or if the dependencies.yaml have
not propagated far enough for all new repos to use the new
instructions.
In this case the locations of the artifacts are different
host - /home/qt/work/install/host
target - /home/qt/work/install/target
Task-number: QTBUG-85623
Change-Id: I33539f4376034539fb7db80293dc4d39dcb9539b
Reviewed-by: Cristian Adam <cristian.adam@qt.io>
Diffstat (limited to 'coin/instructions/cmake_cross_compilation_qtbase_build_instructions.yaml')
-rw-r--r-- | coin/instructions/cmake_cross_compilation_qtbase_build_instructions.yaml | 76 |
1 files changed, 48 insertions, 28 deletions
diff --git a/coin/instructions/cmake_cross_compilation_qtbase_build_instructions.yaml b/coin/instructions/cmake_cross_compilation_qtbase_build_instructions.yaml index 6a51bdc975..bb9ac0acf9 100644 --- a/coin/instructions/cmake_cross_compilation_qtbase_build_instructions.yaml +++ b/coin/instructions/cmake_cross_compilation_qtbase_build_instructions.yaml @@ -7,34 +7,40 @@ instructions: - type: ChangeDirectory directory: "{{.BuildDir}}/build" - type: MakeDirectory - directory: host - - type: MakeDirectory directory: target - - type: SetBuildDirectory - directory: "{{.SourceDir}}/build/host" - - type: ChangeDirectory - directory: "{{.BuildDir}}" - - type: ExecuteCommand - command: "{{.Env.ENV_PREFIX}} cmake {{.Env.CONFIGURE_ARGS}} -DCMAKE_INSTALL_PREFIX:PATH={{.InstallDir}}/host -DBUILD_TESTING=OFF {{.SourceDir}}" - executeCommandArgumentSplitingBehavior: SplitAfterVariableSubstitution - maxTimeInSeconds: 6000 - maxTimeBetweenOutput: 1200 - userMessageOnFailure: > - Failed to call cmake. - - type: ExecuteCommand - command: "{{.Env.ENV_PREFIX}} cmake --build . --parallel -v" - maxTimeInSeconds: 6000 - maxTimeBetweenOutput: 1200 - userMessageOnFailure: > - Failed to build sources. In the current state bug can be everywhere. - - type: EnvironmentVariable - variableName: COIN_CMAKE_INSTALL_SCRIPT_PATH - variableValue: "{{.BuildDir}}" - - !include "{{qt/qtbase}}/call_host_install.yaml" - - type: EnvironmentVariable - variableName: DESTDIR - variableValue: "{{.InstallRoot}}" - - !include "{{qt/qtbase}}/call_host_install.yaml" + - type: Group + instructions: + - type: MakeDirectory + directory: host + - type: SetBuildDirectory + directory: "{{.SourceDir}}/build/host" + - type: ChangeDirectory + directory: "{{.BuildDir}}" + - type: ExecuteCommand + command: "{{.Env.ENV_PREFIX}} cmake {{.Env.CONFIGURE_ARGS}} -DCMAKE_INSTALL_PREFIX:PATH={{.InstallDir}}/host -DBUILD_TESTING=OFF {{.SourceDir}}" + executeCommandArgumentSplitingBehavior: SplitAfterVariableSubstitution + maxTimeInSeconds: 6000 + maxTimeBetweenOutput: 1200 + userMessageOnFailure: > + Failed to call cmake. + - type: ExecuteCommand + command: "{{.Env.ENV_PREFIX}} cmake --build . --parallel -v" + maxTimeInSeconds: 6000 + maxTimeBetweenOutput: 1200 + userMessageOnFailure: > + Failed to build sources. In the current state bug can be everywhere. + - type: EnvironmentVariable + variableName: COIN_CMAKE_INSTALL_SCRIPT_PATH + variableValue: "{{.BuildDir}}" + - !include "{{qt/qtbase}}/call_host_install.yaml" + - type: EnvironmentVariable + variableName: DESTDIR + variableValue: "{{.InstallRoot}}" + - !include "{{qt/qtbase}}/call_host_install.yaml" + enable_if: + condition: property + property: platformDependency + equals_value: null - type: EnvironmentVariable variableName: DESTDIR variableValue: "" @@ -42,8 +48,22 @@ instructions: directory: "{{.SourceDir}}/build/target" - type: ChangeDirectory directory: "{{.BuildDir}}" + - type: AppendToEnvironmentVariable + variableName: TARGET_CONFIGURE_ARGS + variableValue: " -DQT_HOST_PATH={{.AgentWorkingDir}}/install" + disable_if: + condition: property + property: platformDependency + equals_value: null + - type: AppendToEnvironmentVariable + variableName: TARGET_CONFIGURE_ARGS + variableValue: " -DQT_HOST_PATH={{.InstallDir}}/host" + enable_if: + condition: property + property: platformDependency + equals_value: null - type: ExecuteCommand - command: "{{.Env.TARGET_ENV_PREFIX}} cmake {{.Env.TARGET_CONFIGURE_ARGS}} -DQT_HOST_PATH={{.InstallDir}}/host -DCMAKE_INSTALL_PREFIX:PATH={{.InstallDir}}/target -DBUILD_TESTING=OFF {{.SourceDir}}" + command: "{{.Env.TARGET_ENV_PREFIX}} cmake {{.Env.TARGET_CONFIGURE_ARGS}} -DCMAKE_INSTALL_PREFIX:PATH={{.InstallDir}}/target -DBUILD_TESTING=OFF {{.SourceDir}}" executeCommandArgumentSplitingBehavior: SplitAfterVariableSubstitution maxTimeInSeconds: 6000 maxTimeBetweenOutput: 1200 |