Petit problème de portage

15 sujets de 1 à 15 (sur un total de 23)

  • 1
  • 2
  • demoniak

      #1662

      Bonjour !

      J’ai mis ce message dans un thread sur le forum du bar, mais ce n’est pas l’endroit idéal…

      Alors voila mon problème : j’essaye de faire un portage d’une appli que j’ai développé initialement sous VC++ 6 (Windows) vers Amiga.

      Je suis confronté à un problème : comment dire au compilateur d’aligner les structures sur un octet ? (par défaut, il doit aligner sur 2 ou 4 octets je pense, car la taille de mes structures est supérieure à celle que me donne la version windows, qui elle, aligne sur 1 octet).

      J’utilise VBCC et SAS C côté Amiga.

      Une autre petite question : VBCC est-il limité au C, ou peut-il compiler du C++ ?

      Merci d’avance pour votre aide…

      Lion

        #35653

        As tu essayé gurumed ?

        c est le site d aide a la programmation sur amiga et en francais.

        regardes dans la page des liens mais il me semble que le site etait indisponible hier.

        Lio

        Nicholas

          #35654

          demoniak a écrit :

          Bonjour !

          J’ai mis ce message dans un thread sur le forum du bar, mais ce n’est pas l’endroit idéal…

          Alors voila mon problème : j’essaye de faire un portage d’une appli que j’ai développé initialement sous VC++ 6 (Windows) vers Amiga.

          Je suis confronté à un problème : comment dire au compilateur d’aligner les structures sur un octet ? (par défaut, il doit aligner sur 2 ou 4 octets je pense, car la taille de mes structures est supérieure à celle que me donne la version windows, qui elle, aligne sur 1 octet).

          J’utilise VBCC et SAS C côté Amiga.

          Une autre petite question : VBCC est-il limité au C, ou peut-il compiler du C++ ?

          Merci d’avance pour votre aide…

          Je suis pas sur mais il me semble que:

          – VBCC ne peux force l’alignement que sur 4 octects (avec amiga-align/defaut-align).

          – SAS C: je sais pas, je suppose que c’est 4 octects.

          Par contre, GCC permet d’imposser n’importe quel alignement:

          #pragma pack(1)

          // Tes structures

          #pragma pack()

          L’alignement par défaut doit etre de 4 octects sur 68k.

          Bon courage!

          Bye

          demoniak

            #35655

            Merci !

            Bon, je pense que je vais être obligé de passer par GCC.

            Je suis dois aligner mes structures sur 1 octet, car les données de ces structures sont utilisées ensuite dans du code assembleur Z80…

            Nicholas

              #35656

              Il y a peut-etre un “pro” SAS/C et/ou VBCC qui pourrait confirmer mais il me semble que le seul compila Amgia quipeuxlef aire est Gcc.

              Peut-etre que certaines antiquité (DICE…) peuventle faire, mais bon…

              Gcc a l’avantage d’etre multi-plateforme: un coup de “make” et ton soft tourne sur Amiga 68k, OS4, MorphOS, AROS, Amithlon…

              Allez bon courage!

              krabob

                #35657

                sur tout les 68000, l’alignement est de 2 octets pour toute donnée dont la taille est superieure a 1 octet. donc si tu as:

                struct mystruct={

                char pouet;

                int repouet;

                }

                le compilo amiga va te dire que sizeof(mystruct) est 6.

                attention aux différence little/big endian surtout, intel travaille en little endian (un entier 4 octets ABCD-> sera écrit en DCBA en mémoire), les 68000 en big endian. (ABCD -> ABCD ). Si tu réutilise des fichiers binaire créée sur l’un avec l’autre, tu doit créer des fonctions de lectures spéciales.

                Nicholas

                  #35658

                  @Krabob:

                  En effet, c’est belle et bien 2 pour 68k et l’amiga-allign doit

                  surement aligné sur 2 du coup.

                  Doit etre 4 logiquement sur PPC. Oups :-)

                  Bye

                  demoniak

                    #35659

                    @Krakob:

                    Merci de ces infos. supplémentaire.

                    Oui, en effet, le problème big-endian/little-endian va se poser… J’ai déjà quelques problèmes lorsque j’ai voulu porter WinCPC sur Amiga.

                    Bon, on verra bien…


                    @Nicholas
                    :

                    J’ai relu la doc. du SAS, et il ne semble pas y avoir d’options pour générer des structures “packées”.

                    Je vais donc m’orienter vers GCC.

                    Bah, ça ne devrait pas trop poser de problèmes, déjà que j’ai réussi à adapter mon code de Visual C++ à Sas C…

                    En plus, GCC supporte le C++, la conversion devrai être encore plus facile !

                    stan

                      #35660

                      Les dernières versions de VBCC (0.8g et 0.8h) supportent #pragma pack(), donc je suppose #pragma pack(1), mais je n’ai pas testé.

                      Sinon, oui, #pragma amiga-align aligne sur 2 octets.

                      Nicholas

                        #35661

                        stan a écrit :

                        Les dernières versions de VBCC (0.8g et 0.8h) supportent #pragma pack(), donc je suppose #pragma pack(1), mais je n’ai pas testé.

                        Hey, interressant :-)

                        Stan, a ton avis VBCC génére du meilleur code (fiabilité/optimisation) que Gcc (le 2.95.3 du SDK) ??

                        bye

                        corto

                          #35662

                          Nicholas a écrit :

                          Gcc a l’avantage d’etre multi-plateforme: un coup de “make” et ton soft tourne sur Amiga 68k, OS4, MorphOS, AROS, Amithlon…

                          VBCC fonctionne en 68k, MorphOS, OS4, … et permet même d’utiliser la cross-compilation juste en indiquant la cible à la compilation.

                          D’autre part, pour les systèmes que tu cites, les adaptations ne sont pas hyper complexes mais il peut y avoir pas mal de petites choses sur lesquelles il faut être vigilant et qui demandent donc du temps. Par exemple : alignement des structures, différences entre lib mathématiques, support des différentes versions de datatypes, hooks, process, …

                          Sans compter que avant d’envisager la recompilation la simple possible pour nos multiples OS, il faut enlever tout ce qui est spécifique au hardware d’une parte mais aussi à SAS/C dans le cas d’un portage de sources écrits pour ce compilateur.

                          stan

                            #35663

                            Nico, le seul test que j’ai fait c’est sur les routines d’AI de Smart Lines, et VBCC 0.8h semble donner un exe plus rapide que GCC du SDK de MOS (GCC en -O3 et VBCC en -O). Mais ce n’est qu’un test isolé (et Henes m’a donné des options pour accélérer les calculs flottants de GCC, mais je n’ai pas essayé).

                            En ce qui concerne les bugs de compilation… Avec les derniers VBCC, tout semble compiler parfaitement pour l’instant, sauf en 68k où j’ai remarqué un problème qui ne se trouve pas dans les autres versions. Si j’arrivais à localiser le bug et à envoyer un bug report, il serait probablement corrigé assez vite (selon mon expérience).

                            Nicholas

                              #35664

                              VBCC fonctionne en 68k, MorphOS, OS4, … et permet même d’utiliser la cross-compilation juste en indiquant la cible à la compilation

                              Oui, oui, VBCC est surement trés bien :-).

                              Tu peux aussi cross compiler facilemnt avec gcc, il suffit de modifier

                              le makefile:

                              ppc-morphos-gcc

                              68k-amiga-gcc

                              ppc-amigaos-gcc (je suppose pour OS4)

                              Le gros probleme (à mon avis) c’est qu’il ny a pas de package

                              regroupant ces “cross compilo” pour toutes les plate-formes. De plus,

                              les headers des OS sont (C) (il me semble) du coup, tu peux

                              difficlement fournir un kit de dev multi-plateforme complet…

                              Bye

                              Bye

                              demoniak

                                #35665

                                Désolé de vous embêter encore…

                                J’ai installé GCC, j’ajoute les #pragma pack, je compile, mais ma structure fait toujours la même taille…

                                J’ai fais un petit prog. de test que voici :

                                #include

                                #include

                                #define HANDLE_SYSV_PRAGMA 1

                                #pragma pack(1)

                                #include “Structures.h”

                                int main( void )

                                {

                                printf( “t=%dn”, sizeof( StConstantes ) );

                                return( 0 );

                                }

                                Mais avec ou sans la directive #pragma, j’ai toujours la même taille, et biensur, elle est supérieure à ce que me donne le compilo sur PC…

                                stan

                                  #35666

                                  Elle contient quoi, ta structure ?

                                15 sujets de 1 à 15 (sur un total de 23)

                                • 1
                                • 2
                                • Vous devez être connecté pour répondre à ce sujet.

                                Forums AmigaOS, MorphOS et AROS Développement Petit problème de portage

                                Amiga Impact