Match bazel's semantics for genrule cmd
diff --git a/demo/BUCK b/demo/BUCK
index 78e75e6..eebe5c2 100644
--- a/demo/BUCK
+++ b/demo/BUCK
@@ -1,3 +1,5 @@
+load("//tools/buck:genrule.bzl", "genrule")
+
 rust_binary(
     name = "demo",
     srcs = glob(["src/**/*.rs"]),
diff --git a/tests/BUCK b/tests/BUCK
index a96bfb8..79ae790 100644
--- a/tests/BUCK
+++ b/tests/BUCK
@@ -1,3 +1,5 @@
+load("//tools/buck:genrule.bzl", "genrule")
+
 rust_test(
     name = "test",
     srcs = ["test.rs"],
diff --git a/tools/buck/genrule.bzl b/tools/buck/genrule.bzl
new file mode 100644
index 0000000..b5364b7
--- /dev/null
+++ b/tools/buck/genrule.bzl
@@ -0,0 +1,8 @@
+def genrule(cmd, **kwargs):
+    # Resolve a distracting inconsistency between Buck and Bazel.
+    # Bazel creates the directory for your output file, while Buck expects the
+    # cmd to create it.
+    #
+    # TODO: send this as a PR to Buck, because Bazel's behavior here is better.
+    cmd = "mkdir -p `dirname ${OUT}`; " + cmd
+    native.genrule(cmd = cmd, **kwargs)