Merge pull request #4016 from mmuetzel/ci-msys2

Add support for LLVM Flang
This commit is contained in:
Martin Kroeker 2023-08-05 15:59:34 +02:00 committed by GitHub
commit b63e4581a3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 46 additions and 16 deletions

View File

@ -151,40 +151,53 @@ jobs:
strategy: strategy:
fail-fast: false fail-fast: false
matrix: matrix:
msystem: [MINGW64, MINGW32, CLANG64] msystem: [MINGW64, MINGW32, CLANG64, CLANG32]
idx: [int32, int64] idx: [int32, int64]
build-type: [Release] build-type: [Release]
include: include:
- msystem: MINGW64 - msystem: MINGW64
idx: int32 idx: int32
target-prefix: mingw-w64-x86_64 target-prefix: mingw-w64-x86_64
fc-pkg: mingw-w64-x86_64-gcc-fortran fc-pkg: fc
- msystem: MINGW32 - msystem: MINGW32
idx: int32 idx: int32
target-prefix: mingw-w64-i686 target-prefix: mingw-w64-i686
fc-pkg: mingw-w64-i686-gcc-fortran fc-pkg: fc
- msystem: CLANG64 - msystem: CLANG64
idx: int32 idx: int32
target-prefix: mingw-w64-clang-x86_64 target-prefix: mingw-w64-clang-x86_64
fc-pkg: fc
# Compiling with Flang 16 seems to cause test errors on machines
# with AVX512 instructions. Revisit after MSYS2 distributes Flang 17.
no-avx512-flags: -DNO_AVX512=1
- msystem: CLANG32
idx: int32
target-prefix: mingw-w64-clang-i686
fc-pkg: cc
c-lapack-flags: -DC_LAPACK=ON c-lapack-flags: -DC_LAPACK=ON
- msystem: MINGW64 - msystem: MINGW64
idx: int64 idx: int64
idx64-flags: -DBINARY=64 -DINTERFACE64=1 idx64-flags: -DBINARY=64 -DINTERFACE64=1
target-prefix: mingw-w64-x86_64 target-prefix: mingw-w64-x86_64
fc-pkg: mingw-w64-x86_64-gcc-fortran fc-pkg: fc
- msystem: CLANG64 - msystem: CLANG64
idx: int64 idx: int64
idx64-flags: -DBINARY=64 -DINTERFACE64=1 idx64-flags: -DBINARY=64 -DINTERFACE64=1
target-prefix: mingw-w64-clang-x86_64 target-prefix: mingw-w64-clang-x86_64
c-lapack-flags: -DC_LAPACK=ON fc-pkg: fc
# Compiling with Flang 16 seems to cause test errors on machines
# with AVX512 instructions. Revisit after MSYS2 distributes Flang 17.
no-avx512-flags: -DNO_AVX512=1
- msystem: MINGW64 - msystem: MINGW64
idx: int32 idx: int32
target-prefix: mingw-w64-x86_64 target-prefix: mingw-w64-x86_64
fc-pkg: mingw-w64-x86_64-gcc-fortran fc-pkg: fc
build-type: None build-type: None
exclude: exclude:
- msystem: MINGW32 - msystem: MINGW32
idx: int64 idx: int64
- msystem: CLANG32
idx: int64
defaults: defaults:
run: run:
@ -209,7 +222,7 @@ jobs:
install: >- install: >-
base-devel base-devel
${{ matrix.target-prefix }}-cc ${{ matrix.target-prefix }}-cc
${{ matrix.fc-pkg }} ${{ matrix.target-prefix }}-${{ matrix.fc-pkg }}
${{ matrix.target-prefix }}-cmake ${{ matrix.target-prefix }}-cmake
${{ matrix.target-prefix }}-ninja ${{ matrix.target-prefix }}-ninja
${{ matrix.target-prefix }}-ccache ${{ matrix.target-prefix }}-ccache
@ -261,6 +274,7 @@ jobs:
-DTARGET=CORE2 \ -DTARGET=CORE2 \
${{ matrix.idx64-flags }} \ ${{ matrix.idx64-flags }} \
${{ matrix.c-lapack-flags }} \ ${{ matrix.c-lapack-flags }} \
${{ matrix.no-avx512-flags }} \
-DCMAKE_C_COMPILER_LAUNCHER=ccache \ -DCMAKE_C_COMPILER_LAUNCHER=ccache \
-DCMAKE_Fortran_COMPILER_LAUNCHER=ccache \ -DCMAKE_Fortran_COMPILER_LAUNCHER=ccache \
.. ..
@ -280,9 +294,22 @@ jobs:
key: ${{ steps.ccache-prepare.outputs.key }} key: ${{ steps.ccache-prepare.outputs.key }}
- name: Run tests - name: Run tests
id: run-ctest
timeout-minutes: 60 timeout-minutes: 60
run: cd build && ctest run: cd build && ctest
- name: Re-run tests
if: always() && (steps.run-ctest.outcome == 'failure')
timeout-minutes: 60
run: |
cd build
echo "::group::Re-run ctest"
ctest --rerun-failed --output-on-failure || true
echo "::endgroup::"
echo "::group::Log from these tests"
[ ! -f Testing/Temporary/LastTest.log ] || cat Testing/Temporary/LastTest.log
echo "::endgroup::"
cross_build: cross_build:
runs-on: ubuntu-22.04 runs-on: ubuntu-22.04

