µSTL pour Casio Graph 90+E avec fxsdk gint
Posté le 24/02/2022 12:44
Hello,
j'essaie (tant bien que mal) de faire fonctionner la µSTL (v 2.1 pour le moment, on verra par la suite si on peut tendre vers la v 3.0 qui vient de sortir) avec le fxSDK/Gint.
Je suis partie de l'implémentation de Pavel et ai modifié qq petits trucs pour que ça compile sur Gint, mais relativement peux de choses étaient à reprendre (principalement dans fstream.cc) ou un syscall à BFile_GetFileSize a du etre remplacé par BFile_Size de gint/bfile.h et la definition de deux constantes de errno.h absentes EINTR et EAGAIN (j'ai repris les valeurs adhoc d'une implémentation sur PC de manière un peu arbitraire, juste pour que ca passe).
Avec ces quelques modifs, la compilation de la libustl.a passe (avec -std=c++11).
Je copie donc la libustl.a dans le compilo (gcc.11.1.0 à coté de libc.a et libgcc.a ...) et les headers dans le dossier include du compilo
Là ou ça se complique c'est lors de la création d'un Addins de test
un coup de
fxsdk new testustl
pour créer le projet
Je renomme le "main.c" en "main.cc" pour que le compilo passe en C++ (juste au cas où, a priori pas nécessaire, mais sait on jamais)
un coup d'edition de CmakeLists.txt (je joins la version light, focalisée sur la CG50) ouù j'édite la ligne de compilation et de linkage :
target_compile_options(myaddin PRIVATE -Wall -Wextra -Os -std=c++11)
target_link_libraries(myaddin Gint::Gint -lustl -lc)
et là c'est le drame :
erreur de linkage : reference indéfinie vers "_stderr" dans la fonction ___assert_fail de la libc.
sylvain@SlyPC:~/Programmes/Casio/testustl$ fxsdk build-cg VERBOSE=1
-- The C compiler identification is GNU 11.1.0
-- The CXX compiler identification is GNU 11.1.0
-- Check for working C compiler: /home/sylvain/.local/bin/sh-elf-gcc
-- Check for working C compiler: /home/sylvain/.local/bin/sh-elf-gcc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /home/sylvain/.local/bin/sh-elf-g++
-- Check for working CXX compiler: /home/sylvain/.local/bin/sh-elf-g++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Found Gint: TRUE (found suitable version "2.7.0", minimum required is "2.1")
-- Configuring done
-- Generating done
-- Build files have been written to: /home/sylvain/Programmes/Casio/testustl/build-cg
/usr/bin/cmake -S/home/sylvain/Programmes/Casio/testustl -B/home/sylvain/Programmes/Casio/testustl/build-cg --check-build-system CMakeFiles/Makefile.cmake 0
/usr/bin/cmake -E cmake_progress_start /home/sylvain/Programmes/Casio/testustl/build-cg/CMakeFiles /home/sylvain/Programmes/Casio/testustl/build-cg/CMakeFiles/progress.marks
make -f CMakeFiles/Makefile2 all
make -f CMakeFiles/myaddin.dir/build.make CMakeFiles/myaddin.dir/depend
cd /home/sylvain/Programmes/Casio/testustl/build-cg && /usr/bin/cmake -E cmake_depends "Unix Makefiles" /home/sylvain/Programmes/Casio/testustl /home/sylvain/Programmes/Casio/testustl /home/sylvain/Programmes/Casio/testustl/build-cg /home/sylvain/Programmes/Casio/testustl/build-cg /home/sylvain/Programmes/Casio/testustl/build-cg/CMakeFiles/myaddin.dir/DependInfo.cmake --color=
Dependee "/home/sylvain/Programmes/Casio/testustl/build-cg/CMakeFiles/myaddin.dir/DependInfo.cmake" is newer than depender "/home/sylvain/Programmes/Casio/testustl/build-cg/CMakeFiles/myaddin.dir/depend.internal".
Dependee "/home/sylvain/Programmes/Casio/testustl/build-cg/CMakeFiles/CMakeDirectoryInformation.cmake" is newer than depender "/home/sylvain/Programmes/Casio/testustl/build-cg/CMakeFiles/myaddin.dir/depend.internal".
Scanning dependencies of target myaddin
make -f CMakeFiles/myaddin.dir/build.make CMakeFiles/myaddin.dir/build
[ 33%] Building CXX object CMakeFiles/myaddin.dir/src/main.cc.obj
/home/sylvain/.local/bin/sh-elf-g++ -DFXCG50 -DTARGET_FXCG50 -isystem /home/sylvain/.local/share/giteapc/Lephenixnoir/sh-elf-gcc/lib/gcc/sh3eb-elf/11.1.0/./include/openlibm -m4-nofpu -mb -ffreestanding -nostdlib -Wa,--dsp -Wall -Wextra -Os -std=c++11 -fstrict-volatile-bitfields -o CMakeFiles/myaddin.dir/src/main.cc.obj -c /home/sylvain/Programmes/Casio/testustl/src/main.cc
[ 66%] Building FXCONV object CMakeFiles/myaddin.dir/assets-cg/example.png
fxconv /home/sylvain/Programmes/Casio/testustl/assets-cg/example.png -o CMakeFiles/myaddin.dir/assets-cg/example.png --toolchain=sh-elf --cg
[100%] Linking CXX executable myaddin
/usr/bin/cmake -E cmake_link_script CMakeFiles/myaddin.dir/link.txt --verbose=1
/home/sylvain/.local/bin/sh-elf-g++ -nostdlib -T fxcg50.ld -lgcc CMakeFiles/myaddin.dir/src/main.cc.obj CMakeFiles/myaddin.dir/assets-cg/example.png -o myaddin -lgcc -lgcc /home/sylvain/.local/share/giteapc/Lephenixnoir/sh-elf-gcc/lib/gcc/sh3eb-elf/11.1.0/libgint-cg.a -lustl -lc /home/sylvain/.local/share/giteapc/Lephenixnoir/sh-elf-gcc/lib/gcc/sh3eb-elf/11.1.0/libc.a /home/sylvain/.local/share/giteapc/Lephenixnoir/sh-elf-gcc/lib/gcc/sh3eb-elf/11.1.0/libgint-cg.a /home/sylvain/.local/share/giteapc/Lephenixnoir/sh-elf-gcc/lib/gcc/sh3eb-elf/11.1.0/libc.a -lopenlibm -lgcc
/home/sylvain/.local/share/giteapc/Lephenixnoir/sh-elf-gcc/lib/gcc/sh3eb-elf/11.1.0/../../../../sh3eb-elf/bin/ld : /home/sylvain/.local/share/giteapc/Lephenixnoir/sh-elf-gcc/lib/gcc/sh3eb-elf/11.1.0/libc.a(assert.c.obj) : dans la fonction « ___assert_fail » :
assert.c:(.text+0x1c) : référence indéfinie vers « _stderr »
collect2: erreur: ld a retourné le statut de sortie 1
make[2]: *** [CMakeFiles/myaddin.dir/build.make:98 : myaddin] Erreur 1
make[1]: *** [CMakeFiles/Makefile2:76 : CMakeFiles/myaddin.dir/all] Erreur 2
make: *** [Makefile:84 : all] Erreur 2
sylvain@SlyPC:~/Programmes/Casio/testustl$
Une idée sur la cause du problème ?
Citer : Posté le 05/02/2023 15:58 | #
La mise à jour 2.9.0 requiert (exceptionnellement) de tout réinstaller, comme tu l'as vu dans les instructions, donc oui il faut évidemment mettre à jour gint avec.
Citer : Posté le 05/02/2023 16:02 | #
Tiens voilà ce que j'ai oublié de faire, je dois mettre un message dans le dépôt de µSTL pour signifier qu'avec fxSDK 2.9.0, la librairie standard est incluse.
J'avais zappé, désolé.
Citer : Posté le 05/02/2023 16:22 | #
J'ai essayé de mettre à jour Gint mais j'obtiens l'erreur suivante pendant sa compilation :
-- Configuring done
-- Generating done
-- Build files have been written to: /root/.local/share/giteapc/Lephenixnoir/gint/build-fx
-- Configuring done
-- Generating done
-- Build files have been written to: /root/.local/share/giteapc/Lephenixnoir/gint/build-cg
<giteapc> Lephenixnoir/gint: Building
[ 0%] Building C object CMakeFiles/gint-fx.dir/src/cpg/cpg.c.obj
In file included from /root/.local/share/giteapc/Lephenixnoir/gint/include/gint/drivers.h:13,
from /root/.local/share/giteapc/Lephenixnoir/gint/src/cpg/cpg.c:5:
/root/.local/share/giteapc/Lephenixnoir/gint/include/gint/defs/types.h:17:10: fatal error: sys/types.h: No such file or directory
17 | #include <sys/types.h>
| ^~~~~~~~~~~~~
compilation terminated.
make[3]: *** [CMakeFiles/gint-fx.dir/build.make:63: CMakeFiles/gint-fx.dir/src/cpg/cpg.c.obj] Error 1
make[2]: *** [CMakeFiles/Makefile2:76: CMakeFiles/gint-fx.dir/all] Error 2
make[1]: *** [Makefile:130: all] Error 2
make: *** [giteapc.make:10: build] Error 2
error: error 2 in command: make -f giteapc.make build
Citer : Posté le 05/02/2023 16:53 | #
J'est réinstallé sh-elf-gcc mais maintenant il ne le trouve plus... Autant à la compilation de gint qu'à la compilation du projet.
à l'installation il met :
<giteapc> Lephenixnoir/OpenLibm: Building
make[1]: Entering directory '/root/.local/share/giteapc/Lephenixnoir/OpenLibm'
/bin/sh: 1: sh-elf-gcc: not found
/bin/sh: 1: sh-elf-gcc: not found
/bin/sh: 1: sh-elf-gcc: not found
/bin/sh: 1: sh-elf-gcc: not found
...
/bin/sh: 1: sh-elf-gcc: not found
/bin/sh: 1: sh-elf-gcc: not found
sh-elf-gcc -shared src/common.c.o src/e_acos.c.o src/e ... un gros pavé ici...
make[1]: sh-elf-gcc: Command not found
make[1]: *** [Makefile:70: libopenlibm.so.3.0] Error 127
make[1]: Leaving directory '/root/.local/share/giteapc/Lephenixnoir/OpenLibm'
make: *** [giteapc.make:16: build] Error 2
error: error 2 in command: make -f giteapc.make build
Citer : Posté le 05/02/2023 16:58 | #
Tu devrais repartir d'une base nettoyée (en faisant les giteapc uninstall).
On dirait qu'il y a eu des mélanges entre ton ancienne toolchain et celle que tu installes en ce moment.
Citer : Posté le 05/02/2023 17:02 | #
Ok je vais tout réinstaller et voir si ça refonctionne.
Citer : Posté le 05/02/2023 17:21 | #
J'ai tout désinstallé et réinstallé. Gint s'est bin installé mais j'ai toujours la meme erreur où il ne trouve toujours pas "vector". Pourtant il me semble que mon CMakeList.txt est bon ...
# toolchain file and module path of the fxSDK
cmake_minimum_required(VERSION 3.15)
project(MyAddin)
include(GenerateG1A)
include(GenerateG3A)
include(Fxconv)
find_package(Gint 2.1 REQUIRED)
set(SOURCES
src/main.cpp
#src/main.c
#src/renderer.c
#src/utils.c
# ...
)
# Shared assets, fx-9860G-only assets and fx-CG-50-only assets
set(ASSETS
# ...
)
set(ASSETS_fx
assets-fx/example.png
# ...
)
set(ASSETS_cg
assets-cg/example.png
# ...
)
fxconv_declare_assets(${ASSETS} ${ASSETS_fx} ${ASSETS_cg} WITH_METADATA)
add_executable(myaddin ${SOURCES} ${ASSETS} ${ASSETS_${FXSDK_PLATFORM}})
target_compile_options(myaddin PRIVATE -Wall -Wextra -Os)
target_link_libraries(myaddin Gint::Gint -lstdc++)
if("${FXSDK_PLATFORM_LONG}" STREQUAL fx9860G)
generate_g1a(TARGET myaddin OUTPUT "MyAddin.g1a"
NAME "MyAddin" ICON assets-fx/icon.png)
elseif("${FXSDK_PLATFORM_LONG}" STREQUAL fxCG50)
generate_g3a(TARGET myaddin OUTPUT "MyAddin.g3a"
NAME "MyAddin" ICONS assets-cg/icon-uns.png assets-cg/icon-sel.png)
endif()
Citer : Posté le 05/02/2023 17:44 | #
Essaie de rajouter -std=c++20 à la fin de ta ligne target_compile_option
Citer : Posté le 05/02/2023 17:58 | #
Je crois que j'avais mal tout réinstaller mais malgré les erreurs (qui n'ont pas de rapport avec gint) je crois que ça a fonctionné ! Merci
Citer : Posté le 05/02/2023 18:06 | #
Ok cool