Skip to content
This repository was archived by the owner on Apr 28, 2025. It is now read-only.

[wip] switch to a proc macro #312

Closed
wants to merge 25 commits into from
Closed

Conversation

tgross35
Copy link
Contributor

No description provided.

This crate builds math symbols from a musl checkout and provides a Rust
interface. The intent is that we will be able to compare our
implementations against musl on more than just linux (which are the only
currently the only targets we run `*-musl` targets against for
comparison).

Musl libc can't compile on anything other than Linux; however, the
routines in `src/math` are cross platform enough to build on MacOS and
windows-gnu with only minor adjustments. We take advantage of this and
build only needed files using `cc`.

The build script also performs remapping (via defines) so that e.g.
`cos` gets defined as `musl_cos`. This gives us more certainty that we
are actually testing against the intended symbol; without it, it is easy
to unknowingly link to system libraries or even Rust's `libm` itself and
wind up with an ineffective test. There is also a small procedure to
verify remapping worked correctly by checking symbols in object files.
Introduce `for_each_function`. This macro takes a callback macro and
invokes it once per function signature. This should provide an easier
way of registering various tests and benchmarks without duplicating the
function names and signatures each time.

This lives in `libm` rather than `libm-test` so we will be able to use
it for e.g. reexports in `compiler-builtins`. It is gated behind a new
`_internal-features` Cargo feature.
Use a build script for `libm-test` to enumerate all symbols provided by
`libm` and provide this list in a variable. This will allow us to make
sure no functions are missed anytime they must be manually listed.

Additionally, introduce some helper config options.
Create a new test that checks `for_each_fn` against `ALL_FUNCTIONS`,
i.e. the manually entered function list against the automatically
collected list. If any are missing (e.g. new symbol added), then this
will produce an error.
These traits are simplified versions of what we have in
`compiler_builtins` and will be used for tests.
These traits give us a more generic way to interface with tuples used
for (1) test input, (2) function arguments, and (3) test input.
Add a single generator that creates the needed function signatures after
being populated with values. This provides the same input for all
functions.
Check our functions against `musl-math-sys`. This is similar to the
existing musl tests that go through binary serialization, but works on
more platforms.
These targets are tested in `compiler-builtins`, but not yet `libm`. Add
dockerfiles to prepare for this.
This brings the targets tested here in line with those tested in
`compiler-builtins`.
@tgross35 tgross35 marked this pull request as draft October 18, 2024 21:47
@tgross35
Copy link
Contributor Author

Wound up pulling this into #300.

@tgross35 tgross35 closed this Oct 19, 2024
@tgross35 tgross35 deleted the proc-macro branch October 19, 2024 01:10
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant