// C++: royalblue // Python: gold // Java: crimson // .Net: darkviolet @startdot digraph CMake { //rankdir=BT; rankdir=TD; subgraph clusterPrerequisite { node [shape=box3d, style=filled, color=black]; CM [label="CMake", fillcolor=royalblue]; SWIG [label="Swig\n(Unix)", fillcolor=chocolate]; PY [label="Python\n(3.6+)", fillcolor=gold]; JV [label="Java\n(openJDK 8+)", fillcolor=crimson]; DN [label=".Net Core SDK\n(3.1)", fillcolor=darkviolet]; FS [label=".Net F#", fillcolor=darkviolet]; CM -> SWIG [arrowhead=none, style=invisible]; SWIG -> PY [arrowhead=none, style=invisible]; SWIG -> JV [arrowhead=none, style=invisible]; SWIG -> DN [arrowhead=none, style=invisible]; DN -> FS [arrowhead=none, style=invisible]; label = "Prerequisite"; } subgraph clusterOR { node [shape=box, style="rounded,filled", color=black, fillcolor=royalblue]; subgraph clusterDeps { subgraph clusterZLIB { ZLIB [label="ZLIB::ZLIB", color=royalblue]; color=royalblue; label = "madler/zlib.git + cmake patch"; } subgraph clusterAbsl { Absl [label="absl::absl_*", color=royalblue]; color=royalblue; label = "abseil/abseil-cpp.git"; } subgraph clusterGFlags { GFlags [label="gflags::gflags", color=royalblue]; color=royalblue; label = "gflags/gflags.git"; } subgraph clusterGLog { GLog [label="glog::glog", color=royalblue]; color=royalblue; label = "google/glog.git"; } GFlags -> GLog; subgraph clusterProtobuf { Protobuf [label="protobuf::libprotobuf", color=royalblue]; color=royalblue; label = "protocolbuffers/protobuf.git"; } ZLIB -> Protobuf; Absl -> Protobuf; subgraph clusterCoinOR { subgraph clusterCoinUtils { CoinUtils [label="Coin::CoinUtils", color=royalblue]; color=royalblue; label = "mizux/CoinUtils.git"; } subgraph clusterOsi { Osi [label="Coin::Osi", color=royalblue]; color=royalblue; label = "mizux/Osi.git"; } subgraph clusterClp { Clp [label="Coin::Clp", color=royalblue]; OsiClp [label="Coin::OsiClp", color=royalblue]; ClpSolver [label="Coin::ClpSolver", color=royalblue]; color=royalblue; label = "mizux/Clp.git"; } subgraph clusterCgl { Cgl [label="Coin::Cgl", color=royalblue]; color=royalblue; label = "mizux/Cgl.git"; } subgraph clusterCbc { Cbc [label="Coin::Cbc", color=royalblue]; OsiCbc [label="Coin::OsiCbc", color=royalblue]; CbcSolver [label="Coin::CbcSolver", color=royalblue]; color=royalblue; label = "mizux/Cbc.git"; } CoinUtils -> Osi; CoinUtils -> Clp; Osi -> Clp; CoinUtils -> OsiClp; Osi -> OsiClp; Clp -> OsiClp; Clp -> ClpSolver; CoinUtils -> Cgl; Osi -> Cgl; OsiClp -> Cgl; CoinUtils -> Cbc; Osi -> Cbc; Clp -> Cbc; Cgl -> Cbc; CoinUtils -> OsiCbc; Osi -> OsiCbc; Cbc -> OsiCbc; Cbc -> CbcSolver; color=royalblue; label = "Coin-OR Solver\n(-DUSE_COINOR=ON)"; } SWIG_WIN [label="swigwin\n(Windows)", color=chocolate]; // Intra deps //ZLIB -> Protobuf; //ZLIB -> Cbc; //Absl -> Protobuf; //GFlags -> GLog; color=grey; label = "Dependencies\n(-DBUILD_DEPS=ON)"; } // clusterDeps subgraph clusterCXX { node [shape=box, style="rounded,filled", color=black, fillcolor=royalblue]; OR_SRC [label="OR-Tools src\nortools/...", shape=folder]; OR_CPP [label="ortools::ortools"]; PKG_CPP [label="CMake Package", shape=box3d]; subgraph clusterCXXTest { EX_CPP [label="C++ samples"]; label = "Examples\n(-DBUILD_TESTING=ON)"; } PKG_CPP -> EX_CPP; ZLIB -> OR_SRC; Absl -> OR_SRC; Protobuf -> OR_SRC; GFlags -> OR_SRC; GLog -> OR_SRC; ClpSolver -> OR_SRC; CbcSolver -> OR_SRC; // rendering hack //OsiCbc -> OR_SRC [arrowhead=none, style=invisible]; OR_SRC -> OR_CPP; OR_CPP -> PKG_CPP [label="install", color=royalblue]; color=royalblue; label = "C++\n(-DBUILD_CXX=ON)"; } // clusterCXX subgraph clusterPython { node [shape=box, style="rounded,filled", color=black, fillcolor=gold]; OR_WPY [label="C++ Python wrappers", shape=note]; OR_PY [label="Python files", shape=note]; PKG_PY [label="Wheel package", shape=box3d]; subgraph clusterPythonTest { EX_PY [label="Python samples"]; label = "Examples\n(-DBUILD_TESTING=ON)"; } PKG_PY -> EX_PY; OR_SRC -> OR_WPY [label="swig", color=chocolate]; OR_SRC -> OR_PY [label="swig", color=chocolate]; OR_WPY -> OR_PY; OR_PY -> PKG_PY [label="python setup.py", color=gold]; color=gold; label = "Python\n(-DBUILD_PYTHON=ON)"; } // clusterPython subgraph clusterJava { node [shape=box, style="rounded,filled", color=black, fillcolor=crimson]; OR_WJAVA [label="C++ Java wrappers", shape=note]; OR_JAVA [label="Java files", shape=note]; PKG_JAVA [label="Maven package", shape=box3d]; subgraph clusterJavaTest { EX_JAVA [label="Java samples"]; label = "Examples\n(-DBUILD_TESTING=ON)"; } PKG_JAVA -> EX_JAVA; OR_SRC -> OR_WJAVA [label="swig", color=chocolate]; OR_SRC -> OR_JAVA [label="swig", color=chocolate]; OR_WJAVA -> OR_JAVA; OR_JAVA -> PKG_JAVA [label="maven (WIP)", style="dotted", color=crimson]; color=crimson; label = "Java\n(-DBUILD_JAVA=ON)"; } // clusterJava subgraph clusterNet { node [shape=box, style="rounded,filled", color=black, fillcolor=darkviolet]; OR_WNET [label="C++ .Net wrappers", shape=note]; OR_NET [label=".Net files", shape=note]; PKG_NET_RT [label="Nuget runtime package\nGoogle.OrTools.runtime.rid.nupkg", shape=box3d]; PKG_NET [label="Nuget package\nGoogle.OrTools.nupkg", shape=box3d]; subgraph clusterNetTest { EX_NET [label=".Net samples"]; label = "Examples\n(-DBUILD_TESTING=ON)"; } PKG_NET -> EX_NET; OR_SRC -> OR_WNET [label="swig", color=chocolate]; OR_SRC -> OR_NET [label="swig", color=chocolate]; OR_WNET -> OR_NET; OR_WNET -> PKG_NET_RT [label="dotnet package", color=darkviolet]; PKG_NET_RT -> PKG_NET [color=darkviolet]; OR_NET -> PKG_NET [label="dotnet package", color=darkviolet]; color=darkviolet; label = ".Net\n(-DBUILD_DOTNET=ON)"; } // clusterNet color=royalblue; label = "OR-Tools (CMake)"; } // clusterOR } // digraph @enddot // vim tw:0