The runtime code is provided with .sln and .vcproj files for Visual Studio 2005 and 2008, and configure files for building and installation on UNIX or other systems that support this tool. If your system is neither Windows nor configure compatible, then you should find it reasonable to build the code manually (see section "Building Manually".)
Note that the runtime is no longer compatible with the VC6 Microsoft compiler. If you absolutely need to build with this compiler, you can probably hack the source code to deall with the pieces that VC6 cannot handle such as the ULL suffix for constants.
If you wish to build the binaries for Windows using Visual Studio 2005, or 2008 you may build using the IDE:
If you wish or need to build the libraries from the command line, then you must use a Windows command shell configured for access to VS2005/VS2008 compilers, such as the one that is started from:
Start->Microsoft Visual Studio 2005->Visual Studio Tools->Visual Studio 2005 Command Prompt
There appears to be no way to build all targets at once in a batch mode from the command line, so you may build one or all of the following:
C:\antlrsrc\code\antlr\main\runtime\C> DEVENV C.sln /Build ReleaseDLL C:\antlrsrc\code\antlr\main\runtime\C> DEVENV C.sln /Build Release C:\antlrsrc\code\antlr\main\runtime\C> DEVENV C.sln /Build DebugDLL C:\antlrsrc\code\antlr\main\runtime\C> DEVENV C.sln /Build Debug
After the build is complete you will find the . and
. files under the directory containing C.sln, in a subdirectory named after the /Build target. In the Release and Debug targets, you will find that there is only a
. archive file, which you can link directly into your own projects if you wish to avoid the DLL. In
ReleaseDLL
and DebugDLL
you will find both a .LIB file which you should link your projects with and a DLL. The library and names on Windows are as follows:
- ReleaseDLL : ANTLR3C.DLL and ANTLR3C_DLL.LIB - DebugDLL : ANTLR3CD.DLL and ANTLR3CD_DLL.LIB - Release : ANTLR3C.LIB - Debug : ANTLR3CD.LIB
There currently no .msi modules or other installs built for Windows, so you must place the DLLs in a directory referenced by the PATH environment variable and make the include directory available to your project configurations.
The source code file should be expanded in a directory of your choice (probably your working directory) using the command:
gzip -dc antlrtgzname.tar.gz | tar xvf -
Where: antlrtgzname.tar.gz is of course the name of the tar when you downloaded it. You should find a configure script in the sub directory thus created.
The configure script accepts the usual options, such as --prefix= but the default is to build in the source directory and to place libraries in /usr/local/lib and include files (for building your recognizers) in /usr/local/include. There are also a number of antlr specific options, which you may wish to utilize. The command:
./configure --help
Will document the latest incarnations of these options in case this documentation is ever out of date. At this time the options are:
--enable-debuginfo Compiles debug info into the library (default no) --enable-64bit Turns on flags that produce 64 bit object code if any are required (default no)
Unless you need 64 bit builds, or a change in library types, you will generally use the configure command without options:
Here is a sample configure output:
[jimi@localhost dist]$ tar zvxf libantlr3c-3.0.0-rc8.tar.gz libantlr3c-3.0.0-rc8/ libantlr3c-3.0.0-rc8/antlr3config.h libantlr3c-3.0.0-rc8/src/ libantlr3c-3.0.0-rc8/src/antlr3stringstream.c ... libantlr3c-3.0.0-rc8/antlr3config.h.in
[jimi@localhost dist]$ cd libantlr3c-3.0.0-rc
[jimi@localhost libantlr3c-3.0.0-rc8]$ ./configure checking for a BSD-compatible install... /usr/bin/install -c checking whether build environment is sane... yes checking for a thread-safe mkdir -p... /bin/mkdir -p checking for gawk... gawk checking whether make sets $(MAKE)... yes checking for xlc... no checking for aCC... no checking for gcc... gcc ... checking for strdup... yes configure: creating ./config.status config.status: creating Makefile config.status: creating antlr3config.h config.status: antlr3config.h is unchanged config.status: executing depfiles commands
Having configured the library successfully, you need only make it, and install it:
[jimi@localhost libantlr3c-3.0.0-rc8]$ make
make all-am make[1]: Entering directory `/home/jimi/antlrsrc/code/antlr/main/runtime/C/dist/libantlr3c-3.0.0-rc8' /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -Iinclude -Iinclude -O2 -MT antlr3baserecognizer.lo -MD -MP -MF .deps/antlr3baserecognizer.Tpo -c -o antlr3baserecognizer.lo `test -f 'src/antlr3baserecognizer.c' || echo './'`src/antlr3baserecognizer.c ... gcc -shared .libs/antlr3baserecognizer.o .libs/antlr3basetree.o .libs/antlr3basetreeadaptor.o .libs/antlr3bitset.o .libs/antlr3collections.o .libs/antlr3commontoken.o .libs/antlr3commontree.o .libs/antlr3commontreeadaptor.o .libs/antlr3commontreenodestream.o .libs/antlr3cyclicdfa.o .libs/antlr3encodings.o .libs/antlr3exception.o .libs/antlr3filestream.o .libs/antlr3inputstream.o .libs/antlr3intstream.o .libs/antlr3lexer.o .libs/antlr3parser.o .libs/antlr3string.o .libs/antlr3stringstream.o .libs/antlr3tokenstream.o .libs/antlr3treeparser.o .libs/antlr3rewritestreams.o .libs/antlr3ucs2inputstream.o -Wl,-soname -Wl,libantlr3c.so -o .libs/libantlr3c.so ar cru .libs/libantlr3c.a antlr3baserecognizer.o antlr3basetree.o antlr3basetreeadaptor.o antlr3bitset.o antlr3collections.o antlr3commontoken.o antlr3commontree.o antlr3commontreeadaptor.o antlr3commontreenodestream.o antlr3cyclicdfa.o antlr3encodings.o antlr3exception.o antlr3filestream.o antlr3inputstream.o antlr3intstream.o antlr3lexer.o antlr3parser.o antlr3string.o antlr3stringstream.o antlr3tokenstream.o antlr3treeparser.o antlr3rewritestreams.o antlr3ucs2inputstream.o ranlib .libs/libantlr3c.a creating libantlr3c.la (cd .libs && rm -f libantlr3c.la && ln -s ../libantlr3c.la libantlr3c.la) make[1]: Leaving directory `/home/jimi/antlrsrc/code/antlr/main/runtime/C/dist/libantlr3c-3.0.0-rc8'
[jimi@localhost libantlr3c-3.0.0-rc8]$ sudo make install
make[1]: Entering directory `/home/jimi/antlrsrc/code/antlr/main/runtime/C/dist/libantlr3c-3.0.0-rc8' test -z "/usr/local/lib" || /bin/mkdir -p "/usr/local/lib" /bin/sh ./libtool --mode=install /usr/bin/install -c 'libantlr3c.la' '/usr/local/lib/libantlr3c.la' /usr/bin/install -c .libs/libantlr3c.so /usr/local/lib/libantlr3c.so /usr/bin/install -c .libs/libantlr3c.lai /usr/local/lib/libantlr3c.la /usr/bin/install -c .libs/libantlr3c.a /usr/local/lib/libantlr3c.a ... /usr/bin/install -c -m 644 'include/antlr3stringstream.h' '/usr/local/include/antlr3stringstream.h' ... /usr/bin/install -c -m 644 'antlr3config.h' '/usr/local/include/antlr3config.h' make[1]: Leaving directory `/home/jimi/antlrsrc/code/antlr/main/runtime/C/dist/libantlr3c-3.0.0-rc8' [jimi@localhost libantlr3c-3.0.0-rc8]$
You are now ready to generate C recognizers and compile and link them with the ANTLR 3 C Runtime.
antlr3config.h
, which contains typedefs of the fundamental types that your local C compiler supports. The easiest way to produce this file for your system, if you cannot port automake and configure to the system is:
antlr3config.h
file to the target system
Having produced a compatible antlr3config.h file, then you should be able to compile the source files in the ./src subdirectory, providing an include path to the location of
antlr3config.h
and the ./include subdirectory. Something akin to:
~/C/src: cc -c -O -I.. -I../include *.c
Having produced the .o (or equivalent) files for the local system you can then build an archive or shared library for the C runtime.
When you wish to build and link with the C runtime, specify the path to the supplied header files, and the path to the library that you built.