Skip to content

Commit

Permalink
Add CI on Github Actions for Windows
Browse files Browse the repository at this point in the history
msys2 clang and llvm-mingw cross
  • Loading branch information
Andarwinux committed May 31, 2024
1 parent 9326ba7 commit b2d2eda
Show file tree
Hide file tree
Showing 2 changed files with 278 additions and 0 deletions.
172 changes: 172 additions & 0 deletions .github/workflows/build-and-test-msys2.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,172 @@

name: "MSYS2 Build & Test"

on:
# allow direct trigger
workflow_dispatch:
push:
pull_request:

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

permissions:
contents: read

env:
COMMON_CMAKE_FLAGS: >
-DSLEEF_BUILD_DFT=ON
-DSLEEF_BUILD_GNUABI_LIBS=ON
-DSLEEF_BUILD_QUAD=ON
-DSLEEF_BUILD_SCALAR_LIB=ON
-DSLEEF_BUILD_STATIC_TEST_BINS=ON
-DSLEEF_ENFORCE_TESTER=ON
-DSLEEF_ENFORCE_TESTER3=ON
-DSLEEF_SHOW_CONFIG=1
jobs:
build-msys2:
runs-on: windows-latest
strategy:
fail-fast: false
matrix:
sys:
- clang64
#- clangarm64
#- mingw64
#- ucrt64
lto: [lto, nlto]
#exclude:
#- sys: mingw64
#lto: lto
#- sys: ucrt64
#lto: lto
defaults:
run:
shell: msys2 {0}
name: build-msys2-${{ matrix.sys }}-${{ matrix.lto }}
steps:
- name: Disable autocrlf
shell: pwsh
run: |
git config --global core.autocrlf false
git config --global core.eol lf
- uses: msys2/setup-msys2@v2
with:
msystem: ${{ matrix.sys }}
update: true
install: >-
git
pacboy: >-
cc:p
cmake:p
mpfr:p
ninja:p
openssl:p
pkgconf:p
- uses: actions/[email protected]
with:
persist-credentials: false

- name: Build msys2-${{ matrix.sys }}-${{ matrix.lto }}
shell: msys2 {0}
run: |
EXTRA_CMAKE_FLAGS=""
if [[ ${{ matrix.sys }} = "clang64" ]]; then
EXTRA_CMAKE_FLAGS="$EXTRA_CMAKE_FLAGS -DSLEEF_ENFORCE_SSE2=ON -DSLEEF_ENFORCE_SSE4=ON -DSLEEF_ENFORCE_AVX=ON -DSLEEF_ENFORCE_AVX2=ON -DSLEEF_ENFORCE_AVX512F=ON -DSLEEF_ENFORCE_FMA4=ON"
[[ ${{ matrix.lto }} = "lto" ]] && EXTRA_CMAKE_FLAGS="$EXTRA_CMAKE_FLAGS -DSLEEF_ENABLE_LTO=ON"
elif [[ ${{ matrix.sys }} = "clangarm64" ]]; then
[[ ${{ matrix.lto }} = "lto" ]] && EXTRA_CMAKE_FLAGS="$EXTRA_CMAKE_FLAGS -DSLEEF_ENABLE_LTO=ON"
elif [[ ${{ matrix.sys }} = "mingw64" || ${{ matrix.sys }} = "ucrt64" ]]; then
EXTRA_CMAKE_FLAGS="$EXTRA_CMAKE_FLAGS -DSLEEF_ENFORCE_SSE2=ON -DSLEEF_ENFORCE_SSE4=ON -DSLEEF_ENFORCE_AVX=ON -DSLEEF_ENFORCE_AVX2=ON -DSLEEF_ENFORCE_AVX512F=ON -DSLEEF_ENFORCE_FMA4=ON"
fi
cmake -S . -B _build-msys2-${{ matrix.sys }}-${{ matrix.lto }} -GNinja \
${COMMON_CMAKE_FLAGS} \
${EXTRA_CMAKE_FLAGS} \
-DCMAKE_INSTALL_PREFIX=$(pwd)/_install-msys2-${{ matrix.sys }}-${{ matrix.lto }} \
-DOPENSSL_EXTRA_LIBRARIES="-lws2_32 -lcrypt32"
cmake --build _build-msys2-${{ matrix.sys }}-${{ matrix.lto }}
cmake --install _build-msys2-${{ matrix.sys }}-${{ matrix.lto }}
- name: Upload build-msys2-${{ matrix.sys }}-${{ matrix.lto }} artifacts
uses: actions/upload-artifact@v3
with:
name: build-msys2-${{ matrix.sys }}-${{ matrix.lto }}
path: |
_build-msys2-${{ matrix.sys }}-${{ matrix.lto }}
_install-msys2-${{ matrix.sys }}-${{ matrix.lto }}
if: always()