View File

@ -3,7 +3,8 @@
## Description: Ported from portion of OpenBLAS/Makefile.system ## Description: Ported from portion of OpenBLAS/Makefile.system
## Sets Fortran related variables. ## Sets Fortran related variables.
if (${F_COMPILER} STREQUAL "FLANG") if (${F_COMPILER} STREQUAL "FLANG" AND NOT CMAKE_Fortran_COMPILER_ID STREQUAL "LLVMFlang")
# This is for classic Flang. LLVM Flang is handled with gfortran below.
set(CCOMMON_OPT "${CCOMMON_OPT} -DF_INTERFACE_FLANG") set(CCOMMON_OPT "${CCOMMON_OPT} -DF_INTERFACE_FLANG")
if (BINARY64 AND INTERFACE64) if (BINARY64 AND INTERFACE64)
set(FCOMMON_OPT "${FCOMMON_OPT} -i8") set(FCOMMON_OPT "${FCOMMON_OPT} -i8")
@ -38,15 +39,17 @@ if (${F_COMPILER} STREQUAL "G95")
endif () endif ()
endif () endif ()
if (${F_COMPILER} STREQUAL "GFORTRAN" OR ${F_COMPILER} STREQUAL "F95") if (${F_COMPILER} STREQUAL "GFORTRAN" OR ${F_COMPILER} STREQUAL "F95" OR CMAKE_Fortran_COMPILER_ID STREQUAL "LLVMFlang")
set(CCOMMON_OPT "${CCOMMON_OPT} -DF_INTERFACE_GFORT") set(CCOMMON_OPT "${CCOMMON_OPT} -DF_INTERFACE_GFORT")
# ensure reentrancy of lapack codes if (NOT CMAKE_Fortran_COMPILER_ID STREQUAL "LLVMFlang")
set(FCOMMON_OPT "${FCOMMON_OPT} -Wall -frecursive") # ensure reentrancy of lapack codes
# work around ABI violation in passing string arguments from C set(FCOMMON_OPT "${FCOMMON_OPT} -Wall -frecursive")
set(FCOMMON_OPT "${FCOMMON_OPT} -fno-optimize-sibling-calls") # work around ABI violation in passing string arguments from C
#Don't include -lgfortran, when NO_LAPACK=1 or lsbcc set(FCOMMON_OPT "${FCOMMON_OPT} -fno-optimize-sibling-calls")
if (NOT NO_LAPACK) if (NOT NO_LAPACK)
set(EXTRALIB "${EXTRALIB} -lgfortran") # Don't include -lgfortran, when NO_LAPACK=1 or lsbcc
set(EXTRALIB "${EXTRALIB} -lgfortran")
endif ()
endif () endif ()
if (NO_BINARY_MODE) if (NO_BINARY_MODE)
if (MIPS64) if (MIPS64)