fxSDK, un SDK alternatif pour écrire des add-ins
Posté le 29/08/2014 22:00
Cette page sert d'index pour la série de topics du fxSDK.
Le fxSDK est une collection d'outils permettant de développer des add-ins pour les calculatrices Casio des séries Graph. C'est une alternative au
fx-9860G SDK et
PrizmSDK qui ne sont plus activement maintenus, et le compagnon classique de mon noyau
gint.
Index des topics
Ce projet existe depuis 2015, alors il y a pas mal de topics liés. En voici une liste complète !
Topics principaux
Installation du fxSDK
Tutoriels
Compatibilité sur calculatrice et PC
Côté PC, le fxSDK est compatible avec
Linux, Mac OS, et WSL pour Windows ; normalement tout le monde peut l'utiliser. Je teste constamment sous Linux, et WSL est un Linux donc c'est testé aussi. Je n'ai pas de Mac OS donc il peut y avoir quelques surprises, mais en général c'est l'affaire de corriger un bug ou deux.
En termes de calculatrices, le fxSDK supporte :
Calculatrices monochromes
- Graph 35+E II
- Graph 35+ USB / Graph 35+E (SH3/SH4)
- Graph 75/75+/75+E
- Graph 85/85 SD/95 (SD) (pas activement testé)
Calculatrices couleurs
- Graph 90+E / fx-CG 50
- Prizm fx-CG 10/20
Comment installer le fxSDK et coder des add-ins
Le fxSDK s'installe à partir de dépôts Git sur la
forge de Planète Casio (par exemple
Lephenixnoir/fxsdk). Il y en a un peu beaucoup, donc manuellement c'est assez long. Pour que ça aille plus vite et pour simplifier le travail des débutants, il y a un outil appelé
GiteaPC qui peut faire ça pour vous.
Si vous utilisez Windows, vous aurez besoin de WSL pour accéder à un système Linux dans Windows. Heureusement, Microsoft a fait ça bien et c'est facile à faire. Voyez le
tutoriel d'installation de WSL 2 (et l'explication rapide de
ce que WSL 2 est).
Si vous utilisez Mac OS, ouvrez l’œil en lisant les topics pour ne pas manquer les informations supplémentaires et éventuelles déviations par rapport à la procédure normale sous Linux.
Méthode automatique avec GiteaPC (plus rapide / recommandée pour les débutants)
- Suivez le tutoriel d'utilisation de GiteaPC, qui explique comment obtenir le fxSDK.
Méthode automatique avec plugin VS Code
- Yannis300307 a créé un plugin VS Code Casio Dev Tools qui fonctionne sous Windows (avec WSL) et Debian (probablement les dérivés aussi).
Méthode AUR pour les utilisateurs Arch/Manjaro/dérivés (ils se reconnaîtront)
- Dark Storm maintient MiddleArch, un dépôt de paquets précompilés qui a entre autres le fxSDK.
Méthode manuelle (plus fine / classique pour les habitués)
- Compilez et installez le cross-compilateur GCC pour SuperH.
- installez (dans cet ordre) les dépôts fxSDK, OpenLibm, fxlibc, gint ; en option, Slyvtt/µSTL_2.3.
Description sommaire du fxSDK
Pour une introduction à l'utilisation du fxSDK qui montre comment utiliser les outils pour développer un add-in, lisez plutôt les
tutoriels d'utilisation de gint. Cette section est juste une description sommaire.
Le cœur du fxSDK est un cross-compilateur GCC pour SuperH, habituellement nommé
sh-elf-gcc. Bien sûr on a avec toute la suite d'outils, dont
as,
ld,
objdump,
objcopy (entre autres). Contrairement au vieux compilateur du SDK, GCC est un compilateur moderne avec beaucoup d'options et capable de très solides optimisations.
Sur la calculatrice, c'est
le noyau gint qui fait la majorité du travail. Il remplace fxlib/libfxcg et une partie de l'OS pour vous offrir des fonctionnalités plus cool et plus rapides. Les add-ins développés avec le fxSDK utilisent gint toutes les trois lignes !
Il y a enfin plusieurs outils utiles sur le PC qui sont utilisés durant le développement ou l'utilisation des add-ins :
- fxsdk est un script shell qui permet de créer et compiler les projets sans se prendre trop la tête. Le système de compilation officiel pour les add-ins est CMake, mais un système plus ancien de Makefile est encore supporté.
- fxconv est un outil très polyvalent qui convertit à la compilation les assets (images, polices, maps....). Il permet de travailler avec des logiciels et formats de fichiers normaux sur le PC et d'avoir automatiquement un format optimisé sur la calculatrice. fxconv est extrêmement extensible et chaque projet peut ajouter des conversions personnalisées.
- fxgxa crée les fichiers g1a (format des add-ins pour Graph monochromes) et g3a (format des add-ins pour Graph couleurs) à partir des programmes compilés.
- fxlink est un outil de communication qui peut transférer des fichiers vers les Graph 35+E II et Graph 90+E en ligne de commande, mais aussi échanger interactivement avec les add-ins gint par le câble USB, et est couramment utilisé pour réaliser des captures d'écran ou captures vidéo des add-ins.
Changelog et informations techniques
Ci-dessous se trouve la liste des posts annonçant les nouvelles versions du fxSDK, ainsi que des liens vers les instructions/tutoriels supplémentaires publiés avec.
Citer : Posté le 17/08/2022 21:18 | #
j'ai retiré ma toolchain de path et lors de la compilation de gint ça ne fonctionne toujours pas malgré que la bonne toolchain soit utilisé.
-- The C compiler identification is GNU 11.1.0
-- The ASM compiler identification is GNU
-- Found assembler: /home/pierre/.local/bin/sh-elf-gcc
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /home/pierre/.local/bin/sh-elf-gcc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Found Git: /usr/bin/git (found version "2.35.1")
-- Configuring done
-- Generating done
-- Build files have been written to: /home/pierre/.local/share/giteapc/Lephenixnoir/gint/build-fx
-- The C compiler identification is GNU 11.1.0
-- The ASM compiler identification is GNU
-- Found assembler: /home/pierre/.local/bin/sh-elf-gcc
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /home/pierre/.local/bin/sh-elf-gcc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Found Git: /usr/bin/git (found version "2.35.1")
-- Configuring done
-- Generating done
-- Build files have been written to: /home/pierre/.local/share/giteapc/Lephenixnoir/gint/build-cg
<giteapc> Lephenixnoir/gint: Building
Scanning dependencies of target gint-fx
[ 0%] Building C object CMakeFiles/gint-fx.dir/src/cpg/cpg.c.obj
Dans le fichier inclus depuis /home/pierre/.local/share/giteapc/Lephenixnoir/gint/include/gint/drivers.h:13,
depuis /home/pierre/.local/share/giteapc/Lephenixnoir/gint/src/cpg/cpg.c:5:
/home/pierre/.local/share/giteapc/Lephenixnoir/gint/include/gint/defs/types.h:17:10: erreur fatale: sys/types.h: Aucun fichier ou dossier de ce type
17 | #include <sys/types.h>
| ^~~~~~~~~~~~~
compilation terminée.
make[3]: *** [CMakeFiles/gint-fx.dir/build.make:76 : CMakeFiles/gint-fx.dir/src/cpg/cpg.c.obj] Erreur 1
make[2]: *** [CMakeFiles/Makefile2:83 : CMakeFiles/gint-fx.dir/all] Erreur 2
make[1]: *** [Makefile:136 : all] Erreur 2
gmake: *** [giteapc.make:10 : build] Erreur 2
error: error 2 in command: gmake -f giteapc.make build
Citer : Posté le 17/08/2022 21:34 | #
Comme indiqué sur le topic de GiteaPC, il y a d'autre choses à installer avant gint, à savoir OpenLibm et la fxlibc (la dernière fournissant <sys/types.h>). GiteaPC va toujours installer la fxlibc avant gint, mais je soupçonne que la fxlibc ait été installée avec ton ancien compilateur (avant que tu ne le retires du PATH). Si c'est ça alors désinstalle puis réinstalle la fxlibc, ton nouveau compilateur sera utilisé automatiquement.
Citer : Posté le 18/08/2022 09:24 | #
merci! ça a marché ! je vais pouvoir me lancer sur la programmation graph 90 et espérer agrandir le catalogue .
je vais faire une pause sur l'émulateur car de toute façon je suis bloqué.
Citer : Posté le 18/08/2022 11:18 | #
T'as vu, ça marche bien mieux avec giteaPC !
libMicrofx : https://www.planet-casio.com/Fr/forums/topic17259-2-libmicrofx-remplacez-fxlib-pour-faire-des-add-ins-tres-legers.html !
Racer3D : https://www.planet-casio.com/Fr/programmes/programme4444-1-racer3d-mb88-jeux-add-ins.html
Citer : Posté le 18/08/2022 11:39 | #
apt install c'est mieux.
Citer : Posté le 18/08/2022 11:56 | #
sudo pacman -S fxsdk gint
Citer : Posté le 21/08/2022 22:20 | #
Nouvelle version : fxSDK 2.9.0
Release associée de gint : gint 2.9.0
Release associée de la fxlibc : fxlibc 1.4.4
Cette version du fxSDK apporte deux changements majeurs.
Le premier est le support complet du C++ avec la lib standard (via l'implémentation GNU, libstdc++) !
Ça veut dire qu'on peut coder dans les derniers standards C++ (y compris C++20), accéder aux fonctionnalités récentes du langage (concepts) mais aussi aux structures de données et conteneurs habituels (std::string, std::vector, etc). La seule chose qu'on n'a pas encore c'est les exceptions.
Le second est une réorganisation des fichiers du fxSDK.
Pour faire simple, le compilateur et les bibliothèques comme gint sont maintenant organisés d'une façon moins barbare et plus proche de ce qu'on aurait si la calculatrice était un ordinateur (avec une sysroot ou du moins quelque chose qui s'en approche). C'est nécessaire pour avoir la lib C++. Ce changement n'est pas très visible pour vous, à part que :
Instructions de mise à jour vers fxSDK 2.9
Pour cette mise à jour, afin de créer la bonne organisation pour le fxSDK il faut reprendre l'installation de zéro. C'est automatique comme avant mais prévoyez entre 30 minutes et 1 heure pour recompiler GCC.
Si vous avez GiteaPC, désinstallez tous les dépôts du fxSDK (probablement tous sauf GiteaPC lui-même). Généralement ça va vous donner
Tapez giteapc list pour avoir une liste des dépôts installés, si vous en avez d'autres (libimg, µSTL, libSerial) désinstallez-les aussi. N'allez pas supprimer les dossiers de GiteaPC directement, non seulement ça ne désinstallerait pas proprement mais ça supprimerait aussi GiteaPC alors qu'on veut le garder.
Une fois que tout est parti, réinstallez les outils fxSDK, binutils, et GCC. C'est ça qui prend le plus longtemps (de loin) :
Si vous n'avez pas UDisks2 remplacez le premier par Lephenixnoir/fxsdk:noudisks2.
Ensuite installez la lib mathématique, la lib C, et ensuite réinstallez sh-elf-gcc pour installer la lib C++ qui est fournie avec (GCC ne sera pas recompilé) :
Enfin, passez à gint et aux bibliothèques :
Au moment où j'écris ce post les libs de SlyVTT ne sont pas encore prêtes, surveillez les commentaires ci-dessous pour voir quand c'est bon !
Explications détaillées de ce qui a changé
Jusqu'ici le fxSDK abusait du fait qu'il y a un dossier interne de GCC dans lequel le compilo va chercher les headers et les bibliothèques, et on installait nos libs là. Ça marche, mais c'est pas prévu pour, et dès qu'on se met dans un environnement un peu plus proche du hosted (le terme désignant un environnement complet genre Linux, par opposé à free-standing qui signifie en gros "embarqué") ça ne marche plus.
Typiquement, quand on compile la lib C++ les en-têtes et les bibliothèques ne sont pas cherchés au même endroit, et une fois qu'on a fini de la compiler elle ne s'installe pas non plus au même endroit.
Normalement quand on a un système de cross-compilation comme ça on a une sysroot, qui est un dossier dans lequel on a une installation plus ou moins complète du système cible. Par exemple si Linux tournait sur la calculatrice on aurait dans la sysroot tous les en-têtes Linux avec les libs et les outils qui vont bien, pour SuperH. La lib C++ se compile et s'installe comme s'il y a une sysroot.
Le changement que cette version apporte au fxSDK consiste donc à organiser les fichiers pour créer un dossier qui s'approche de ça au lieu d'utiliser le dossier interne de GCC.
Pour s'y retrouver j'ai ajouté une nouvelle commande fxsdk path <NAME> qui affiche les dossiers importants du SDK. Pour l'instant trois noms sont définis, sysroot qui affiche le dossier principal dans lequel tout est installé, lib qui affiche le dossiers où on mets nos libs, et include qui affiche le dossier où on met nos en-têtes.
Instructions de mise à jour des bibliothèques
Il y a quelque changements en termes de CMake.
Au lieu d'installer les libs dans ${FXSDK_COMPILER_INSTALL} et les headers dans ${FXSDK_COMPILER_INSTALL}/include vous devez maintenant les installer dans ${FXSDK_LIB} et ${FXSDK_INCLUDE} respectivement. Ces deux variables renvoient les mêmes dossiers que fxsdk path lib et fxsdk path include.
La fonction find_simple_library() du fxSDK qui est utilisée pour dans les modules Find*.cmake prend désormais le nom d'un header relatif au dossier ${FXSDK_INCLUDE}, donc il faut retirer un include/ dans le chemin. Par exemple au lieu de find_simple_library(libX.a include/X/config.h) on écrira find_simple_library(libX.a X/config.h).
Un exemple parfaitement canonique des changements à faire est visible dans ce commit de JustUI. Le dépôt Lephenixnoir/Template-gint-library est également à jour.
Changelog complet
Citer : Posté le 22/08/2022 21:27 | #
La SDL ainsi que ses librairies filles ont été mises à jour pour tenir compte de la nouvelle architecture de fxSDK 2.9.0.
L'installation se fait via l'outil giteapc comme suit :
Je vous renvoie vers les topics qui vont bien pour plus d'infos sur comment utiliser les libs :
Amusez-vous bien ...
Citer : Posté le 22/08/2022 21:29 | #
Excellent boulot, merci pour ta réactivité ! Toujours au top et parfaitement maintenu !!
Citer : Posté le 22/08/2022 21:37 | #
Merci Lephé
Faut encore que je travaille sur cette histoire de dépendances dans les findxxxlib.cmake et sur les interconnections de librairies.
Citer : Posté le 27/08/2022 11:30 | #
après un sudo apt update && sudo apt full-upgrade cmake m'affiche
-- The CXX compiler identification is GNU 11.1.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /home/pierre/.local/bin/sh-elf-gcc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /home/pierre/.local/bin/sh-elf-g++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Found Gint: TRUE (found suitable version "2.9.0-1", minimum required is "2.1")
-- Configuring done
CMake Error in CMakeLists.txt:
The language FXCONV was requested for compilation but was not enabled. To
enable a language it needs to be specified in a 'project' or
'enable_language' command in the root CMakeLists.txt
-- Generating done
CMake Generate step failed. Build files cannot be regenerated correctly.
Citer : Posté le 27/08/2022 14:03 | #
Arf oui KikooDX avait aussi ce problème, c'est avec CMake 3.24. Il faut que je modifie les scripts...
Ordre d'idée : ajouter un enable_language(FXCONV) après le import(Fxconv) et modifier Fxconv.cmake pour définir assez de variables pour que CMake le reconnaisse de nouveau comme un langage custom.
Je regarde ça aujourd'hui.
Citer : Posté le 29/08/2022 00:50 | #
Nouveau patch : fxSDK 2.9.1
Ce patch résout un problème de compatibilité avec CMake 3.24.
Le fxSDK utilise le mécanisme de définition de langages de CMake pour définir un langage FXCONV dont le compilateur est (sans surprise) fxconv et ainsi traiter les assets comme des fichiers source. Cependant, tout ce système est interne à CMake, très modérément documenté et subit parfois des changements sans notifications dans le changelog. Ce patch délaisse la méthode "abrégée" de définition de langage avec juste CMAKE_<LANG>_COMPILE_OBJECT et définit un langage pour de vrai avec la poignée de modules qui va avec.
Citer : Posté le 31/08/2022 20:44 | #
Hello,
suite à une session Discord avec Lephé (merci pour ton aide ), l'ensemble des librairies liées à la SDL1.2 pour Casio Prizm (fx-CG10/20) et Graph 90+E (fx-CG50) a été mise à jour comme suit :
Tout d'abord les noms des dépôts sur la forge Gitea de Planète Casio ont été simplifiés (les numéros de versions ont disparu des noms de dépôts car c'était très pénible à taper) et modifiés comme ceci :
Comme explicité rapidement il y a quelques jours, l'ensemble des librairies ont été remises à plat pour devenir compatible avec fxSDK/gint 2.9.0, en prenant notamment en compte le déplacement de certains fichiers headers afin de proposer un système beaucoup plus classique (et attendu par GCC).
Le système d'installation via l'outil giteapc a été complètement mis à jour afin de simplifier au maximum l'installation et l'utilisation de la SDL. AInsi les dépendances sont automatiquement installées. Par exemple en commençant l'installation par la librairie en haut de l'arborescence de dépendance (à savoir la cSDL_image), toutes les librairies dont elle dépend seront automatiquement installées via un giteapc install cSDL_image.
Concernant l'utilisation, il y a tout de même une subtilité pour obtenir un linkage correct et éviter les problèmes. Ainsi il convient d'ajouter toutes les librairies dans le CMakeLists.txt de votre projet via des find_package() et d'aider le linkage via la ligne correcte dans target_link_libraries()
cmake_minimum_required(VERSION 3.15)
project(MyAddin)
include(GenerateG3A)
include(Fxconv)
find_package(Gint 2.7.1 REQUIRED)
find_package(cSDL 1.2.15 REQUIRED)
set(SOURCES
src/main.c
# ...
)
# Shared assets, fx-9860G-only assets and fx-CG-50-only assets
set(ASSETS
# ...
)
set(ASSETS_cg
assets-cg/example.png
# ...
)
fxconv_declare_assets(${ASSETS} ${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 cSDL::cSDL)
if("${FXSDK_PLATFORM_LONG}" STREQUAL fxCG50)
generate_g3a(TARGET myaddin OUTPUT "SDL_App.g3a"
NAME "SDL_App" ICONS assets-cg/icon-uns.png assets-cg/icon-sel.png)
endif()
cmake_minimum_required(VERSION 3.15)
project(MyAddin)
include(GenerateG3A)
include(Fxconv)
find_package(Gint 2.7.1 REQUIRED)
find_package(cJPEG 9.2 REQUIRED)
find_package(cZlib 1.2.5 REQUIRED)
find_package(cPNG 1.5.30 REQUIRED)
find_package(cSDL 1.2.15 REQUIRED)
find_package(cSDL_image 1.2.12 REQUIRED)
set(SOURCES
src/main.c
# ...
)
# Shared assets, fx-9860G-only assets and fx-CG-50-only assets
set(ASSETS
# ...
)
set(ASSETS_cg
assets-cg/example.png
# ...
)
fxconv_declare_assets(${ASSETS} ${ASSETS_cg} WITH_METADATA)
add_executable(myaddin ${SOURCES} ${ASSETS} ${ASSETS_${FXSDK_PLATFORM}})
target_compile_options(myaddin PRIVATE -Wall -Wextra -Os -std=c11)
target_link_libraries(myaddin cSDL_image::cSDL_image cPNG::cPNG cZlib::cZlib cJPEG::cJPEG Gint::Gint)
if("${FXSDK_PLATFORM_LONG}" STREQUAL fxCG50)
generate_g3a(TARGET myaddin OUTPUT "SDLIm_App.g3a"
NAME "SDLIm_App" ICONS assets-cg/icon-uns.png assets-cg/icon-sel.png)
endif()
Je vise idéalement à obtenir un système plus simple pour limiter les 'find_package()' et les options dans 'target_link_libraries()' au minimum, mais pour le moment il faut se contenter de cela.
En espérant que cela vous aide pour vos projets.
Citer : Posté le 02/01/2023 18:02 | # | Fichier joint
Je viens de pousser un changement du fxSDK pour les add-ins Graph 90+E. À partir de la prochaine version, un nouveau fichier assets-cg/icon-cg.xcf sera fourni avec les assets ; c'est un modèle d'icône « style OS » qui vous permet de facilement créer avec GIMP des icônes qui s'intègrent avec celles par défaut. Si vous en avez besoin pour un projet déjà créé, vous pouvez le télécharger depuis Gitea.
Voici un tutoriel rapide sur comment utiliser le modèle.
Les tailles
La taille standard pour une icône d'add-in c'est de ne couvrir qu'une partie de la hauteur, parce que l'OS affiche le nom de l'add-in (spécifié dans la commande generate_g3a() de CMakeLists.txt) en-dessous dans le menu principal. On peut faire des icônes de cette taille avec le groupe Standard size.
Parfois le nom de l'add-in est trop long et le texte affiché par l'OS dépasse (il se fait couper pour être exact). Dans ce cas on peut indiquer un nom vide dans generate_g3a() et écrire le nom à la main avec une police plus serrée. Ce mécanisme est démontré sur les calques Custom text (sel/uns), qui indiquent les couleurs. Le calque [Text boundaries] indique la limite où il ne faut pas écrire pour que ça reste lisible avec d'autres icônes à côté.
Le modèle permet aussi de faire des icônes en taille complète, où cette fois l'icône prend toute la place (il est alors impératif de mettre un nom vide dans generate_g3a()). Le fonctionnement est similaire, il faut juste utiliser le groupe Full size à la place.
Les calques
La plupart des calques ont deux variantes : une version "(uns)" utilisée quand l'icône n'est pas sélectionnée, pour générer icon-uns.png, et une version "(sel)" utilisée quand l'icône est sélectionnée, pour générer icon-sel.png. Les calques sont les suivants :
Pour générer icon-uns.png, affichez tous les calques "(uns)", plus Icon et Shadow, et exportez en PNG (Shift+Ctrl+E).
Pour générer icon-sel.png, affichez tous les calques "(sel)", plus Icon et Shadow, et exportez de nouveau en PNG.
L'image principale
Il y a plein de designs possibles pour l'image principale de l'icône. L'OS utilise des formes blanches avec une ombre. Une façon simple d'atteindre cet effet est comme ceci :
C'est ce qui a été fait dans la capture d'écran ci-dessus.
La couleur de fond
La couleur de fond du calque Dithering peut être changée facilement en sélectionnant le calque (cliquez bien sur la prévisualisation de gauche, pas sur le masque de calque) puis en utilisant l'outil de colorisation (menu Colors » Colorize). Il suffit de sélectionner la couleur désirée et GIMP se débrouille pour teinter le calque tout en gardant le motif de dithering et le dégradé.
Une fois cela fait, on peut réappliquer la même transformation aux 3 autres calques Dithering en les sélectionnant puis en tapant Ctrl+F. Ctrl+F répète la dernière « commande » exécutée, ce qui se voit dans le menu Filters. Ça marche même si le calque n'est pas visible, ce qui est pratique pour aller vite.
Citer : Posté le 09/01/2023 20:06 | #
Il n'y a pas de tutoriel vidéo, j'utilise à peine Linux mais je suis intéressé à apprendre à programmer à l'aide de cet outil. Les instructions semblent compliquées. Tout guide plus détaillé ou mieux encore une vidéo sur l'installation. Et quelle distribution Linux recommandez-vous d'installer pour commencer ?
Merci beaucoup chère communauté
Citer : Posté le 09/01/2023 20:10 | #
Salut ! Pour la distribution Linux, je dirais que le mot d'ordre c'est "une difficulté à la fois", donc le plus simple ! Ubuntu est la plus classique, mais tu préfères un style plus proche de Windows, Linux Mint est également un excellent choix.
L'installation du fxSDK est en effet pas facile (ça a toujours été). Cela dit, si tu suis l'option GiteaPC décrite dans ce topic tu devrais t'en sortir à moindres frais, car elle est assez automatique et bien testée (donc risque d'erreur pas trop élevé).
Il n'y a malheureusement pas de tutoriel vidéo (ou alors des vieux plus à jour), c'est le côté un peu amateur. x3
Citer : Posté le 30/03/2023 21:16 | #
Hi, sorry for writing in English. I just started writing an addin in C++ using the fxsdk, but when I tried to use vectors and strings, it just gave me a bunch of errors. What can I do to make it work?
Here are the errors:
/home/ethanho47/.local/share/fxsdk/sysroot/lib/gcc/sh3eb-elf/11.1.0/../../../../sh3eb-elf/bin/ld: CMakeFiles/myaddin.dir/src/main.cpp.obj: in function __ZNSt12_Vector_baseIiSaIiEED2Ev':
main.cpp:(.text._ZNSt12_Vector_baseIiSaIiEED2Ev[_ZNSt12_Vector_baseIiSaIiEED5Ev]+0x14): undefined reference to __ZdlPvj'
/home/ethanho47/.local/share/fxsdk/sysroot/lib/gcc/sh3eb-elf/11.1.0/../../../../sh3eb-elf/bin/ld: CMakeFiles/myaddin.dir/src/main.cpp.obj: in function _main':
main.cpp:(.text.startup+0x84): undefined reference to __ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE13_S_copy_charsEPcPKcS7_'
/home/ethanho47/.local/share/fxsdk/sysroot/lib/gcc/sh3eb-elf/11.1.0/../../../../sh3eb-elf/bin/ld: main.cpp:(.text.startup+0x88): undefined reference to __ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE10_M_disposeEv'
collect2: error: ld returned 1 exit status
make[2]: *** [CMakeFiles/myaddin.dir/build.make:110: myaddin] Error 1
make[1]: *** [CMakeFiles/Makefile2:83: CMakeFiles/myaddin.dir/all] Error 2
make: *** [Makefile:91: all] Error 2
Citer : Posté le 30/03/2023 21:21 | #
This is because you are not specifying the langage you are targeting. by default C, not C++
In your CMakeLists.txt, you need to specify
target_compile_options(myaddin PRIVATE -Wall -Wextra -Os -std=c++20)
and
target_link_libraries(myaddin Gint::Gint -lstdc++)
you may have something else, what is important is -std=c++20 in the first line
and -stdc++ in the second line
put these two option at the end, just before the closing parenthese. and retry
Let us know if it works
Citer : Posté le 30/03/2023 21:23 | #
Also note that C++ works well with gint >=2.9
Citer : Posté le 30/03/2023 21:34 | #
That worked, thanks!