test-msys2:
runs-on: windows-latest
needs: [build-msys2]
strategy:
fail-fast: false
matrix:
sys:
- clang64
#- clangarm64
#- mingw64
#- ucrt64
lto: [lto, nlto]
#exclude:
#- sys: mingw64
#lto: lto
#- sys: ucrt64
#lto: lto
defaults:
run:
shell: msys2 {0}
name: test-msys2-${{ matrix.sys }}-${{ matrix.lto }}
steps:
- name: Disable autocrlf
shell: pwsh
run: |
git config --global core.autocrlf false
git config --global core.eol lf
- uses: msys2/setup-msys2@v2
with:
msystem: ${{ matrix.sys }}
update: true
install: >-
git
pacboy: >-
cc:p
cmake:p
mpfr:p
ninja:p
openssl:p
pkgconf:p
- uses: actions/[email protected]
with:
persist-credentials: false

- name: Print host CPU info
run: |
wget -qO- https://download.sysinternals.com/files/Coreinfo.zip | bsdtar -xf-
./Coreinfo64.exe -accepteula
- name: Download build-msys2-${{ matrix.sys }}-${{ matrix.lto }} artifacts
uses: actions/download-artifact@v3
with:
name: build-msys2-${{ matrix.sys }}-${{ matrix.lto }}

- name: Test msys2-${{ matrix.sys }}-${{ matrix.lto }}
env:
CTEST_OUTPUT_ON_FAILURE: "TRUE"
run: |
cd _build-msys2-${{ matrix.sys }}-${{ matrix.lto }}
ctest -j$(nproc)
- name: Upload test-msys2-${{ matrix.sys }}-${{ matrix.lto }} artifacts
uses: actions/upload-artifact@v3
with:
name: test-msys2-${{ matrix.sys }}-${{ matrix.lto }}
path: |
_build-msys2-${{ matrix.sys }}-${{ matrix.lto }}/Testing
if: always()
106 changes: 106 additions & 0 deletions .github/workflows/build-cross-llvm-mingw.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@

name: "LLVM-MinGW Cross Build"

on:
# allow direct trigger
workflow_dispatch:
push:
pull_request:

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

permissions:
contents: read

env:
COMMON_CMAKE_FLAGS: >
-DSLEEF_BUILD_DFT=ON
-DSLEEF_BUILD_GNUABI_LIBS=ON
-DSLEEF_BUILD_INLINE_HEADERS=ON
-DSLEEF_BUILD_QUAD=ON
-DSLEEF_BUILD_SCALAR_LIB=ON
-DSLEEF_BUILD_STATIC_TEST_BINS=ON
-DSLEEF_BUILD_TESTS=OFF
-DSLEEF_SHOW_CONFIG=1
jobs:
build-llvm-mingw:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
arch: [aarch64, x86_64]
lto: [lto, nlto]

name: build-${{ matrix.arch }}-${{ matrix.lto }}
steps:
- uses: actions/[email protected]
with:
persist-credentials: false

