The gcc compiler option -fcallgraph-info generates a ci callgraph file
which is a simple vcg graph file usable with gml4gtk program

The ollygraph repo has a 32bits qt4 wingraph.exe binary and only the qt4 dll's are needed at
https://github.com/janbbeck/ollytracegraph
This does run with wine on Linux and virustotal does not show a sign of a virus

For the vcg graph data there is a windows 32bits wingraph32.exe program here: wingraph32.exe

Or as zip file with the source included is here in wingraph32.zip

The GNU GPL Free source of wingraph is here: wingraph32_src.zip

And wingraph32.exe works on Linux using wine without problems.

Or qwingraph with a qt5 gui 64bits ready compiled for Linux with source here in qwingraph-linux-qt5-64bits.tar.gz

Or for mac, Linux, windows the qwingraph32 source to compile is here in qwingraph_qt5-master.tar.gz

The page with the vcg manual is here: vcg language

The newest GNU GCC compiler can generate callgraph data using -fcallgraph-info and the resulting *.ci file is a vcg graph file which can be used with gml4gtk or wingraph:

-fcallgraph-info
-fcallgraph-info=MARKERS

    Makes the compiler output callgraph information for the program, on a per-object-file basis. The information is generated in the common VCG format. It can be decorated with additional, per-node and/or per-edge information, if a list of comma-separated markers is additionally specified. When the su marker is specified, the callgraph is decorated with stack usage information; it is equivalent to -fstack-usage. When the da marker is specified, the callgraph is decorated with information about dynamically allocated objects.

    When compiling with -flto, no callgraph information is output along with the object file. At LTO link time, -fcallgraph-info may generate multiple callgraph information files next to intermediate LTO output files.


wingraph32

And here is a perl script to convert vcg to graphviz dot format and it needs to be improved but it is a start:

#!/usr/bin/perl

use strict;

my $FILE1 = $ARGV[0];
open(OUTFILE, ">".$FILE1.".dot") or die "File doesn't exist\n";
my $indata = `cat $FILE1`;
my @split = split(/node:/, $indata);
my $graphname = shift @split;
$graphname =~ s/^.*title:[^"]*"([^"]*)".*$/$1/s;
print OUTFILE "digraph \"$graphname\" {\n";
print OUTFILE "\tgraph [\n";
print OUTFILE "\t]\n";
print OUTFILE "\tnode [\n";
print OUTFILE "\t\tshape = \"box\"\n";
print OUTFILE "\t]\n";
print OUTFILE "\tedge [\n";
print OUTFILE "\t]\n";

# convert nodes
foreach my $n (@split) {
$n =~ s/}.*$//s;
my $label = my $title = $n;
$title =~ s/^.*title:[^"]*"([^"]*)".*$/$1/s;
$label =~ s/^.*label:[^"]*"([^"]*)".*$/$1/s;
$label =~ s/\n/\\n/sg;
print OUTFILE "\t\"$title\" [\n";
print OUTFILE "\t\tlabel = \"$label\"\n";
print OUTFILE "\t];\n";
}

@split = split(/edge:/, $indata);
shift @split;

# convert edges
foreach my $e (@split) {
$e =~ s/}.*$//s;
my $color = my $label = my $source = my $target = $e;
$source =~ s/^.*sourcename:[^"]*"([^"]*)".*$/$1/s;
$target =~ s/^.*targetname:[^"]*"([^"]*)".*$/$1/s;
print OUTFILE "\t\"$source\" -> \"$target\" [\n";
if ($label =~ s/^.*label:[^"]*"([^"]*)".*$/$1/s) {
$label =~ s/\n/\\n/sg;
print OUTFILE "\t\tlabel = \"$label\"\n";
}
if ($color =~ s/^.*color:[[:space:]]*([^ ]*)[[:space:]}].*$/$1/s) {
print OUTFILE "\t\tcolor = $color\n";
}
print OUTFILE "\t];\n";
}
print OUTFILE "}\n"


This is vcg graph data generated with GNU GCC using option -fcallgraph-info


    graph: { title: "src/vcgus.c"
    node: { title: "vcg_clear_uniqstr" label: "vcg_clear_uniqstr\nsrc/vcgus.c:57:6\n16 bytes (static)\n0 dynamic objects" }
    node: { title: "splay_tree_delete" label: "splay_tree_delete\nsrc/splay-tree.h:93:19" shape : ellipse }
    edge: { sourcename: "vcg_clear_uniqstr" targetname: "splay_tree_delete" label: "src/vcgus.c:59:22" }
    node: { title: "vcg_uniqstr" label: "vcg_uniqstr\nsrc/vcgus.c:63:7\n48 bytes (static)\n0 dynamic objects" }
    node: { title: "splay_tree_lookup" label: "splay_tree_lookup\nsrc/splay-tree.h:97:24" shape : ellipse }
    edge: { sourcename: "vcg_uniqstr" targetname: "splay_tree_lookup" label: "src/vcgus.c:73:8" }
    node: { title: "splay_tree_new" label: "splay_tree_new\nsrc/splay-tree.h:92:19" shape : ellipse }
    edge: { sourcename: "vcg_uniqstr" targetname: "splay_tree_new" label: "src/vcgus.c:78:23" }
    node: { title: "strlen" label: "strlen\n/usr/include/string.h:384:15" shape : ellipse }
    edge: { sourcename: "vcg_uniqstr" targetname: "strlen" label: "src/vcgus.c:80:17" }
    node: { title: "calloc" label: "calloc\n/usr/include/stdlib.h:541:14" shape : ellipse }
    edge: { sourcename: "vcg_uniqstr" targetname: "calloc" label: "src/vcgus.c:80:6" }
    node: { title: "strcpy" label: "strcpy\n/usr/include/string.h:121:14" shape : ellipse }
    edge: { sourcename: "vcg_uniqstr" targetname: "strcpy" label: "src/vcgus.c:84:2" }
    node: { title: "splay_tree_insert" label: "splay_tree_insert\nsrc/splay-tree.h:94:13" shape : ellipse }
    edge: { sourcename: "vcg_uniqstr" targetname: "splay_tree_insert" label: "src/vcgus.c:85:2" }
    }



    


Here is a page with the available vcg colors at vcgcolors

There is also a non-free java tool called ycomp for vcg data