Raydium 3D Game Engine

Official forum for everything about Raydium, ManiaDrive, MeMak, ...
It is currently Sun Apr 28, 2024 5:01 am

All times are UTC




Post new topic Reply to topic  [ 95 posts ]  Go to page 1, 2, 3, 4, 5 ... 7  Next
Author Message
PostPosted: Fri Dec 24, 2004 6:10 pm 
Offline
User avatar

Joined: Sat Dec 18, 2004 9:06 pm
Posts: 101
Location: France - Isère (38)
[EDIT: voir WVS:///raydium_prog/comp/linux-makefile/.]

Bonsoir,

J'aimmerais travailler avec raydium mais sa forme actuelle n'est vraimment pas pratique d'utilisation. Ce serait mieux si c'était une bibliothèque séparée.

J'ai donc fait un Makefile à mettre dans le dossier racine (la ou on trouve les dosiers «raydium», «ode», «php»). le dossier «raytest»

le voici:
Code:
default: raydium.so

raydium.so: raydium.o
   gcc -o $@ -shared $+ \
      -lGL \
      -lglut \
      -lGLU \
      -lm \
      -lopenal \
      ode/lib/libode.a \
      -lvorbis \
      -lvorbisfile \
      -logg \
      php/libs/libphp4.a \
      -lresolv \
      -lcrypt \
      -lz \
      && echo OK || echo ERROR

raydium.o: raydium.c
   gcc -o $@ -c $+ -Wall \
      -L/usr/X11R6/lib/ \
      -Iode/include/ \
      -Iphp/ \
      -Iphp/include \
      -Iphp/main/ \
      -Iphp/Zend \
      -Iphp/TSRM \
      && echo OK || echo ERROR

raydium.c:
   echo '#include "raydium/index.c"'       >  $@
   echo '#include "raydium/reg_api.c"'     >> $@



Qu'en pensez vous ?
Il reste maintenant à faire tout les fichiers .h un long travail.


Aussi, pouvez-vous me dire ou je peux trouver la toute dernière version de raydium

Merci- Mildred


Last edited by mildred on Sat Jan 01, 2005 9:24 pm, edited 3 times in total.

Top
 Profile  
 
 Post subject:
PostPosted: Sat Dec 25, 2004 5:03 pm 
Offline
User avatar

Joined: Sun Mar 16, 2003 2:53 am
Posts: 2591
Location: gnniiiii (Scrat)
Merci encore pour le Makefile, Mildred.

Pour la compilation de Raydium sous forme de DSO, le problème est à mon avis assez complexe à résoudre correctement : pour l'instant, l'édition des liens est réalisée par index.c, qui fait un #include des autres fichiers .c du répertoire "raydium". Or, pour avoir un réel gain, il faudrait que chaque .c ne génère que le .o correspondant (la compilation n'est ainsi appliquée qu'aux .c qui ont été modifiés), index.c ne ferait donc plus qu'inclure des .h et non des .c (l'édition des lien étant réalisée par le linker, comme il se doit).
Pour arriver à cette situation, il faudrait donc :
- créer un .h pour chaque .c
- réécrire index.c (sous le nom index.h d'ailleurs)
- modifier le Makefile en conséquence

Mildred, si tu appliques des modifications aux sources de Raydium, donne ici des infos sur la manière dont tu penses le faire, qu'on ajoute ça directement à "l'arbre officiel" pour t'éviter d'avoir trop de maintenance sur les futures versions de Raydium.

Dernière version testée de Raydium : http://raydium.cqfd-corp.org/data//ray281104.tar.gz


Last edited by Xfennec on Sat Dec 25, 2004 11:11 pm, edited 1 time in total.

Top
 Profile  
 
 Post subject:
PostPosted: Sat Dec 25, 2004 9:46 pm 
Offline
User avatar

Joined: Sat Dec 18, 2004 9:06 pm
Posts: 101
Location: France - Isère (38)
J'ai fait un nouveau Makefile pour une compilation séparée. Il ne reste plus qua faire les fichiers .h et à les mettre dans "include.c".
Je vais essayer de faire un script pour créer les headers automatiquement, ce serait plus simple.
Ce makefile est à placer dans le dossier raydium/

Si tu veux pouvoir le tester, demande le moi par mail car phpbb supprime les tabulations.
Sinon, ca ne compila pas. je pense que linclusion des headers résoudrait le problème

Le voici:
Code:
CC = gcc
ROOT = ../
COMPILE_LIBS = -lGL \
   -lglut \
   -lGLU \
   -lm \
   -lopenal \
   $(ROOT)ode/lib/libode.a \
   -lvorbis \
   -lvorbisfile \
   -logg \
   $(ROOT)php/libs/libphp4.a \
   -lresolv \
   -lcrypt \
   -lz
COMPILE_OPTIONS_O = -Wall \
   -L/usr/X11R6/lib/ \
   -I$(ROOT)ode/include/ \
   -I$(ROOT)php/ \
   -I$(ROOT)php/include \
   -I$(ROOT)php/main/ \
   -I$(ROOT)php/Zend \
   -I$(ROOT)php/TSRM
COMPILE_OPTIONS_SO = -shared

all: Makefile-bis include.c
   @echo "==========----------==========----------==========----------==========----------"
   make -f $<

Makefile-bis: index.c Makefile
   FILES="`tail $< -n \`expr \\\`cat $<|wc -l\\\` - \\\`grep -n 'compile time static linking' $<|cut -d: -f1\\\`\`|grep "#include"|cut -d" " -f2|cut -d'"' -f2|sort|uniq`"; \
   echo $$FILES; \
   echo "default: raydium.so" > $@; \
   echo "" >> $@; \
   ALL="raydium.so:"; \
   for FILE in $$FILES; do \
      BASE="`echo $$FILE|cut -d. -f1`"; \
      ALL="$$ALL $${BASE}-bis.o"; \
   done; \
   echo "$$ALL" >> $@; \
   echo "   $(CC) $(COMPILE_OPTIONS_SO) $$+ -o $$@ $(COMPILE_LIBS)" >> $@; \
   echo "" >> $@; \
   for FILE in $$FILES; do \
      BASE="`echo $$FILE|cut -d. -f1`"; \
      EXT="`echo $$FILE|cut -d. -f2|cut -d' ' -f1`"; \
      echo "$${BASE}-bis.$${EXT}: $${BASE}.$${EXT}" >> $@; \
      echo '   echo "#include \"include.c\""   >  $$@' >> $@; \
      echo '   echo ""            >> $$@' >> $@; \
      echo '   cat $$+            >> $$@' >> $@; \
      echo '' >> $@; \
   done; \
   for FILE in $$FILES; do \
      BASE="`echo $$FILE|cut -d. -f1`"; \
      EXT="`echo $$FILE|cut -d. -f2|cut -d' ' -f1`"; \
      echo "$${BASE}-bis.o: $${BASE}-bis.$${EXT}" >> $@; \
      echo '   $(CC) $$+ -o $$@ $(COMPILE_OPTIONS_O)' >> $@; \
      echo '' >> $@; \
   done; \
   

include.c: index.c
   head -n `grep -n 'compile time static linking' $<|cut -d: -f1` $< > $@


Voici ce que ca done dans la console:

Code:
mildred@louve:~/Mes Fichiers/Projects/raydium-lib/ray281104/raydium $ make
FILES="`tail index.c -n \`expr \\\`cat index.c|wc -l\\\` - \\\`grep -n 'compile time static linking' index.c|cut -d: -f1\\\`\`|grep "#include"|cut -d" " -f2|cut -d'"' -f2|sort|uniq`"; \
echo $FILES; \
echo "default: raydium.so" > Makefile-bis; \
echo "" >> Makefile-bis; \
ALL="raydium.so:"; \
for FILE in $FILES; do \
        BASE="`echo $FILE|cut -d. -f1`"; \
        ALL="$ALL ${BASE}-bis.o"; \
done; \
echo "$ALL" >> Makefile-bis; \
echo "  gcc -shared $+ -o $@ -lGL -lglut -lGLU -lm -lopenal ../ode/lib/libode.a -lvorbis -lvorbisfile -logg ../php/libs/libphp4.a -lresolv -lcrypt -lz" >> Makefile-bis; \
echo "" >> Makefile-bis; \
for FILE in $FILES; do \
        BASE="`echo $FILE|cut -d. -f1`"; \
        EXT="`echo $FILE|cut -d. -f2|cut -d' ' -f1`"; \
        echo "${BASE}-bis.${EXT}: ${BASE}.${EXT}" >> Makefile-bis; \
        echo '  echo "#include \"include.c\""   >  $@' >> Makefile-bis; \
        echo '  echo ""                         >> $@' >> Makefile-bis; \
        echo '  cat $+                          >> $@' >> Makefile-bis; \
        echo '' >> Makefile-bis; \
done; \
for FILE in $FILES; do \
        BASE="`echo $FILE|cut -d. -f1`"; \
        EXT="`echo $FILE|cut -d. -f2|cut -d' ' -f1`"; \
        echo "${BASE}-bis.o: ${BASE}-bis.${EXT}" >> Makefile-bis; \
        echo '  gcc $+ -o $@ -Wall -L/usr/X11R6/lib/ -I../ode/include/ -I../php/ -I../php/include -I../php/main/ -I../php/Zend -I../php/TSRM' >> Makefile-bis; \
        echo '' >> Makefile-bis; \
done; \

background.c callback.c camera.c capture.c clear.c console.c file.c fog.c init.c internal.c joy.c key.c land.c light.c log.c mouse.c network.c normal.c object.c ode.c osd.c parser.c particle2.c php.c profile.c random.c rayphp.c register.c render.c signal.c sky.c sound.c texture.c timecall.c trigo.c vertex.c window.c
==========----------==========----------==========----------==========----------
make -f Makefile-bis
make[1]: entrant dans le répertoire « /home/mildred/Projects/raydium-lib/ray281104/raydium »
gcc background-bis.c -o background-bis.o -Wall -L/usr/X11R6/lib/ -I../ode/include/ -I../php/ -I../php/include -I../php/main/ -I../php/Zend -I../php/TSRM
background-bis.c: Dans la fonction « raydium_background_color_change »:
background-bis.c:16: attention : implicit declaration of function `raydium_clear_color_update'
background-bis.c:17: attention : implicit declaration of function `raydium_fog_color_update'
/usr/lib/gcc-lib/i486-linux/3.3.5/../../../crt1.o(.text+0x18): In function `_start':
../sysdeps/i386/elf/start.S:98: undefined reference to `main'
/tmp/cc4vgCo5.o(.text+0x27): In function `raydium_background_color_change':
: undefined reference to `raydium_clear_color_update'
/tmp/cc4vgCo5.o(.text+0x2c): In function `raydium_background_color_change':
: undefined reference to `raydium_fog_color_update'
collect2: ld a retourné 1 code d'état d'exécution
make[1]: *** [background-bis.o] Erreur 1
make[1]: quittant le répertoire « /home/mildred/Projects/raydium-lib/ray281104/raydium »
make: *** [all] Erreur 2


Top
 Profile  
 
 Post subject:
PostPosted: Sat Dec 25, 2004 11:26 pm 
Offline
User avatar

Joined: Sun Mar 16, 2003 2:53 am
Posts: 2591
Location: gnniiiii (Scrat)
Je vois le principe. Par contre, on a un (gros) problème sous Windows avec cette solution, surtout que cygwin et mingw ne s'entendent pas très bien.
Peut être prendrais-je un jour mon courage à deux main pour réorganiser le code, avec de beaux fichiers .h pour la compilation de Raydium lui même, et un beau fichier .h général (autogénéré, ce serait l'idéal en effet) destiné aux applications Raydium.
C'est idiot à dire, mais je trouve le temps de compilation de Raydium encore très supportable par rapport à la masse de travail à fournir pour faire tout ca ;) (on rigole, on rigole, mais on devra passer par ça un jour de toutes facons).

Sinon, pour déposer du code quelque part (je pense à ton Makefile, Mildred), le "mieux" est d'utiliser WVS ( http://wvs.cqfd-corp.org/browse.php ), quitte à te créer ton propre répertoire à la racine.

Ah oué, j'oubliais : merci ! ;)


Top
 Profile  
 
 Post subject:
PostPosted: Sat Dec 25, 2004 11:46 pm 
Offline
User avatar

Joined: Sat Dec 18, 2004 9:06 pm
Posts: 101
Location: France - Isère (38)
Sur linuxfr (https://linuxfr.org/forums/19/5740.html), on m'aide un peu pour la création des headers ...

Je ne sais que très peu de choses en C alors on va essayer de faure quelquechose qui tienne la route. Je doute de pouvoir faire une script qui puisse faire des headers de manière suffisament fiable pour se passer de vérification.
Je ne sais pas comment cette maintenance des headers se fait sur de gros projets, j'aurais aimé pouvoir utiliser un outil déja tout fait pour générer ces headers

Donc: je me propose de créer ces headers et ensuite, il faudrait les maintenir.

Pour Windows, je ne sais pas comment vous faites pour compiler mais je crois que les outils make, bash, sort, uniq, cut, wc, expr, tail, head, grep doicent pouvoir se trouver, non ?
J'ai dailleurs utilisé wget sur Windows lorsque mon modem ADSL avait grillé pour récupérer les drivers d'un winmodem, c'est très pratique.

Sinon, pour WVS, j'hésite à créer un dossier /raydium_prog/comp/linux-makefile ... Qu'en pensez-vous ?


Top
 Profile  
 
 Post subject:
PostPosted: Sun Dec 26, 2004 12:03 am 
Offline
User avatar

Joined: Sun Mar 16, 2003 2:53 am
Posts: 2591
Location: gnniiiii (Scrat)
Pour windows : ces outils existent, et cygwin est justement un projet qui rassemble tout l'environnement Linux sous Windows, a l'exception du kernel (même X11 y est).. mais le problème est que GCC fait partie de la liste aussi, et que c'est pas super compatible avec Mingw qui est un portage de GCC (et tout ce qui va avec), qui est bien plus intéressant que celui livré avec Cygwin (et que j'utilise pour l'instant pour les releases win32, au travers de Dev-CPP).

Cependant or donc bref, il est toujours possible de récupérer uniquement les executables (et DLL) nécessaires et les placer dans le répertoire de build de Raydium dans un premier temps.

Pour WVS : n'hésite pas.


Top
 Profile  
 
 Post subject:
PostPosted: Sun Dec 26, 2004 3:30 am 
Offline
User avatar

Joined: Sat Dec 18, 2004 9:06 pm
Posts: 101
Location: France - Isère (38)
une question avant de me recoucher: pour le paquet que tu m'a donné (lien plus haut): quelle est la version de php nécessaire. Ce ne serait pas php5 ?
Car j'ai plein derreurs php à la compilation.

<edit>
Sinon, mon Makefile devient de plus en plus moche. Il faudrait trouver une autre solution.
Pourquoi pas les autotools mais il faudrait savoir les utiliser ...
</edit>

pour WVS: j'y vais avec un truc pas encore bien fini


Top
 Profile  
 
 Post subject:
PostPosted: Sun Dec 26, 2004 3:39 am 
Offline
User avatar

Joined: Sat Dec 18, 2004 9:06 pm
Posts: 101
Location: France - Isère (38)
Bonne nouvelle: si je compile de manière classique, j'ai les mêmes erreurs ...
je verrais ca demain

edit: lien vers le Makefile: http://wvs.cqfd-corp.org/genfile.php?dir=/raydium_prog/comp/linux-makefile/&file=Makefile&type=text


Top
 Profile  
 
 Post subject:
PostPosted: Sun Dec 26, 2004 6:01 pm 
Offline
User avatar

Joined: Sun Mar 16, 2003 2:53 am
Posts: 2591
Location: gnniiiii (Scrat)
Je viens de refaire l'installation complète depuis le tgz cité plus haut, la dernière version d'ODE (ode-041110.tar.gz) de PHP4 (php-4.3.10.tar.bz2) et avec le ocomp.sh de WVS sans problème (je viens de préciser la version de PHP sur le Wiki, car en effet, ça n'était pas fait).
Et sinon, en effet, la première partie de ton Makefile passe sans problème, la génération des header se termine aussi, mais le Makefile autogénéré échoue.


Last edited by Xfennec on Mon Dec 27, 2004 2:49 pm, edited 1 time in total.

Top
 Profile  
 
 Post subject:
PostPosted: Mon Dec 27, 2004 2:38 pm 
Offline
User avatar

Joined: Sat Dec 18, 2004 9:06 pm
Posts: 101
Location: France - Isère (38)
J'ai fait un script: make-makefile.py qui se charge de créer un Makefile classique.
Normalement ca devrait fonctionner mais raydium ne compile plus chez moi ... Je vais donc le réinstaller en entier et tester mon script

En attendant, il est dispo sur WVS avec le Makefile qu'il génère.

Pour distribuer raydium, on peut générer le Makefile avant et pour compiler, un simple "make" suffira.

Pour Windows, ca simplifie les choses car en fait, si on distribue les sources avec les headers (.h) et le fichier "raydium/include.c" généré automatiquement par le Makefile, le Makefile n'utilise que GCC
Il suffit donc de trouver make.exe

[edit: C'est bizarre: lorsque je me refais une distrib raydium depuis le départ, elle compile bien (ocomp.sh) et lorsque je met mon Makefile, ocomp.sh ne fonctionne plus. je vais y regarder de plus près]


Top
 Profile  
 
 Post subject:
PostPosted: Mon Dec 27, 2004 3:41 pm 
Offline
User avatar

Joined: Sat Dec 18, 2004 9:06 pm
Posts: 101
Location: France - Isère (38)
J'ai trouvé l'erreur.

Mon makefile écrase deux fichiers:
    raydium/ode.h
    raydium/particle2.h

Cela provoque donc une erreur ...

Donc: je vais ajouter l'extension .c.h à mes fichiers headers car si j'écris à la suite, je risque d'avoir des headers de plus en plus longs ...

Ou alors: je teste si c'est des fichiers headers que j'ai créé ... Il faut donc modifier le fichier "make_headers"

Au passage: je n'arrive pas a envoyer un diff de mon script. Comment on fait ?

[edit: j'arrive à un truc à peu près potable sauf que les fichiers .c.h que je génère sont mauvais. Donc ca ne compile toujours pas.]


Last edited by mildred on Mon Dec 27, 2004 4:12 pm, edited 1 time in total.

Top
 Profile  
 
 Post subject:
PostPosted: Mon Dec 27, 2004 3:48 pm 
Offline
User avatar

Joined: Sun Mar 16, 2003 2:53 am
Posts: 2591
Location: gnniiiii (Scrat)
mildred wrote:
je n'arrive pas a envoyer un diff de mon script. Comment on fait ?


Si tu parles bien de WVS, tu as juste à uploader ton script à nouveau.


Top
 Profile  
 
 Post subject:
PostPosted: Mon Dec 27, 2004 4:14 pm 
Offline
User avatar

Joined: Sat Dec 18, 2004 9:06 pm
Posts: 101
Location: France - Isère (38)
Oui, j'upload mon fichier mais j'arrive sur une page qui affiche le dif mais apparament il n'est pas pris en compte lorsque je clique sur "view file: as text"


Top
 Profile  
 
 Post subject:
PostPosted: Mon Dec 27, 2004 4:55 pm 
Offline
User avatar

Joined: Sun Mar 16, 2003 2:53 am
Posts: 2591
Location: gnniiiii (Scrat)
Étrange, je viens de faire le test ici, 2 fois de suite:
make-makefile.py : 2004 12 27, 17:50 (51s)
make-makefile.py : 2004 12 27, 17:51 (42s)

Problème de cache du coté du navigateur ?


Top
 Profile  
 
 Post subject:
PostPosted: Mon Dec 27, 2004 10:09 pm 
Offline
User avatar

Joined: Sat Dec 18, 2004 9:06 pm
Posts: 101
Location: France - Isère (38)
Pour la mose en ligne, jai l'impression que je ne vais pas assez loin. J'ai la page «About /raydium_prog/comp/linux-makefile/make-makefile.py :» qui arrive juste eprès le formulaire POST, j'ai différentes informations et aussi le diff généré par WVS.
Tout en bas, jai un autre formulaire qui me propose duploader un autre fichier avec un bouton [diff with]

[edit] Ce n'est pas un problème de cache, j'ai réessayé de recharger la page par plusieurs moyens, sans effet.

Comment je fais pour valider cette page ?

Sinon, j'ai fait un script python pour générer automatiquement les fichiers headers. En attandant que je trouve un moyen de le mettre dans le makefile, il est sur linuxfr: http://linuxfr.org/~mildred/16539.html


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

All times are UTC


Who is online

Users browsing this forum: No registered users and 186 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