Skip to content

Commit 9dab730

Browse files
committed
Add CI on Github Actions for Windows
msys2 clang and llvm-mingw cross
1 parent 9326ba7 commit 9dab730

File tree

2 files changed

+267
-0
lines changed

2 files changed

+267
-0
lines changed
Lines changed: 160 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,160 @@
1+
2+
name: "MSYS2 Build & Test"
3+
4+
on:
5+
# allow direct trigger
6+
workflow_dispatch:
7+
push:
8+
pull_request:
9+
10+
concurrency:
11+
group: ${{ github.workflow }}-${{ github.ref }}
12+
cancel-in-progress: true
13+
14+
permissions:
15+
contents: read
16+
17+
env:
18+
COMMON_CMAKE_FLAGS: >
19+
-DSLEEF_BUILD_DFT=ON
20+
-DSLEEF_BUILD_GNUABI_LIBS=ON
21+
-DSLEEF_BUILD_QUAD=ON
22+
-DSLEEF_BUILD_SCALAR_LIB=ON
23+
-DSLEEF_BUILD_STATIC_TEST_BINS=ON
24+
-DSLEEF_ENFORCE_TESTER=ON
25+
-DSLEEF_ENFORCE_TESTER3=ON
26+
-DSLEEF_SHOW_CONFIG=1
27+
28+
jobs:
29+
build-msys2:
30+
runs-on: windows-latest
31+
strategy:
32+
fail-fast: false
33+
matrix:
34+
sys:
35+
- clang64
36+
#- clangarm64
37+
#- mingw64
38+
#- ucrt64
39+
defaults:
40+
run:
41+
shell: msys2 {0}
42+
name: build-msys2-${{ matrix.sys }}
43+
steps:
44+
- name: Disable autocrlf
45+
shell: pwsh
46+
run: |
47+
git config --global core.autocrlf false
48+
git config --global core.eol lf
49+
50+
- uses: msys2/setup-msys2@v2
51+
with:
52+
msystem: ${{ matrix.sys }}
53+
update: true
54+
install: >-
55+
git
56+
pacboy: >-
57+
cc:p
58+
cmake:p
59+
mpfr:p
60+
ninja:p
61+
openssl:p
62+
pkgconf:p
63+
64+
- uses: actions/[email protected]
65+
with:
66+
persist-credentials: false
67+
68+
- name: Build msys2-${{ matrix.sys }}
69+
shell: msys2 {0}
70+
run: |
71+
EXTRA_CMAKE_FLAGS=""
72+
if [[ ${{ matrix.sys }} = "clang64" ]]; then
73+
EXTRA_CMAKE_FLAGS="$EXTRA_CMAKE_FLAGS -DSLEEF_ENABLE_LTO=ON"
74+
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"
75+
elif [[ ${{ matrix.sys }} = "clangarm64" ]]; then
76+
EXTRA_CMAKE_FLAGS="$EXTRA_CMAKE_FLAGS -DSLEEF_ENABLE_LTO=ON"
77+
elif [[ ${{ matrix.sys }} = "mingw64" || ${{ matrix.sys }} = "ucrt64" ]]; then
78+
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"
79+
fi
80+
cmake -S . -B _build-msys2-${{ matrix.sys }} -GNinja \
81+
${COMMON_CMAKE_FLAGS} \
82+
${EXTRA_CMAKE_FLAGS} \
83+
-DCMAKE_INSTALL_PREFIX=$(pwd)/_install-msys2-${{ matrix.sys }} \
84+
-DOPENSSL_EXTRA_LIBRARIES="-lws2_32 -lcrypt32"
85+
cmake --build _build-msys2-${{ matrix.sys }}
86+
cmake --install _build-msys2-${{ matrix.sys }}
87+
88+
- name: Upload build-msys2-${{ matrix.sys }} artifacts
89+
uses: actions/upload-artifact@v3
90+
with:
91+
name: build-msys2-${{ matrix.sys }}
92+
path: |
93+
_build-msys2-${{ matrix.sys }}
94+
_install-msys2-${{ matrix.sys }}
95+
if: always()
96+
97+
test-msys2:
98+
runs-on: windows-latest
99+
needs: [build-msys2]
100+
strategy:
101+
fail-fast: false
102+
matrix:
103+
sys:
104+
- clang64
105+
#- clangarm64
106+
#- mingw64
107+
#- ucrt64
108+
defaults:
109+
run:
110+
shell: msys2 {0}
111+
name: test-msys2-${{ matrix.sys }}
112+
steps:
113+
- name: Disable autocrlf
114+
shell: pwsh
115+
run: |
116+
git config --global core.autocrlf false
117+
git config --global core.eol lf
118+
119+
- uses: msys2/setup-msys2@v2
120+
with:
121+
msystem: ${{ matrix.sys }}
122+
update: true
123+
install: >-
124+
git
125+
pacboy: >-
126+
cc:p
127+
cmake:p
128+
mpfr:p
129+
ninja:p
130+
openssl:p
131+
pkgconf:p
132+
133+
- uses: actions/[email protected]
134+
with:
135+
persist-credentials: false
136+
137+
- name: Print host CPU info
138+
run: |
139+
wget -qO- https://download.sysinternals.com/files/Coreinfo.zip | bsdtar -xf-
140+
./Coreinfo64.exe -accepteula
141+
142+
- name: Download build-msys2-${{ matrix.sys }} artifacts
143+
uses: actions/download-artifact@v3
144+
with:
145+
name: build-msys2-${{ matrix.sys }}
146+
147+
- name: Test msys2-${{ matrix.sys }}
148+
env:
149+
CTEST_OUTPUT_ON_FAILURE: "TRUE"
150+
run: |
151+
cd _build-msys2-${{ matrix.sys }}
152+
ctest -j$(nproc)
153+
154+
- name: Upload test-msys2-${{ matrix.sys }} artifacts
155+
uses: actions/upload-artifact@v3
156+
with:
157+
name: test-msys2-${{ matrix.sys }}
158+
path: |
159+
_build-msys2-${{ matrix.sys }}/Testing
160+
if: always()
Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
2+
name: "LLVM-MinGW Cross Build"
3+
4+
on:
5+
# allow direct trigger
6+
workflow_dispatch:
7+
push:
8+
pull_request:
9+
10+
concurrency:
11+
group: ${{ github.workflow }}-${{ github.ref }}
12+
cancel-in-progress: true
13+
14+
permissions:
15+
contents: read
16+
17+
env:
18+
COMMON_CMAKE_FLAGS: >
19+
-DSLEEF_BUILD_DFT=ON
20+
-DSLEEF_BUILD_GNUABI_LIBS=ON
21+
-DSLEEF_BUILD_INLINE_HEADERS=ON
22+
-DSLEEF_BUILD_QUAD=ON
23+
-DSLEEF_BUILD_SCALAR_LIB=ON
24+
-DSLEEF_BUILD_STATIC_TEST_BINS=ON
25+
-DSLEEF_BUILD_TESTS=OFF
26+
-DSLEEF_ENABLE_LTO=ON
27+
-DSLEEF_SHOW_CONFIG=1
28+
29+
jobs:
30+
build-llvm-mingw:
31+
runs-on: ubuntu-latest
32+
strategy:
33+
fail-fast: false
34+
matrix:
35+
arch: [aarch64, x86_64]
36+
37+
name: build-${{ matrix.arch }}
38+
steps:
39+
- uses: actions/[email protected]
40+
with:
41+
persist-credentials: false
42+
43+
- name: Install dependencies
44+
run: |
45+
sudo apt-get update -y -qq
46+
sudo apt-get install -y -qq build-essential curl ninja-build libgmp-dev libmpfr-dev debootstrap 7zip
47+
48+
- name: Download llvm-mingw
49+
uses: robinraju/release-downloader@main
50+
with:
51+
repository: "mstorsjo/llvm-mingw"
52+
latest: true
53+
extract: false
54+
fileName: "llvm-mingw-*-ucrt-ubuntu-*-x86_64.tar.xz"
55+
56+
- name: Install llvm-mingw
57+
run: |
58+
tar -xaf llvm-mingw-*.tar.xz && rm llvm-mingw-*.tar.xz
59+
mv llvm-mingw-* llvm-mingw
60+
echo ORIGIN_PATH="$PATH" >> $GITHUB_ENV
61+
echo PATH="$PWD/llvm-mingw/bin:$PATH" >> $GITHUB_ENV
62+
63+
- name: Build native
64+
shell: bash -ex -o pipefail {0}
65+
run: |
66+
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"
67+
PATH=$ORIGIN_PATH
68+
cmake -S . -B _build-native -GNinja \
69+
-DCMAKE_INSTALL_PREFIX=$(pwd)/_install-native \
70+
-DCMAKE_TOOLCHAIN_FILE=$(pwd)/toolchains/native-llvm.cmake \
71+
${COMMON_CMAKE_FLAGS} \
72+
${EXTRA_CMAKE_FLAGS}
73+
cmake --build _build-native
74+
cmake --install _build-native
75+
76+
- name: Fix _build-native permissions
77+
run: |
78+
chmod +x _build-native/bin/*
79+
80+
- name: Build llvm-mingw-${{ matrix.arch }}
81+
shell: bash -ex -o pipefail {0}
82+
run: |
83+
EXTRA_CMAKE_FLAGS=""
84+
if [[ ${{ matrix.arch }} = "x86_64" ]]; then
85+
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"
86+
fi
87+
88+
cmake -S . -B _build-${{ matrix.arch }} -GNinja \
89+
${COMMON_CMAKE_FLAGS} \
90+
${EXTRA_CMAKE_FLAGS} \
91+
-DCMAKE_C_COMPILER=${{ matrix.arch }}-w64-mingw32-clang \
92+
-DCMAKE_INSTALL_PREFIX="$(pwd)/_install-${{ matrix.arch }}" \
93+
-DCMAKE_SYSROOT="$(pwd)/llvm-mingw/${{ matrix.arch }}-w64-mingw32" \
94+
-DCMAKE_SYSTEM_NAME=Windows \
95+
-DCMAKE_SYSTEM_PROCESSOR=${{ matrix.arch }} \
96+
-DNATIVE_BUILD_DIR="$(pwd)/_build-native"
97+
cmake --build _build-${{ matrix.arch }}
98+
cmake --install _build-${{ matrix.arch }}
99+
100+
- name: Upload build-${{ matrix.arch }}-llvm-mingw artifacts
101+
uses: actions/upload-artifact@v3
102+
with:
103+
name: build-${{ matrix.arch }}-llvm-mingw
104+
path: |
105+
_build-${{ matrix.arch }}
106+
_install-${{ matrix.arch }}
107+
if: always()

0 commit comments

Comments
 (0)