====== 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