digraph java { //rankdir="LR"; //splines="false"; //cluster=true; //node [ ordering="in" ]; node [ shape="rect" style="rounded" color="blue" ]; { rank="same"; lib_java_sources [ label="library\njava sources" group="lib" ]; lib2_java_sources [ label="library\njava sources" group="lib2" ]; app_java_sources [ label="app\njava sources" group="app" ]; } node [ group="lib"]; { rank="same"; lib_java_classes [ label="library java\n.class files" ]; lib_java_headers [ label="library java\nheader .class files" ]; } node [ group="lib2"]; { rank="same"; lib_spacer [ style=invis width=4 ]; lib2_java_classes [ label="library java\n.class files" ]; lib2_java_headers [ label="library java\nheader .class files" ]; } { rank="same"; lib2_combined_classes [ label="combined library\n.class files" ]; lib2_combined_headers [ label="combined library\nheader .class files" ]; } node [ group="app"]; { rank="same"; lib2_spacer [ style=invis width=4 ]; app_java_classes [ label="app java\n.class files" ]; } { rank="same"; app_combined_classes [ label="combined app and library\n.class files" ]; } { rank="same"; app_dex [ label="app classes.dex files" ]; } node [ shape="rect" style="" color="black" ]; node [ group="lib"]; { rank="same"; lib_turbine_action [ label="turbine" ]; lib_javac_action [ label="javac" ]; } node [ group="lib2"]; { rank="same"; lib2_turbine_action [ label="turbine" ]; lib2_javac_action [ label="javac" ]; } { rank="same"; lib2_combine_action [ label="merge_zips" ]; lib2_combine_headers_action [ label="merge_zips" ]; } node [ group="app"]; { rank="same"; app_javac_action [ label="javac" ]; } { rank="same"; app_combine_action [ label="merge_zips" ]; } { rank="same"; app_r8_action [ label="r8" ]; } // library lib_java_sources -> lib_turbine_action [ weight=100 ]; lib_turbine_action -> lib_java_headers [ weight=100 ]; lib_java_sources -> lib_javac_action [ weight=1000 ]; lib_javac_action -> lib_java_classes [ weight=100 ]; lib_java_headers -> lib_spacer [ style=invis ]; // library 2 lib_java_headers -> lib2_turbine_action [ weight=0 ]; lib2_java_sources -> lib2_turbine_action [ weight=100 ]; lib2_turbine_action -> lib2_java_headers [ weight=100 ]; lib_java_headers -> lib2_javac_action [ weight=0 ]; lib2_java_sources -> lib2_javac_action [ weight=1000 ]; lib2_javac_action ->lib2_java_classes [ weight=100 ]; lib_java_classes -> lib2_combine_action [ weight=0 ]; lib2_java_classes -> lib2_combine_action [ weight=100 ]; lib2_combine_action -> lib2_combined_classes [ weight=100 ]; lib_java_headers -> lib2_combine_headers_action [ weight=0 ]; lib2_java_headers -> lib2_combine_headers_action [ weight=100 ]; lib2_combine_headers_action -> lib2_combined_headers [ weight=100 ]; lib2_combined_headers -> lib2_spacer [ style=invis ]; // app lib2_combined_headers -> app_javac_action [ weight=0 ]; app_java_sources -> app_javac_action [ weight=1000 ]; app_javac_action -> app_java_classes [ weight=100 ]; lib2_combined_classes -> app_combine_action [ weight=0 ]; app_java_classes -> app_combine_action [ weight=100 ]; app_combine_action -> app_combined_classes [ weight=100 ]; app_combined_classes -> app_r8_action; app_r8_action -> app_dex [ weight=100 ]; }