From 9828d2e3f265a882af6a5bba8ffe6a00c3eeb8d7 Mon Sep 17 00:00:00 2001 From: Lephenixnoir Date: Fri, 12 Aug 2022 22:04:52 +0200 Subject: [PATCH] meta: update build instructions --- README.md | 61 +++++++++++++++++++++++++++++-------------------------- 1 file changed, 32 insertions(+), 29 deletions(-) diff --git a/README.md b/README.md index 71ec2ca..0e7238c 100644 --- a/README.md +++ b/README.md @@ -1,57 +1,60 @@ # Soft-FP sh3eb port of OpenLibm -This is a fork of [OpenLibm](https://github.com/JuliaMath/openlibm) with -support for the sh3eb architecture, intended for add-in programming on fx-9860G -and fx-CG 50. +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. ## 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 ``` ## 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 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. -First locate the compiler's install directory. This is normally the -`lib/gcc/sh3eb-elf//` folder inside the install path of the compiler. +You can install directly in the internal folder of your compiler, or somewhere else if you have a more detailed setup. -``` -% PREFIX=$(sh-elf-gcc --print-search-dirs | grep install | sed 's/install: //') +```bash +# 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. -``` -% make USEGCC=1 TOOLPREFIX=sh-elf- AR=sh-elf-ar CC=sh-elf-gcc libdir="$PREFIX" includedir="$PREFIX/include" install-static install-headers +```bash +% 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 -reference themselves by file name (`#include `) even though -they are installed in a subfolder, you need a `-I` flag: +* `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 ``, `` and ``. Or, if you are using a suitable libc like [fxlibc](https://gitea.planet-casio.com/Vhex-Kernel-Core/fxlibc/), include directly the standard headers ``, `` and ``. + +Link with `-lm`. In a Makefile, update your `LDFLAGS`: ``` -CFLAGS += -I $(shell sh-elf-gcc -print-file-name=include/openlibm) -LDFLAGS += -lopenlibm +LDFLAGS += -lm ``` -## 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. - -``` -target_include_directories( PRIVATE "${FXSDK_COMPILER_INSTALL}/include/openlibm") -target_link_libraries( -lopenlibm) +```cmake +target_link_libraries( PUBLIC -lm) ``` ## README and Licensing -See the original README file in [README-OpenLibm.md](README-OpenLibm.md). -OpenLibm contains code covered by various licenses, see -[LICENSE.md](LICENSE.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).