Files
lapack/.github/workflows/cmake.yml
T
scr2016 6faf643a39 in .github/workflows/cmake.yml, removed redundant '--config ${{env.BUILD_TYPE}}' from 'cmake --build build
(1) removed redundant '--config ${{env.BUILD_TYPE}}' from 'cmake --build build -config ${{env.BUILD_TYPE}}' for a sigle configuration generator Ninja.
(2) wrote comments before each 'cmake --build build' about '--config ${{env.BUILD_TYPE}}' redundancy.
(3) in test-install-cblas-lapacke-without-fortran-compiler job, addded 'env' field 'BUILD_TYPE: Release' to make it consistent with other jobs in the script.
2026-04-21 21:02:01 -07:00

270 lines
8.8 KiB
YAML

name: CMake
on:
push:
branches:
- master
- try-github-actions-for-windows
paths:
- .github/workflows/cmake.yml
- '**CMakeLists.txt'
- 'BLAS/**'
- 'CBLAS/**'
- 'CMAKE/**'
- 'INSTALL/**'
- 'LAPACKE/**'
- 'SRC/**'
- 'TESTING/**'
- '!**README'
- '!**Makefile'
- '!**md'
pull_request:
paths:
- .github/workflows/cmake.yml
- '**CMakeLists.txt'
- 'BLAS/**'
- 'CBLAS/**'
- 'CMAKE/**'
- 'INSTALL/**'
- 'LAPACKE/**'
- 'SRC/**'
- 'TESTING/**'
- '!**README'
- '!**Makefile'
- '!**md'
permissions:
contents: read
env:
CFLAGS: "-Wall -pedantic"
# Customize the CMake build type here (Release, Debug, RelWithDebInfo, etc.)
defaults:
run:
shell: bash
jobs:
test-install-release:
# Use GNU compilers
# The CMake configure and build commands are platform agnostic and should work equally
# well on Windows or Mac. You can convert this to a matrix build if you need
# cross-platform coverage.
# See: https://docs.github.com/en/free-pro-team@latest/actions/learn-github-actions/managing-complex-workflows#using-a-build-matrix
runs-on: ${{ matrix.os }}
env:
BUILD_TYPE: Release
FFLAGS: ${{ matrix.fflags }}
strategy:
fail-fast: true
matrix:
os: [ macos-latest, ubuntu-latest, windows-latest ]
fflags: [
"-Wall -Wno-unused-dummy-argument -Wno-unused-variable -Wno-unused-label -Werror=conversion -fimplicit-none -frecursive -fcheck=all",
"-Wall -Wno-unused-dummy-argument -Wno-unused-variable -Wno-unused-label -Werror=conversion -fimplicit-none -frecursive -fcheck=all -fopenmp" ]
steps:
- name: Checkout LAPACK
uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # v3.5.2
- name: Install ninja-build tool
uses: seanmiddleditch/gha-setup-ninja@16b940825621068d98711680b6c3ff92201f8fc0 # v3
- name: Use GCC-14 on MacOS
if: ${{ matrix.os == 'macos-latest' }}
run: >
cmake -B build -G Ninja
-D CMAKE_C_COMPILER="gcc-14"
-D CMAKE_Fortran_COMPILER="gfortran-14"
-D USE_FLAT_NAMESPACE:BOOL=ON
- name: Special flags for Windows
if: ${{ matrix.os == 'windows-latest' }}
run: >
cmake -B build -G Ninja
-D CMAKE_EXE_LINKER_FLAGS="-Wl,--stack=2097152"
- name: Configure CMake
# Configure CMake in a 'build' subdirectory. `CMAKE_BUILD_TYPE` is only required if you are using
# a single-configuration generator such as make or Ninja.
# See https://cmake.org/cmake/help/latest/variable/CMAKE_BUILD_TYPE.html?highlight=cmake_build_type
run: >
cmake -B build -G Ninja
-D CMAKE_BUILD_TYPE=${{env.BUILD_TYPE}}
-D CMAKE_INSTALL_PREFIX=${{github.workspace}}/lapack_install
-D CBLAS:BOOL=ON
-D LAPACKE:BOOL=ON
-D BUILD_TESTING:BOOL=ON
-D LAPACKE_WITH_TMG:BOOL=ON
-D BUILD_SHARED_LIBS:BOOL=ON
- name: Build
# Execute tests defined by the CMake configuration.
# See https://cmake.org/cmake/help/latest/manual/ctest.1.html for more detail
run: cmake --build build
- name: Test with OpenMP
working-directory: ${{github.workspace}}/build
if: ${{ contains( matrix.fflags, 'openmp' ) && (matrix.os != 'windows-latest') }}
run: ctest -C ${{env.BUILD_TYPE}} --schedule-random -j1 --output-on-failure --timeout 100
- name: Test
working-directory: ${{github.workspace}}/build
if: ${{ !contains( matrix.fflags, 'openmp' ) && (matrix.os != 'windows-latest') }}
run: ctest -C ${{env.BUILD_TYPE}} --schedule-random -j2 --output-on-failure --timeout 100
- name: Install
# Since we use a single configuration generator, Ninja, there is no need to provide
# the '--config ${{env.BUILD_TYPE}}' option for the build step in the 'cmake --build' command.
run: cmake --build build --target install -j2
coverage:
runs-on: ubuntu-latest
env:
BUILD_TYPE: Coverage
FFLAGS: "-fopenmp"
steps:
- name: Checkout LAPACK
uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # v3.5.2
- name: Install ninja-build tool
uses: seanmiddleditch/gha-setup-ninja@16b940825621068d98711680b6c3ff92201f8fc0 # v3
- name: Configure CMake
# Configure CMake in a 'build' subdirectory. `CMAKE_BUILD_TYPE` is only required if you are using
# a single-configuration generator such as make or Ninja.
# See https://cmake.org/cmake/help/latest/variable/CMAKE_BUILD_TYPE.html?highlight=cmake_build_type
run: >
cmake -B build -G Ninja
-D CMAKE_BUILD_TYPE=${{env.BUILD_TYPE}}
-D CMAKE_INSTALL_PREFIX=${{github.workspace}}/lapack_install
-D CBLAS:BOOL=ON
-D LAPACKE:BOOL=ON
-D BUILD_TESTING:BOOL=ON
-D LAPACKE_WITH_TMG:BOOL=ON
-D BUILD_SHARED_LIBS:BOOL=ON
- name: Install
# Since we use a single configuration generator, Ninja, there is no need to provide
# the '--config ${{env.BUILD_TYPE}}' option for the build step in the 'cmake --build' command.
run: cmake --build build --target install -j2
- name: Coverage
# Since we use a single configuration generator, Ninja, there is no need to provide
# the '--config ${{env.BUILD_TYPE}}' option for the build step in the 'cmake --build' command.
run: |
echo "Coverage"
cmake --build build --target coverage
bash <(curl -s https://codecov.io/bash) -X gcov
test-install-cblas-lapacke-without-fortran-compiler:
runs-on: ubuntu-latest
env:
BUILD_TYPE: Release
steps:
- name: Checkout LAPACK
uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # v3.5.2
- name: Install ninja-build tool
uses: seanmiddleditch/gha-setup-ninja@16b940825621068d98711680b6c3ff92201f8fc0 # v3
- name: Install basics
run: |
sudo apt update
sudo apt install -y cmake liblapack-dev libblas-dev
sudo apt purge gfortran
- name: Configure CMake
# Configure CMake in a 'build' subdirectory. `CMAKE_BUILD_TYPE` is only required if you are using
# a single-configuration generator such as make or Ninja.
# See https://cmake.org/cmake/help/latest/variable/CMAKE_BUILD_TYPE.html?highlight=cmake_build_type
run: >
cmake -B build -G Ninja
-D CMAKE_BUILD_TYPE=${{env.BUILD_TYPE}}
-D CMAKE_INSTALL_PREFIX=${{github.workspace}}/lapack_install
-D CBLAS:BOOL=ON
-D LAPACKE:BOOL=ON
-D USE_OPTIMIZED_BLAS:BOOL=ON
-D USE_OPTIMIZED_LAPACK:BOOL=ON
-D BUILD_TESTING:BOOL=OFF
-D LAPACKE_WITH_TMG:BOOL=OFF
-D BUILD_SHARED_LIBS:BOOL=ON
- name: Install
# Since we use a single configuration generator, Ninja, there is no need to provide
# the '--config ${{env.BUILD_TYPE}}' option for the build step in the 'cmake --build' command.
run: cmake --build build --target install -j2
memory-check:
runs-on: ubuntu-latest
env:
BUILD_TYPE: Debug
steps:
- name: Checkout LAPACK
uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # v3.5.2
- name: Install ninja-build tool
uses: seanmiddleditch/gha-setup-ninja@16b940825621068d98711680b6c3ff92201f8fc0 # v3
- name: Install APT packages
run: |
sudo apt update
sudo apt install -y cmake valgrind gfortran
- name: Configure CMake
# Configure CMake in a 'build' subdirectory. `CMAKE_BUILD_TYPE` is only required if you are using
# a single-configuration generator such as make or Ninja.
# See https://cmake.org/cmake/help/latest/variable/CMAKE_BUILD_TYPE.html?highlight=cmake_build_type
run: >
cmake -B build -G Ninja
-D CMAKE_BUILD_TYPE=${{env.BUILD_TYPE}}
-D CBLAS:BOOL=ON
-D LAPACKE:BOOL=ON
-D BUILD_TESTING:BOOL=ON
-D LAPACKE_WITH_TMG:BOOL=ON
-D BUILD_SHARED_LIBS:BOOL=ON
-D LAPACK_TESTING_USE_PYTHON:BOOL=OFF
- name: Build
# Since we use a single configuration generator, Ninja, there is no need to provide
# the '--config ${{env.BUILD_TYPE}}' option for the build step in the 'cmake --build' command.
run: cmake --build build
- name: Test
working-directory: ${{github.workspace}}/build
run: |
ctest -C ${{env.BUILD_TYPE}} --output-on-failure --schedule-random -j2 -T memcheck > memcheck.out
cat memcheck.out
if tail -n 1 memcheck.out | grep -q "Memory checking results:"; then
exit 0
else
for f in Testing/Temporary/MemoryChecker.*.log; do
if tail -n 1 $f | grep -q "ERROR SUMMARY: 0 errors"; then
tail -n 1 $f
continue
else
echo "Memory check failed in $f"
cat $f
exit 1
fi
done
exit 0
fi