Support StringTemplate, ANTLR Project by making a donation! Terence often pays for things like the antlr.org server, conference travel, and this site design (that alone cost US$1000). Buy him a beer and pizza remotely ;)
|
I've been trying to get ANTLR 2.7.4 to run under Cygwin with GCJ. After trying to piece information together, I've finally found a recipe that makes it work.
ANTLR comes with a standard ./configure script. Under Cygwin, it executes fine, but during compilation, there is an error related to AWT in directory base/antlr/debug/misc. AWT seems to be a JAVA standard library.
A previous article shows how to work around the error, but it didnýt solve everything for me: I was able to create a libantlr.so file (see step 4 of that page), but step 5 broke down, probably because some things in my path weren't set correctly (I think). Step 5 relies on a file called antlr/Tool.class, which doesn't exist in the ./antlr directory but in the antlr.jar file instead (a jar file is a tar-like library in which .class files can be gathered.)
In the end, I got it to work by un-jarring all the files and simply bypassing the creation of a shared library.
Here's what I did: (basedir is the directory where you can find ./configure)
- Install gcj (through the setup.exe on cygwin.com)
- Download the tar files of the latest version of ANTLR (2.7.4 in my case) and untar it in a local directory.
- Run
./configure --prefix=install dir. While we do not need to configure to compile the antlr executable, we do need it to compile the support C++ libraries. Do NOT run make after configure!
- Delete AWT dependent code:
cd basedir/antlr/debug
rm -fr misc
cd basedir
- Un-jar all the files in the antlr.jar, back into their original position.
jar xfv antlr.jar
- Compile everything into an executable
gcj --main=antlr.Tool `find antlr -name "*.class"` -o cantlr
If all is well, you will see a bunch of warnings on your screen that, I assume, you can safely ignore. The end result is a file called cantlr.exe).
- Test the executable by running it (
./cantlr). You should see a bunch of lines with program information.
- Move this file to a place somewhere in your path (e.g.
/usr/local/bin)
At this point, we have created that main executable that will convert a .g grammar file into a set of Java, C# or C++ files. These newly generated files, however, rely on base classes that are also part of the ANTLR distribution. For C++, we need to build a library that contains the compiled based classes.
cd basedir/lib/cpp
- Build the C++ library. This step won't work if you previously didn't run
./configure.
make
- If everything went fine, then the
./src directory will contain a file called libantlr.a. Now install the library and include files to the place that was originally indicated during the ./configure step.
make install
The next step is to test if now have a fully working system.
cd basedir/examples/cpp/calc
- The standard Makefile will not know where to find the antlr executable. As a work around, just generate all files by manually invoking antlr.
cantlr calc.g
A set of C++ files will now be generated.
make
- If everything went fine, you will now see a fresh set of executables!
This is how I got the system work for me while using GCJ and Cygwin. I'm pretty sure that the same procedure will also work in a Solaris or Linux environment...
Tom Verbeure
|