Raydium 3D Game Engine

Official forum for everything about Raydium, ManiaDrive, MeMak, ...
It is currently Sun May 19, 2024 4:22 pm

All times are UTC




Post new topic Reply to topic  [ 95 posts ]  Go to page Previous  1, 2, 3, 4, 5, 6, 7  Next
Author Message
 Post subject:
PostPosted: Wed Dec 29, 2004 2:18 pm 
Offline
User avatar

Joined: Sat Dec 18, 2004 9:06 pm
Posts: 101
Location: France - Isère (38)
J'ai compilé tests.c et ca fonstionne ...

Changements:
- J'ai compilé un raydium/index.c un peu modifié (#include des headers à la place des fichiers source)
- J'ai amélioré les lignes de commandes GCC:
Code:
gcc testsb.c -o testsb -Iode/include/ -Iphp/ -Iphp/include -Iphp/main/ -Iphp/Zend -Iphp/TSRM libraydium.a -lGL -lglut -lGLU -lm -lopenal -lvorbis -lvorbisfile -logg -lresolv -lcrypt -lz ode/lib/libode.a php/libs/libphp4.a


Je vais tenter la compilation de test6.c ...

[edit] Lorsque je compile test6.c, j'ai pour chaque ligne qui contient une macro php une erreur comme celle-ci:
Code:
raydium/reg_api.c:6: error: stray '\' in program

C'est normal ?


Top
 Profile  
 
 Post subject:
PostPosted: Wed Dec 29, 2004 6:45 pm 
Offline
User avatar

Joined: Sat Dec 18, 2004 9:06 pm
Posts: 101
Location: France - Isère (38)
As tu une idée de ce qu'il faut faire des macros PHP*() dans raydium/reg_api.c (Si elles doivent ou non figurer dans le fichier header)

Apparament ces lignes posent problème lors de la compilation séparée ... As tu une idée de pourquoi ?


Top
 Profile  
 
 Post subject:
PostPosted: Wed Dec 29, 2004 7:53 pm 
Offline
User avatar

Joined: Sun Mar 16, 2003 2:53 am
Posts: 2591
Location: gnniiiii (Scrat)
Non, les erreurs ne sont pas normales :)

