2015-02-01 19:06:16 +05:30
|
|
|
# OpenLibm
|
2012-08-19 11:52:43 +05:30
|
|
|
|
2024-01-20 09:14:10 -06:00
|
|
|
[](https://codecov.io/gh/JuliaMath/openlibm)
|
|
|
|
|
2019-08-11 09:47:20 -03:00
|
|
|
[OpenLibm](https://openlibm.org/) is an effort to have a high quality, portable, standalone
|
2014-06-20 19:09:44 +01:00
|
|
|
C mathematical library ([`libm`](http://en.wikipedia.org/wiki/libm)).
|
2014-06-22 12:46:23 +01:00
|
|
|
It can be used standalone in applications and programming language
|
2014-12-05 00:44:29 +05:30
|
|
|
implementations.
|
2011-12-31 12:48:43 +05:30
|
|
|
|
2014-06-22 12:46:23 +01:00
|
|
|
The project was born out of a need to have a good `libm` for the
|
2020-03-31 12:37:11 +02:00
|
|
|
[Julia programming language](http://www.julialang.org) that worked
|
2014-06-22 12:46:23 +01:00
|
|
|
consistently across compilers and operating systems, and in 32-bit and
|
|
|
|
64-bit environments.
|
2012-01-05 23:35:01 -05:00
|
|
|
|
2015-02-01 19:06:16 +05:30
|
|
|
## Platform support
|
2012-07-03 21:00:34 +05:30
|
|
|
|
2019-12-09 21:38:44 -05:00
|
|
|
OpenLibm builds on Linux, macOS, Windows, FreeBSD, OpenBSD, NetBSD, and
|
2018-06-18 18:13:49 -04:00
|
|
|
DragonFly BSD. It builds with both GCC and clang. Although largely
|
|
|
|
tested and widely used on the x86 and x86-64 architectures, OpenLibm
|
2024-01-16 22:26:18 +00:00
|
|
|
also supports arm, aarch64, ppc64le, mips, wasm32, riscv, s390(x) and
|
2024-01-10 23:04:47 -06:00
|
|
|
loongarch64.
|
2012-07-03 21:00:34 +05:30
|
|
|
|
2015-02-01 19:06:16 +05:30
|
|
|
## Build instructions
|
2014-06-12 12:52:21 +05:30
|
|
|
|
2024-01-11 05:06:14 +00:00
|
|
|
### GNU Make
|
|
|
|
|
2018-04-06 14:04:45 -07:00
|
|
|
1. Use GNU Make to build OpenLibm. This is `make` on most systems, but `gmake` on BSDs.
|
2015-02-01 19:08:33 +05:30
|
|
|
2. Use `make USEGCC=1` to build with GCC. This is the default on
|
2014-12-05 00:44:29 +05:30
|
|
|
Linux and Windows.
|
2018-04-06 14:04:45 -07:00
|
|
|
3. Use `make USECLANG=1` to build with clang. This is the default on OS X, FreeBSD,
|
|
|
|
and OpenBSD.
|
2024-04-02 22:31:00 -06:00
|
|
|
4. Use `make ARCH=wasm32` to build the wasm32 library with clang.
|
2019-04-15 00:11:03 +02:00
|
|
|
5. Architectures are auto-detected. Use `make ARCH=i386` to force a
|
2016-03-03 14:53:33 +05:30
|
|
|
build for i386. Other supported architectures are i486, i586, and
|
|
|
|
i686. GCC 4.8 is the minimum requirement for correct codegen on
|
|
|
|
older 32-bit architectures.
|
2016-02-27 12:54:11 +05:30
|
|
|
|
2024-02-01 11:26:31 -06:00
|
|
|
|
|
|
|
**Cross Build**
|
|
|
|
Take `riscv64` as example:
|
|
|
|
1. install `qemu-riscv64-static`, `gcc-riscv64-linux-gnu`
|
|
|
|
2. Cross build:
|
|
|
|
```sh
|
|
|
|
ARCH=riscv64
|
|
|
|
TRIPLE=$ARCH-linux-gnu
|
|
|
|
make ARCH=$ARCH TOOLPREFIX=$TRIPLE- -j
|
|
|
|
make -C test ARCH=$ARCH TOOLPREFIX=$TRIPLE- -j
|
|
|
|
```
|
|
|
|
|
|
|
|
3. Run test with qemu:
|
|
|
|
```sh
|
|
|
|
qemu-$ARCH-static -L . -L /usr/$TRIPLE/ test/test-float
|
|
|
|
qemu-$ARCH-static -L . -L /usr/$TRIPLE/ test/test-double
|
|
|
|
```
|
|
|
|
|
|
|
|
|
2024-01-11 05:06:14 +00:00
|
|
|
### CMake
|
|
|
|
|
|
|
|
1. Create build directory with `mkdir build` and navigate into it with `cd build`.
|
|
|
|
2. Run CMake to configure project and generate native build system with `cmake /path/to/openlibm/`
|
|
|
|
or generate project with build system of choice e.g. `cmake /path/to/openlib/ -G "MinGW Makefiles"`.
|
|
|
|
3. Build with the build system with `cmake --build .`.
|
|
|
|
|
2024-06-19 22:02:50 +03:00
|
|
|
Default CMake configuration builds a shared library, this can easily be configured using
|
|
|
|
[BUILD_SHARED_LIBS](https://cmake.org/cmake/help/latest/variable/BUILD_SHARED_LIBS.html)
|
|
|
|
configuration option.
|
2024-01-11 05:06:14 +00:00
|
|
|
|
|
|
|
|
2016-02-27 12:54:11 +05:30
|
|
|
## Acknowledgements
|
|
|
|
|
|
|
|
PowerPC support for openlibm was graciously sponsored by IBM.
|