-
Notifications
You must be signed in to change notification settings - Fork 46
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
#380 support multiple architectures for solver binaries z3 #395
Conversation
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. |
The current state seems to work as expected. I tested:
Z3 is already published in Maven and Ivy, and works well with JavaSMT 5.0.1. As I do not have an ARM-based Apple machine available, maybe @ThomasHaas and @hernanponcedeleon can test whether it works as expected. Thanks. |
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. |
It seems to work on ARM-based Macs now. Good job :) |
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.
… for backwards compatibility.
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.
… instead of JavaSMT root directory.
…ure-solver-binaries-z3
…ture-solver-binaries-z3
…into 380-multi-architecture-solver-binaries-z3
…cripts, like Bitwuzla.
…and improve the linking process.
OpenSMT can be compiled for ARM in two simple steps: - provide GMP for ARM64 (we use the version that we provide for MathSAT anyway) - replace GCC with the cross-compiler for ARM64
…ure-solver-binaries-z3
@daniel-raffler and @baierd : could you take a look and provide feedback? I would like to merge this PR in near time. Beside Java-based solvers SMTInterpol and Princess, we now have 4 native solvers that are working on ARM64 platform:
The current changes to Ivy are backwards-compatible and allow to use and update existing JavaSMT integrations without further changes (such as in CPAchecker). If the user wants to use binary solvers for ARM64, he can modify his Ivy dependency to load the corresponding files. We already provide the corresponding files in Maven, so the user specify them via the pom-file.. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Overall very nice. I will test this PR on my Windows machine later today.
I have some small questions/suggestions, but did not find anything mayor.
Something that might be worth a try is adding a static |
I would not expect such a info-feature from a library, but only in the main application. |
The compilation will fail, because JavaSMT is not yet released in a new version, and some library names have been changed.
For executing and testing the ARM-based binaries, you can apply Podman/Docker with Qemu.
Build with:
The output will contain the ID in the last line. Run with:
Podman/Docker with qemu is emulating ARM64 on x64 about 3-10 times slower than normal execution. I am thinking about an ARM-based CI, however Podman/Docker with Qemu might be too slow for that. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looks good. Thanks for incorporating my suggestions!
Do we want to document the Podman/Docker info in some file or issue?
The Podman/Docker file might be interesting for additional CI jobs. We will surely come across that topic in #384. |
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).