Utilise-tu toujours une version de Raydium sans support PHP ? Si oui, cf mon post précédent : il faut que tu enlèves de test6 tout ce qui concerne PHP (reg_api en fait partie, puisqu'il est chargé "d'injecter" les fonctions de l'API de Raydium dans PHP).

Sinon, les macro PHP (délcarées dans php_wrappers) sont justement utilisées pour ajouter des fonctions C (Raydium, ou appartenant au code d'une application Raydium) dans PHP : elles doivent donc être présentes lors de la compilation de Raydium, mais aussi lors de la compilation des applis.

Autre sujet : Il est indispensable de faire cohabiter les deux méthodes de compilation pour Raydium ("liaison en dur" et DSO), et donc il faut imaginer un système pour n'avoir qu'un seul index.c (ou alors auto-générer un index.h ?), quitte à utiliser dans ta compilation avec gcc un truc du genre "-DRAYDIUM_DSO" (-D = #define) et inclure des .h si le symbole est déclaré, et des .c sinon ... je sais pas si je suis clair :) (on en reparle après, de tt facons)

Enfin: dans ta ligne gcc, il faudrait rajouter :
-g (symboles de debug)
- Wall (activer tt les warnings)
-L/usr/X11R6/lib/ (car les libs OpenGL peuvent y êtres situées [NVidia, par exemple])

PS: attention à tests.c, qui défini "RAYDIUM_NETWORK_ONLY", ce qui signifie qu'il utilise une toute petite partie de Raydium, et qui n'est pas véritablement un test représentatif pour tes essais de compilation.


Top
 Profile  
 
 Post subject:
PostPosted: Wed Dec 29, 2004 10:29 pm 
Offline
User avatar

Joined: Sat Dec 18, 2004 9:06 pm
Posts: 101
Location: France - Isère (38)
La version de raydium que j'utilise est compilée avec le support php.

Pour reg_api.c, je vais essayer de tester en incluant les macros dans le fichier .h. Mon script ne peux pas bien le gérer car il ne reconnait pas les macros.
Je vais donc sans doute rajouter des commentaires/balises qui seront chargés de, par exemple, concerver toutes les lignes entre les 2 balises ...

Pour concerver la possibilité de compiler raydium de manière classique, c'est tout à fait prévu. Mes scripts ne touchent à aucun fichier existant (ou alors de manière complètement transparante comme particle2.h).

Pour les options de compilations:
-Wall est utilisé partout
-g n'est pas utilisé mais peut être rajouté dans les variables du Makefile
-L/usr/X11R6/lib/ Je ne l'utilise pas pour la compilation des fichiers .o car cela me semble inutile d'indiquer le chemin des libs avant de lier les binaires.

Pour mes tests, je compile tests.c car test[456].c incluent reg_api.c qui ne fonctione pas encore.


Top
 Profile  
 
 Post subject:
PostPosted: Thu Dec 30, 2004 12:14 am 
Offline
User avatar

Joined: Sun Mar 16, 2003 2:53 am
Posts: 2591
Location: gnniiiii (Scrat)
N'utilise que test6, les autres sont trops vieux. Et tu peux tout à fait commenter l'include de reg_api.c dans un premier temps sans rien toucher d'autre.


Top
 Profile  
 
 Post subject:
PostPosted: Sat Jan 01, 2005 5:17 pm 
Offline
User avatar

Joined: Sun Mar 16, 2003 2:53 am
Posts: 2591
Location: gnniiiii (Scrat)
Mildred, je ne sais pas si tu as uploadé la dernière version, mais je n'arrive pas à utiliser la version qui est sur WVS :

Code:
echo '// let's start "compile time static linking" ;)'  >> $@
(L'apostrophe et la parenthèse)

Et sinon, je me fais enguirlander parce que je n'ai pas les .c.h, probablement parce que je ne sais pas quand les générer :)

Te serait-il possible de faire une mini-doc sur la manière d'utiliser ces scripts ?


Top
 Profile  
 
 Post subject:
PostPosted: Sat Jan 01, 2005 6:35 pm 
Offline
User avatar

Joined: Sat Dec 18, 2004 9:06 pm
Posts: 101
Location: France - Isère (38)
pour le readme: http://wvs.cqfd-corp.org/genfile.php?dir=/raydium_prog/comp/linux-makefile/&file=README.fr&type=text

le problème est corrigé ...

Sinon, en ce moment je n'ai plus tant de temps donc je ne travaille plus sur raydium. Surtout que je ne sais plus comment résoudre le problème (les applications ne compilent pas avec libraydium.a)

Peut être qu'archiver les fichiers .o ensemble ne suffit pas à faire une lib statique. Je me demande comment le compilateur fait pour savoir ou se trouve les symboles qu'on peut trouver les fichiers .h. Sait-il qu'il fait chercher dans les autres fichiers de l'archive ?

en passant, le wiki est déterioré: http://memak.cqfd-corp.org/viewtopic.php?t=187


Top
 Profile  
 
 Post subject:
PostPosted: Sat Jan 01, 2005 7:41 pm 
Offline
User avatar

Joined: Sun Mar 16, 2003 2:53 am
Posts: 2591
Location: gnniiiii (Scrat)
Ok, je vais jeter un oeil à tout ca. Par contre, je suis perdu dans ton but ... tu souhaites faire un .so ou un .a ? (ou les deux)


Top
 Profile  
 
 Post subject:
PostPosted: Sat Jan 01, 2005 9:23 pm 
Offline
User avatar

Joined: Sat Dec 18, 2004 9:06 pm
Posts: 101
Location: France - Isère (38)
les deux


Top
 Profile  
 
 Post subject:
PostPosted: Tue Jan 04, 2005 12:22 am 
Offline
User avatar

Joined: Sun Mar 16, 2003 2:53 am
Posts: 2591
Location: gnniiiii (Scrat)
Après essai, j'ai toujours un problème : les headers ne sont pas générés seuls par le Makefile, et lorsque j'essaie de les générer au travers d'un "make headers", j'obtiens ceci :
Code:
[xfennec@Julien ray281104]$ make headers
Creating: raydium/background.c.h
CONST=_RAYDIUM_`echo "background" | awk '{ print toupper($1) }' | sed 's/[^A-Z]+/_/' | sed 's/[^A-Z]+/_/'`_C_H; \       ./make_header raydium/background.c raydium/background.c.h $CONST
/bin/sh: line 1:        ./make_header: No such file or directory
make: *** [raydium/background.c.h] Erreur 127

Tabulation en trop, semble t'il.


Top
 Profile  
 
 Post subject:
PostPosted: Wed Jan 05, 2005 11:30 am 
Offline
User avatar

Joined: Sat Dec 18, 2004 9:06 pm
Posts: 101
Location: France - Isère (38)
Je ne sais pas d'ou ca vient, c'est incompréhensible ...

Mais ces cibles sont inutilisées (je devrais dailleurs les enlever) donc ce n'est pas grave. Maintenant, un "make raydium/index.c.h" suffit à les créer tous (le script make_header créra les headers qui sont inclus par #include "").

[edit] pour générer les headers, c'est donc: "make raydium/index.c.h". Il devrait afficher:
Code:
<"raydium/index.c.h" origin="shell">
    <"raydium/log.c.h" origin="raydium/index.c.h">
    </"raydium/log.c.h">
    <"raydium/signal.c.h" origin="raydium/index.c.h">
    </"raydium/signal.c.h">
    <"raydium/trigo.c.h" origin="raydium/index.c.h">
    </"raydium/trigo.c.h">
    <"raydium/random.c.h" origin="raydium/index.c.h">
    </"raydium/random.c.h">
    <"raydium/timecall.c.h" origin="raydium/index.c.h">
    </"raydium/timecall.c.h">
    <"raydium/profile.c.h" origin="raydium/index.c.h">
    </"raydium/profile.c.h">
    <"raydium/parser.c.h" origin="raydium/index.c.h">
    </"raydium/parser.c.h">
    <"raydium/fog.c.h" origin="raydium/index.c.h">
    </"raydium/fog.c.h">
    <"raydium/window.c.h" origin="raydium/index.c.h">
    </"raydium/window.c.h">
    <"raydium/capture.c.h" origin="raydium/index.c.h">
    </"raydium/capture.c.h">
    <"raydium/clear.c.h" origin="raydium/index.c.h">
    </"raydium/clear.c.h">
    <"raydium/background.c.h" origin="raydium/index.c.h">
    </"raydium/background.c.h">
    <"raydium/light.c.h" origin="raydium/index.c.h">
    </"raydium/light.c.h">
    <"raydium/key.c.h" origin="raydium/index.c.h">
    </"raydium/key.c.h">
    <"raydium/mouse.c.h" origin="raydium/index.c.h">
    </"raydium/mouse.c.h">
    <"raydium/joy.c.h" origin="raydium/index.c.h">
    </"raydium/joy.c.h">
    <"raydium/texture.c.h" origin="raydium/index.c.h">
    </"raydium/texture.c.h">
    <"raydium/render.c.h" origin="raydium/index.c.h">
    </"raydium/render.c.h">
    <"raydium/particle2.c.h" origin="raydium/index.c.h">
    </"raydium/particle2.c.h">
    <"raydium/sound.c.h" origin="raydium/index.c.h">
    </"raydium/sound.c.h">
    <"raydium/callback.c.h" origin="raydium/index.c.h">
    </"raydium/callback.c.h">
    <"raydium/normal.c.h" origin="raydium/index.c.h">
    </"raydium/normal.c.h">
    <"raydium/vertex.c.h" origin="raydium/index.c.h">
    </"raydium/vertex.c.h">
    <"raydium/osd.c.h" origin="raydium/index.c.h">
    </"raydium/osd.c.h">
    <"raydium/register.c.h" origin="raydium/index.c.h">
    </"raydium/register.c.h">
    <"raydium/php.c.h" origin="raydium/index.c.h">
        <"raydium/php_wrappers.c.h" origin="raydium/php.c.h">
        </"raydium/php_wrappers.c.h">
    </"raydium/php.c.h">
    <"raydium/rayphp.c.h" origin="raydium/index.c.h">
    </"raydium/rayphp.c.h">
    <"raydium/console.c.h" origin="raydium/index.c.h">
    </"raydium/console.c.h">
    <"raydium/land.c.h" origin="raydium/index.c.h">
    </"raydium/land.c.h">
    <"raydium/sky.c.h" origin="raydium/index.c.h">
    </"raydium/sky.c.h">
    <"raydium/internal.c.h" origin="raydium/index.c.h">
    </"raydium/internal.c.h">
    <"raydium/file.c.h" origin="raydium/index.c.h">
    </"raydium/file.c.h">
    <"raydium/camera.c.h" origin="raydium/index.c.h">
    </"raydium/camera.c.h">
    <"raydium/object.c.h" origin="raydium/index.c.h">
    </"raydium/object.c.h">
    <"raydium/network.c.h" origin="raydium/index.c.h">
    </"raydium/network.c.h">
    <"raydium/init.c.h" origin="raydium/index.c.h">
    </"raydium/init.c.h">
    <"raydium/ode.c.h" origin="raydium/index.c.h">
        <"raydium/ode_net.c.h" origin="raydium/ode.c.h">
        </"raydium/ode_net.c.h">
    </"raydium/ode.c.h">
    <"raydium/log.c.h" origin="raydium/index.c.h">
    </"raydium/log.c.h">
    <"raydium/trigo.c.h" origin="raydium/index.c.h">
    </"raydium/trigo.c.h">
    <"raydium/random.c.h" origin="raydium/index.c.h">
    </"raydium/random.c.h">
    <"raydium/timecall.c.h" origin="raydium/index.c.h">
    </"raydium/timecall.c.h">
    <"raydium/parser.c.h" origin="raydium/index.c.h">
    </"raydium/parser.c.h">
    <"raydium/network.c.h" origin="raydium/index.c.h">
    </"raydium/network.c.h">
</"raydium/index.c.h">


Désolée pour le retard mais je manque un peu de temps ...


Top
 Profile  
 
 Post subject:
PostPosted: Wed Jan 05, 2005 12:43 pm 
Offline
User avatar

Joined: Sun Mar 16, 2003 2:53 am
Posts: 2591
Location: gnniiiii (Scrat)
Je vais tenter ca. Si je comprend bien, l'un des problèmes est que la cible "raydium/index.c.h" n'est pas générée automatiquement alors qu'elle le devrait ?

Quote:
Désolée pour le retard mais je manque un peu de temps ...

Il n'y a aucune urgence :)


Top
 Profile  
 
 Post subject:
PostPosted: Thu Jan 06, 2005 2:19 am 
Offline
User avatar

Joined: Sun Mar 16, 2003 2:53 am
Posts: 2591
Location: gnniiiii (Scrat)
La compilation se passe bien avec le "make" de raydium/index.c.h avant. Ton .a est tout à fait valide, les fonctions sont dedans, sans problème. En revanche, il y'a un problème avec PHP (regarde les erreurs données par GCC, elles ne parlent que de symboles liés à PHP). Tu doit pas être loin de la vérité :)

Autre détail beaucoup moins important, il faudrait enlever le patch de particle2.h qui est fait par le Makefile (ca n'est pas son role ... qu'est censé faire le "make clean" par exemple ?).
Je vais intégrer la modif dans particle2.h moi même, et je release une nouvelle version par dessus.


Top
 Profile  
 
 Post subject:
PostPosted: Thu Jan 20, 2005 1:13 am 
Offline
User avatar

Joined: Sat Dec 18, 2004 9:06 pm
Posts: 101
Location: France - Isère (38)
Je crois que je vais tenter de compiler le projet avec CMake (http://www.cmake.org). En plus, il semblerait que ca compile facilement sur Windows ...

edit: je ferais bien aussi un fichier Sconscript (http://www.scons.org)

J'ai aussi développé une nouvelle version de make_headers qui utilise désormais gcc (`gcc -E`) pour la phase de précompilation (#define, #include et tout le reste). Et ca a l'air de mieux marcher.

Mais du coup, ca pose un petit problème. je prends un exemple (pas testé):
Au début de "raydium/ode.c" il faut inclure les headers de tous les autres fichiers "raydium/*.c" car il se peut que "raydium/ode.c" utilise certaines fonctions provenant d'autres fichiers. "raydium/ode.c" va donc inclure "raydium/index.h" qui est généré à partir de "raydium/index.c".
Le problème c'est que "raydium/index.h" va aussi définir toutes les fonctions de "rayium/ode.c" puisque "raydium/index.c" inclue "raydium/ode.c". Cela pose un problème à la compilation.

Du coup je vois mal comment faire pour contourner ce problème ...

J'envisage une solution qui serait à faire à la main:

une constante (SEPARATE_COMPILE ?) serait définie lorsque la compilation se ferait de manière séparée. Ainsi, on pourrait ajouter eu début de chaque fichier "raydium/*.c":
Code:
#ifdef SEPARATE_COMPILE
#include "monfichier.h"
#include "monautrefichier.h"
#include "montroisièmefichier.h"
...
#endif


On pourrait aussi modifier "raydium/index.c" pour que les fichiers *.c ne soient pas inclus si on fait une compilation séparée:
Code:
#ifndef SEPARATE_COMPILE
#include "monfichier.c"
#include "monautrefichier.c"
#include "montroisièmefichier.c"
...
#endif



Donc au final, que se passerait il ?
- On crée des fichiers "raydium/*.h" pour touts les fichiers "raydium/*.c" (avec #define SEPARATE_COMPILE) plus un fichier "raydium.h" qui servira à compiler les applications utilisant libraydium
- On compilerait les fichiers "raydium/*.c" et on obtient des fichiers "raydium/*.o" (sous linux)
- Avec touts ces fichiers *.o on crée une bibliothèque statique et dynamique

- Pour créer uen application, on utilise "libraydium.h"
- Si on veut le support php on ajoute #include "raydium/reg_api.c" et ca devrait marcher
- On compile et on lie avec libraydium




Par contre, sous Windows il y a un problème: je crois qu'on ne peut pas utiliser des variables externes d'un .dll . Comment faire ?
Idée: si on compile statiquement sous Win, on peut utiliser des variables externes ? si oui, cela résous le problème.

Mildred qui va se coucher en attendant des réponses et que ces idées murissent.


Last edited by mildred on Thu Jan 20, 2005 1:21 am, edited 1 time in total.

Top
 Profile  
 
 Post subject:
PostPosted: Thu Jan 20, 2005 1:20 am 
Offline
User avatar

Joined: Sat Dec 18, 2004 9:06 pm
Posts: 101
Location: France - Isère (38)
Xfennec wrote:
Autre détail beaucoup moins important, il faudrait enlever le patch de particle2.h qui est fait par le Makefile (ca n'est pas son role ... qu'est censé faire le "make clean" par exemple ?).
Je vais intégrer la modif dans particle2.h moi même, et je release une nouvelle version par dessus.


Tu as raison ... il vaudrait mieux ajouter:
Code:
#idndef _RAUDIUM_PARTICLE2_H
#define _RAUDIUM_PARTICLE2_H
[le fichier ici]
#endif


Ce serait efectivement plus propre ...
Mais avec le système que j'ai proposé, je pense que le problème (particle2.h était inclus 2 fois) ne devrait plus apparaitre puisque les fichiers .h sont inclus manuellement au début du fichier.
Mais c'est toujours ca et ca peut éviter de futurs problèmes ...

Mildred


Top
 Profile  
 
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 95 posts ]  Go to page Previous  1, 2, 3, 4, 5, 6, 7  Next

All times are UTC


Who is online

Users browsing this forum: No registered users and 16 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group