Page 1 of 1

Compilation Ndless - Petites tailles des exécutables

Unread postPosted: 13 Aug 2023, 19:50
by newprog_creator
Bonjour à vous,
Je cherche à limiter au maximum la taille de mes exécutables avec Ndless (C).
Comment dois je faire le 'Makefile' pour ça ?
Pour info, je ne cherche qu'à faire des choses très basiques dans le programme C.
Merci par avance....

Re: Compilation Ndless - Petites tailles des exécutables

Unread postPosted: 13 Aug 2023, 19:51
by Adriweb
En passant -Os aux flags du compilateur gcc. Ça optimise pour une taille minimum. Mais bon généralement c'est pas la place qui manque, donc -O2 est suffisant.

Re: Compilation Ndless - Petites tailles des exécutables

Unread postPosted: 13 Aug 2023, 20:49
by newprog_creator
Merci pour la réponse mais je ne pense pas que cela puisse faire passer un programme de 90ko à 1ko.
Je pense que Ndless met beaucoup (trop) de données par défaut dans les exécutables (90 ko pour quasi aucun code, meme pas de printf). Peut être il y a til un moyen de ne pas insérer par défaut ces données, mais je ne sais pas comment faire...

Re: Compilation Ndless - Petites tailles des exécutables

Unread postPosted: 13 Aug 2023, 20:59
by Adriweb
Faut voir le code et le makefile. Tu peux mettre ça ici dans un zip, qu'on regarde ?

Re: Compilation Ndless - Petites tailles des exécutables

Unread postPosted: 13 Aug 2023, 21:03
by newprog_creator
Bonne idée. Ci-joint le Makefile et le *.c

Re: Compilation Ndless - Petites tailles des exécutables

Unread postPosted: 14 Aug 2023, 14:10
by newprog_creator
Bonjour,
Je me permets de relancer :-)

Re: Compilation Ndless - Petites tailles des exécutables

Unread postPosted: 14 Aug 2023, 15:24
by Adriweb
J'ai envoyé le lien de ce topic à Vogtinator, on verra s'il a le temps de jeter un oeil ^^

Re: Compilation Ndless - Petites tailles des exécutables

Unread postPosted: 16 Aug 2023, 08:05
by SlyVTT
Je crains que cela ne soit lié à la lib nspireio qui est linkée.
C'est la librairie de base qui permet de faire le lien avec le matériel, donc nécessaire pour les projets Ndless.

Faire une librairie plus light est en soi possible, mais cela signifie qu'il faudrait faire l'impasse sur certaines fonctions/le support de certaines parties du matériel.

A titre d'exemple, le "helloworld" du SDK, qui est un simple démonstrateur de l'utilisation des classes en C++ avec un printf() voit la taille du fichier TNS vers 120ko.
Les sources pèsent juste 400o, et fort heureusement de genzehn passe la compression du binaire, car le fichier ELF sorti de l'étape de compilation/linkage pèse lui près de 290Ko.

Tu remarqueras aussi que toujours dans le SDK, l'exemple "colors" est un petit programme qui n'utilise pas la lib nspireio et dont la taille du TNS est nettement plus contenue (5Ko pour des sources qui font 676o et un ELF de 75Ko environ, encore merci à genzhen et aux diverses options)

A mon avis tu dois pouvoir t'inspirer de ce dernier exemple pour faire mieux, par contre, il faut être clair, sans la libnspireio.a linkée, les possibilités seront hyper limitées car plein de fonctions ne seront juste pas accessibles.

Re: Compilation Ndless - Petites tailles des exécutables

Unread postPosted: 18 Aug 2023, 16:42
by newprog_creator
Bien reçu. Je regarde ça...

Re: Compilation Ndless - Petites tailles des exécutables

Unread postPosted: 21 Aug 2023, 19:17
by Vogtinator
nspireio is only necessary if you want to use the console it provides. If you use something else for user input and output, you can avoid it.

There are two tricks you can use to make it smaller. One is to remove unused symbols from the executable with -Wl,--gc-sections. The other is to leverage deflate support in the Zehn file format by adding --compress to ZEHNFLAGS. The latter adds about 13K to the .prg.tns file, but if you target Ndless >= 3.9 (r2000, released in 2015) the plain .tns file is enough.

With those tricks the .tns is ~42KiB here.