a C standard library for fx Casio calculators
Find a file
Lephenixnoir b38dd3f894
cmake: use *dynamic* fxSDK compiler path as default for gint
Previously FXSDK_COMPILER_INSTALL would be stored as the install prefix.
However, this prefix is subject to unannounced changes when the compiler
version is upgraded without reconfiguring the fxlibc, which happens in
the GiteaPC workflow.

This commit avoids the use of CMAKE_INSTALL_PREFIX when using gint with
no specified prefix, and instead uses another cached variable which
leaves the prefix to be dynamically resolved based on the uncached
variable FXSDK_COMPILER_INSTALL, like most repositories do (eg. gint).
We need the cached indicator because we frequently reconfigure and
CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT is not persistent.
2022-08-12 22:39:53 +02:00
3rdparty stdlib: add TinyMT-based rand, and malloc/etc for gint 2021-06-07 22:00:41 +02:00
cmake support for shared libgcc in vhex 2021-11-07 18:05:33 +01:00
include stdio: support for UTF-8 %lc in printf() 2022-08-01 11:27:24 +01:00
src stdio: support for UTF-8 %lc in printf() 2022-08-01 11:27:24 +01:00
.gitignore cmake: default to compiler install with gint, and GiteaPC support 2021-05-25 21:55:51 +02:00
CMakeLists.txt cmake: use *dynamic* fxSDK compiler path as default for gint 2022-08-12 22:39:53 +02:00
giteapc.make cmake: default to compiler install with gint, and GiteaPC support 2021-05-25 21:55:51 +02:00
LICENSE Release the 0.3.0 (add README + LICENSE and fix norm) 2020-10-21 22:26:47 +02:00
README.md stdio: improve printf extension API and type size support 2021-06-08 10:32:08 +02:00
STATUS C++ __restrict__, update STATUS, minor formatting 2022-03-31 10:12:01 +01:00
vxsdk.toml fxlibc - v1.4.1 : update Vhex stdlib 2022-05-14 11:49:08 +02:00

The FX C Library

This directory contains the sources of the FxLibc Library. See CMakeLists.txt to see what release version you have.

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 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

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.

For Vhex and gint targets, the headers of the kernel are also required.


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)

Each target supports different features depending on what the kernel/OS provides.

Configuration and support

Configure with CMake; specify the target with -DFXLIBC_TARGET. For SH platforms, set the toolchain to cmake/toolchain-sh.cmake.

The FxLibc supports shared libraries when building with Vhex (TODO); set -DSHARED=1 to enable this behavior.

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"

Building

Build in the directory specified in cmake -B.

% make -C build

To install, run the install target.

% make -C build install

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.
  • 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.

Using FxLibc

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).

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.


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.

FxLibc also includes third-party code that is distributed under its own license. Currently, this includes:


Special thanks to

  • Lephenixnoir - For all <3
  • Kristaba - For the idea with the shared libraries workaround !