COBOL for GCC Development

COBOLworx is developing a COBOL front end for the GCC Gnu Compiler Collection. GCOBOL is very much still under development, but it has reached a point where interested users can experiment with it.

We are also working on a version of GDB – the GNU Debugger – that has the capability of working with GCOBOL. This page will have more information as it becomes available.

Installation packages for the GCOBOL compiler

We have Debian installation packages for the GCOBOL compiler that are known to install properly on Debian-11 distributions and on Ubuntu-22.04.

These .deb files are found at our private registry. The list is updated with each commit, with the most recent at the top of the list.

Install the downloaded file with sudo apt install ./gcobol-13_13.0.16-dev-xxxxxxxxx_x86_64.deb. That installs the executable as /usr/bin/gcobol and moves the necessary libraries into place.

Note: At the end of the installation process you will probably see a warning message of the form

N: Download is performed unsandboxed as root as file '/home/bob/gcobol-13_13.0.16-dev-44fa482b9_x86_64.deb' couldn't be accessed by user '_apt'. - pkgAcquire::Run (13: Permission denied)

This is a warning, and does not affect the installation. If you prefer to avoid the warning message, move the downloaded file to /tmp and install it from there.

Using COBOL for GCC

Because it is part of the GCC family, GCOBOL works very much like the gcc compiler.

Compile a COBOL program like this:

gcobol -o hello hello.cbl

and then run the resulting executable with ./hello

Source Code

The source code for the compiler is available at https://gitlab.cobolworx.com/COBOLworx/gcc-cobol.git That repository is public; you should be able to clone it.

Those who prefer to work from tarballs can find them at https://gitlab.cobolworx.com/COBOLworx/gcc-cobol/-/releases. They are generated automatically with each commit of the master+cobol branch of the repository.

As mentioned, this project is very much under development. We are trying to make sure that the master+cobol branch of the repository compiles and runs, but as it is the active development branch, there can be no guarantees.

Configuration considerations

You should keep in mind that the GCOBOL compiler is part of the GCC compiler. Compiling GCC, which is one of the more complex programs any of us have ever had to work with, is an involved process.

Your best bet for compiling the GCOBOL compiler is to use one of the scripts that we have arrived at. They are found at

<repo>/gcc-cobol/gcc/cobol/scripts/release-configure-build
<repo>/gcc-cobol/gcc/cobol/scripts/debug-configure-build

The first script is probably what most users want.

The second script builds a debug version of GCC using the -ggdb and -O0 optimization switches. That set of GCC executables provides for using a debugger like GDB to trap through a compilation.

Both scripts attempt to install any prerequisites necessary for compiling the GCC and GCOBOL compilers and using executables generated by them.

One caveat: You will need bison, but it has to be version 3.8 or later. On Ubuntu 22.04 LTS, sudo apt install bison installs BISON-3.8

But on Debian-11, the same command installs BISON-3.7.5, which doesn’t do the job.

On a Debian-11 system, this worked to install a useful version of bison:

cd~
mkdir -p builds
cd builds
wget https://ftp.gnu.org/gnu/bison/bison-3.8.2.tar.xz
tar -xvf bison-3.8.2.tar.xz
cd bison-3.8.2
mkdir build
cd build
../configure --prefix=/usr/local
make
sudo make install

What are we developing?

The GCC architecture consists of a “front end” for each language; there is a front end for C, another for FORTRAN, yet another for ADA, and so on. Each front end parses the source code and passes the decoded intent of the programmer to a “code generator” that converts each instruction to an intermediate form known as GIMPLE. The intermediate form is fed into the GCC optimizer and from there to the assembly language generator.

We are developing a COBOL front end for GCC. It takes COBOL source code as input, parses it and generates the GIMPLE tree. The COBOL front end is incorporated into GCC and becomes an executable named gcobol, which is used to compile COBOL source code files. Because gcobol is part of GCC, the output can be .o object files, .so shared objects, or executable binaries.

The Developers

The primary development team:

Marty Heyman is the team leader. He is the subject matter expert for COBOL and its uses, and is the orchestrator of our business plans.

James K. Lowden is responsible for the non-trivial effort of parsing COBOL source code. COBOL was originally created around 1958, and computer science has learned a lot about compilation in general, and context-free grammars in specific, since then. Coping with a language intentionally designed to be “…like English…” from that era is an “interesting” project.

Robert Dubner is responsible for code generation. Code generation is also an “interesting” project, mainly because so few people have occasion to generate GIMPLE that there is little documentation, and less guidance, for how to do it. Mr. Dubner suspects he is the latest in a line of front end developers forced to reverse engineer what came before in order to do it at all.

For Other Developers

GCOBOL compiler internals