-
Notifications
You must be signed in to change notification settings - Fork 56
Building ANTLR 4
ATTENTION: Please note that the verified version of this package is currently using an older version of log4j which has the security vulnerabilities. Please see here for more details.
Below versions of ANTLR (ANother Tool for Language Recognition) version 4 are available in respective distributions at the time of creation of these build instructions:
- Ubuntu 18.04 has ANTLR
4.7.2-1
- Ubuntu 20.04 has ANTLR
4.7.2-2
- Ubuntu (21.04, 21.10) has ANTLR
4.7.2-5
If only the Java runtime is required, then the pre-built jars for ANTLR v4.9.3 can be downloaded from here.
The instructions provided below specify the steps to build ANTLR v4.9.3 on Linux on IBM Z for the following distributions:
- RHEL (7.8, 7.9, 8.2, 8.4)
- Ubuntu (18.04, 20.04, 21.04, 21.10)
- SLES (12 SP5, 15 SP2, 15 SP3)
The instructions below describe:
- How to download and install the required Java SDK.
- If only the ANTLR Java runtime is required - how to download and install ANTLR pre-built binaries
- If other ANTLR runtimes are required - how to download and install the required packages, build ANTLR and the supported runtimes from source.
General Notes:
- When following the steps below please use a standard permission user unless otherwise specified.
- A directory
/<source_root>/
will be referred to in these instructions, this is a temporary writable directory anywhere you'd like to place it.
-
RHEL (7.8, 7.9, 8.2, 8.4)
-
SLES (12 SP5, 15 SP2, 15 SP3)
-
Ubuntu (18.04, 20.04, 21.04 ,21.10)
Note: At the time of creation of these build instructions, ANTLR was verified with Eclipse Adoptium Temurin Runtime-11.0.13+8 (build 11.0.13+8)
and IBM Semeru Runtime Open Edition 11.0.13.0 (build 11.0.13+8)
.
export SOURCE_ROOT=/<source_root>/
export JAVA_HOME=<path to installed java>
export PATH=$JAVA_HOME/bin:$PATH
cd $SOURCE_ROOT
curl -s -S -L -O https://www.antlr.org/download/antlr-4.9.3-complete.jar
JAR=$SOURCE_ROOT/antlr-4.9.3-complete.jar
export CLASSPATH=".:$JAR:$CLASSPATH"
Test the tool and runtime using the example provided here.
alias antlr4='java -Xmx500M -cp $CLASSPATH org.antlr.v4.Tool'
alias grun='java -Xmx500M -cp $CLASSPATH org.antlr.v4.gui.TestRig'
cd $SOURCE_ROOT
mkdir antlrtest
cd antlrtest
cat > Hello.g4 <<'EOF'
grammar Hello;
r : 'hello' ID ;
ID : [a-z]+ ;
WS : [ \t\r\n]+ -> skip ;
EOF
antlr4 Hello.g4
javac Hello*.java
diff -w <(grun Hello r -tree <<<"hello world") <(echo "(r hello world)")
- RHEL (7.8, 7.9)
sudo yum install -y unzip xz xz-devel libuuid-devel curl wget git make devtoolset-7-gcc devtoolset-7-gcc-c++ llvm-toolset-7-clang python2 bzip2-devel gdbm-devel libdb-devel libffi-devel ncurses-devel readline-devel sqlite-devel tar tk-devel zlib-devel
#switch to GCC 7
source /opt/rh/devtoolset-7/enable
- RHEL (8.2, 8.4)
sudo yum install -y unzip xz libuuid-devel curl wget git make gcc gcc-c++ python2 python3.8 cmake clang libarchive
- UBUNTU (18.04, 20.04)
sudo apt-get update
sudo apt-get install -y unzip xz-utils uuid-dev curl wget git make python python3.8 gcc g++ cmake clang pkg-config
- UBUNTU (21.04, 21.10)
sudo apt-get update
sudo apt-get install -y unzip xz-utils uuid-dev curl wget git make python bzip2 tk-dev libghc-bzlib-dev gcc g++ cmake clang pkg-config
- SLES 12 SP5
sudo zypper install -y unzip tar xz xz-devel libuuid-devel curl wget git make gcc gcc8 gcc8-c++ python python-typing cmake gawk gdbm-devel libbz2-devel libdb-4_8-devel libffi48-devel ncurses-devel readline-devel sqlite3-devel tk-devel zlib-devel
#switch to GCC 8
sudo update-alternatives --install /usr/bin/cc cc /usr/bin/gcc-8 40
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-8 40
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-8 40
sudo update-alternatives --install /usr/bin/c++ c++ /usr/bin/g++-8 40
- SLES 15 SP2
sudo zypper install -y unzip xz xz-devel libuuid-devel curl wget git make gcc gcc-c++ python cmake clang7 gawk gdbm-devel libbz2-devel libdb-4_8-devel libffi-devel libnsl-devel libopenssl-devel libuuid-devel make ncurses-devel readline-devel sqlite3-devel tar tk-devel zlib-devel gzip
- Install Go 1.17.3 from the instructions here, then use the following command to set the GO111MODULE environment variable to
auto
:
go env -w GO111MODULE=auto
- Build and install OpenSSL from source (Only on SLES 12 SP5 and RHEL 7.x)
cd $SOURCE_ROOT
wget https://www.openssl.org/source/openssl-1.1.1h.tar.gz
tar -xzvf openssl-1.1.1h.tar.gz
cd openssl-1.1.1h
./config --prefix=/usr/local --openssldir=/usr/local
make
sudo make install
export LDFLAGS="-L/usr/local/lib/ -L/usr/local/lib64/"
export LD_LIBRARY_PATH=/usr/local/lib/:/usr/local/lib64/:/usr/lib/:/usr/lib64/${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
export CPPFLAGS="-I/usr/local/include/ -I/usr/local/include/openssl"
- Install Python (Only on RHEL 7.x ,SLES and UBUNTU 21.x)
cd $SOURCE_ROOT
ver=3.8.8
wget https://www.python.org/ftp/python/$ver/Python-$ver.tgz
tar -xzf Python-$ver.tgz
cd Python-$ver
./configure (for RHEL 7.x and SLES only)
./configure --enable-optimizations (For UBUNTU 21.x only)
make && sudo make install
python3 -V
- Install cmake (Only on RHEL 7.x)
cd $SOURCE_ROOT
wget https://cmake.org/files/v3.5/cmake-3.5.2.tar.gz
tar -xzf cmake-3.5.2.tar.gz
cd cmake-3.5.2
./bootstrap
make
sudo make install
-
Install Clang 8.0.1 (Only on SLES 12SP5)
- Build and Install LLVM Dependency
cd $SOURCE_ROOT wget https://github.com/llvm/llvm-project/releases/download/llvmorg-8.0.1/llvm-8.0.1.src.tar.xz tar -xf llvm-8.0.1.src.tar.xz cd llvm-8.0.1.src/ mkdir build && cd build cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX=/usr/local -DCMAKE_BUILD_TYPE=release .. make && sudo make install
- Build and Install CLANG
cd $SOURCE_ROOT wget https://github.com/llvm/llvm-project/releases/download/llvmorg-8.0.1/cfe-8.0.1.src.tar.xz tar -xvf cfe-8.0.1.src.tar.xz cd cfe-8.0.1.src/ mkdir build && cd build cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX=/usr/local -DCMAKE_BUILD_TYPE=release .. make && sudo make install
-
Download NodeJS, Maven and ANTLR source for all distros.
cd $SOURCE_ROOT
TARBALL=node-v14.15.5-linux-s390x.tar.xz
curl -s -S -L -O https://nodejs.org/dist/v14.15.5/${TARBALL}
tar xJf ${TARBALL}
TARBALL=apache-maven-3.3.9-bin.tar.gz
curl -s -S -L -O https://archive.apache.org/dist/maven/maven-3/3.3.9/binaries/${TARBALL}
tar xzf ${TARBALL}
ZIP=antlr4-4.9.3.zip
curl -s -S -L -o ${ZIP} https://github.com/antlr/antlr4/archive/4.9.3.zip
unzip ${ZIP}
- Set the PATH environment variable (Only on RHEL 7.x)
export PATH=/opt/rh/llvm-toolset-7/root/usr/bin:$SOURCE_ROOT/node-v14.15.5-linux-s390x/bin:$SOURCE_ROOT/apache-maven-3.3.9/bin:${PATH}
- Set the PATH environment variable (Only on RHEL 8.x, SLES and Ubuntu)
export PATH=$SOURCE_ROOT/node-v14.15.5-linux-s390x/bin:$SOURCE_ROOT/apache-maven-3.3.9/bin:${PATH}
- Build the ANTLR tool, then build the supported runtimes.
export MAVEN_OPTS="-Xmx1G"
cd $SOURCE_ROOT/antlr4-4.9.3
mvn install -DskipTests=true
cd runtime/Cpp
mkdir build && mkdir run
cd build
cmake -DWITH_LIBCXX=Off -DCMAKE_BUILD_TYPE=release ..
make -j 8
DESTDIR=$SOURCE_ROOT/antlr4-4.9.3/runtime/Cpp/run make install
Note: If multiple gcc versions are installed, DCMAKE_CXX_COMPILER and DCMAKE_C_COMPILER flags can be used in cmake command to give correct version path. Note: ANTLR 4.9.3 runtimes supported for Linux on IBM Z are Java, Python, Go, NodeJS and C++.
cd $SOURCE_ROOT/antlr4-4.9.3/runtime-testsuite
mvn -Dtest=java.* test
mvn -Dtest=python2.* test
mvn -Dtest=python3.* test
mvn -Dtest=go.* test
mvn -Dtest=javascript.* test
mvn -Dtest=cpp.* test
The information provided in this article is accurate at the time of writing, but on-going development in the open-source projects involved may make the information incorrect or obsolete. Please open issue or contact us on IBM Z Community if you have any questions or feedback.