name: MacOS

on:
   push:
      branches: [ RC_1_2 RC_2_0 master ]
   pull_request:

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

jobs:

   test:
      name: Tests
      runs-on: macos-latest
      continue-on-error: true

      strategy:
         matrix:
            config: [ crypto=built-in, deprecated-functions=off ]

      steps:
      - name: checkout
        uses: actions/checkout@v3
        with:
           submodules: true

      - uses: Chocobo1/setup-ccache-action@v1
        with:
          override_cache_key: ccache-macos-test-${{ matrix.config }}-${{ github.base_ref }}
          ccache_options: |
            max_size=1G

      - name: install boost
        run: |
          brew install boost-build boost openssl@1.1
          echo "using darwin ;" >>~/user-config.jam

      - name: build and run tests
        run: (cd test; b2 ${{ matrix.config }} -l400 warnings-as-errors=on debug-iterators=on invariant-checks=full asserts=on deterministic-tests)

      - name: run tests (flaky)
        uses: nick-fields/retry@v2
        with:
          timeout_minutes: 30
          retry_wait_seconds: 1
          max_attempts: 3
          command: (cd test; b2 ${{ matrix.config }} -l400 warnings-as-errors=on debug-iterators=on invariant-checks=full asserts=on)


   sim:
      name: Simulations
      runs-on: macos-latest

      steps:
      - name: checkout
        uses: actions/checkout@v3
        with:
           submodules: true

      - uses: Chocobo1/setup-ccache-action@v1
        with:
          override_cache_key: ccache-macos-sim-${{ github.base_ref }}
          ccache_options: |
            max_size=1G

      - name: install boost
        run: |
          brew install boost-build boost openssl@1.1
          echo "using darwin ;" >>~/user-config.jam

      - name: build and run simulations
        run: |
          cd simulation
          b2 -l400 debug-iterators=on invariant-checks=full asserts=on


   build:
      name: Build
      runs-on: macos-latest
      continue-on-error: true

      strategy:
         matrix:
            config: [ crypto=built-in, release ]

      steps:
      - name: checkout
        uses: actions/checkout@v3
        with:
           submodules: true

      - uses: Chocobo1/setup-ccache-action@v1
        with:
          override_cache_key: ccache-macos-build-${{ matrix.config }}-${{ github.base_ref }}
          ccache_options: |
            max_size=1G

      - name: install boost
        run: |
          brew install boost-build boost openssl@1.1
          echo "using darwin ;" >>~/user-config.jam

      - name: build library
        run: |
          b2 ${{ matrix.config }} -l400 warnings-as-errors=on cxxstd=14


   ios_build:
      name: Build iOS
      runs-on: macos-latest
      continue-on-error: true

      steps:
      - name: checkout
        uses: actions/checkout@v3
        with:
           submodules: true

      - name: install boost
        run: |
          git clone --depth=1 --recurse-submodules -j10 --branch=boost-1.78.0 https://github.com/boostorg/boost.git
          cd boost
          ./bootstrap.sh

      - name: boost headers
        run: |
          cd boost
          ./b2 headers
          cp b2 ..

      - name: user-config
        run: |
          echo "using darwin : ios_sim : clang++ : <compileflags>-Wno-deprecated-declarations
          <compileflags>\"-isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk\"
          <compileflags>-mios-simulator-version-min=7
          <compileflags>-fobjc-abi-version=2
          <linkflags>\"-isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk\"
          <linkflags>-mios-simulator-version-min=7
          <linkflags>-fobjc-abi-version=2 ;" >>~/user-config.jam;

          echo "using darwin : ios : clang++ : <compileflags>-Wno-deprecated-declarations
          <compileflags>\"-isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk\"
          <compileflags>-mios-version-min=7
          <compileflags>\"-arch armv7\"
          <compileflags>-fobjc-abi-version=2
          <linkflags>\"-isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk\"
          <linkflags>-mios-version-min=7
          <linkflags>\"-arch armv7\"
          <linkflags>-fobjc-abi-version=2 ;" >>~/user-config.jam;

      - name: build library
        run: |
          BOOST_ROOT=boost ./b2 -l400 cxxstd=14 target-os=iphone crypto=built-in darwin-ios darwin-ios_sim address-model=64  link=static