--- /dev/null
+++ a/BUILD.bazel
@@ -0,0 +1,93 @@
+load("@bazel_skylib//rules:copy_file.bzl", "copy_file")
+load("@bazel_skylib//rules:write_file.bzl", "write_file")
+load("@rules_cc//cc:cc_binary.bzl", "cc_binary")
+load("@rules_java//java:java_library.bzl", "java_library")
+
+copy_file(
+    name = "copy_link_jni_md_header",
+    src = 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",
+    }),
+    out = "jni_md.h",
+    allow_symlink = True,
+)
+
+copy_file(
+    name = "copy_link_jni_header",
+    src = "@bazel_tools//tools/jdk:jni_header",
+    out = "jni.h",
+    allow_symlink = True,
+)
+
+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": [],
+    }),
+)
+
+
+write_file(
+    name = "version-java",
+    out = "ZstdVersion.java",
+    content = [
+        "package com.github.luben.zstd.util;",
+        "",
+        "public class ZstdVersion {",
+        "\tpublic static final String VERSION = \"1.5.6-9\";",
+        "}",
+        "",
+    ],
+    newline = "unix",
+)
+
+java_library(
+    name = "zstd-jni",
+    srcs = glob([
+        "src/main/java/**/*.java",
+    ]) + [
+        ":version-java",
+    ],
+    resources = [":libzstd-jni.so"],
+    visibility = [
+        "//visibility:public",
+    ],
+)
