diff --git a/openpower/scripts/op-target-dependencies b/openpower/scripts/op-target-dependencies
new file mode 100755
index 0000000..cd24a56
--- /dev/null
+++ b/openpower/scripts/op-target-dependencies
@@ -0,0 +1,87 @@
+#!/usr/bin/env perl
+
+use strict;
+my %seen = ();
+
+# Generate dependency list for all 'priority' targets.  These are targets a
+# user is likely to build.
+my @priority_targets = ( "openpower-pnor" );
+foreach my $target (@priority_targets)
+{
+    next if $seen{$target};
+
+    print "$target\n";
+    $seen{$target} = 1;
+    package_deps($target, 0);
+}
+
+# Generate dependency list for all other targets.
+packages();
+
+# @sub packages
+# @brief Determine all the packages that can be built.
+#
+# Skip host-* (uninteresting) and target-* (buildroot special) packages.
+sub packages
+{
+    open TARGETS, "make --directory=`pwd`/buildroot O=`pwd`/output ".
+                  "show-targets | sed 's/^make:.*//' |";
+
+    while (my $line = <TARGETS>)
+    {
+        chomp $line;
+        next if ($line eq "");
+
+        my @targets = split / /,$line;
+        foreach (@targets)
+        {
+            next if ($seen{$_});
+            next if ($_ =~ m/^host-/);
+            next if ($_ =~ m/^target-/);
+
+            print $_."\n";
+            $seen{$_} = 1;
+            package_deps($_, 0);
+        }
+    }
+
+    close TARGETS
+
+}
+
+# @sub package_deps
+# @brief Collect children dependencies for a package.
+sub package_deps
+{
+    my $package = shift;
+    my $level = shift;
+
+    $package =~ s/-install-images//;    # Strip off -install-images subpass.
+    $package =~ s/-rebuild.*//;         # Strip off -rebuild* subpass.
+    $package =~ s/linux[0-9]*/linux/;   # Strip off linux version.
+
+    open DEPENDS, "make --directory=`pwd`/buildroot O=`pwd`/output ".
+                  "$package-show-depends | sed 's/^make:.*//' |";
+
+    while (my $line = <DEPENDS>)
+    {
+        chomp $line;
+        next if ($line eq "");
+
+        my @depends = split / /,$line;
+        foreach my $depend (@depends)
+        {
+            foreach (0..$level)
+            {
+                print "  ";
+            }
+            print $depend."\n";
+
+            next if ($seen{$depend});
+            $seen{$depend} = 1;
+            package_deps($depend, $level+1);
+        }
+    }
+
+    close DEPENDS;
+}
