-
Notifications
You must be signed in to change notification settings - Fork 8
/
README.cygwin_mingw
209 lines (142 loc) · 7.89 KB
/
README.cygwin_mingw
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
Glut then!
By Jean-Seb on Friday July 10, 2009, 00:18
Translated by Babelfish with a scrub from John F. Fay. For points of confusion
please refer to the original French version.
Freeglut is an open-source evolution of GLUT.
Under Windows, one can use it with Cygwin.
Easy? Yes, if one agrees to distribute "cygwin1.dll".
Let us help freeglut gain its independence !
Update 10/7/2009: generation of a library for linking without the DLL.
Grabbing the sources
* Download the sources for version 2.6.0 which integrates recent changes.
* Using version 2.6 is better than the 2.4-stable branch because many
bugs have been corrected.
* You will find the sources on the site of Freeglut:
o http://freeglut.sourceforge.net/
Goals
* We will create a DLL for Cygwin, and an independent static library
* We will also create a dynamic library, allowing linking with the DLL.
List of generated files
* freeglut.dll: a traditional DLL for the dynamic linkage.
* libfreeglut.a: the static library. The final program is autonomous (at
least for OpenGL).
* libfreeglutdll.a: the dynamic library. The final program needs
freeglut.dll.
Preparation
* Extract the files from the freeglut archive.
* Go in the directory src (located at the root of the Freeglut directory),
and create a "Gl" sub-directory
o In this sub-directory, copy the files of the directory "include/Gl"
* Why is it necessary to create a "Gl" directory for compilation?
o I needed it to simplify things during my tests.
o If not you can create the repertories directly, and copy the files
as indicated in the point installation (see below).
* Do a little housekeeping in /lib:
o Erase all the references to the glut, so as not to conflict with the
linking.
o This stage is optional, you can also choose to do the housekeeping
only after a successful compilation of Freeglut.
o In your enthusiasm to clean things up, be careful not to erase the
library glu32.lib (not to be confused with glut32.lib).
Compilation
* Forget the "./configure, make, make install" triptych.
o It does not go at all with Cygwin.
* Here Makefile which will make the deal:
#Makefile for Freeglut 2.6.0-rc and Cygwin
#To place in the directory 'src/Common'
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 related to 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 static library independent of cygwin
ar cr lib$(libname).a $(objs)
#pas inevitably obligatory (creation of an index to accelerate the accesses)
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
Some remarks on the Makefile
* This makefile creates a DLL, a static library (a file, in other words) and
the dynamic library which will allow the use of the DLL.
* Do not try to strip the static library! You may not be able to compile
applications with static library any more.
o On the other hand, you can strip the final executable obtained after
compiling your application.
* I chose to call the DLL and the libraries by their "true names":
freeglut.dll libfreeglutdll.a and libfreeglut.a.
o Script configures recreated (for reasons of compatibility with the
old GLUT library) glut.dll and libglut.a.
o During the my tests, I had conflicts with an authentic "glut" which
trailed in my "/lib". I decided to call the things by their name, in
order to avoid confusions.
o Nothing prevents you from renaming the DLL, if you need to use GLUT
programs which you cannot recompile.
* The dynamic library is generated starting from the DLL.
o For reasons of brevity, I used awk. It generates the export file
used by dlltool.
o The only notable thing is the selection of the functions whose name
starts with _glut, in order to avoid including in the dynamic
library the functions that are not related to freeglut.
o then, one uses dlltool in a very traditional way.
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
* Copy libfreeglut.a, libfreeglutdll.a into the Cygwin directory /lib.
* Copy freglut.dll in the system32 of Windows (this is practical, but not
clean!).
* Copy the files headers of Freeglut (/include/gl) into the Cygwin directory
/usr/include/Gl.
* Copy the files headers (always /include/gl) into /usr/include/mingw/Gl:
this is used for compilations with the flag - mno-cygwin, which uses the
includes in mingw.
o You may need to erase the old GLUT include files if you installed it
with Cygwin.
Use of the library
* We will test with the program shapes, found in progs/demonstrations/shapes
o -mno-cygwin is used to force the use of Mingw without the large
dependence cygwin1.dll.
o -mwindows is only used to remove the horrible Shell window (very
useful for the settling, on the other hand).
o -L. (note the period after the "L"): I left libfreeglut.a,
libfreeglutdll.a and freeglut.dll in the test directory, at the time
of the tests.
Compilation of the static freeglut library, without cygwin
* All the simplicity lies in the define: -DFREEGLUT_STATIC
o It serves to obtain good decoration of the function names in the
imports of the lib Freeglut.
o You can test without and use a hex editor to see the differences
in the objects.
* attention with the order of the libraries: -lfreeglut (static) must be
before the declaration of the dynamic libraries.
* gcc shapes.c -L. -lfreeglut -lopengl32 -lwinmm -lgdi32 -mno-cygwin -mwindows -DFREEGLUT_STATIC
Compilation with DLL freeglut, without cygwin
* For the define, see the notices above
* The order of the libraries is no longer important.
* gcc shapes.c -L. -lopengl32 -lwinmm -lgdi32 -lfreeglut -mno-cygwin -DFREEGLUT_STATIC
Compilation with DLL freeglut, Cygwin
* This example is given only for reference, the topic of this ticket being
to get rid of Cygwin.
o Let us say that can be used to make the point (and later).
* gcc shapes.c -L. -lopengl32 -lwinmm -lgdi32 -lfreeglut
Where are the dooooocs?
* Freeglut is delivered with its documentation, more very up to date.
o It seems that there is a problem with the original GLUT
documentation. Not only it does not correspond completely to the
operation of Freeglut, but moreover, its author (Mark Kilgard)
copyrighted it. Its distribution is thus difficult.
* Jocelyn Fréchot undertook a levelling of the docs for version 2.6.0. One can find them on his site for the moment:
o http://jocelyn.frechot.free.fr/freeglut/
Something survived...
* I also tested the recompiling of the demonstrations of the original lib
GLUT (peace with its ashes).
o Nothing in particular to be announced.
* Thank you with all the courageous maintainers for Freeglut, that one
believed dead, but which still move.