mirror of
				https://github.com/Z3Prover/z3
				synced 2025-11-03 21:09:11 +00:00 
			
		
		
		
	Bumps [actions/checkout](https://github.com/actions/checkout) from 4 to 5. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/checkout/compare/v4...v5) --- updated-dependencies: - dependency-name: actions/checkout dependency-version: '5' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
		
			
				
	
	
		
			126 lines
		
	
	
		
			No EOL
		
	
	
		
			3.6 KiB
		
	
	
	
		
			YAML
		
	
	
	
	
	
			
		
		
	
	
			126 lines
		
	
	
		
			No EOL
		
	
	
		
			3.6 KiB
		
	
	
	
		
			YAML
		
	
	
	
	
	
name: OCaml Binding CI (Ubuntu + macOS)
 | 
						|
 | 
						|
on:
 | 
						|
  push:
 | 
						|
    branches: [ "**" ]
 | 
						|
  pull_request:
 | 
						|
    branches: [ "**" ]
 | 
						|
 | 
						|
jobs:
 | 
						|
  build-test:
 | 
						|
    strategy:
 | 
						|
      matrix:
 | 
						|
        os: [ ubuntu-latest, macos-latest ]
 | 
						|
        ocaml-version: ["5"]
 | 
						|
      fail-fast: false
 | 
						|
    runs-on: ${{ matrix.os }}
 | 
						|
 | 
						|
    steps:
 | 
						|
      - name: Checkout code
 | 
						|
        uses: actions/checkout@v5
 | 
						|
 | 
						|
      # Cache ccache (shared across runs)
 | 
						|
      - name: Cache ccache
 | 
						|
        uses: actions/cache@v4
 | 
						|
        with:
 | 
						|
          path: ~/.ccache
 | 
						|
          key: ${{ runner.os }}-ccache-${{ github.sha }}
 | 
						|
          restore-keys: |
 | 
						|
            ${{ runner.os }}-ccache-
 | 
						|
 | 
						|
      # Cache opam (compiler + packages)
 | 
						|
      - name: Cache opam
 | 
						|
        uses: actions/cache@v4
 | 
						|
        with:
 | 
						|
          path: ~/.opam
 | 
						|
          key: ${{ runner.os }}-opam-${{ matrix.ocaml-version }}-${{ github.sha }}
 | 
						|
          restore-keys: |
 | 
						|
            ${{ runner.os }}-opam-${{ matrix.ocaml-version }}-
 | 
						|
 | 
						|
      # Setup OCaml via action
 | 
						|
      - uses: ocaml/setup-ocaml@v3
 | 
						|
        with:
 | 
						|
          ocaml-compiler: ${{ matrix.ocaml-version }}
 | 
						|
          opam-disable-sandboxing: true
 | 
						|
          
 | 
						|
      # Platform-specific dependencies
 | 
						|
      - name: Install system dependencies (Ubuntu)
 | 
						|
        if: matrix.os == 'ubuntu-latest'
 | 
						|
        run: |
 | 
						|
          sudo apt-get update
 | 
						|
          sudo apt-get install -y \
 | 
						|
            bubblewrap m4 libgmp-dev pkg-config ninja-build ccache
 | 
						|
 | 
						|
      - name: Install system dependencies (macOS)
 | 
						|
        if: matrix.os == 'macos-latest'
 | 
						|
        run: |
 | 
						|
          brew install gmp pkg-config ninja ccache
 | 
						|
 | 
						|
      - name: Install required opam packages
 | 
						|
        run: opam install -y ocamlfind zarith
 | 
						|
 | 
						|
      # Configure
 | 
						|
      - name: Configure with CMake
 | 
						|
        env:
 | 
						|
          CC: ${{ matrix.os == 'macos-latest' && 'ccache clang' || 'ccache gcc' }}
 | 
						|
          CXX: ${{ matrix.os == 'macos-latest' && 'ccache clang++' || 'ccache g++' }}
 | 
						|
        run: |
 | 
						|
          mkdir -p build
 | 
						|
          cd build
 | 
						|
          eval $(opam env)
 | 
						|
          echo "CC: $CC"
 | 
						|
          echo "CXX: $CXX"
 | 
						|
          echo "OCAMLFIND: $(which ocamlfind)"
 | 
						|
          echo "OCAMLC:     $(which ocamlc)"
 | 
						|
          echo "OCAMLOPT:     $(which ocamlopt)"
 | 
						|
          echo "OCAML_VERSION: $(ocamlc -version)"
 | 
						|
          echo "OCAMLLIB: $OCAMLLIB"
 | 
						|
          cmake .. \
 | 
						|
            -G Ninja \
 | 
						|
            -DZ3_BUILD_LIBZ3_SHARED=ON \
 | 
						|
            -DZ3_BUILD_OCAML_BINDINGS=ON \
 | 
						|
            -DZ3_BUILD_JAVA_BINDINGS=OFF \
 | 
						|
            -DZ3_BUILD_PYTHON_BINDINGS=OFF \
 | 
						|
            -DZ3_BUILD_CLI=OFF \
 | 
						|
            -DZ3_BUILD_TEST_EXECUTABLES=OFF \
 | 
						|
            -DCMAKE_VERBOSE_MAKEFILE=TRUE
 | 
						|
 | 
						|
      - name: Build Z3 and OCaml bindings
 | 
						|
        run: |
 | 
						|
          ccache -z || true
 | 
						|
          eval $(opam env)
 | 
						|
          cd build
 | 
						|
          ninja build_z3_ocaml_bindings
 | 
						|
          ccache -s || true
 | 
						|
 | 
						|
      - name: Compile ml_example.byte
 | 
						|
        run: |
 | 
						|
          eval $(opam env)
 | 
						|
          ocamlfind ocamlc -o ml_example.byte \
 | 
						|
            -package zarith \
 | 
						|
            -linkpkg \
 | 
						|
            -I build/src/api/ml \
 | 
						|
            -dllpath build/src/api/ml \
 | 
						|
            build/src/api/ml/z3ml.cma \
 | 
						|
            examples/ml/ml_example.ml
 | 
						|
 | 
						|
      - name: Run ml_example.byte
 | 
						|
        run: |
 | 
						|
          eval $(opam env)
 | 
						|
          export DYLD_LIBRARY_PATH=$(pwd)/build
 | 
						|
          ocamlrun ./ml_example.byte
 | 
						|
 | 
						|
      - name: Compile ml_example (native)
 | 
						|
        run: |
 | 
						|
          eval $(opam env)
 | 
						|
          ocamlfind ocamlopt -o ml_example \
 | 
						|
            -package zarith \
 | 
						|
            -linkpkg \
 | 
						|
            -I build/src/api/ml \
 | 
						|
            build/src/api/ml/z3ml.cmxa \
 | 
						|
            examples/ml/ml_example.ml
 | 
						|
 | 
						|
      - name: Run ml_example (native)
 | 
						|
        run: |
 | 
						|
          export DYLD_LIBRARY_PATH=$(pwd)/build
 | 
						|
          ./ml_example |