version: 1 accept_configuration: condition: property property: host.os equals_property: target.os windows_specific_instructions: - &export_target_architecture_and_sdk # Export TARGET_ARCHITECTURE and WINDOWS_SDK_VERSION for MSVC cross compilation type: Group enable_if: condition: property property: host.os equals_value: Windows instructions: - type: EnvironmentVariable variableName: TARGET_ARCHITECTURE variableValue: amd64 # TODO add something like "{{toLower .Config host.arch}}" disable_if: condition: property property: host.arch not_equals_property: target.arch - type: EnvironmentVariable variableName: TARGET_ARCHITECTURE variableValue: amd64_x86 enable_if: condition: and conditions: - condition: property property: target.arch equals_property: X86 - condition: property property: host.arch equals_property: X86_64 - type: EnvironmentVariable # HACK. Overwrite TARGET_ARCHITECTURE as we do not use standard MSVC cross # compilation targets here. The target architecture will be detected by Qt. variableName: TARGET_ARCHITECTURE variableValue: x86 enable_if: condition: property property: target.os in_values: ["WINRT", "WINPHONE", "WINCE"] - type: EnvironmentVariable variableName: WINDOWS_SDK_VERSION variableValue: "10.0.14393.0" enable_if: condition: property property: target.os equals_value: WINRT - type: EnvironmentVariable variableName: WINDOWS_SDK_VERSION variableValue: "" disable_if: condition: property property: host.os equals_value: WINRT # TODO set windows sdk version for desktop windows as well - &find_path_to_compiler # MSVC is installed in somehow arbitrary places. To reduce amount of combinations we need to make a variable. # This seems inverted, but on 64 bit hosts VS is installed into the x86 path, otherwise the regular one # TODO cleanup, that step could be removed if we have same installation paths or we read the path from registry. type: Group enable_if: condition: property property: host.os equals_value: Windows instructions: # Try to pick one of many coexistent MSVC installation to use # TODO cleanup, that could be much simpler if all tools are installed to similar paths, so it would # be enough to substitute compiler name. - type: EnvironmentVariable variableName: VC_SCRIPT variableValue: "%VS90COMNTOOLS%\\vsvars32.bat" enable_if: condition: property property: host.compiler equals_value: MSVC2008 - type: EnvironmentVariable variableName: VC_SCRIPT variableValue: "%VS100COMNTOOLS%\\vsvars32.bat" enable_if: condition: property property: host.compiler equals_value: MSVC2010 - type: EnvironmentVariable variableName: VC_SCRIPT variableValue: "%ProgramFiles(x86)%\\Microsoft Visual Studio 11.0\\VC\\vcvarsall.bat" enable_if: condition: property property: host.compiler equals_value: MSVC2012 - type: EnvironmentVariable variableName: VC_SCRIPT variableValue: "%ProgramFiles(x86)%\\Microsoft Visual Studio 12.0\\VC\\vcvarsall.bat" enable_if: condition: property property: host.compiler equals_value: MSVC2013 - type: EnvironmentVariable variableName: VC_SCRIPT variableValue: "%ProgramFiles(x86)%\\Microsoft Visual Studio 14.0\\VC\\vcvarsall.bat" enable_if: condition: property property: host.compiler equals_value: MSVC2015 - type: EnvironmentVariable variableName: VC_SCRIPT variableValue: "%ProgramFiles(x86)%\\Microsoft Visual Studio\\2017\\Professional\\VC\\Auxiliary\\Build\\vcvarsall.bat" enable_if: condition: property property: host.compiler equals_value: MSVC2017 - type: EnvironmentVariable variableName: VC_SCRIPT variableValue: "%ProgramFiles(x86)%\\Microsoft Visual Studio\\2019\\Professional\\VC\\Auxiliary\\Build\\vcvarsall.bat" enable_if: condition: property property: host.compiler equals_value: MSVC2019 icc_specific_instructions: &icc_export_variables type: Group instructions: - type: EnvironmentVariable variableName: LD_LIBRARY_PATH variableValue: "{{.Env.ICC64_18_LDLP}}" - type: PrependToEnvironmentVariable variableName: PATH variableValue: "{{.Env.ICC64_18_PATH}}" enable_if: condition: property property: host.compiler equals_value: ICC_18 set_cmake_compiler: &set_cmake_c_cxx_compiler type: Group instructions: - type: PrependToEnvironmentVariable variableName: CONFIGURE_ARGS variableValue: "-DCMAKE_C_COMPILER=icc -DCMAKE_CXX_COMPILER=icpc " enable_if: condition: property property: host.compiler contains_value: ICC - type: PrependToEnvironmentVariable variableName: CONFIGURE_ARGS variableValue: "-DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++ " enable_if: condition: property property: host.compiler contains_value: GCC - type: PrependToEnvironmentVariable variableName: CONFIGURE_ARGS variableValue: "-DCMAKE_C_COMPILER=cl.exe -DCMAKE_CXX_COMPILER=cl.exe " enable_if: condition: property property: host.compiler contains_value: MSVC - type: PrependToEnvironmentVariable variableName: CONFIGURE_ARGS variableValue: "-DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ " enable_if: condition: property property: host.compiler contains_value: Clang call_cmake_instructions: &call_cmake type: Group instructions: - type: ExecuteCommand command: "{{.Env.ENV_PREFIX}} {{.InstallDir}}\\bin\\qt-cmake {{.SourceDir}}/tests" maxTimeInSeconds: 6000 maxTimeBetweenOutput: 120 userMessageOnFailure: > Failed to call cmake. Contact Liang then. enable_if: condition: property property: host.os equals_value: Windows - type: ExecuteCommand command: "{{.InstallDir}}/bin/qt-cmake {{.SourceDir}}/tests" maxTimeInSeconds: 6000 maxTimeBetweenOutput: 120 userMessageOnFailure: > Failed to call cmake. Contact Liang then. disable_if: condition: property property: host.os equals_value: Windows upload_test_artifacts_instruction: &upload_test_artifacts type: Group instructions: - type: UploadTestArtifact transferType: UploadModuleTestsArtifact archiveDirectory: "{{.SourceDir}}/tests" maxTimeInSeconds: 1200 maxTimeBetweenOutput: 1200 disable_if: condition: property property: configureArgs in_values: "-DBUILD_SHARED_LIBS=OFF" regular_specific_test_instructions: ®ular_test_instructions type: Group instructions: - type: InstallTestBinaryArchive relativeStoragePath: "{{.Env.MODULE_ARTIFACTS_RELATIVE_STORAGE_PATH}}" directory: "{{.SourceDir}}/tests" maxTimeInSeconds: 1200 maxTimeBetweenOutput: 1200 userMessageOnFailure: > Failed to install tests archive. - type: ChangeDirectory directory: "{{.SourceDir}}/tests" - type: ExecuteCommand command: "ctest -V --rerun-failed" ignoreExitCode: true maxTimeInSeconds: 7200 maxTimeBetweenOutput: 900 userMessageOnFailure: > Failed to run tests. disable_if: condition: property property: configureArgs in_values: "-DBUILD_SHARED_LIBS=OFF" build_instructions: - type: MakeDirectory directory: .git - type: SetBuildDirectory directory: "{{.SourceDir}}" - type: ChangeDirectory directory: "{{.BuildDir}}" - type: EnvironmentVariable variableName: CMAKE_GENERATOR variableValue: Ninja - *icc_export_variables - *set_cmake_c_cxx_compiler - *export_target_architecture_and_sdk - *find_path_to_compiler # With MSVC we need setup the environment before every subprocess call. - type: WriteFile fileContents: "call \"{{.Env.VC_SCRIPT}}\" {{.Env.TARGET_ARCHITECTURE}} {{.Env.WINDOWS_SDK_VERSION}}\r\ncmd /c %*" filename: c:\\users\\qt\\prefix.bat fileMode: 420 maxTimeInSeconds: 20 maxTimeBetweenOutput: 20 enable_if: condition: property property: host.os equals_value: Windows - type: EnvironmentVariable variableName: ENV_PREFIX variableValue: "c:\\users\\qt\\prefix.bat" enable_if: condition: property property: host.os equals_value: Windows - type: EnvironmentVariable variableName: ENV_PREFIX variableValue: "" disable_if: condition: property property: host.os equals_value: Windows - type: ExecuteCommand command: "{{.Env.ENV_PREFIX}} cmake {{.Env.CONFIGURE_ARGS}} -DCMAKE_INSTALL_PREFIX:PATH={{.InstallDir}} -DBUILD_TESTING=OFF {{.SourceDir}}" executeCommandArgumentSplitingBehavior: SplitAfterVariableSubstitution maxTimeInSeconds: 6000 maxTimeBetweenOutput: 120 userMessageOnFailure: > Failed to call cmake. Contact Liang then. - type: ExecuteCommand # TODO: remove me, just debuging command: cmd.exe /c type {{.BuildDir}}\\CMakeCache.txt enable_if: condition: property property: host.os equals_value: Windows maxTimeInSeconds: 60 userMessageOnFailure: Could not print the file cmake config file. This should not be possible. - type: ExecuteCommand command: "{{.Env.ENV_PREFIX}} cmake --build ." maxTimeInSeconds: 6000 maxTimeBetweenOutput: 120 userMessageOnFailure: > Failed to build sources. In the current state bug can be everywhere. Contact Liang first. - type: ExecuteCommand command: "{{.Env.ENV_PREFIX}} cmake --install ." maxTimeInSeconds: 6000 maxTimeBetweenOutput: 120 userMessageOnFailure: > Failed to install package. - type: EnvironmentVariable variableName: DESTDIR variableValue: "{{.InstallRoot}}" - type: ExecuteCommand command: "{{.Env.ENV_PREFIX}} cmake --install ." maxTimeInSeconds: 6000 maxTimeBetweenOutput: 120 userMessageOnFailure: > Failed to install package for archiving. - type: SignPackage enable_if: condition: property property: host.os equals_value: Windows directory: "{{.InstallRoot}}/{{.AgentWorkingDir}}" maxTimeInSeconds: 1200 maxTimeBetweenOutput: 1200 - type: UploadArtifact archiveDirectory: "{{.InstallRoot}}/{{.AgentWorkingDir}}" transferType: UploadModuleBuildArtifact maxTimeInSeconds: 1200 maxTimeBetweenOutput: 1200 - type: ChangeDirectory directory: "{{.SourceDir}}/tests" - *call_cmake - type: ExecuteCommand command: "{{.Env.ENV_PREFIX}} cmake --build ." maxTimeInSeconds: 6000 maxTimeBetweenOutput: 120 userMessageOnFailure: > Failed to build sources. In the current state bug can be everywhere. Contact Liang first. - *upload_test_artifacts test_instructions: - *regular_test_instructions