| name: antlr4 |
| |
| concurrency: |
| group: ${{ github.repository }}-${{ github.workflow }}-${{ github.ref }} |
| cancel-in-progress: true |
| |
| on: |
| push: |
| branches: [ master, dev, hostedci ] |
| pull_request: |
| branches: [ master, dev ] |
| |
| permissions: |
| contents: read |
| |
| jobs: |
| cpp-lib-build: |
| runs-on: ${{ matrix.os }} |
| |
| strategy: |
| fail-fast: false |
| matrix: |
| os: [ |
| macos-15, |
| ubuntu-22.04, |
| windows-2022 |
| ] |
| compiler: [ clang, gcc ] |
| unity_build: [ ON, OFF ] |
| exclude: |
| - os: windows-2022 |
| compiler: gcc |
| include: |
| - os: windows-2022 |
| compiler: cl |
| |
| steps: |
| - name: Install dependencies (Ubuntu) |
| if: startswith(matrix.os, 'ubuntu') |
| run: | |
| sudo apt-get update -qq |
| sudo apt install -y ninja-build |
| |
| - name: Install dependencies (MacOS) |
| if: startswith(matrix.os, 'macos') |
| run: brew install ninja |
| |
| - name: Setup Clang |
| if: (matrix.compiler == 'clang') && !startswith(matrix.os, 'macos') |
| uses: egor-tensin/setup-clang@v1 |
| with: |
| version: 13 |
| platform: x64 |
| cygwin: 0 |
| |
| - name: Check out code |
| uses: actions/checkout@v3 |
| |
| - name: Use ccache |
| if: startswith(matrix.os, 'macos') || startswith(matrix.os, 'ubuntu') |
| uses: hendrikmuhs/ccache-[email protected] |
| with: |
| key: ${{ matrix.os }}-${{ matrix.compiler }} |
| |
| - name: Configure shell (Ubuntu) |
| if: startswith(matrix.os, 'ubuntu') |
| run: echo 'PATH=/usr/lib/ccache:'"$PATH" >> $GITHUB_ENV |
| |
| - name: Configure shell (MacOS) |
| if: startswith(matrix.os, 'macos') |
| run: echo "PATH=$(brew --prefix)/opt/ccache/libexec:$PATH" >> $GITHUB_ENV |
| |
| - name: Build (Windows) |
| if: startswith(matrix.os, 'windows') |
| shell: cmd |
| run: | |
| call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvars64.bat" |
| |
| if "${{ matrix.compiler }}" EQU "cl" ( |
| set CC=cl |
| set CXX=cl |
| echo 'CC=cl' >> $GITHUB_ENV |
| echo 'CXX=cl' >> $GITHUB_ENV |
| ) else ( |
| set CC=clang |
| set CXX=clang++ |
| echo 'CC=clang' >> $GITHUB_ENV |
| echo 'CXX=clang++' >> $GITHUB_ENV |
| ) |
| |
| set |
| where cmake && cmake --version |
| where ninja && ninja --version |
| where %CC% && %CC% -version |
| where %CXX% && %CXX% -version |
| |
| cd runtime/Cpp |
| |
| cmake -G Ninja -DCMAKE_BUILD_TYPE=Debug -DANTLR_BUILD_CPP_TESTS=OFF -DCMAKE_UNITY_BUILD=${{ matrix.unity_build }} -DCMAKE_UNITY_BUILD_BATCH_SIZE=20 -S . -B out/Debug |
| if %errorlevel% neq 0 exit /b %errorlevel% |
| |
| cmake --build out/Debug -j %NUMBER_OF_PROCESSORS% |
| if %errorlevel% neq 0 exit /b %errorlevel% |
| |
| cmake -G Ninja -DCMAKE_BUILD_TYPE=Release -DANTLR_BUILD_CPP_TESTS=OFF -S . -B out/Release |
| if %errorlevel% neq 0 exit /b %errorlevel% |
| |
| cmake --build out/Release -j %NUMBER_OF_PROCESSORS% |
| if %errorlevel% neq 0 exit /b %errorlevel% |
| |
| - name: Build (non-Windows) |
| if: startswith(matrix.os, 'macos') || startswith(matrix.os, 'ubuntu') |
| run: | |
| if [ "${{matrix.compiler}}" == "clang" ]; then |
| export CC=clang |
| export CXX=clang++ |
| echo 'CC=clang' >> $GITHUB_ENV |
| echo 'CXX=clang++' >> $GITHUB_ENV |
| else |
| export CC=gcc |
| export CXX=g++ |
| echo 'CC=gcc' >> $GITHUB_ENV |
| echo 'CXX=g++' >> $GITHUB_ENV |
| fi |
| |
| env |
| which cmake && cmake --version |
| which ninja && ninja --version |
| which $CC && $CC --version |
| which $CXX && $CXX --version |
| |
| cd runtime/Cpp |
| |
| cmake -G Ninja -DCMAKE_BUILD_TYPE=Debug -DANTLR_BUILD_CPP_TESTS=OFF -DCMAKE_UNITY_BUILD=${{ matrix.unity_build }} -DCMAKE_UNITY_BUILD_BATCH_SIZE=20 -S . -B out/Debug |
| cmake --build out/Debug --parallel |
| |
| cmake -G Ninja -DCMAKE_BUILD_TYPE=Release -DANTLR_BUILD_CPP_TESTS=OFF -S . -B out/Release |
| cmake --build out/Release --parallel |
| |
| - name: Prepare artifacts |
| if: always() |
| run: | |
| cd ${{ github.workspace }}/.. |
| tar czfp antlr_${{ matrix.os }}_${{ matrix.compiler }}.tgz --exclude='.git' antlr4 |
| mv antlr_${{ matrix.os }}_${{ matrix.compiler }}.tgz ${{ github.workspace }}/. |
| |
| - name: Archive artifacts |
| if: always() |
| continue-on-error: true |
| uses: actions/upload-artifact@v4 |
| with: |
| name: antlr_${{ matrix.os }}_${{ matrix.compiler }} |
| path: antlr_${{ matrix.os }}_${{ matrix.compiler }}.tgz |
| |
| |
| build: |
| runs-on: ${{ matrix.os }} |
| |
| strategy: |
| fail-fast: false |
| matrix: |
| os: [ |
| macos-15, |
| ubuntu-22.04, |
| windows-2022 |
| ] |
| target: [ |
| tool, |
| cpp, |
| csharp, |
| dart, |
| go, |
| java, |
| javascript, |
| typescript, |
| php, |
| python3, |
| # swift, |
| ] |
| exclude: |
| - os: windows-2022 |
| target: swift |
| |
| steps: |
| # Check out the code before setting the environment since some |
| # of the actions actually parse the files to figure out the |
| # dependencies, for instance, the setup-java actually parses |
| # **/pom.xml files to decide what to cache. |
| - name: Check out code |
| uses: actions/checkout@v3 |
| |
| - name: Checkout antlr PHP runtime |
| if: matrix.target == 'php' |
| uses: actions/checkout@v3 |
| with: |
| repository: antlr/antlr-php-runtime |
| path: runtime/PHP |
| |
| - name: Setup PHP 8.2 |
| if: matrix.target == 'php' |
| uses: shivammathur/setup-php@v2 |
| with: |
| php-version: '8.3' |
| extensions: mbstring |
| tools: composer |
| |
| - name: Install dependencies |
| env: |
| COMPOSER_CACHE_DIR: ${{ github.workspace }}/.cache |
| if: matrix.target == 'php' |
| run: |- |
| cd runtime/PHP |
| composer install --no-progress --no-interaction --prefer-dist --optimize-autoloader |
| |
| - name: Install dependencies (Ubuntu) |
| if: startswith(matrix.os, 'ubuntu') |
| run: | |
| sudo apt-get update -qq |
| sudo apt install -y ninja-build |
| |
| - name: Install dependencies (MacOS) |
| if: startswith(matrix.os, 'macos') |
| run: brew install ninja |
| |
| - name: Set up JDK 11 |
| id: setup-java |
| uses: actions/setup-java@v3 |
| with: |
| distribution: 'zulu' |
| java-version: 11 |
| cache: 'maven' |
| |
| - name: Set up Maven |
| if: steps.setup-java.outputs.cache-hit != 'true' |
| uses: stCarolas/setup-[email protected] |
| with: |
| maven-version: 3.8.5 |
| |
| - name: Add msbuild to PATH |
| if: startswith(matrix.os, 'windows') && (matrix.target == 'cpp') |
| uses: microsoft/setup-[email protected] |
| |
| - name: Set up Python 3 |
| if: matrix.target == 'python3' |
| uses: actions/setup-python@v4 |
| with: |
| python-version: '3.x' |
| architecture: 'x64' |
| |
| - name: Set up Node 16 |
| if: (matrix.target == 'javascript') || (matrix.target == 'typescript') |
| uses: actions/setup-[email protected] |
| with: |
| node-version: '16' |
| |
| - name: Setup Dotnet |
| if: matrix.target == 'csharp' |
| uses: actions/setup-[email protected] |
| with: |
| dotnet-version: '7.0.x' |
| |
| - name: Setup Dart 2.12.1 |
| if: matrix.target == 'dart' |
| uses: dart-lang/setup-[email protected] |
| with: |
| sdk: 2.12.1 |
| |
| - name: Setup Go 1.19 |
| if: matrix.target == 'go' |
| uses: actions/setup-[email protected] |
| with: |
| go-version: '^1.19' |
| |
| - name: Setup Swift |
| if: matrix.target == 'swift' |
| uses: swift-actions/setup-[email protected] |
| with: |
| swift-version: '5.2' |
| |
| - name: Use ccache |
| if: (startswith(matrix.os, 'macos') || startswith(matrix.os, 'ubuntu')) && (matrix.target == 'cpp') |
| uses: hendrikmuhs/ccache-[email protected] |
| with: |
| key: ${{ matrix.os }}-${{ matrix.target }} |
| |
| - name: Configure shell (Ubuntu) |
| if: startswith(matrix.os, 'ubuntu') && (matrix.target == 'cpp') |
| run: echo 'PATH=/usr/lib/ccache:'"$PATH" >> $GITHUB_ENV |
| |
| - name: Configure shell (MacOS) |
| if: startswith(matrix.os, 'macos') && (matrix.target == 'cpp') |
| run: echo "PATH=$(brew --prefix)/opt/ccache/libexec:$PATH" >> $GITHUB_ENV |
| |
| - name: Build ANTLR with Maven |
| run: mvn install -DskipTests=true -Darguments="-Dmaven.javadoc.skip=true" -B -V |
| |
| - name: Test tool |
| if: matrix.target == 'tool' |
| run: | |
| cd tool-testsuite |
| mvn test |
| |
| - name: Test runtime (Windows) |
| if: startsWith(matrix.os, 'windows') && (matrix.target != 'tool') |
| run: | |
| gci env:* | sort-object name |
| |
| cd runtime-testsuite |
| switch ("${{ matrix.target }}") |
| { |
| python3 { mvn -X '-Dantlr-python3-exec="${{ env.pythonLocation }}\python.exe"' '-Dtest=python3.**' test } |
| default { mvn -X '-Dtest=${{ matrix.target }}.**' test } |
| } |
| |
| env: |
| CMAKE_GENERATOR: Ninja |
| |
| - name: Test runtime (non-Windows) |
| if: (startsWith(matrix.os, 'ubuntu') || startsWith(matrix.os, 'macos')) && (matrix.target != 'tool') |
| run: | |
| env |
| |
| cd runtime-testsuite |
| case ${{ matrix.target }} in |
| python3) mvn -X '-Dantlr-python3-exec=${{ env.pythonLocation }}/bin/python' '-Dtest=python3.**' test ;; |
| *) mvn -X '-Dtest=${{ matrix.target }}.**' test ;; |
| esac |
| |
| - name: Prepare artifacts |
| if: always() |
| run: | |
| cd ${{ github.workspace }}/.. |
| tar czfp antlr_${{ matrix.os }}_${{ matrix.target }}.tgz --exclude='.git' antlr4 |
| mv antlr_${{ matrix.os }}_${{ matrix.target }}.tgz ${{ github.workspace }}/. |
| |
| - name: Archive artifacts |
| if: always() |
| continue-on-error: true |
| uses: actions/upload-artifact@v4 |
| with: |
| name: antlr_${{ matrix.os }}_${{ matrix.target }} |
| path: antlr_${{ matrix.os }}_${{ matrix.target }}.tgz |