Beginners guide to SGE
- 1. Intro
- 2. Compiling SGE
- 3. Using SGE
- 4. How to distribute your project
1. Intro
This is a small guide about how to compile and use SGE in your own project. It's mostly
aimed at Unix/Linux developers but others can probably find some information in here too.
This guide also assumes that you have a working version of SDL (and FreeType if you want
to use TT fonts in SGE) installed on your system (see the "README" file for more
information about this).
2. Compiling SGE
First we need to download the latest release. It's available under "Download" at the SGE
homepage:
http://www.etek.chalmers.se/~e8cal1/sge/index.html or
http://home.swipnet.se/cal_home/sge/index.html.
Save the sgeXXXXXX.tar.gz file somewhere and open a terminal and go to the directory
where you saved it. Unpack the file ('tar zxfv sgeXXXXXX.tar.gz') and you will have a new
directory with the SGE source code inside.
Now you're ready to compile SGE! Make sure that you're standing in the root SGE directory
(sgeXXXXXX/). If you just want to test SGE and its examples you should now run 'make'
(or whatever GNU make is called on your system), but if you want to install SGE on your
system then you should run 'make install'. If something goes wrong under the compilation
there's probably something wrong with your SDL or FreeType installations.
You should test the examples when you have finished compiling SGE. Enter the directory
"examples/" and run "make", this will build all examples. Read the "README" file in this
directory for more information about the examples.
3. Using SGE
In this part of the guide I'll assume that you have installed SGE with "make install".
First create a directory for your new project (e.g. 'mkdir myproject'), in this directory we'll
create the file "myproject.cpp". Start your favorite text editor and put some C/C++ code into the
"myproject.cpp" file, e.g. this very simple program:
/* A very simple SDL/SGE program */
#include "SDL.h"
#include "sge.h"
int main(int argc, char** argv)
{
/* Init SDL */
SDL_Init(SDL_INIT_TIMER|SDL_INIT_VIDEO);
/* Set window title */
SDL_WM_SetCaption("Testing", "testing");
/* Initialize the display */
SDL_Surface *screen;
screen = SDL_SetVideoMode(640, 480, 16, SDL_SWSURFACE);
sge_FilledRect(screen, 20,20, 620,460, 255,0,0);
SDL_Event event;
do{
/* Wait for user input */
SDL_WaitEvent(&event);
if(event.type == SDL_KEYDOWN && event.key.keysym.sym == SDLK_ESCAPE)
break;
if(event.type == SDL_QUIT)
break;
}while(true);
SDL_Quit();
return 0;
}
This is a very simple program without any error checking. Don't try this at home, always
check for errors!
You can now compile and link this code with:
g++ -Wall -O3 `sdl-config --cflags` -c myproject.cpp
g++ -o myproject myproject.o -lSGE `sdl-config --libs` -lstdc++
Run ./myproject and a window with a red rectangle should show.
It can become a bit tedious to enter the command lines above every time you want to compile your code, therefor
we will now write a makefile for our project.
Create a file namned "Makefile" and enter the following:
# Makefile for myproject
CXX=g++
CFLAGS =-Wall -O3 $(shell sdl-config --cflags)
LIBS = -lSGE $(shell sdl-config --libs) -lstdc++
TARGETS = myproject #change this to your project name
OBJECTS = $(addsuffix .o, $(TARGETS))
all: $(TARGETS)
$(TARGETS): %:%.o
$(CXX) -o $@ $< $(LIBS)
$(OBJECTS): %.o:%.cpp
$(CXX) $(CFLAGS) -c $<
clean:
@rm -f *.o $(TARGETS)
Run 'make clean' to remove the data from the previous compile and then run 'make', the result should be the same
as when you entered the commands manually.
If your project grows and spilts into multiple .cpp files that each have a corresponding .h
file then your makefile should look something like:
# Makefile for mycomplexproject
CXX=g++
CFLAGS =-Wall -O3 $(shell sdl-config --cflags)
LIBS = -lSGE $(shell sdl-config --libs) -lstdc++
OBJECTS = foo.o bar.o baz.o #every .cpp file in your project but replace .cpp with .o
all: $(OBJECTS)
$(CXX) -o mycomplexproject $(OBJECTS) $(LIBS)
$(OBJECTS): %.o:%.cpp %.h
$(CXX) $(CFLAGS) -c $<
clean:
@rm -f *.o mycomplexproject
Well, it's all a bit of black magic but for now I assume that you used the first Makefile
example (for more information about GNU make black magic please read its manual).
4. How to distribute your project
It's important to remember that SGE is licensed under the GNU Lesser General Public
License, which means that you can't link any non-GPL or non-LGPL code directly to it. In
that case you MUST link to a shared library version (under Unix libSGE.so and under Win32
SGE.dll). You must also include a notice in your distribution that you're using SGE (and
SDL!) and where the source code for SGE can be found. Also note that you might be using
other libraries too that SGE and SDL depend on (e.g. libpthread and libfreetype).
But if your project is licensed under the GPL or LGPL then you're free to use SGE (and SDL)
in almost any way you want (e.g. copy&paste code directly from SGE).
Below are some hints about how to include SGE in a source distribution of your project.
The do-it-yourself method
The easiest way to use SGE in your source distribution is to tell the user to download and
install SGE him/her-self. This is the most common way.
The include-it method
It might be a bit frustrating for the user to download every library him/her-self, especially
smaller libraries like SGE. One way to solve this is to include the SGE source code directly.
Place the sge*.cpp, sge*.h, Makefile* and License files in a new directory (i.e. sge/) at the
root of your project. Please also include a short notice like:
This project uses the SGE library from http://www.etek.chalmers.se/~e8cal1/sge/index.html.
SGE is distributed under the GNU Lesser General Public License (LGPL - see the License
file for more information).
Now either tell the user to go to this directory and compile and install SGE him/her-self or do
it from your build system. Make sure that you modify the "Makefile.conf" to suite your
project, this way you can use it directly in your build system (if you use a pure make system
like the examples above). Then you can use a Makefile like this for your project:
# Makefile for foobar
include sge/Makefile.conf
CFLAGS =-Wall -O2 $(SGE_CFLAGS) -Isge/
LIBS =-Lsge/ -lSGE $(SGE_LIBS)
... (the rest of the Makefile goes here).
Also add this rule in the Makefile:
...
sgelib:
@(cd sge; $(MAKE))
...
and then add that rule like a dependency somewhere, something like:
...
all: sgelib $(TARGETS)
...
or if you used the more complex makefile example above:
...
all: sgelib $(OBJECTS)
...
well, you get the idea. It might also be a good idea to modify the clean rule:
...
clean:
...
@(cd sge; $(MAKE) clean)
...
Done! If you don't want "Makefile.conf" to output any SGE messages while building then
you should uncomment the "QUIET" option.
This will link your code statically to SGE so your project must be GPL/LGPL licensed for
this to work. If you want to link dynamically to SGE it might be better to ask the user to
compile and install SGE before building your project, but you might also automatically build
a shared version of SGE with "@(cd sge; $(MAKE) shared)" from your Makefile, however you should no longer use
the SGE_CFLAGS and SGE_LIBS in your makefile (just do something like the first simple makefile example above).
Also, in this case, don't forget to install SGE ("@(cd sge; $(MAKE) install)" if you want the default SGE
installation) with your project or else your executables won't run. Some Unix systems (like Linux) also
require that you run "ldconfig" when you have installed new libraries.
Anders Lindström
Copyright © 1999-2003 Anders Lindström
Last updated 030802