meta: update build instructions

This commit is contained in:
Lephenixnoir 2022-08-12 22:04:52 +02:00
parent 65aaba96e1
commit 9828d2e3f2
No known key found for this signature in database
GPG key ID: 1BBA026E13FC0495

View file

@ -1,57 +1,60 @@
# Soft-FP sh3eb port of OpenLibm # Soft-FP sh3eb port of OpenLibm
This is a fork of [OpenLibm](https://github.com/JuliaMath/openlibm) with This is a fork of [OpenLibm](https://github.com/JuliaMath/openlibm) with support for the sh3eb architecture, intended for add-in programming on SuperH CASIO calculators.
support for the sh3eb architecture, intended for add-in programming on fx-9860G
and fx-CG 50.
## Installing with GiteaPC ## Installing with GiteaPC
This library can be installed automatically with [GiteaPC](https://gitea.planet-casio.com/Lephenixnoir/GiteaPC). This library can be installed automatically as part of the fxSDK with [GiteaPC](https://gitea.planet-casio.com/Lephenixnoir/GiteaPC):
``` ```bash
% giteapc install Lephenixnoir/OpenLibm % giteapc install Lephenixnoir/OpenLibm
``` ```
## Building manually ## Building manually
You will need a GCC toolchain built with `--target=sh3eb-elf`, such as the You will need a GCC toolchain built with `--target=sh3eb-elf`, such as the [`sh-elf-gcc`](https://gitea.planet-casio.com/Lephenixnoir/sh-elf-gcc) commonly used on Planète Casio.
`sh-elf-gcc` commonly used on Planète Casio.
First locate the compiler's install directory. This is normally the You can install directly in the internal folder of your compiler, or somewhere else if you have a more detailed setup.
`lib/gcc/sh3eb-elf/<version>/` folder inside the install path of the compiler.
``` ```bash
% PREFIX=$(sh-elf-gcc --print-search-dirs | grep install | sed 's/install: //') # 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 `libopenlibm.a` archive and the headers. You can then build and install the static library and the headers.
``` ```bash
% make USEGCC=1 TOOLPREFIX=sh-elf- AR=sh-elf-ar CC=sh-elf-gcc libdir="$PREFIX" includedir="$PREFIX/include" install-static install-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
``` ```
## Using in a Makefile-based add-in The `-superh` targets differ from the the normal targets in the following ways:
Link with `-lopenlibm` as you would do with `-lm`. Since OpenLibm headers * `install-static-superh` also creates a symlink `libm.a -> libopenlibm.a`.
reference themselves by file name (`#include <openlibm_complex.h>`) even though * `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.
they are installed in a subfolder, you need a `-I` flag:
## 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](https://gitea.planet-casio.com/Vhex-Kernel-Core/fxlibc/), include directly the standard headers `<complex.h>`, `<fenv.h>` and `<math.h>`.
Link with `-lm`. In a Makefile, update your `LDFLAGS`:
``` ```
CFLAGS += -I $(shell sh-elf-gcc -print-file-name=include/openlibm) LDFLAGS += -lm
LDFLAGS += -lopenlibm
``` ```
## Using in a CMake-based add-in In CMake, use [`target_link_libraries()`](https://cmake.org/cmake/help/latest/command/target_link_libraries.html):
When using CMake with the fxSDK, add the include folder and library like this. ```cmake
target_link_libraries(<TARGET> PUBLIC -lm)
```
target_include_directories(<TARGET> PRIVATE "${FXSDK_COMPILER_INSTALL}/include/openlibm")
target_link_libraries(<TARGET> -lopenlibm)
``` ```
## README and Licensing ## README and Licensing
See the original README file in [README-OpenLibm.md](README-OpenLibm.md). See the original README file in [README-OpenLibm.md](README-OpenLibm.md). OpenLibm contains code covered by various licenses, see [LICENSE.md](LICENSE.md).
OpenLibm contains code covered by various licenses, see
[LICENSE.md](LICENSE.md).