1545d56db0173d0c355f85d37743d62b88878651
[platform/upstream/openblas.git] / azure-pipelines.yml
1 trigger:
2   # start a new build for every push
3   batch: False
4   branches:
5     include:
6       - develop
7 resources:
8   containers:
9       - container: oneapi-hpckit
10         image: intel/oneapi-hpckit:latest
11         options: '-v /usr/bin/sudo:/usr/bin/sudo -v /usr/lib/sudo/libsudo_util.so.0:/usr/lib/sudo/libsudo_util.so.0 -v /usr/lib/sudo/sudoers.so:/usr/lib/sudo/sudoers.so'
12       - container: oneapi-basekit
13         image: intel/oneapi-basekit:latest
14         options: '-v /usr/bin/sudo:/usr/bin/sudo -v /usr/lib/sudo/libsudo_util.so.0:/usr/lib/sudo/libsudo_util.so.0 -v /usr/lib/sudo/sudoers.so:/usr/lib/sudo/sudoers.so'
15  
16 jobs:
17 # manylinux1 is useful to test because the
18 # standard Docker container uses an old version
19 # of gcc / glibc
20 - job: manylinux1_gcc
21   pool:
22     vmImage: 'ubuntu-latest'
23   steps:
24   - script: |
25       echo "FROM quay.io/pypa/manylinux1_x86_64
26         COPY . /tmp/openblas
27         RUN cd /tmp/openblas                                      &&  \
28             COMMON_FLAGS='DYNAMIC_ARCH=1 TARGET=NEHALEM NUM_THREADS=32' && \
29             BTYPE='BINARY=64' CC=gcc && \
30             make QUIET_MAKE=1 $COMMON_FLAGS $BTYPE && \
31             make -C test $COMMON_FLAGS $BTYPE && \
32             make -C ctest $COMMON_FLAGS $BTYPE && \
33             make -C utest $COMMON_FLAGS $BTYPE" > Dockerfile
34       docker build .
35     displayName: Run manylinux1 docker build
36 - job: Intel_SDE_skx
37   pool:
38     vmImage: 'ubuntu-latest'
39   steps:
40   - script: |
41       # at the time of writing the available Azure Ubuntu vm image
42       # does not support AVX512VL, so use more recent LTS version
43       echo "FROM ubuntu:bionic
44       COPY . /tmp/openblas
45       RUN apt-get -y update && apt-get -y install \\
46           cmake \\
47           gfortran \\
48           make \\
49           wget
50       RUN mkdir /tmp/SDE && cd /tmp/SDE && \\
51           mkdir sde-external-8.35.0-2019-03-11-lin && \\
52           wget --quiet -O sde-external-8.35.0-2019-03-11-lin.tar.bz2 https://www.dropbox.com/s/fopsnzj67572sj5/sde-external-8.35.0-2019-03-11-lin.tar.bz2?dl=0 && \\
53           tar -xjvf sde-external-8.35.0-2019-03-11-lin.tar.bz2 -C /tmp/SDE/sde-external-8.35.0-2019-03-11-lin --strip-components=1
54       RUN cd /tmp/openblas && CC=gcc make QUIET_MAKE=1 DYNAMIC_ARCH=1 NUM_THREADS=32 BINARY=64
55       CMD cd /tmp/openblas && echo 0 > /proc/sys/kernel/yama/ptrace_scope && CC=gcc OPENBLAS_VERBOSE=2 /tmp/SDE/sde-external-8.35.0-2019-03-11-lin/sde64 -cpuid_in /tmp/SDE/sde-external-8.35.0-2019-03-11-lin/misc/cpuid/skx/cpuid.def -- make -C utest DYNAMIC_ARCH=1 NUM_THREADS=32 BINARY=64" > Dockerfile
56       docker build -t intel_sde .
57       # we need a privileged docker run for sde process attachment
58       docker run --privileged intel_sde
59     displayName: 'Run AVX512 SkylakeX docker build / test'
60
61 - job: Windows_cl
62   pool:
63      vmImage: 'windows-latest'
64   steps:   
65   - task: CMake@1
66     inputs:
67       workingDirectory: 'build' # Optional
68       cmakeArgs: '-G "Visual Studio 17 2022" ..'
69   - task: CMake@1
70     inputs:
71       cmakeArgs: '--build . --config Release'
72       workingDirectory: 'build'
73   - script: |
74       cd build
75       cd utest
76       dir
77       openblas_utest.exe
78
79 - job: Windows_mingw_gmake
80   pool:
81      vmImage: 'windows-latest'
82   steps:   
83   - script: |
84       mingw32-make CC=gcc FC=gfortran DYNAMIC_ARCH=1 DYNAMIC_LIST="NEHALEM SANDYBRIDGE HASWELL"
85
86 - job: Windows_clang_cmake
87   pool:
88      vmImage: 'windows-latest'
89   steps:
90   - script: |
91       set "PATH=C:\Miniconda\Scripts;C:\Miniconda\Library\bin;C:\Miniconda\Library\usr\bin;C:\Miniconda\condabin;%PATH%"
92       set "LIB=C:\Miniconda\Library\lib;%LIB%"
93       set "CPATH=C:\Miniconda\Library\include;%CPATH%
94       conda config --add channels conda-forge --force
95       conda config --set auto_update_conda false
96       conda install --yes ninja
97       call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Auxiliary\Build\vcvars64.bat"
98       mkdir build 
99       cd build
100       cmake -G "Ninja" -DCMAKE_C_COMPILER=clang-cl -DCMAKE_CXX_COMPILER=clang-cl -DCMAKE_MT=mt -DCMAKE_BUILD_TYPE=Release -DNOFORTRAN=1 -DMSVC_STATIC_CRT=ON ..
101       cmake --build . --config Release
102       ctest
103
104 - job: Windows_flang_clang
105   pool:
106      vmImage: 'windows-2022'
107   steps:
108   - script: |
109       set "PATH=C:\Miniconda\Scripts;C:\Miniconda\Library\bin;C:\Miniconda\Library\usr\bin;C:\Miniconda\condabin;%PATH%"
110       set "LIB=C:\Miniconda\Library\lib;%LIB%"
111       set "CPATH=C:\Miniconda\Library\include;%CPATH%"
112       conda config --add channels conda-forge --force
113       conda config --set auto_update_conda false
114       conda install --yes --quiet ninja flang
115       mkdir build 
116       cd build
117       call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvars64.bat"
118       cmake -G "Ninja" -DCMAKE_C_COMPILER=clang-cl -DCMAKE_CXX_COMPILER=clang-cl -DCMAKE_Fortran_COMPILER=flang -DBUILD_TESTING=OFF -DCMAKE_MT=mt -DCMAKE_BUILD_TYPE=Release -DMSVC_STATIC_CRT=ON ..
119       cmake --build . --config Release
120       ctest
121
122 - job: OSX_OpenMP
123   pool:
124      vmImage: 'macOS-10.15'
125   steps:   
126   - script: |
127       brew update
128       make TARGET=CORE2 DYNAMIC_ARCH=1 USE_OPENMP=1 INTERFACE64=1 CC=gcc-10 FC=gfortran-10
129       make TARGET=CORE2 DYNAMIC_ARCH=1 USE_OPENMP=1 INTERFACE64=1 CC=gcc-10 FC=gfortran-10 PREFIX=../blasinst install
130       ls -lR ../blasinst
131      
132 - job: OSX_GCC_Nothreads
133   pool:
134      vmImage: 'macOS-10.15'
135   steps:   
136   - script: |
137       brew update
138       make USE_THREADS=0 CC=gcc-10 FC=gfortran-10
139      
140 - job: OSX_OpenMP_Clang
141   pool:
142      vmImage: 'macOS-10.15'
143   variables:
144      LD_LIBRARY_PATH: /usr/local/opt/llvm/lib
145      LIBRARY_PATH: /usr/local/opt/llvm/lib
146   steps:   
147   - script: |
148       brew update
149       brew install llvm libomp
150       make TARGET=CORE2 USE_OPENMP=1 INTERFACE64=1 DYNAMIC_ARCH=1 CC=/usr/local/opt/llvm/bin/clang FC=gfortran-10
151
152 - job: OSX_OpenMP_Clang_cmake
153   pool:
154      vmImage: 'macOS-10.15'
155   variables:
156      LD_LIBRARY_PATH: /usr/local/opt/llvm/lib
157      LIBRARY_PATH: /usr/local/opt/llvm/lib
158   steps:   
159   - script: |
160       brew update
161       brew install llvm libomp
162       mkdir build
163       cd build
164       cmake -DTARGET=CORE2 -DUSE_OPENMP=1 -DINTERFACE64=1 -DDYNAMIC_ARCH=1 -DCMAKE_C_COMPILER=/usr/local/opt/llvm/bin/clang -DNOFORTRAN=1 -DNO_AVX512=1 ..
165       make
166       ctest
167       
168 - job: OSX_dynarch_cmake
169   pool:
170      vmImage: 'macOS-10.15'
171   variables:
172      LD_LIBRARY_PATH: /usr/local/opt/llvm/lib
173      LIBRARY_PATH: /usr/local/opt/llvm/lib
174   steps:   
175   - script: |
176       mkdir build
177       cd build
178       cmake -DTARGET=CORE2 -DDYNAMIC_ARCH=1 -DCMAKE_C_COMPILER=gcc-10 -DCMAKE_Fortran_COMPILER=gfortran-10 -DBUILD_SHARED_LIBS=ON ..
179       cmake --build .
180       ctest
181
182 - job: OSX_Ifort_Clang
183   pool:
184      vmImage: 'macOS-10.15'
185   variables:
186      LD_LIBRARY_PATH: /usr/local/opt/llvm/lib
187      MACOS_HPCKIT_URL: https://registrationcenter-download.intel.com/akdlm/irc_nas/17643/m_HPCKit_p_2021.2.0.2903_offline.dmg
188      LIBRARY_PATH: /usr/local/opt/llvm/lib
189      MACOS_FORTRAN_COMPONENTS: intel.oneapi.mac.ifort-compiler
190   steps:   
191   - script: |
192       brew update
193       brew install llvm libomp
194       sudo mkdir -p /opt/intel
195       sudo chown $USER /opt/intel
196     displayName: prepare for cache restore
197   - task: Cache@2
198     inputs:
199       path: /opt/intel/oneapi
200       key: '"install" | "$(MACOS_HPCKIT_URL)" | "$(MACOS_FORTRAN_COMPONENTS)"'
201       cacheHitVar: CACHE_RESTORED
202   - script: | 
203       curl --output webimage.dmg --url $(MACOS_HPCKIT_URL) --retry 5 --retry-delay 5
204       hdiutil attach webimage.dmg
205       sudo /Volumes/"$(basename "$(MACOS_HPCKIT_URL)" .dmg)"/bootstrapper.app/Contents/MacOS/bootstrapper -s --action install --components="$(MACOS_FORTRAN_COMPONENTS)" --eula=accept --continue-with-optional-error=yes --log-dir=.
206       installer_exit_code=$?
207       hdiutil detach /Volumes/"$(basename "$URL" .dmg)" -quiet
208       exit $installer_exit_code
209     displayName: install
210     condition: ne(variables.CACHE_RESTORED, 'true')
211   - script: | 
212       source /opt/intel/oneapi/setvars.sh
213       make CC=/usr/local/opt/llvm/bin/clang FC=ifort
214  
215 - job: OSX_NDK_ARMV7
216   pool:
217      vmImage: 'macOS-10.15'
218   steps:   
219   - script: | 
220       brew update
221       brew install --cask android-ndk
222       export ANDROID_NDK_HOME=/usr/local/share/android-ndk
223       make TARGET=ARMV7 ONLY_CBLAS=1 CC=$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/darwin-x86_64/bin/armv7a-linux-androideabi21-clang AR=$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/darwin-x86_64/bin/llvm-ar HOSTCC=gcc ARM_SOFTFP_ABI=1 -j4
224
225 - job: OSX_IOS_ARMV8
226   pool:
227      vmImage: 'macOS-11'
228   variables:
229      CC: /Applications/Xcode_12.4.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang
230      CFLAGS: -O2 -Wno-macro-redefined -isysroot /Applications/Xcode_12.4.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.4.sdk -arch arm64 -miphoneos-version-min=10.0
231   steps:
232   - script: |
233      make TARGET=ARMV8 DYNAMIC_ARCH=1 NUM_THREADS=32 HOSTCC=clang NOFORTRAN=1
234
235 - job: OSX_IOS_ARMV7
236   pool:
237      vmImage: 'macOS-10.15'
238   variables:
239      CC: /Applications/Xcode_12.4.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang
240      CFLAGS: -O2 -mno-thumb -Wno-macro-redefined -isysroot /Applications/Xcode_12.4.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.4.sdk -arch armv7 -miphoneos-version-min=5.1
241   steps:
242   - script: |
243      make TARGET=ARMV7 DYNAMIC_ARCH=1 NUM_THREADS=32 HOSTCC=clang NOFORTRAN=1
244
245 - job: ALPINE_MUSL
246   pool:
247      vmImage: 'ubuntu-latest'
248   steps:
249   - script: |
250         wget https://raw.githubusercontent.com/alpinelinux/alpine-chroot-install/v0.13.2/alpine-chroot-install \
251           && echo '60c7e0b5d82e21d1a549fc9a46ba3b36688c09dc  alpine-chroot-install' | sha1sum -c \
252           || exit 1
253         alpine() { /alpine/enter-chroot -u "$USER" "$@"; }
254         sudo sh alpine-chroot-install -p 'build-base gfortran perl linux-headers sudo'
255         alpine make DYNAMIC_ARCH=1 BINARY=64
256         alpine make DYNAMIC_ARCH=1 BINARY=64 PREFIX=mytestdir install
257         alpine ls -l mytestdir/include
258         alpine echo "// tests that inclusion of openblas_config.h works with musl" >test_install.c
259         alpine echo "#include <openblas_config.h>" >>test_install.c
260         alpine echo "int main(){" >> test_install.c
261         alpine echo "cpu_set_t* cpu_set = NULL;}" >>test_install.c
262         alpine gcc -Imytestdir/include test_install.c -Lmytestdir/lib -lopenblas -lpthread -lgfortran -o test_install
263