Skip to content

Latest commit

 

History

History
115 lines (102 loc) · 5.04 KB

README-CMAKE.md

File metadata and controls

115 lines (102 loc) · 5.04 KB

Instructions for building GTFold with cmake (MacOS and Unix)

The cmake utility simplifies the build process for GTFold which originally used a Makefile generated by running the configure script and autotools. The core of the cmake-based build process is found in the CMakeLists.txt configuration file in the base directory. This script will build all of the utilities using g++ in the gtfold-mfe directory, e.g., the following command line applications: gtmfe, gtboltzmann, and gtsubopt. Documentation for the usage and parameters to each of these programs is found here.

Prerequisite: Installing cmake dependencies

On MacOS (tested on 10.14/Mojave)

Using the Homebrew package manager, run the following command:

$ brew install llvm@11 libomp cmake

If any of the above commands fail due to an existing installation of the package, try running the following command instead:

$ brew upgrade llvm libomp cmake

The versions of the brew packages used for testing are libomp (11.0.1) and cmake (3.19.4). The llvm package (llvm: stable 11.1.0 (bottled)) installs a more recent version of the clang compiler toolchain than ships with current MacOS builds. It is necessary to upgrade because the default gcc (symlinked to a dated clang binary by default) on Mojave/10.14 is not modern enough to support the C++ standards we require for the GTFold build process.

On recent Debian Linux variants (including Ubuntu)

Run the following commands to install compiler tools and the cmake utility:

$ sudo apt-get update && sudo apt-get upgrade
$ sudo apt-get install build-essential cmake

Building GTFold (MFE)

Run the following command at your terminal of choice:

$ git clone https://github.com/gtDMMB/gtfold.git
$ cd gtfold
$ rm -rf CMakeFiles/
(On MacOS -- MacOS/10.14/Mojave Office Box)
$ cmake . -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER="/usr/local/opt/llvm/bin/clang" \
     -DCMAKE_CXX_COMPILER="/usr/local/opt/llvm/bin/clang++" \
     -DCMAKE_C_LINK_EXECUTABLE="/usr/local/opt/llvm/bin/ld.lld" \
     -DMACOS_OFFICE_BOX=1
(On MacOS -- MacOS/10.14/Mojave Mini Desktop Box)
$ cmake . -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER="/usr/local/opt/llvm/bin/clang" \
     -DCMAKE_CXX_COMPILER="/usr/local/opt/llvm/bin/clang++" \
     -DCMAKE_C_LINK_EXECUTABLE="/usr/local/opt/llvm/bin/ld.lld" \
     -DMAC_ISYSROOT_PATH="/Library/Developer/CommandLineTools/SDKs/MacOSX10.14.sdk/usr" 
(On Linux/Unix)
$ cmake . -DCMAKE_BUILD_TYPE=Release -DLINUX_GCC=1
$ make clean && make VERBOSE=1

Notice that we have maintained three CMakeLists.txt files for compilation on two variants of patched MacOS 10.14/Mojave machines (using clang/clang++), and one using the gcc/g++ for Linux and other Unix like system variants. The g++ compiler toolchain is more standard on Linux. Using clang++ installed with the Homebrew llvm package is easier on current MacOS/10.14/Mojave builds. Because of subtle differences in XCode and/or CommandLineTools versions on different Mojave boxes, we have included two separate MacOS configurations that are used with cmake. If one does not work, we recommend trying the other variant before posting a new issue about cmake related build failures.

Developers: Cleaning the CMake generated files

Run the following command first if the CMakeLists.txt file has changed since the last build/re-compile of GTFold:

$ rm -rf CMakeCache.txt Makefile cmake_install.cmake CMakeFiles/

Installing the binaries system wide

Run the following commands to put the newly built GTFold executables in the system path (from within the base gtfold/ directory):

$ sudo cp gtfold gtmfe gtboltzmann gtsubopt /usr/local/bin
$ sudo chmod 0644 /usr/local/bin/{gtfold,gtmfe,gtboltzmann,gtsubopt}

Alternately, you can configure your local (bash) shell to alias these commands so that the binaries invoked by running the associated command name are linked at the current working directory, e.g., so that running $ gtmfe [options] at the command line works directly regardless of the actual directory you are located in at runtime.

(On MacOS):

$ export gtfoldCwd="$(greadlink -f .)"
$ echo "alias gtfold='$gtfoldCwd/bin/gtfold'" >> ~/.bash_profile
$ echo "alias gtmfe='$gtfoldCwd/bin/gtmfe'" >> ~/.bash_profile
$ echo "alias gtboltzmann='$gtfoldCwd/bin/gtboltzmann'" >> ~/.bash_profile
$ echo "alias gtsubopt='$gtfoldCwd/bin/gtsubopt'" >> ~/.bash_profile
$ source ~/.bash_profile

Note that if greadlink is not found, you can install it using brew by running

$ brew install greadlink

(On Linux/Unix):

$ export gtfoldCwd="$(readlink -f .)"
$ echo "alias gtfold='$gtfoldCwd/bin/gtfold'" >> ~/.bashrc
$ echo "alias gtmfe='$gtfoldCwd/bin/gtmfe'" >> ~/.bashrc
$ echo "alias gtboltzmann='$gtfoldCwd/bin/gtboltzmann'" >> ~/.bashrc
$ echo "alias gtsubopt='$gtfoldCwd/bin/gtsubopt'" >> ~/.bashrc
$ source ~/.bashrc