An open multiple patterning framework
Clone or download
Failed to load latest commit information.
bin OpenMPL Aug 28, 2018
src OpenMPL Aug 28, 2018
test/regr prepare for regression Oct 9, 2015
.DS_Store OpenMPL Aug 28, 2018
.gitignore wrap up binary and send to ASML Feb 3, 2016
LICENSE Initial commit Aug 23, 2018 replace "no stitching" with "stitching" in readme Oct 2, 2018 OpenMPL Aug 28, 2018 OpenMPL Aug 28, 2018


OpenMPL stands for open multiple patterning lithography framework.


  • Limbo: require LIMBO_DIR environment variable to the path where Limbo is installed. OpenMPL is based on Limbo library.

How To Compile

$ git clone
$ cd OpenMPL/src/mpl/
$ make

Here are some optional parameters when make :

# default DBG (debug) is off
DBG = 0
# default GPROF is off, used to enable runtime profiling
# default GUROBI is off 
# default LEMONCBC is off 
# default CSDP is off 
CSDP = 0


  • Contact or metal layer decomposition
  • Stitching
  • Support 3 or 4 coloring
  • Density control
  • Multi-threading
  • Small memory usage
  • Multiple algorithms: ILP (Gurobi or Lemon CBC), SDP (Csdp API), LP (Gurobi API)
  • Dancing Links

The Csdp API used in OpenMPL has been modified and built for threading safety at high level.

How To Execute

$ cd bin/
$ ./OpenMPL

A table of options :

-help (false)                toggle printing help message
-in                          input gds file name
-out ()                      output gds file name
-coloring_distance (0)       a floating point number indicating number of coloring distance in nanometer
-color_num                   an integer indicating number of masks (colors) < 3|4 >
-simplify_level (3)          an integer indicating graph simplification level < 0|1|2|3 >
-thread_num (1)              an integer indicating maximum thread number
-path_layer                  an integer indicating layer for conflict edges
-precolor_layer              an integer indicating layer for pre-colored patterns
-uncolor_layer               an integer indicating layer for coloring
-algo (BACKTRACK)            algorithm type < ILP|BACKTRACK|LP|SDP >
-shape (RECTANGLE)           shape mode < RECTANGLE|POLYGON >
-verbose (false)             toggle controling screen messages
-dbg_comp_id (4294967295)    debug component id

Now Dancing Links is an independent component, and the source code is in /src/dlx. One example is in DL_main.cpp.

One exmaple : /bin/


  • BSD-3-clause License [LINK]


Name Affiliation email
Yibo Lin ECE Dept, UT Austin
Bei Yu CSE Dept, CUHK
Qi Sun CSE Dept, CUHK
David Z. Pan ECE Dept, UT Austin