Initial commit
diff --git a/BUILD b/BUILD
new file mode 100644
index 0000000..4e03973
--- /dev/null
+++ b/BUILD
@@ -0,0 +1,137 @@
+load(
+    "@protobuf//:protobuf.bzl",
+    "cc_proto_library",
+)
+
+cc_library(
+    name = "protocol",
+    srcs = ["protocol.cc"],
+    hdrs = ["protocol.h"],
+    deps = [
+        "@boringssl//:crypto",
+        "@protobuf//:protobuf",
+    ],
+)
+
+cc_test(
+    name = "protocol_test",
+    srcs = ["protocol_test.cc"],
+    copts = ["-Iexternal/gtest/include"],
+    deps = [
+        ":protocol",
+        "@gtest//:main",
+    ],
+)
+
+cc_library(
+    name = "client",
+    srcs = ["client.cc"],
+    hdrs = ["client.h"],
+    deps = [":protocol"],
+)
+
+cc_test(
+    name = "client_test",
+    srcs = ["client_test.cc"],
+    copts = ["-Iexternal/gtest/include"],
+    deps = [
+        ":client",
+        ":open_source_fillins",
+        "@gtest//:main",
+    ],
+)
+
+cc_library(
+    name = "time_source",
+    hdrs = ["time_source.h"],
+)
+
+cc_library(
+    name = "server",
+    srcs = ["server.cc"],
+    hdrs = ["server.h"],
+    deps = [
+        ":protocol",
+        ":time_source",
+        "@boringssl//:crypto",
+    ],
+)
+
+cc_proto_library(
+    name = "config_proto",
+    srcs = ["config.proto"],
+    default_runtime = "@protobuf//:protobuf",
+    protoc = "@protobuf//:protoc",
+)
+
+cc_binary(
+    name = "simple_client",
+    srcs = [
+        "clock_linux.cc",
+        "clock_macos.cc",
+        "simple_client.cc",
+    ],
+    deps = [
+        ":client",
+        ":config_proto",
+        "@boringssl//:crypto",
+        "@protobuf//:protobuf",
+    ],
+)
+
+cc_library(
+    name = "simple_server_lib",
+    srcs = ["simple_server.cc"],
+    hdrs = ["simple_server.h"],
+    deps = [
+        ":server",
+        ":sys_time",
+        ":udp_processor",
+    ],
+)
+
+cc_binary(
+    name = "simple_server",
+    srcs = ["simple_server_main.cc"],
+    deps = [":simple_server_lib"],
+)
+
+cc_library(
+    name = "open_source_fillins",
+    hdrs = ["open_source_fillins.h"],
+    defines = ["ROUGHTIME_OPEN_SOURCE"],
+)
+
+cc_test(
+    name = "server_test",
+    srcs = ["server_test.cc"],
+    copts = ["-Iexternal/gtest/include"],
+    deps = [
+        ":open_source_fillins",
+        ":server",
+        "@boringssl//:crypto",
+        "@gtest//:main",
+    ],
+)
+
+cc_library(
+    name = "udp_processor",
+    srcs = ["udp_processor.cc"],
+    hdrs = ["udp_processor.h"],
+    deps = [
+        ":open_source_fillins",
+        ":protocol",
+        ":server",
+        ":time_source",
+    ],
+)
+
+cc_library(
+    name = "sys_time",
+    srcs = ["sys_time.cc"],
+    hdrs = ["sys_time.h"],
+    deps = [
+        ":time_source",
+        "@protobuf//:protobuf",
+    ],
+)