OpenLibm/README.md

2.4 KiB

Soft-FP sh3eb port of OpenLibm

This is a fork of OpenLibm with support for the sh3eb architecture, intended for add-in programming on SuperH CASIO calculators.

Installing with GiteaPC

This library can be installed automatically as part of the fxSDK with GiteaPC:

% giteapc install Lephenixnoir/OpenLibm

Building manually

You will need a GCC toolchain built with --target=sh3eb-elf, such as the sh-elf-gcc commonly used on Planète Casio.

You can install directly in the internal folder of your compiler, or somewhere else if you have a more detailed setup.

# Example 1: Use the compiler's internal folder
% COMPILER_DIR="$(sh-elf-gcc --print-file-name=.)"
% LIBDIR="$COMPILER_DIR"
% INCDIR="$COMPILER_DIR/include"
# Example 2: Using the fxSDK's custom setup
% LIBDIR="$(fxsdk path lib)"
% INCDIR="$(fxsdk path include)"

You can then build and install the static library and the headers.

% make USEGCC=1 TOOLPREFIX=sh-elf- AR=sh-elf-ar CC=sh-elf-gcc \
    libdir="$LIBDIR" includedir="$INCDIR" \
    install-static-superh install-headers-superh

The -superh targets differ from the the normal targets in the following ways:

  • install-static-superh also creates a symlink libm.a -> libopenlibm.a.
  • install-headers-superh installs directly in $LIBDIR instead of $LIBDIR/openlibm since OpenLibm headers reference each other without that prefix and enforcing the correct -I in every project is quite painful. In addition, it skips internal and non-SuperH headers.

Using the library

Include the headers <openlibm_complex.h>, <openlibm_fenv.h> and <openlibm_math.h>. Or, if you are using a suitable libc like fxlibc, include directly the standard headers <complex.h>, <fenv.h> and <math.h>.

Link with -lm. In a Makefile, update your LDFLAGS:

LDFLAGS += -lm

In CMake, use target_link_libraries():

target_link_libraries(<TARGET> PUBLIC -lm)

README and Licensing

See the original README file in README-OpenLibm.md. OpenLibm contains code covered by various licenses, see LICENSE.md.