2020-10-21 22:26:47 +02:00
|
|
|
|
# The FX C Library
|
|
|
|
|
|
2021-05-09 17:32:28 +02:00
|
|
|
|
This directory contains the sources of the FxLibc Library. See `CMakeLists.txt`
|
|
|
|
|
to see what release version you have.
|
2020-10-21 22:26:47 +02:00
|
|
|
|
|
2021-05-09 17:32:28 +02:00
|
|
|
|
The FxLibc is the standard system C library implementation for all Casio
|
|
|
|
|
fx calculators, and is an important part of what makes up programs on these
|
2020-10-21 22:26:47 +02:00
|
|
|
|
devices. It provides the system API for all programs written in C and
|
|
|
|
|
C-compatible languages such as C++ and Objective-C; the runtime facilities of
|
|
|
|
|
other programming languages use the C library to access the underlying operating
|
|
|
|
|
system.
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## Dependencies
|
2021-05-09 17:32:28 +02:00
|
|
|
|
FxLibc requires a GCC compiler toolchain the PATH to build for any calculator.
|
|
|
|
|
You cannot build with your system compiler! The tutorial on Planète Casio
|
|
|
|
|
builds an `sh-elf` toolchain that supports all models using multilib.
|
2020-10-21 22:26:47 +02:00
|
|
|
|
|
2021-05-09 17:32:28 +02:00
|
|
|
|
For Vhex and gint targets, the headers of the kernel are also required.
|
2020-10-21 22:26:47 +02:00
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
2021-05-09 17:32:28 +02:00
|
|
|
|
## Building and installing FxLibc
|
|
|
|
|
FxLibc supports several targets:
|
|
|
|
|
* Vhex on SH targets (`vhex-sh`)
|
|
|
|
|
* CASIOWIN for fx-9860G-like calculators (`casiowin-fx`)
|
|
|
|
|
* CASIOWIN for fx-CG-series calculators (`casiowin-cg`)
|
|
|
|
|
* gint for all targets (`gint`)
|
2020-10-21 22:26:47 +02:00
|
|
|
|
|
2021-05-09 17:32:28 +02:00
|
|
|
|
Each target supports different features depending on what the kernel/OS
|
|
|
|
|
provides.
|
2020-10-21 22:26:47 +02:00
|
|
|
|
|
|
|
|
|
#### Configuration and support
|
|
|
|
|
|
2021-05-09 17:32:28 +02:00
|
|
|
|
Configure with CMake; specify the target with `-DFXLIBC_TARGET`. For SH
|
|
|
|
|
platforms, set the toolchain to `cmake/toolchain-sh.cmake`.
|
2020-10-21 22:26:47 +02:00
|
|
|
|
|
2021-05-09 17:32:28 +02:00
|
|
|
|
The FxLibc supports shared libraries when building with Vhex (TODO); set
|
|
|
|
|
`-DSHARED=1` to enable this behavior.
|
2020-10-21 22:26:47 +02:00
|
|
|
|
|
2021-05-09 17:32:28 +02:00
|
|
|
|
You can either install FxLibc in the compiler's `include` folder, or installl
|
|
|
|
|
in another location of your choice. In the second case, you will need a `-I`
|
|
|
|
|
option when using the library.
|
|
|
|
|
|
|
|
|
|
To use the compiler, set `PREFIX` like this:
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
% PREFIX=$(sh-elf-gcc -print-file-name=.)
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
To use another location, set `PREFIX` manually (recommended):
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
% PREFIX="$HOME/.sh-prefix/"
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
Example for a static Vhex build:
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
% cmake -B build-vhex-sh -DFXLIBC_TARGET=vhex-sh -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-sh.cmake -DCMAKE_INSTALL_PREFIX="$PREFIX"
|
|
|
|
|
```
|
2020-10-21 22:26:47 +02:00
|
|
|
|
|
|
|
|
|
#### Building
|
2021-05-09 17:32:28 +02:00
|
|
|
|
Build in the directory specified in `cmake -B`.
|
|
|
|
|
|
2020-10-21 22:26:47 +02:00
|
|
|
|
```
|
2021-05-09 17:32:28 +02:00
|
|
|
|
% make -C build
|
2020-10-21 22:26:47 +02:00
|
|
|
|
```
|
|
|
|
|
|
2021-05-09 17:32:28 +02:00
|
|
|
|
To install, run the `install` target.
|
2020-10-21 22:26:47 +02:00
|
|
|
|
|
|
|
|
|
```
|
2021-05-09 17:32:28 +02:00
|
|
|
|
% make -C build install
|
2020-10-21 22:26:47 +02:00
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
### Contributing
|
|
|
|
|
Bug reports, feature suggestions and especially code contributions are most
|
|
|
|
|
welcome.
|
|
|
|
|
|
|
|
|
|
If you are interested in doing a port, or want to contribute to this project,
|
|
|
|
|
please, try to respect these constraints:
|
|
|
|
|
* Document your code.
|
2021-05-09 17:32:28 +02:00
|
|
|
|
* One function per file (named like the function).
|
|
|
|
|
* Use the same formatting conventions as the rest of the code.
|
|
|
|
|
* Only use hardware-related code (DMA, SPU, etc) in target-specified files
|
|
|
|
|
when the target explicitly supports it.
|
2020-10-21 22:26:47 +02:00
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
2021-05-09 17:32:28 +02:00
|
|
|
|
### Using FxLibc
|
2020-10-21 22:26:47 +02:00
|
|
|
|
|
2021-05-09 17:32:28 +02:00
|
|
|
|
Include headers normally (`#include <stdio.h>`); on SH platforms where
|
|
|
|
|
`sh-elf-gcc` is used, link with `-lc` (by default the `-nostdlib` flag is
|
|
|
|
|
used for a number of reasons).
|
2020-10-21 22:29:48 +02:00
|
|
|
|
|
2021-05-09 17:32:28 +02:00
|
|
|
|
If you're installing in a custom folder, you also need `-I "$PREFIX/include"`
|
|
|
|
|
and `-L "$PREFIX/lib"`. If you're installing in the GCC install folder, you
|
|
|
|
|
don't need `-I` but you still need the `-L` as the default location for
|
|
|
|
|
libraries is at the root instead of in a `lib` subfolder.
|
2020-10-21 22:26:47 +02:00
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
### Licences
|
|
|
|
|
This work is licensed under a CC0 1.0 Universal License. To view a copy of this
|
|
|
|
|
license, visit: https://creativecommons.org/publicdomain/zero/1.0/legalcode.txt
|
|
|
|
|
Or see the LICENSE file.
|
2020-10-24 21:48:45 +02:00
|
|
|
|
|
2021-06-07 18:57:11 +02:00
|
|
|
|
FxLibc also includes third-party code that is distributed under its own
|
|
|
|
|
license. Currently, this includes:
|
|
|
|
|
|
2021-06-07 21:54:55 +02:00
|
|
|
|
* A stripped-down version of the [TinyMT random number generator](http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/TINYMT/index.html)
|
|
|
|
|
([GitHub repository](https://github.com/MersenneTwister-Lab/TinyMT)) by
|
2021-06-08 10:32:08 +02:00
|
|
|
|
Mutsuo Saito and Makoto Matsumoto. See `3rdparty/tinymt32/LICENSE.txt`.
|
2021-06-07 18:57:11 +02:00
|
|
|
|
* A stripped-down version of the [Grisu2b floating-point representation
|
|
|
|
|
algorithm](https://www.cs.tufts.edu/~nr/cs257/archive/florian-loitsch/printf.pdf)
|
2021-06-08 10:32:08 +02:00
|
|
|
|
with α=-59 and γ=-56, by Florian Loitsch. See `3rdparty/grisu2b_59_56/README`
|
2021-06-07 18:57:11 +02:00
|
|
|
|
for details, and [the original code here](https://drive.google.com/open?id=0BwvYOx00EwKmejFIMjRORTFLcTA).
|
|
|
|
|
|
2020-10-24 21:48:45 +02:00
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
### Special thanks to
|
|
|
|
|
* Lephenixnoir - For all <3
|
|
|
|
|
* Kristaba - For the idea with the shared libraries workaround !
|