Subversion Repositories gelsvn

Rev

Rev 209 | Rev 216 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
209 jab 1
GEL README, Andreas Bærentzen, February 2006.
2
==========
2 bj 3
 
209 jab 4
This README describes the GEL project. GEL stands for Geometry and Linear 
5
Algebra which are the constituents we will mostly put into this library.
2 bj 6
 
209 jab 7
There are a good many tools for computational geometry processing: A
210 jab 8
voxel grid and a simple triangle mesh data structure. There is also halfedge 
209 jab 9
based polygonal mesh data structure called HMesh. There is a very
10
useful data structure known as a k-D tree and many other things. 
12 jab 11
 
209 jab 12
Also found are two packages for linear algebra: CGLA is strictly for
13
small vectors and matrices. LinAlg is a Lapack wrapper for slightly
14
larger problems. At this point, it is fairly simple. 
12 jab 15
 
209 jab 16
Finally there are some utilities in Util: Getting command line
17
arguments, hash table classes, a 2D grid class, a resource manager and
18
other miscellany. 
2 bj 19
 
209 jab 20
GEL is intended for use both under a  variety of unix platforms (Linux
21
and OSX in particular) and  under windows. This README is mostly for
22
unix users. Windows users should also consult README_MSVC
23
 
24
Dependencies: GEL depends on the Developers Image Library DevIL,
25
Lapack, and OpenGL and GLUT. However, most of GEL does not require
26
these dependencies. In particular, you do not need DevIL except if you
27
want the OBJ viewer example program.
28
 
29
Who made GEL
30
==========
31
 
32
GEL is mostly the work of Andreas Bærentzen, but other people
33
contribute. In particular, Jeppe Frisvad, Bjarke Jakobsen, Henrik
34
Aanæs, and Bent D. Larsen. We are all from Informatics and
35
Mathematical Modelling, a department of the Technical University of
36
Denmark. 
37
 
38
Regarding LICENSE.
39
==========
40
 
41
I was considering putting GEL under the LGPL. But it is a long complex
42
text. The longer any kind of document, the more chances for loopholes
43
in my opinion. Instead, I list a few simple rules below. The most
44
important one is that if you want to use GEL for some purpose, and it
45
is not crystal clear whether it is against the rules, contact me. As
46
for the rules:
47
 
48
You are allowed to use GEL for academic or commercial purposes. In
49
particular, you are welcome to give GEL to students as a basis for 
50
academic work or to use it for your own applications.
51
 
52
The biggest limitation that I want to impose is that you cannot repackage
53
GEL in any way. You are not allowed to distribute another library which
54
contains GEL or parts of GEL unless you make it clear that this other
55
library contains GEL. You are also not allowed to redistribute GEL in a
56
changed form. If you want changes to be made, contact me.
57
 
58
Of course, neither I nor my employer will give you any money or be
59
held responsible in any way, under any circumstances what so ever - no
60
matter what sort of damage GEL might inflict upon you. Not that I can
61
foresee GEL causing you any damage :-) 
62
 
63
If anything is unclear, please contact me. In fact, if you want to use
64
GEL for a bigger project, I'd appreciate an email to jab@imm.dtu.dk
65
 
66
In a project such as this, it is almost impossible to completely avoid
67
building upon fragments of other peoples source code. GEL includes an
68
obj loader based on work by Nate Robins. Some pieces of source code
69
from Graphics Gems have also been used. All of this amounts to only a
70
small fraction of the GEL source code and it should not be in
71
violation of any license. Should you disagree, contact me, and I will
72
rectify the situation.
73
 
2 bj 74
----------------------------------------------------------------------
75
1. INTRODUCTION
76
----------------------------------------------------------------------
77
 
78
In the following, I discuss the structure of the source code and how to
79
add new directories to the framework. 
80
 
81
The idea is that this framework should be a) simple to use and b) let 
82
people easily compile the same source code under various unix platforms.
83
A seperate configuration is kept for each combination of OS, architecture, 
84
and compiler. It is possible to specify targets release or debug.
85
 
