Proposal for a reference string to number conversion facility in stdlib #2493
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: CI | |
on: [push, pull_request] | |
env: | |
CMAKE_BUILD_PARALLEL_LEVEL: "2" # 2 cores on each GHA VM, enable parallel builds | |
CTEST_OUTPUT_ON_FAILURE: "ON" # This way we don't need a flag to ctest | |
CTEST_PARALLEL_LEVEL: "2" | |
CTEST_TIME_TIMEOUT: "5" # some failures hang forever | |
HOMEBREW_NO_ANALYTICS: "ON" # Make Homebrew installation a little quicker | |
HOMEBREW_NO_AUTO_UPDATE: "ON" | |
HOMEBREW_NO_BOTTLE_SOURCE_FALLBACK: "ON" | |
HOMEBREW_NO_GITHUB_API: "ON" | |
HOMEBREW_NO_INSTALL_CLEANUP: "ON" | |
jobs: | |
Build: | |
runs-on: ${{ matrix.os }} | |
strategy: | |
fail-fast: false | |
matrix: | |
os: [ubuntu-latest, macos-latest] | |
gcc_v: [10, 11, 12, 13] # Version of GFortran we want to use. | |
build: [cmake] | |
include: | |
- os: ubuntu-latest | |
gcc_v: 10 | |
build: cmake-inline | |
env: | |
FC: gfortran-${{ matrix.gcc_v }} | |
CC: gcc-${{ matrix.gcc_v }} | |
CXX: g++-${{ matrix.gcc_v }} | |
GCC_V: ${{ matrix.gcc_v }} | |
BUILD_DIR: ${{ matrix.build == 'cmake' && 'build' || '.' }} | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
- name: Set up Python 3.x | |
uses: actions/setup-python@v5 # Use pip to install latest CMake, & FORD/Jin2For, etc. | |
with: | |
python-version: 3.x | |
- name: Install fypp | |
run: pip install --upgrade fypp | |
- name: Install GCC compilers Linux | |
if: contains( matrix.os, 'ubuntu') | |
run: | | |
sudo add-apt-repository ppa:ubuntu-toolchain-r/test | |
sudo apt-get update | |
sudo apt-get install -y gcc-${GCC_V} g++-${GCC_V} gfortran-${GCC_V} | |
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-${GCC_V} 100 \ | |
--slave /usr/bin/gfortran gfortran /usr/bin/gfortran-${GCC_V} \ | |
--slave /usr/bin/g++ g++ /usr/bin/g++-${GCC_V} \ | |
--slave /usr/bin/gcov gcov /usr/bin/gcov-${GCC_V} | |
- name: Install GCC compilers macOS | |
if: contains( matrix.os, 'macos') | |
run: | | |
brew install gcc@${GCC_V} || brew upgrade gcc@${GCC_V} || true | |
brew link gcc@${GCC_V} | |
- name: Configure with CMake | |
if: ${{ contains(matrix.build, 'cmake') }} | |
run: >- | |
cmake -Wdev | |
-DCMAKE_BUILD_TYPE=Release | |
-DCMAKE_MAXIMUM_RANK:String=4 | |
-DCMAKE_INSTALL_PREFIX=$PWD/_dist | |
-S . -B ${{ env.BUILD_DIR }} | |
- name: Build and compile | |
if: ${{ contains(matrix.build, 'cmake') }} | |
run: cmake --build ${{ env.BUILD_DIR }} --parallel | |
- name: catch build fail | |
run: cmake --build ${{ env.BUILD_DIR }} --verbose --parallel 1 | |
if: ${{ failure() && contains(matrix.build, 'cmake') }} | |
- name: test | |
if: ${{ contains(matrix.build, 'cmake') }} | |
run: >- | |
ctest | |
--test-dir ${{ env.BUILD_DIR }} | |
--parallel | |
--output-on-failure | |
--no-tests=error | |
- name: Install project | |
if: ${{ contains(matrix.build, 'cmake') }} | |
run: cmake --install ${{ env.BUILD_DIR }} | |
intel-build-llvm: | |
runs-on: ${{ matrix.os }} | |
strategy: | |
fail-fast: false | |
matrix: | |
os: [ubuntu-latest] | |
fc: [ifx] | |
cc: [icx] | |
cxx: [icpx] | |
env: | |
FC: ${{ matrix.fc }} | |
CC: ${{ matrix.cc }} | |
CXX: ${{ matrix.cxx }} | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
- name: Set up Python 3.x | |
uses: actions/setup-python@v5 | |
with: | |
python-version: 3.x | |
- name: Add Intel repository (Linux) | |
if: contains(matrix.os, 'ubuntu') | |
run: | | |
wget -O- https://apt.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB \ | gpg --dearmor | sudo tee /usr/share/keyrings/oneapi-archive-keyring.gpg > /dev/null | |
echo "deb [signed-by=/usr/share/keyrings/oneapi-archive-keyring.gpg] https://apt.repos.intel.com/oneapi all main" | sudo tee /etc/apt/sources.list.d/oneAPI.list | |
sudo apt-get update | |
- name: Install Intel oneAPI compiler (Linux) | |
if: contains(matrix.os, 'ubuntu') | |
run: | | |
sudo apt-get install intel-oneapi-compiler-fortran | |
sudo apt-get install intel-oneapi-compiler-dpcpp-cpp | |
- name: Setup Intel oneAPI environment | |
run: | | |
source /opt/intel/oneapi/setvars.sh | |
printenv >> $GITHUB_ENV | |
- name: Install fypp | |
run: pip install --upgrade fypp | |
- name: Configure with CMake | |
run: >- | |
cmake -Wdev | |
-DCMAKE_BUILD_TYPE=Release | |
-DCMAKE_MAXIMUM_RANK:String=4 | |
-DCMAKE_INSTALL_PREFIX=$PWD/_dist | |
-S . -B build | |
- name: Build and compile | |
run: cmake --build build | |
- name: catch build fail | |
run: cmake --build build --verbose --parallel 1 | |
if: failure() | |
- name: test | |
run: ctest --parallel --output-on-failure --no-tests=error | |
working-directory: build | |
- name: Install project | |
run: cmake --install build | |
intel-build-classic: | |
runs-on: ${{ matrix.os }} | |
strategy: | |
fail-fast: false | |
matrix: | |
os: [macos-latest] | |
fc: [ifort] | |
cc: [icc] | |
cxx: [icpc] | |
env: | |
MACOS_HPCKIT_URL: >- | |
https://registrationcenter-download.intel.com/akdlm/irc_nas/18242/m_HPCKit_p_2021.4.0.3389_offline.dmg | |
MACOS_FORTRAN_COMPONENTS: all | |
FC: ${{ matrix.fc }} | |
CC: ${{ matrix.cc }} | |
CXX: ${{ matrix.cxx }} | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
- name: Set up Python 3.x | |
uses: actions/setup-python@v5 | |
with: | |
python-version: 3.x | |
- name: Prepare for cache restore (OSX) | |
if: contains(matrix.os, 'macos') | |
run: | | |
sudo mkdir -p /opt/intel | |
sudo chown $USER /opt/intel | |
- name: Cache Intel install (OSX) | |
if: contains(matrix.os, 'macos') | |
id: cache-install | |
uses: actions/cache@v2 | |
with: | |
path: /opt/intel/oneapi | |
key: install-${{ env.MACOS_HPCKIT_URL }}-${{ env.MACOS_FORTRAN_COMPONENTS }} | |
- name: Install Intel oneAPI compiler (OSX) | |
if: contains(matrix.os, 'macos') && steps.cache-install.outputs.cache-hit != 'true' | |
run: | | |
curl --output webimage.dmg --url "$URL" --retry 5 --retry-delay 5 | |
hdiutil attach webimage.dmg | |
if [ -z "$COMPONENTS" ]; then | |
sudo /Volumes/"$(basename "$URL" .dmg)"/bootstrapper.app/Contents/MacOS/bootstrapper -s --action install --eula=accept --continue-with-optional-error=yes --log-dir=. | |
installer_exit_code=$? | |
else | |
sudo /Volumes/"$(basename "$URL" .dmg)"/bootstrapper.app/Contents/MacOS/bootstrapper -s --action install --components="$COMPONENTS" --eula=accept --continue-with-optional-error=yes --log-dir=. | |
installer_exit_code=$? | |
fi | |
hdiutil detach /Volumes/"$(basename "$URL" .dmg)" -quiet | |
exit $installer_exit_code | |
env: | |
URL: ${{ env.MACOS_HPCKIT_URL }} | |
COMPONENTS: ${{ env.MACOS_FORTRAN_COMPONENTS }} | |
- name: Setup Intel oneAPI environment | |
run: | | |
source /opt/intel/oneapi/setvars.sh | |
printenv >> $GITHUB_ENV | |
- name: Install fypp | |
run: pip install --upgrade fypp | |
- name: Configure with CMake | |
run: >- | |
cmake -Wdev | |
-DCMAKE_BUILD_TYPE=Release | |
-DCMAKE_MAXIMUM_RANK:String=4 | |
-DCMAKE_INSTALL_PREFIX=$PWD/_dist | |
-S . -B build | |
- name: Build and compile | |
run: cmake --build build | |
- name: catch build fail | |
run: cmake --build build --verbose --parallel 1 | |
if: failure() | |
- name: test | |
run: ctest --parallel --output-on-failure --no-tests=error | |
working-directory: build | |
- name: Install project | |
run: cmake --install build |