1
1
Fork 0
mirror of https://github.com/QB64-Phoenix-Edition/QB64pe.git synced 2024-09-04 11:10:15 +00:00
QB64-PE/internal/c/parts/core/download/freeglut-2.8.0/LISEZMOI.cygwin_mingw

219 lines
8.5 KiB
Text
Raw Normal View History

Glut alors!
Par Jean-Seb le vendredi 10 juillet 2009, 00:18
Freeglut est une <20>volution open-source de Glut.
Sous Windows, on peut l'utiliser avec Cygwin.
Facile ? Oui, si on accepte de distribuer "cygwin1.dll"
Aidons Freeglut <20> conqu<71>rir son ind<6E>pendance !
m.<2E>.j 10/7/2009 : g<>n<EFBFBD>ration d'une librairie pour linker depuis la dll.
R<EFBFBD>cup<EFBFBD>ration des sources
* Reprenez les sources de la version 2.6.0 qui int<6E>gre les changements
r<>cents.
* Pour l'instant, il s'agit d'une RC (Release Candidate), mais la version
finale ne saurait tarder.
* L'utilisation de la 2.6 est pr<70>f<EFBFBD>rable <20> la branche 2.4-stable, de
nombreux bugs <20>tant corrig<69>s.
* Vous trouverez les sources sur le site de Freeglut:
o http://freeglut.sourceforge.net/
Principe
Objectif
* Nous allons cr<63>er une dll li<6C>e <20> Cygwin, et une biblioth<74>que statique
ind<6E>pendante
* Nous cr<63>erons <20>galement une librairie dynamique, permettant de linker avec
la dll.
Liste des fichiers g<>n<EFBFBD>r<EFBFBD>s
* freeglut.dll : une dll classique pour le linkage dynamique.
* libfreeglut.a : la biblioth<74>que statique. Le programme final est autonome
(du moins pour OpenGL).
* libfreeglutdll.a : la biblioth<74>que dynamique. Le programme final a besoin
de freeglut.dll.
Pr<EFBFBD>paration
* D<>pliez l'archive freeglut.
* Allez dans le r<>pertoire src (situ<74> <20> la racine du r<>pertoire Freeglut),
et cr<63>ez un sous-r<>pertoire "Gl"
o Dans ce sous-r<>pertoire, copiez les fichiers du r<>pertoire
"include/Gl"
* Pourquoi faut-il cr<63>er un r<>pertoire "Gl" pour la compilation ?
o C'<27>tait juste pour simplifier les choses lors de mes essais.
o Sinon vous pouvez cr<63>er directement les r<>pertoires, et copier les
fichiers comme indiqu<71> au point installation (lire plus loin).
* Faites un peu de m<>nage dans /lib :
o Effacez toutes les r<>f<EFBFBD>rences <20> la glut, pour ne pas avoir de
conflit au linkage.
o Cette <20>tape est facultative, vous pouvez <20>galement choisir de ne
faire le m<>nage qu' apr<70>s une compilation r<>ussie de Freeglut.
o Attention <20> ne pas effacer, dans un enthousiasme r<>dempteur, la
biblioth<74>que glu32.lib (<28> ne pas confondre avec glut32.lib).
Compilation
* Oubliez le triptyque ./configure , make , make install.
o Ca ne marche pas du tout avec Cygwin.
* Voici un Makefile qui fera l'affaire:
#Makefile pour Freeglut 2.6.0-rc et Cygwin
#A placer dans le r<>pertoire "src"
sources=$(wildcard *.c)
objs=$(sources:.c=.o)
libname=freeglut
CFLAGS=-O2 -DTARGET_HOST_MS_WINDOWS -DX_DISPLAY_MISSING -DFREEGLUT_STATIC -I./
LDFLAGS=-lopengl32 -lgdi32 -lwinmm
nocyg=-mno-cygwin -mwindows
all: $(objs)
#construction dll li<6C>e <20> cygwin1.dll
gcc $(nocyg) $(objs) -shared $(LDFLAGS) -o $(libname).dll
nm $(libname).dll | awk 'BEGIN { print "EXPORTS" } /T _glut/ {sub( /^.*T _/, "\t"); print}' > $(libname).def
dlltool --dllname $(libname).dll --input-def $(libname).def --output-lib lib$(libname)dll.a
#construction biblioth<74>que statique ind<6E>pendante de cygwin
ar cr lib$(libname).a $(objs)
#pas forc<72>ment obligatoire (cr<63>ation d'un index pour acc<63>l<EFBFBD>rer les acc<63>s)
ranlib lib$(libname).a
%.o: %.c
gcc $(nocyg) -c $(CFLAGS) $<
clean:
rm -f *.o $(libname).dll $(libname).def lib$(libname)dll.a lib$(libname).a
Quelques remarques sur le makefile
* Ce makefile cr<63>e une dll, une biblioth<74>que statique (une archive, en
d'autres termes) et la biblioth<74>que dynamique qui permettra l'utilisation
de la dll.
* Ne cherchez pas <20> stripper la biblioth<74>que statique! Vous ne pourriez plus
compiler en statique.
o Par contre, vous pouvez stripper l'ex<65>cutable final obtenu lors de
la compilation de votre application.
* J'ai choisi d'appeller la dll et les biblioth<74>ques par leurs "vrais noms":
freeglut.dll libfreeglutdll.a et libfreeglut.a.
o Le script configure recr<63>ait (pour des raisons de compatibilit<69> avec
l'ancienne biblioth<74>que Glut) glut.dll et libglut.a.
o Lors des mes essais, j'ai eu des conflits avec une authentique
"glut" qui trainait dans mon "/lib". J'ai d<>cid<69> d'appeller les
choses par leur nom, afin d'<27>viter les confusions.
o Rien ne vous emp<6D>che de renommer la dll, si vous avez besoin
d'utiliser des programmes Glut que vous ne pouvez pas recompiler.
* La biblioth<74>que dynamique est g<>n<EFBFBD>r<EFBFBD>e <20> partir de la dll.
o Par souci de concision, j'ai utilis<69> awk. Il g<>n<EFBFBD>re le fichier
d'exports utilis<69> par dlltool.
o La seule chose notable est la s<>lection des fonctions dont le nom
commence par _glut, afin d'<27>viter d'inclure dans la librairie
dynamique des fonctions sans rapport avec freeglut.
o ensuite, on utilise dlltool de fa<66>on tr<74>s classique.
nm $(libname).dll | awk 'BEGIN { print "EXPORTS" } /T _glut/ {sub( /^.*T _/, "\t"); print}' > $(libname).def
dlltool --dllname $(libname).dll --input-def $(libname).def --output-lib lib$(libname)dll.a
Installation
* Copiez libfreeglut.a, libfreeglutdll.a dans le r<>pertoire /lib de Cygwin.
* Copiez freglut.dll dans le system32 de Windows (ce qui est pratique, mais
pas propre!).
* Copiez les fichiers headers de Freeglut (/include/gl) dans /usr/include/Gl
de Cygwin.
* Copiez les fichiers headers (toujours /include/gl) dans
/usr/include/mingw/Gl : ceci sert aux compilations avec le flag
-mno-cygwin, qui utilise alors les includes de mingw.
o Vous aurez <20>ventuellement besoin d'<27>craser d'anciens fichiers
include, correspondants <20> Glut, si vous l'avez install<6C> avec Cygwin.
Utilisation de la librairie
* Nous allons tester avec le programme shapes, pr<70>sent dans
progs/demos/shapes
o -mno-cygwin sert <20> forcer l'utilisation de Mingw sans la grosse
d<>pendance cygwin1.dll.
o -mwindows sert uniquement <20> enlever l'horrible fen<65>tre shell (tr<74>s
utile pour la mise au point, par contre).
o -L. (notez le point apr<70>s le "L") : j'ai laiss<73> libfreeglut.a,
libfreeglutdll.a et freeglut.dll dans le r<>pertoire de test, le
temps des tests justement.
Compilation en librairie statique freeglut, sans cygwin
* Toute l'astuce r<>side dans le define : -DFREEGLUT_STATIC
o Il sert <20> obtenir la bonne d<>coration des noms de fonctions dans les
imports de la lib Freeglut.
o Vous pouvez essayer sans et prendre un <20>diteur hexa pour voir les
diff<66>rences dans l'objet.
* attention <20> l'ordre des biblioth<74>ques : -lfreeglut (statique) doit se
trouver avant la d<>claration des biblioth<74>ques dynamiques.
* gcc shapes.c -L. -lfreeglut -lopengl32 -lwinmm -lgdi32 -mno-cygwin
-mwindows -DFREEGLUT_STATIC
Compilation avec dll freeglut, sans cygwin
* Pour le define, m<>me remarque que ci-dessus
* L'ordre des biblioth<74>ques n'a plus d'importance.
* gcc shapes.c -L. -lopengl32 -lwinmm -lgdi32 -lfreeglut -mno-cygwin
-DFREEGLUT_STATIC
Compilation avec dll freeglut, avec Cygwin
* Cet exemple est donn<6E> uniquement pour r<>f<EFBFBD>rence, le th<74>me de ce billet <20>tant de se d<>barrasser de Cygwin.
o Disons que <20>a peut servir pendant la mise au point (et encore).
* gcc shapes.c -L. -lopengl32 -lwinmm -lgdi32 -lfreeglut
O<EFBFBD> sont les dooooocs ?
* Freeglut est livr<76> avec sa documentation, plus tr<74>s <20> jour.
o Il semble qu'il y ait un probl<62>me avec la doc Glut originale. Non
seulement elle ne correspond pas forc<72>ment au fonctionnement de
Freeglut, mais de plus, son auteur (Mark Kilgard) l'a copyright<68>. Sa
distribution est donc difficile.
* Jocelyn Fr<46>chot a entrepris une mise <20> niveau des docs pour la version
2.6.0. On peut les trouver sur son site pour l'instant:
o http://jocelyn.frechot.free.fr/freeglut/
Quelque chose a surv<72>cu ...
* J'ai <20>galement test<73> la recompilation des d<>mos de la lib Glut originelle
(paix <20> ses cendres).
o Rien de particulier <20> signaler.
* Merci <20> tous les mainteneurs courageux de Freeglut, qu'on croyait mort,
mais qui bouge encore.