--- /dev/null
+++ a/BUILD.bazel
@@ -0,0 +1,82 @@
+genrule(
+    name = "copy_link_jni_md_header",
+    srcs = select({
+        "@bazel_tools//src/conditions:darwin": ["@bazel_tools//tools/jdk:jni_md_header-darwin"],
+        "@bazel_tools//src/conditions:freebsd": ["@bazel_tools//tools/jdk:jni_md_header-freebsd"],
+        "@bazel_tools//src/conditions:openbsd": ["@bazel_tools//tools/jdk:jni_md_header-openbsd"],
+        "@bazel_tools//src/conditions:windows": ["@bazel_tools//tools/jdk:jni_md_header-windows"],
+        "//conditions:default": ["@bazel_tools//tools/jdk:jni_md_header-linux"],
+    }),
+    outs = ["jni_md.h"],
+    cmd = "cp -f $< $@",
+)
+
+genrule(
+    name = "copy_link_jni_header",
+    srcs = ["@bazel_tools//tools/jdk:jni_header"],
+    outs = ["jni.h"],
+    cmd = "cp -f $< $@",
+)
+
+cc_binary(
+    name = "libzstd-jni.so",
+    srcs = glob([
+        "src/main/native/**/*.c",
+        "src/main/native/**/*.h",
+    ]) + [
+        ":jni_md.h",
+        ":jni.h",
+    ] + select({
+        "@bazel_tools//src/conditions:windows": [],
+        "//conditions:default": glob(["src/main/native/**/*.S"]),
+    }),
+    copts = select({
+        "@bazel_tools//src/conditions:windows": [],
+        "@bazel_tools//src/conditions:darwin": [
+            "-std=c99",
+            "-Wno-unused-variable",
+            "-Wno-sometimes-uninitialized",
+        ],
+        "//conditions:default": [
+            "-std=c99",
+            "-Wno-unused-variable",
+            "-Wno-maybe-uninitialized",
+            "-Wno-sometimes-uninitialized",
+        ]
+    }),
+    linkshared = 1,
+    includes = [
+        ".",  # For jni headers.
+        "src/main/native",
+        "src/main/native/common",
+    ],
+    local_defines = [
+        "ZSTD_LEGACY_SUPPORT=4",
+        "ZSTD_MULTITHREAD=1",
+    ] + select({
+        "@bazel_tools//src/conditions:windows": ["_JNI_IMPLEMENTATION_"],
+        "//conditions:default": [],
+    }),
+)
+
+
+genrule(
+    name = "version-java",
+    cmd_bash = 'echo "package com.github.luben.zstd.util;\n\npublic class ZstdVersion {\n\tpublic static final String VERSION = \\"$$(cat $<)\\";\n}" > $@',
+    cmd_ps = '$$PSDefaultParameterValues.Remove("*:Encoding"); $$version = (Get-Content $<) -join ""; Set-Content -NoNewline -Path $@ -Value "package com.github.luben.zstd.util;\n\npublic class ZstdVersion {\n\tpublic static final String VERSION = `"$${version}`";\n}\n"',
+    srcs = ["version"],
+    outs = ["ZstdVersion.java"],
+)
+
+java_library(
+    name = "zstd-jni",
+    srcs = glob([
+        "src/main/java/**/*.java",
+    ]) + [
+        ":version-java",
+    ],
+    resources = [":libzstd-jni.so"],
+    visibility = [
+        "//visibility:public",
+    ],
+)
