-
Notifications
You must be signed in to change notification settings - Fork 269
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
Build and infrastructure fixes for FreeBSD #7924
Build and infrastructure fixes for FreeBSD #7924
Conversation
Codecov ReportAttention:
Additional details and impacted files@@ Coverage Diff @@
## develop #7924 +/- ##
===========================================
- Coverage 79.08% 79.07% -0.01%
===========================================
Files 1696 1696
Lines 196429 196456 +27
===========================================
+ Hits 155343 155352 +9
- Misses 41086 41104 +18 ☔ View full report in Codecov by Sentry. |
a1ae212
to
547ae0e
Compare
#7956 fixes that one. |
81b105b
to
b791e29
Compare
0de2cb1
to
08f211c
Compare
@kroening @TGWDB I am hoping that this one is now uncontroversial. It would be great to get this merged in time for a version 6 release so that we can safely claim that version 6 also builds on FreeBSD. (And I would then try to sort out #7651 on top of this so that we can even claim OpenBSD/NetBSD support.) |
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.
I'd love and hate to have this tested in CI. Approving regardless of that.
2109148
to
ecfafd9
Compare
We rely on thin archives via `ar rcT` for libcprover-cpp nests archives, which FreeBSD's `ar` does not support. Use `llvm-ar` instead, which does have this capability. This enables a successful build.
This improves portability as not all systems have bash, perl, or python in /usr/bin (FreeBSD is one such example).
FreeBSD has inline implementations of fe{set,get}round.
FreeBSD redefines various inet_* function names to __inet_*.
This is the same problem as previously seen on macOS.
It works for both FreeBSD kernel-only as well as full FreeBSD userland.
The object files are already part of libcprover-cpp, no need to add them again. Doing so results in duplicate-definition errors on FreeBSD.
Implemented as over-approximations of the implementations found at https://cgit.freebsd.org/src/tree/lib/libc/stdio/.
With Makefile-based builds, we rely on CaDiCaL's configure to produce an appropriate build script.
We can always fall back to `getrusage` for minimal memory usage information.
BSD systems won't alias gcc to clang.
Tags may contain an exclamation mark, which the shell will treat as a request for history expansion.
Library functions may introduce inline assembler. For example, FreeBSD's fesetround is an inline function with inline assembler. Library functions might introduce calls to fesetround, and thereby introduce inline assembler. Thus, run a fixed point over remove_asm and library linking.
This has the same usage as __assert_func in newlib. See https://github.com/openbsd/src/blob/master/include/assert.h.
Uses https://github.com/cross-platform-actions/action, and can be extended to OpenBSD and NetBSD. QEMU on Linux runners appears to be faster than nested virtualisation on macOS runnners (even when the latter ought to use more hardware acceleration).
Uses the same virtualisation set-up as FreeBSD checks.
This appears to have much better performance (FreeBSD job completes in 26 minutes instead of 4 hours). We can now also enable the same number of steps in OpenBSD and NetBSD.
This needs to be debugged eventually.
ecfafd9
to
18a35b8
Compare
We rely on thin archives via
ar rcT
for libcprover-cpp nests archives, which FreeBSD'sar
does not support. Usellvm-ar
instead, which does have this capability. This enables a successful build.All further changes are to enable successful test runs, with one caveat: goto-analyzer/loop-termination-eq/test-value-sets.desc yields a segmentation fault that I was unable to root cause thus far.