====== Building Unfolding tools ======
Recent versions of Bison (e.g. v3.6.2 in MacPort and v3.5.1 in Ubuntu 20.04) have a new way to detect reduce/reduce conflicts. This affects generating a parser from ''unflib/pn_parse_hl.y'' grammar -- the following error is reported by Bison: //reduce/reduce conflicts: 162 found, 54 expected//. A workaround is to change the number of expected reduce/reduce conflicts from 54 to 162.
===== for Linux ====
These instructions also work for Windows Subsystem for Linux (WSL).\\
See [[https://docs.microsoft.com/en-us/windows/wsl/|WSL documentation]] for detailed setup instructions.
* Install development packages:
sudo apt install gcc gcc-multilib # GCC v9.3.0
sudo apt install g++ g++-multilib # G++ v9.3.0
sudo apt install bison flex # Bison v3.5.1
sudo apt install make dos2unix
sudo apt install libhwloc-dev
* Run ''make cleanall'' and remove all static libraries (''*.a'' files)
* Run ''make''
Binaries produced in Ubuntu 20.04 and 18.04 require Linux kernel v3.2.0 or newer. This may cause problems for EDA servers that often run Red Hat 6 with kernel v2.6.32. A workaround is to configure a build environment under Ubuntu 16.04 instead:
- Note that if you are using WSL, then Ubuntu 16.04 needs to be installed manually, via PowerShell:
curl.exe -L -o ubuntu-1604.appx https://aka.ms/wsl-ubuntu-1604
Add-AppxPackage .\Ubuntu_1604.2019.523.0_x64.appx
- Install GCC 8 and set it as a default alternative:
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt install gcc-8 gcc-8-multilib g++-8 g++-8-multilib
sudo update-alternatives \
--install /usr/bin/gcc gcc /usr/bin/gcc-8 20 \
--slave /usr/bin/g++ g++ /usr/bin/g++-8 \
--slave /usr/bin/gcov gcov /usr/bin/gcov-8
- Install other dependencies, excluding Bison (see below):
sudo apt install m4 make flex dos2unix libhwloc-dev
- Build Bison v3.5.1 from source (only v3.0.4 is available from Ubuntu official repo, which is too old):
wget http://ftp.gnu.org/gnu/bison/bison-3.5.1.tar.gz
tar xzfv bison-3.5.1.tar.gz
cd bison-3.5.1
./configure
make
sudo make install
===== for OSX ====
- Use MacPort to install GCC:
sudo port install gcc8 +universal
#sudo port select --list gcc
sudo port select --set gcc mp-gcc8
- Install OpenSSL, Bison and DOS2Unix:
sudo port install bison
sudo port install openssl
sudo port install dos2unix
- Use OSX flags:
cp flags_osx flags
The changes are as follows:
* the flag ''-static'' is replaced with ''-static-libstdc++ -static-libgcc'' in ''CFLAGS''
* the flags ''-Wl,--whole-archive'' and ''-Wl,--no-whole-archive'' are removed from ''CXXFLAGS''
- Change the number of expected reduce/reduce conflicts from 54 to 162 in ''unflib/parse_hl.y'' grammar file:
sed -i'' 's/%expect-rr 54/%expect-rr 162/g' unflib/parse_hl.y
- Run ''make cleanall'' and remove all static libraries (''*.a'' files)
- Run ''make''
===== for Windows ====
- Install a relatively modern version of Visual Studio, e.g. Visual Studio Community 2022
- Install and configure [[https://learn.microsoft.com/en-us/windows/wsl/|WSL2]] with a Linux distribution of your choice (e.g. Ubuntu), and install //Flex// and //Bison// packages there (they will be used from Visual Studio via WSL2 calls for generating parsers)
- Copy ''FlexLexer.h'' from //Flex// package into ''include'' directory of Visual Studio installation (e.g. ''C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.32.31326\include\'')
- Run Visual Studio and configure it to produce //Release// binaries for //Win32// platform (see //Solution Configuration// and //Solution Platform// dropdown boxes)
- Build the binaries via //Build->Build Solution// menu
- Run ''make_unf_tools.bat'' to pack the produced binaries into a zip file