aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEli Schwartz <eschwartz@archlinux.org>2022-07-10 17:52:01 -0400
committerNirbheek Chauhan <nirbheek@centricular.com>2022-08-08 19:10:00 +0530
commit79db787663168c7eb208ebc8766e765d8caa36a5 (patch)
tree8fc185c10dfb85e8847f0ac817a6f73212f8755c
parente10a091179086acee4a70a0f2b3a3e7e4fc6b937 (diff)
downloadmeson-79db787663168c7eb208ebc8766e765d8caa36a5.zip
meson-79db787663168c7eb208ebc8766e765d8caa36a5.tar.gz
meson-79db787663168c7eb208ebc8766e765d8caa36a5.tar.bz2
CI: install ifort on Windows
This enables the fortran tests for Azure. We only test on x64, because: - ifort isn't arm64 compatible - x86 may in theory exist, but Meson reports it cannot compile executables
-rw-r--r--azure-pipelines.yml66
-rw-r--r--ci/intel-scripts/activate_windows.bat16
-rwxr-xr-xci/intel-scripts/cache_exclude_windows.sh15
-rw-r--r--ci/intel-scripts/install_windows.bat16
-rw-r--r--ci/run.ps12
-rw-r--r--cross/arm64cl.txt1
-rw-r--r--cross/none.txt1
7 files changed, 116 insertions, 1 deletions
diff --git a/azure-pipelines.yml b/azure-pipelines.yml
index 2bdc65a..cc6cba8 100644
--- a/azure-pipelines.yml
+++ b/azure-pipelines.yml
@@ -1,3 +1,17 @@
+# intel oneapi installation is based on the examples at
+# https://github.com/oneapi-src/oneapi-ci
+#
+# and are copyrighted:
+#
+# SPDX-FileCopyrightText: 2020 Intel Corporation
+# SPDX-License-Identifier: MIT
+#
+# The rest of this file contains the standard Meson project copyright:
+#
+# SPDX-License-Identifer: Apache-2.0
+# Copyright 2022 The Meson development team
+
+
name: $(BuildID)
trigger:
@@ -35,6 +49,8 @@ pr:
variables:
CI: 1
SOURCE_VERSION: $(Build.SourceVersion)
+ WINDOWS_HPCKIT_URL: https://registrationcenter-download.intel.com/akdlm/IRC_NAS/18680/w_HPCKit_p_2022.2.0.173_offline.exe
+ WINDOWS_FORTRAN_COMPONENTS: intel.oneapi.win.ifort-compiler
jobs:
@@ -50,21 +66,46 @@ jobs:
compiler: msvc2017
backend: ninja
MESON_RSP_THRESHOLD: 0
+ # "Compiler ifort can not compile programs"
+ ifort: false
vc2017x64vs:
arch: x64
compiler: msvc2017
backend: vs2017
+ # this causes tons of C projects to error with:
+ # "The syntax of the command is incorrect"
+ ifort: false
clangclx64ninja:
arch: x64
compiler: clang-cl
backend: ninja
+ ifort: true
steps:
+ - task: Cache@2
+ inputs:
+ path: C:\Program Files (x86)\Intel\oneAPI
+ key: '"install" | "$(WINDOWS_HPCKIT_URL)" | "$(WINDOWS_FORTRAN_COMPONENTS)" | "compiler" | ci/intel-scripts/cache_exclude_windows.sh'
+ cacheHitVar: CACHE_RESTORED
+ condition: eq(variables.ifort, 'true')
+ - script: ci/intel-scripts/install_windows.bat $(WINDOWS_HPCKIT_URL) $(WINDOWS_FORTRAN_COMPONENTS)
+ displayName: install ifort
+ condition: and(ne(variables.CACHE_RESTORED, 'true'), eq(variables.ifort, 'true'))
+ - bash: ci/intel-scripts/cache_exclude_windows.sh
+ displayName: exclude unused files from cache
+ condition: and(ne(variables.CACHE_RESTORED, 'true'), eq(variables.ifort, 'true'))
- task: UsePythonVersion@0
inputs:
versionSpec: '3.7'
addToPath: true
architecture: 'x64'
+ - task: BatchScript@1
+ displayName: insert ifort into environment
+ inputs:
+ filename: ci/intel-scripts/activate_windows.bat
+ arguments: vs2019
+ modifyEnvironment: True
+ condition: eq(variables.ifort, 'true')
- task: PowerShell@2
inputs:
targetType: 'filePath'
@@ -83,22 +124,47 @@ jobs:
arch: x64
compiler: msvc2019
backend: ninja
+ ifort: true
vc2019x64vs:
arch: x64
compiler: msvc2019
backend: vs2019
+ # mysteriously, several tests fail because vs cannot find
+ # executables such as cmd.exe ???
+ ifort: false
vc2019arm64ninjacross:
arch: arm64
compiler: msvc2019
backend: ninja
extraargs: --cross arm64cl.txt --cross-only
+ # ifort doesn't support arm64
+ ifort: false
steps:
+ - task: Cache@2
+ inputs:
+ path: C:\Program Files (x86)\Intel\oneAPI
+ key: '"install" | "$(WINDOWS_HPCKIT_URL)" | "$(WINDOWS_FORTRAN_COMPONENTS)" | "compiler" | ci/intel-scripts/cache_exclude_windows.sh'
+ cacheHitVar: CACHE_RESTORED
+ condition: eq(variables.ifort, 'true')
+ - script: ci/intel-scripts/install_windows.bat $(WINDOWS_HPCKIT_URL) $(WINDOWS_FORTRAN_COMPONENTS)
+ displayName: install ifort
+ condition: and(ne(variables.CACHE_RESTORED, 'true'), eq(variables.ifort, 'true'))
+ - bash: ci/intel-scripts/cache_exclude_windows.sh
+ displayName: exclude unused files from cache
+ condition: and(ne(variables.CACHE_RESTORED, 'true'), eq(variables.ifort, 'true'))
- task: UsePythonVersion@0
inputs:
versionSpec: '3.7'
addToPath: true
architecture: 'x64'
+ - task: BatchScript@1
+ displayName: insert ifort into environment
+ inputs:
+ filename: ci/intel-scripts/activate_windows.bat
+ arguments: vs2019
+ modifyEnvironment: True
+ condition: eq(variables.ifort, 'true')
- task: PowerShell@2
inputs:
targetType: 'filePath'
diff --git a/ci/intel-scripts/activate_windows.bat b/ci/intel-scripts/activate_windows.bat
new file mode 100644
index 0000000..f028a17
--- /dev/null
+++ b/ci/intel-scripts/activate_windows.bat
@@ -0,0 +1,16 @@
+REM SPDX-FileCopyrightText: 2020 Intel Corporation
+REM
+REM SPDX-License-Identifier: MIT
+
+set VS_VER=%1
+
+@call "C:\Program Files (x86)\Intel\oneAPI\setvars-vcvarsall.bat" %VS_VER%
+
+for /f "tokens=* usebackq" %%f in (`dir /b "C:\Program Files (x86)\Intel\oneAPI\compiler\" ^| findstr /V latest ^| sort`) do @set "LATEST_VERSION=%%f"
+@call "C:\Program Files (x86)\Intel\oneAPI\compiler\%LATEST_VERSION%\env\vars.bat"
+
+echo "Visual Studio Version: %VS_VER%"
+echo "OneAPI version: %LATEST_VERSION%"
+echo "C:\Program Files (x86)\Intel\oneAPI\compiler\%LATEST_VERSION%\env\vars.bat"
+echo "OneAPI root directory: %ONEAPI_ROOT%"
+where ifort.exe
diff --git a/ci/intel-scripts/cache_exclude_windows.sh b/ci/intel-scripts/cache_exclude_windows.sh
new file mode 100755
index 0000000..ba672f2
--- /dev/null
+++ b/ci/intel-scripts/cache_exclude_windows.sh
@@ -0,0 +1,15 @@
+#!/bin/bash
+
+# SPDX-FileCopyrightText: 2020 Intel Corporation
+#
+# SPDX-License-Identifier: MIT
+
+#shellcheck disable=SC2010
+LATEST_VERSION=$(ls -1 "C:\Program Files (x86)\Intel\oneAPI\compiler" | grep -v latest | sort | tail -1)
+
+rm -rf "C:\Program Files (x86)\Intel\oneAPI\compiler\'$LATEST_VERSION'\windows\compiler\lib\ia32_win"
+rm -rf "C:\Program Files (x86)\Intel\oneAPI\compiler\'$LATEST_VERSION'\windows\bin\intel64_ia32"
+rm -rf "C:\Program Files (x86)\Intel\oneAPI\compiler\'$LATEST_VERSION'\windows\lib\emu"
+rm -rf "C:\Program Files (x86)\Intel\oneAPI\compiler\'$LATEST_VERSION'\windows\lib\oclfpga"
+rm -rf "C:\Program Files (x86)\Intel\oneAPI\compiler\'$LATEST_VERSION'\windows\lib\ocloc"
+rm -rf "C:\Program Files (x86)\Intel\oneAPI\compiler\'$LATEST_VERSION'\windows\lib\x86"
diff --git a/ci/intel-scripts/install_windows.bat b/ci/intel-scripts/install_windows.bat
new file mode 100644
index 0000000..ebba9d5
--- /dev/null
+++ b/ci/intel-scripts/install_windows.bat
@@ -0,0 +1,16 @@
+REM SPDX-FileCopyrightText: 2022 Intel Corporation
+REM
+REM SPDX-License-Identifier: MIT
+
+set URL=%1
+set COMPONENTS=%2
+
+curl.exe --output %TEMP%\webimage.exe --url %URL% --retry 5 --retry-delay 5
+start /b /wait %TEMP%\webimage.exe -s -x -f webimage_extracted --log extract.log
+del %TEMP%\webimage.exe
+if "%COMPONENTS%"=="" (
+ webimage_extracted\bootstrapper.exe -s --action install --eula=accept -p=NEED_VS2017_INTEGRATION=0 -p=NEED_VS2019_INTEGRATION=0 -p=NEED_VS2022_INTEGRATION=0 --log-dir=.
+) else (
+ webimage_extracted\bootstrapper.exe -s --action install --components=%COMPONENTS% --eula=accept -p=NEED_VS2017_INTEGRATION=0 -p=NEED_VS2019_INTEGRATION=0 -p=NEED_VS2022_INTEGRATION=0 --log-dir=.
+)
+rd /s/q "webimage_extracted"
diff --git a/ci/run.ps1 b/ci/run.ps1
index f093673..aa37ee1 100644
--- a/ci/run.ps1
+++ b/ci/run.ps1
@@ -67,7 +67,7 @@ echo ($env:Path).Replace(';',"`n")
echo "=== PATH END ==="
echo ""
-$progs = @("python","ninja","pkg-config","cl","rc","link","pypy3")
+$progs = @("python","ninja","pkg-config","cl","rc","link","pypy3","ifort")
foreach ($prog in $progs) {
echo ""
echo "Locating ${prog}:"
diff --git a/cross/arm64cl.txt b/cross/arm64cl.txt
index f22fca8..aa7398d 100644
--- a/cross/arm64cl.txt
+++ b/cross/arm64cl.txt
@@ -1,6 +1,7 @@
[binaries]
c = 'cl'
cpp = 'cl'
+fc = 'false'
ar = 'lib'
windres = 'rc'
diff --git a/cross/none.txt b/cross/none.txt
index 8727e27..1fbe471 100644
--- a/cross/none.txt
+++ b/cross/none.txt
@@ -11,6 +11,7 @@ endian = 'little'
[binaries]
c = ['false']
cpp = ['false']
+fc = ['false']
objc = ['false']
objcpp = ['false']
ar = ['false']