OpenLibm ist ein Versuch, eine hochwertige, portable, eigenständige C-Mathematikbibliothek ( libm
) zu haben. Es kann eigenständig in Anwendungen und Programmiersprachenimplementierungen verwendet werden.
Das Projekt entstand aus dem Bedürfnis heraus, eine gute libm
für die Programmiersprache Julia zu haben, die auf allen Compilern und Betriebssystemen sowie in 32-Bit- und 64-Bit-Umgebungen konsistent funktioniert.
OpenLibm basiert auf Linux, macOS, Windows, FreeBSD, OpenBSD, NetBSD und DragonFly BSD. Es baut sowohl mit GCC als auch mit Clang auf. Obwohl OpenLibm weitgehend auf den x86- und x86-64-Architekturen getestet und weit verbreitet ist, unterstützt es auch arm, aarch64, ppc64le, mips, wasm32, riscv, s390(x) und loongarch64.
make
, auf BSDs jedoch gmake
.make USEGCC=1
um mit GCC zu erstellen. Dies ist die Standardeinstellung unter Linux und Windows.make USECLANG=1
um mit Clang zu erstellen. Dies ist die Standardeinstellung unter OS X, FreeBSD und OpenBSD.make ARCH=wasm32
um die wasm32-Bibliothek mit clang zu erstellen.make ARCH=i386
um einen Build für i386 zu erzwingen. Weitere unterstützte Architekturen sind i486, i586 und i686. GCC 4.8 ist die Mindestanforderung für die korrekte Codegenerierung auf älteren 32-Bit-Architekturen. Cross Build Nehmen Sie riscv64
als Beispiel:
qemu-riscv64-static
, gcc-riscv64-linux-gnu
ARCH=riscv64
TRIPLE= $ARCH -linux-gnu
make ARCH= $ARCH TOOLPREFIX= $TRIPLE - -j
make -C test ARCH= $ARCH TOOLPREFIX= $TRIPLE - -j
qemu- $ARCH -static -L . -L /usr/ $TRIPLE / test/test-float
qemu- $ARCH -static -L . -L /usr/ $TRIPLE / test/test-double
mkdir build
und navigieren Sie mit cd build
dorthin.cmake /path/to/openlibm/
zu generieren, oder generieren Sie ein Projekt mit dem Build-System Ihrer Wahl, z. B. cmake /path/to/openlib/ -G "MinGW Makefiles"
.cmake --build .
.Die standardmäßige CMake-Konfiguration erstellt eine gemeinsam genutzte Bibliothek. Diese kann einfach mit der Konfigurationsoption BUILD_SHARED_LIBS konfiguriert werden.
Die PowerPC-Unterstützung für openlibm wurde freundlicherweise von IBM gesponsert.