86
Source files are compiled in build directories, and separate build 
87
directories are kept for each unique combination of 
88
 
89
os architecture compiler target
90
 
91
such as
92
 
93
Linux_i686_g++3_debug
94
 
95
this makes it easier to work in a heterogenous environment or to 
96
experiment with seperate compilers or just to switch between debug mode 
97
and optimized.
98
 
99
To see how to use the framework, you may skip to section 5.
100
 
101
----------------------------------------------------------------------
102
2. DIRECTORY STRUCTURE
103
----------------------------------------------------------------------
104
 
105
The directories under the root of the source tree (where you find this 
106
README) are
107
 
12 jab 108
src        - Source code for GEL libraries
109
apps       - Source code for applications
114 jab 110
apps       - Source code for test programs
2 bj 111
doc        - Documentation
112
bin        - Executables
113
lib        - Libraries
114
makefiles  - As the name suggests, makefiles
115
 
12 jab 116
src contains a number of subdirectories each of which represents a 
117
link library. apps  also contains subdirectories, however each of these
2 bj 118
is supposed to contain source code for an executable.
119
 
120
----------------------------------------------------------------------
121
3. FILE NAMES
122
----------------------------------------------------------------------
123
 
124
source files are *.c or *.cpp depending on whether it is C or C++
125
header files are named *.h
126
 
127
----------------------------------------------------------------------
128
4. MAKEFILES
129
----------------------------------------------------------------------
130
 
131
Some defintions:
132
----------------
133
 
134
The PLATFORM is a string concatenation of the os cpu and compiler, e.g.
135
 
136
Linux_i686_g++
137
 
58 jab 138
The TARGET is either `debug' or `release'. By default it is debug. It is
139
recommended that you do _not_ hardwire your own default into the makefiles
140
as I did for many years. It seems better to define the variable when running
141
make, using "make TARGET=release" or by setting the target variable in the
142
environment.
2 bj 143
 
144
 
145
Make'ing from the source root
146
-----------------------------
147
 
148
Just typing
149
> make 
150
 
151
from the root of the source tree will cause first every library and
152
then every application to be remade. However, there are several
153
targets.
154
 
178 bj 155
make all			 - equivalent to "make lib shared test app"
58 jab 156
 
2 bj 157
make lib       - make all libraries
158
 
178 bj 159
make shared    - For the current target platform combination, a shared library
160
								 is created by stringing together the compiled static libraries
161
 
2 bj 162
make app       - make all applications
163
 
164
make clean     - clean all library directories and app directories.
165
                 this removes only files pertaining to the current
166
                 platform and target (release/debug). This also
167
                 removes generated libraries. 
168
 
169
make distclean - cleans and completely removes all build directories. 
170
 
171
make platform  - copies a template to OS_CPU_COMPILER.mk in the
58 jab 172
                 makefiles directory. Use this only if you know what you
173
								 are doing.
2 bj 174
 
58 jab 175
make install   - Copies header files and libraries to the appropriate place
178 bj 176
							   which is PREFIX=/usr/local by default. The libraries which
177
								 are copied are either the debug or release versions depending
178
								 on the active target. 
58 jab 179
 
178 bj 180
								 Install does not install applications since many are little
181
								 test programs that do not belong in your path.
58 jab 182
 
178 bj 183
 
2 bj 184
Make'ing in subdirectories
185
--------------------------
186
 
39 bj 187
Go to a subdirectory of src, say src/somedir. 
2 bj 188
Here you have the following options:
189
 
58 jab 190
make
2 bj 191
make lib
192
make clean
193
 