- name: Install dependencies
run: |
sudo apt-get update -y -qq
sudo apt-get install -y -qq build-essential curl ninja-build libgmp-dev libmpfr-dev debootstrap 7zip
- name: Download llvm-mingw
uses: robinraju/release-downloader@main
with:
repository: "mstorsjo/llvm-mingw"
latest: true
extract: false
fileName: "llvm-mingw-*-ucrt-ubuntu-*-x86_64.tar.xz"

- name: Install llvm-mingw
run: |
tar -xaf llvm-mingw-*.tar.xz && rm llvm-mingw-*.tar.xz
mv llvm-mingw-* llvm-mingw
echo ORIGIN_PATH="$PATH" >> $GITHUB_ENV
echo PATH="$PWD/llvm-mingw/bin:$PATH" >> $GITHUB_ENV
- name: Build native
shell: bash -ex -o pipefail {0}
run: |
EXTRA_CMAKE_FLAGS="-DSLEEF_ENFORCE_SSE2=ON -DSLEEF_ENFORCE_SSE4=ON -DSLEEF_ENFORCE_AVX=ON -DSLEEF_ENFORCE_AVX2=ON -DSLEEF_ENFORCE_AVX512F=ON -DSLEEF_ENFORCE_FMA4=ON"
PATH=$ORIGIN_PATH
cmake -S . -B _build-native -GNinja \
-DCMAKE_INSTALL_PREFIX=$(pwd)/_install-native \
-DCMAKE_TOOLCHAIN_FILE=$(pwd)/toolchains/native-llvm.cmake \
${COMMON_CMAKE_FLAGS} \
${EXTRA_CMAKE_FLAGS}
cmake --build _build-native
cmake --install _build-native
- name: Build llvm-mingw-${{ matrix.arch }}-${{ matrix.lto }}
shell: bash -ex -o pipefail {0}
run: |
EXTRA_CMAKE_FLAGS=""
if [[ ${{ matrix.arch }} = "x86_64" ]]; then
EXTRA_CMAKE_FLAGS="${EXTRA_CMAKE_FLAGS} -DSLEEF_ENFORCE_SSE2=ON -DSLEEF_ENFORCE_SSE4=ON -DSLEEF_ENFORCE_AVX=ON -DSLEEF_ENFORCE_AVX2=ON -DSLEEF_ENFORCE_AVX512F=ON -DSLEEF_ENFORCE_FMA4=ON"
fi
if [[ ${{ matrix.lto }} = "lto" ]]; then
EXTRA_CMAKE_FLAGS="${EXTRA_CMAKE_FLAGS} -DSLEEF_ENABLE_LTO=ON"
fi
cmake -S . -B _build-${{ matrix.arch }}-${{ matrix.lto }} -GNinja \
${COMMON_CMAKE_FLAGS} \
${EXTRA_CMAKE_FLAGS} \
-DCMAKE_C_COMPILER=${{ matrix.arch }}-w64-mingw32-clang \
-DCMAKE_INSTALL_PREFIX="$(pwd)/_install-${{ matrix.arch }}-${{ matrix.lto }}" \
-DCMAKE_SYSROOT="$(pwd)/llvm-mingw/${{ matrix.arch }}-w64-mingw32" \
-DCMAKE_SYSTEM_NAME=Windows \
-DCMAKE_SYSTEM_PROCESSOR=${{ matrix.arch }} \
-DNATIVE_BUILD_DIR="$(pwd)/_build-native"
cmake --build _build-${{ matrix.arch }}-${{ matrix.lto }}
cmake --install _build-${{ matrix.arch }}-${{ matrix.lto }}
- name: Upload build-${{ matrix.arch }}-${{ matrix.lto }}-llvm-mingw artifacts
uses: actions/upload-artifact@v3
with:
name: build-${{ matrix.arch }}-llvm-mingw
path: |
_build-${{ matrix.arch }}-${{ matrix.lto }}
_install-${{ matrix.arch }}-${{ matrix.lto }}
if: always()

0 comments on commit b2d2eda

Please sign in to comment.