Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

#380 support multiple architectures for solver binaries z3 #395

Open
wants to merge 49 commits into
base: master
Choose a base branch
from

Conversation

kfriedberger
Copy link
Member

@kfriedberger kfriedberger commented Sep 17, 2024

This branch / pull request exists for tracking some steps towards supporting multiple architectures. I will use Z3 as example, because it was requested several times. Some explanation can be found in #380 .

I will not yet commit binaries to any public archive (Ivy or Maven) until we can make sure that the new approach is backwards-compatible (e.g. default architecture x86 can be used as before) and we have a maintainable code base (including scripts and documentation for publication and testing).

@kfriedberger
Copy link
Member Author

kfriedberger commented Sep 29, 2024

This PR is currently blocked by sosy-lab/java-common-lib#43 to test execution on ARM64.

// UPDATE: The wording "blocked" is too much. Z3 is still not available for ARM64 on Linux, so local development is not affected and we could merge this PR.

@kfriedberger
Copy link
Member Author

kfriedberger commented Sep 29, 2024

The current state seems to work as expected. I tested:

  • publishing solver Z3 to Ivy and Maven, including x64 and arm64 for several operating systems (/)
  • downloading from Ivy is backwards-compatible for Z3 (e.g., just increment the version of Z3). This works without changing the ivy-settings. We still need to find a way for publishing JavaSMT itself with a reasonable configuration.
  • downloading from Maven requires more smaller changes. For example, as shown in this change: 958dbc3

Z3 is already published in Maven and Ivy, and works well with JavaSMT 5.0.1.
Feel free to test and give feedback.

As I do not have an ARM-based Apple machine available, maybe @ThomasHaas and @hernanponcedeleon can test whether it works as expected. Thanks.

@kfriedberger
Copy link
Member Author

kfriedberger commented Sep 29, 2024

If there is positive feedback, I will also publish Z3 in its latest version 4.13.2 to Ivy and Maven. The publication of Z3 is even more automated now than it was before.

@ThomasHaas
Copy link
Contributor

It seems to work on ARM-based Macs now. Good job :)

@kfriedberger kfriedberger marked this pull request as ready for review October 12, 2024 11:43
@kfriedberger
Copy link
Member Author

kfriedberger commented Oct 12, 2024

Z3 was published to Ant/Ivy and Maven in versions 4.13.2 and 4.13.3.

There are some smaller issues that are currently blocking this PR from merging:

Not tested, not finished, just a draft.
This should keep the existing cache valid and re-usable.
Otherwise, we would create a new cache structure within the existing cache, with redundant entries.
With this change, we limit the redundancy to arch- or classifier-specific entries.
We could include x64 and ARM64 dependencies for Z3.
However, the default stays by only x64.
…rs, but only all other files.

This cleanup aligns better with Maven guidelines.
This is a small change for all upcoming publications to Maven and the Maven users.
…cture.

Additionally, we upload Java sources and JavaDoc for z3 to the Maven repository.

We need to test whether the uploaded files work as expected.
Let the user decide what to load,
e.g. on a minimal system only load for one specific OS and arch.
See Z3Prover/z3#7419 for details.
If required, the Z3 parser automatically converts Boolean formulas `f` to e.g. `ITE(f 1 0)`,
which makes them comparable to Integer symbols and numbers 0/1.
…s with Z3 v4.13.2 and incompatible msvcp140.dll."

This reverts commit 07a4015.
… for multiple architectures.

We aim for backwards-compatibility and provide the x64-version as default for most public configurations.
The solver-specific configuration "runtime-z3" does provide more than x64, and comes with arm64 included.
…ate dependencies.

- prepare for distinct architectures x64 and arm64 under Linux.

- remove MPIR usage and replace it with GMP headers.
  MPIR is unmaintained since several years.

- update GMP to v6.3.0 and JDK to v17
…Instead, we use a plain Java-based solver as reference.
@kfriedberger
Copy link
Member Author

kfriedberger commented Oct 20, 2024

This branch is currently blocked by or waiting for:

  • Z3 for Windows is broken on a default WIndows installation due to unexpected changes in msvcp140.dll. We need to wait for a new release of Z3 where this is fixed.
  • MathSAT5 was compiled for newer GLIBC (Ubuntu 22.04) and does currently not work on Ubuntu 20.04 or older. This behaviour is similar to Z3, where support for Ubuntu 20.04 was dropped some weeks ago. However, we might want to re-compile the bindings with an older GLIBC. ✔️ DONE in 696f7b8
  • Gitlab-CI for ARM64 might be useful here, too.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Development

Successfully merging this pull request may close these issues.

2 participants