Limbo
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Limbo Library for VLSI CAD Design

Table of Contents

All components are written with C/C++ and API is designed for easy usage and simple embedding. Please read this Readme file carefully for proper instructions to install and customize.

See documentation.


Packages

Packages Languages Description
Algorithms C++ Useful algorithms including partitioning, coloring, etc.
Bibtex Python Scripts convert bibtex into various formats
Containers C++ Extension of contains from STL
Geometry C++ Geometric utilities and algorithms such as polygon-to-rectangle conversion
MakeUtils Makefile Makefile utilities that help find dependencies
Math C++ Extension of math functions from STL
Parsers C++, Flex/Bison Parsers to various formats, such as LEF/DEF, verilog, GDSII, etc.
Preprocessor C++ Macros such as assertion with message
ProgramOptions C++ Easy API to parser command line options
Solvers C++ Solver wrap-ups such as SDP, LP solver with min-cost flow, etc.
String C++ Utilities to char and string
ThirdParty C/C++, Fortran Third party packages required

Developers

Introduction

1. Flex

2. Bison

3. (Deprecated) Boost.Spirit

4. LL Parser

5. LR Parser

6. LL v.s. LR

7. LP and Min-Cost Flow

Bug Report

Please report bugs to yibolin at utexas dot edu.

Installation

Some components depend on external libraries, such as

Users need to make sure they are properly installed and the corresponding settings are configured.

1. Default installation

The default installation path is the same as building path. Please do not set PREFIX with a relative path. After installation, it is strongly recommended to export LIMBO_DIR to the path where Limbo library is installed as an environment variable.

2. Customize CXX, CC and FC options

3. Customize CXXSTDLIB and CXXSTD options

Under clang, following combinations are valid,

make CXXSTDLIB="-stdlib=libstdc++" CXXSTD="-std=c++98" (default)
make CXXSTDLIB="-stdlib=libc++" CXXSTD="-std=c++98"
make CXXSTDLIB="-stdlib=libc++" CXXSTD="-std=c++11"

Under gcc, there is no -stdlib option, so following combinations are valid,

make CXXSTD="-std=c++98" (default)
make CXXSTD="-std=c++11"

Users must make sure the setting is consistent to dependent libraries during compilation, such as Boost, Lemon, etc. For example, if Boost is compiled with "clang++ -stdlib=libstdc++ -std=c++98", the same setting should be used for components dependent to Boost.

4. Customize OPENBLAS options

If you do not need these packages, set OPENBLAS=0 (default); otherwise, set OPENBLAS=1. The default version of OpenBLAS is not very stable for cross platforms, which often results in compiling errors. OpenBLAS is integrated as a submodule which fetch source code from remote repository, so it is always up-to-date version. If you already have OpenBLAS in the directory, simply run "git submodule update" to fetch the latest version in the submodule directory.

FAQ

1. (Deprecated) Compiling errors like

LefScanner.cc:5582:21: error: out-of-line definition of 'LexerInput' does not match any declaration in 'LefParserFlexLexer'
                        size_t yyFlexLexer::LexerInput( char* buf, size_t max_size )

come from old versions of flex, such as 2.5.35.

A: It can be solved by installing correct flex version 2.5.37 and add the directory to correct flex to PATH environment variable.

2. (Deprecated) Compiling errors like

LefScanner.cc:3195:8: error: member reference type 'std::istream *' (aka 'basic_istream<char> *') is a pointer; did you mean to use '->'?
                        yyin.rdbuf(std::cin.rdbuf());

come from new versions of flex, such as 2.6.0.

A: It can be solved by installing correct flex version 2.5.37 and add the directory to correct flex to PATH environment variable.

3. Compiling errors related to LefScanner.cc usually come from the configurations of flex version and environment variables FLEX_DIR and LEX_INCLUDE_DIR.

A: LefScanner.cc needs to include the correct FlexLexer.h from the flex package for compilation; i.e., the version of FlexLexer.h must match the version of the flex executable. Most errors for LefScanner.cc are caused by the failure of finding the correct FlexLexer.h (be careful when you have multiple versions of flex installed). To solve the problem, users can set the environment variable FLEX_DIR such that $FLEX_DIR/include points to the directory containing FlexLexer.h, or alternatively set LEX_INCLUDE_DIR to the directory containing FlexLexer.h. The decision can be made according to how the flex package is installed.

4. Crappy linkage error under gcc 5.1 or later, even though libxxx.a is correctly linked, like

undefined reference to `GdsParser::read(GdsParser::GdsDataBaseKernel&, std::string const&)'

A: The issue probably comes from potential inconsistent compiling configuration for Limbo and target program due to the new Dual ABI introduced since gcc 5.1. The compilation flag _GLIBCXX_USE_CXX11_ABI is used to control whether gcc uses new C++11 ABI, which is turned on in default. If Limbo is compiled with C++11 ABI, while target program is compiled with old ABI, then the linkage error appears, vice versa. Therefore, it is necessary to make sure the same STL ABI is used for compiling Limbo and target program. In other words, set consistent _GLIBCXX_USE_CXX11_ABI values. A safe way is to leave it to the default value.

Copyright

The software is released under MIT license except third party packages. Please see the LICENSE file for details.

Third party package c-thread-pool is released under MIT license.

Third party package csdp is released under CPL v1.0 license.

Third party package OpenBLAS has its copyright reserved; please check its license.

Tutorial

Some components in limbo library do not need linkage, so they can be used directly by including the headers, while some components require linkage to the corresponding static libraries. Here are some simple example to show the basic usage and compiling commands with gcc under Linux. For clang, the compiling commands are slightly different as users need to specify the same **-stdlib** as that in CXXSTDLIB flag used to install the library. See pages of each package for examples.

LICENSE

The MIT License (MIT)
Copyright (c) 2016 Yibo Lin <yibolin@utexas.edu>, University of Texas at Austin
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.