58 jab 194
The first two invocations are identical and will rebuild all sourcefiles and
195
put them in a library directory. The latter will remove all object and
196
dependency files (but only for the current platform
197
(e.g. Linux_i686_g++_debug) The default target is lib.
2 bj 198
 
39 bj 199
Go to a subdirectory of apps, say apps/somedir. 
2 bj 200
Here you have the following options:
201
 
58 jab 202
make
203
 
204
or
205
 
2 bj 206
make app
207
 
208
will recompile the source files in the current directory and build the 
209
programs. This is the default target. When compiled, the application is
58 jab 210
moved to wherever/GEL/bin
2 bj 211
 
212
make force
213
 
214
does the same but tries first to recompile all libraries that the 
215
applications in somedir depend on. This is the safe way to recompile,
216
but it takes a few seconds more, so if you are sure the libraries are
217
up to date, just go make.
218
 
219
make clean
220
 
221
works like above. 
222
 
39 bj 223
Makefiles in subdirectories under apps should generally be edited.
224
When create by `make makefiles' the Makefile in apps/somedir looks
2 bj 225
like this 
226
 
227
PROGRAMS 	= prog1 prog2
228
OWN_LIBS 	= Lib1 Lib2
229
LIBS			= ${GLLIBS} ${XLIBS} -lm -lz -lexpat
230
 
231
Add something like this
232
 
233
PROGRAMS 	= prog1 prog2
234
OWN_LIBS 	= Lib1 Lib2
235
LIBS			= ${GLLIBS} ${XLIBS} -lm -lz -lexpat
236
 
237
where prog1 and prog2 are programs you wish to create. These must 
238
correspond to source files with the same name and suffix .cpp. In
239
other words, 
240
 
241
prog1.cpp 
242
prog2.cpp
243
 
244
must exist (and contain a main function)
245
 
246
Lib1 and Lib2 are libraries that must also be in the directory structure,
39 bj 247
i.e. under src there are subdirectories 
2 bj 248
 
39 bj 249
src/Lib1
250
src/Lib2
2 bj 251
 
252
the files in these subdirectories will be compiled and put in library 
253
files named libLib1.a under lib. More precisely it will be put here:
254
 
255
lib/PLATFORM_TARGET/
256
 
257
PLATFORM and TARGET are defined above. Another library directory are for
258
precompiled libraries whose source code is not a part of this tree. Put
259
such libraries here:
260
 
261
lib/PLATFORM/
262
 
263
this directory is created by 
264
 
265
make platform from the source root.
266
 
267
----------------------------------------------------------------------
268
5. CONFIGURATION
269
----------------------------------------------------------------------
270
 
271
When you add a new project to this framework, you should go through
272
the following steps:
273
 
39 bj 274
Add directories for libraries under src. E.g. add 
2 bj 275
 
39 bj 276
mkdir src/somelib
2 bj 277
 
278
Then add directories for applications:
279
 
39 bj 280
mkdir apps/someapp
2 bj 281
 
282
Copy appropriate source files to these directories and then edit
283
 
284
makefiles/config.mk
285
 
286
to tell us which compiler to use (leave blank to use default) 
58 jab 287
 
2 bj 288
Finally, from the source root type 
289
 
290
make platform
291
 
292
Depending on your compiler you may now have to edit the makefile called
293
 
294
makefiles/PLATFORM.mk 
295
 
296
to set special compile flags. No go 
297
 
298
make makefiles
299
 
300
Finally you are all set. Go
301
 
302
make
303
 
304
 
305
----------------------------------------------------------------------
178 bj 306
6. DEPENDENCIES IN GEL
2 bj 307
----------------------------------------------------------------------
308
 
178 bj 309
Each directory under src represents a library. There are some dependencies
310
between these libraries.
311
 
312
 
313
 
314
lib						depends on
315
-----------------------------------
316
CGLA 					nothing 
317
 
318
Util 					CGLA
319
 
320
LinAlg 				CGLA
321
 
322
Geometry 			LinAlg, CGLA
323
 
324
HMesh					CGLA, Util, Geometry, LinAlg (indirectly)
325
 
326
GLGraphics		Everything (since it contains general rendering
327
							facilities)
328
 
329
 
330
----------------------------------------------------------------------
331
7. TODO
332
----------------------------------------------------------------------
333
 
2 bj 334
- No real testing of blended C and C++.
335
- No dependency computation for .c 
336
 
337
 
338
 
339
 
340
 
341