diff --git a/.github/workflows/build-and-test-msys2.yml b/.github/workflows/build-and-test-msys2.yml new file mode 100644 index 00000000..8a63cd64 --- /dev/null +++ b/.github/workflows/build-and-test-msys2.yml @@ -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/checkout@v4.1.1 + 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/checkout@v4.1.1 + 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() diff --git a/.github/workflows/build-cross-llvm-mingw.yml b/.github/workflows/build-cross-llvm-mingw.yml new file mode 100644 index 00000000..ac2d1a7c --- /dev/null +++ b/.github/workflows/build-cross-llvm-mingw.yml @@ -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/checkout@v4.1.1 + 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 }}-${{ matrix.lto }}-llvm-mingw + path: | + _build-${{ matrix.arch }}-${{ matrix.lto }} + _install-${{ matrix.arch }}-${{ matrix.lto }} + if: always()