Merge pull request #25 from yaoyx108/gradle

Fix build issues with gradle.
diff --git a/.gitignore b/.gitignore
index f53951a..18c56f4 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,4 @@
 build/**
 .gradle/**
 .idea/**
+bazel-*
diff --git a/BUILD b/BUILD
deleted file mode 100644
index 219c7fe..0000000
--- a/BUILD
+++ /dev/null
@@ -1,6 +0,0 @@
-package(default_visibility = ["//visibility:public"])
-
-alias(
-    name = "ukey2",
-    actual = "//src/main/cpp",
-)
diff --git a/BUILD.bazel b/BUILD.bazel
new file mode 100644
index 0000000..ff5b8ed
--- /dev/null
+++ b/BUILD.bazel
@@ -0,0 +1,33 @@
+load("@rules_cc//cc:defs.bzl", "cc_proto_library")
+
+package(default_visibility = ["//visibility:public"])
+
+alias(
+    name = "ukey2",
+    actual = "//src/main/cpp",
+)
+
+# Define the proto rule at the root level, instead of under src/main/proto,
+# to resolve the import root dir difference between bazel and gradle.
+# Specifically, proto-gradle-plugin considers src/main/proto as the root, so
+# the proto `import` path should be relative. Whereas bazel considers the top
+# level as the root, so the import should be absolute (or relative to the top).
+#
+# The solution is to update the basel side by defining the proto rule at the
+# top level, then strip_import_prefix such that the protos are relative.
+proto_library(
+    name = "proto",
+    srcs = [
+        "src/main/proto/device_to_device_messages.proto",
+        "src/main/proto/securegcm.proto",
+        "src/main/proto/securemessage.proto",
+        "src/main/proto/ukey.proto",
+    ],
+    strip_import_prefix = 'src/main/proto/'
+)
+
+cc_proto_library(
+    name = "cc_proto",
+    deps = [":proto"],
+    visibility = ["//src:__subpackages__"],
+)
diff --git a/README.md b/README.md
index 3bffe4c..aaca7c2 100644
--- a/README.md
+++ b/README.md
@@ -341,16 +341,11 @@
 
 ## Build and install the static libraries files in specified INSTALL directory (e.g. /tmp/ukey2_install).
 ```
-cd <source root>
-mkdir build; cd build
-cmake -Dukey2_USE_LOCAL_PROTOBUF=ON -Dukey2_USE_LOCAL_ABSL=ON -DCMAKE_INSTALL_PREFIX=/tmp/ukey2_install ..
-make
-make install
+bazel build //src/main/cpp:ukey2_shell
 ```
 ## Running C++ tests
 ```
-cd <source root>/build
-ctest -V
+bazel test //src/main/cpp:cpp_tests
 ```
 
 # Buillding Java library and running Java Tests
diff --git a/build.gradle b/build.gradle
index b9fca13..cbb2d2e 100644
--- a/build.gradle
+++ b/build.gradle
@@ -24,7 +24,7 @@
     mavenCentral()
   }
   dependencies {
-    classpath 'com.google.protobuf:protobuf-gradle-plugin:0.9.0'
+    classpath 'com.google.protobuf:protobuf-gradle-plugin:0.9.4'
   }
 }
 
@@ -33,7 +33,7 @@
     testImplementation group: 'com.google.guava', name: 'guava-testlib', version: '29.0-jre'
     testImplementation 'junit:junit:4.13'
     implementation "com.google.code.findbugs:jsr305:3.0.0"
-    implementation "com.google.protobuf:protobuf-java:3.19.3"
+    implementation "com.google.protobuf:protobuf-java:3.19.6"
     implementation "com.google.guava:guava:19.0"
 }
 
diff --git a/src/main/cpp/BUILD b/src/main/cpp/BUILD.bazel
similarity index 96%
rename from src/main/cpp/BUILD
rename to src/main/cpp/BUILD.bazel
index f036dcb..890bcd0 100644
--- a/src/main/cpp/BUILD
+++ b/src/main/cpp/BUILD.bazel
@@ -11,7 +11,7 @@
         "include",
     ],
     deps = [
-        "//src/main/proto:cc_proto",
+        "//:cc_proto",
         "//src/securemessage:securemessage_common",
         "//src/securemessage:securemessage_cpp_protobuf",
         "//src/securemessage:securemessage_openssl",
diff --git a/src/main/cpp/include/securegcm/d2d_crypto_ops.h b/src/main/cpp/include/securegcm/d2d_crypto_ops.h
index 5cf925b..ea9860a 100644
--- a/src/main/cpp/include/securegcm/d2d_crypto_ops.h
+++ b/src/main/cpp/include/securegcm/d2d_crypto_ops.h
@@ -18,7 +18,7 @@
 #include <memory>
 #include <string>
 
-#include "src/main/proto/securegcm.pb.h"
+#include "securegcm.pb.h"
 #include "src/securemessage/include/securemessage/crypto_ops.h"
 
 namespace securegcm {
diff --git a/src/main/cpp/include/securegcm/ukey2_handshake.h b/src/main/cpp/include/securegcm/ukey2_handshake.h
index 79f0dfa..604dc48 100644
--- a/src/main/cpp/include/securegcm/ukey2_handshake.h
+++ b/src/main/cpp/include/securegcm/ukey2_handshake.h
@@ -18,7 +18,7 @@
 #include <map>
 #include <memory>
 
-#include "src/main/proto/ukey.pb.h"
+#include "ukey.pb.h"
 #include "src/main/cpp/include/securegcm/d2d_connection_context_v1.h"
 #include "src/securemessage/include/securemessage/crypto_ops.h"
 
diff --git a/src/main/cpp/src/securegcm/d2d_connection_context_v1.cc b/src/main/cpp/src/securegcm/d2d_connection_context_v1.cc
index 55af299..f269372 100644
--- a/src/main/cpp/src/securegcm/d2d_connection_context_v1.cc
+++ b/src/main/cpp/src/securegcm/d2d_connection_context_v1.cc
@@ -17,8 +17,8 @@
 #include <limits>
 #include <sstream>
 
-#include "src/main/proto/device_to_device_messages.pb.h"
-#include "src/main/proto/securegcm.pb.h"
+#include "device_to_device_messages.pb.h"
+#include "securegcm.pb.h"
 #include "src/main/cpp/include/securegcm/d2d_crypto_ops.h"
 #include "src/main/cpp/include/securegcm/java_util.h"
 #include "src/securemessage/include/securemessage/secure_message_builder.h"
diff --git a/src/main/javatest/com/google/security/cryptauth/lib/securegcm/Ukey2ShellCppWrapper.java b/src/main/javatest/com/google/security/cryptauth/lib/securegcm/Ukey2ShellCppWrapper.java
index 2b73653..0aef56d 100644
--- a/src/main/javatest/com/google/security/cryptauth/lib/securegcm/Ukey2ShellCppWrapper.java
+++ b/src/main/javatest/com/google/security/cryptauth/lib/securegcm/Ukey2ShellCppWrapper.java
@@ -18,6 +18,7 @@
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
+import java.io.File;
 import java.io.OutputStream;
 import java.lang.ProcessBuilder.Redirect;
 import java.nio.ByteBuffer;
@@ -50,6 +51,7 @@
 public class Ukey2ShellCppWrapper {
   // The path the the ukey2_shell binary.
   private static final String BINARY_PATH = "build/src/main/cpp/src/securegcm/ukey2_shell";
+  private static final String BINARY_PATH_BAZEL = "bazel-bin/src/main/cpp/ukey2_shell";
 
   // The time to wait before timing out a read or write operation to the shell.
   @SuppressWarnings("GoodTime") // TODO(b/147378611): store a java.time.Duration instead
@@ -90,8 +92,18 @@
     String modeArg = "--mode=" + getModeString();
     String verificationStringLengthArg = "--verification_string_length=" + verificationStringLength;
 
+
+    String binaryPath;
+    if (new File(BINARY_PATH).exists()){
+      binaryPath = BINARY_PATH;
+    } else if (new File(BINARY_PATH_BAZEL).exists()) {
+      binaryPath = BINARY_PATH_BAZEL;
+    } else {
+      throw new IllegalStateException("Unable to find ukey2_shell binary in " + BINARY_PATH);
+    }
+
     final ProcessBuilder builder =
-        new ProcessBuilder(BINARY_PATH, modeArg, verificationStringLengthArg);
+        new ProcessBuilder(binaryPath, modeArg, verificationStringLengthArg);
 
     // Merge the shell's stderr with the stderr of the current process.
     builder.redirectError(Redirect.INHERIT);
diff --git a/src/main/proto/BUILD b/src/main/proto/BUILD
deleted file mode 100644
index 36e4ebe..0000000
--- a/src/main/proto/BUILD
+++ /dev/null
@@ -1,19 +0,0 @@
-load("@rules_cc//cc:defs.bzl", "cc_proto_library")
-
-licenses(["notice"])
-
-proto_library(
-    name = "proto",
-    srcs = [
-        "device_to_device_messages.proto",
-        "securegcm.proto",
-        "securemessage.proto",
-        "ukey.proto",
-    ],
-)
-
-cc_proto_library(
-    name = "cc_proto",
-    deps = [":proto"],
-    visibility = ["//src:__subpackages__"],
-)
diff --git a/src/main/proto/device_to_device_messages.proto b/src/main/proto/device_to_device_messages.proto
index a05bdfa..5600373 100644
--- a/src/main/proto/device_to_device_messages.proto
+++ b/src/main/proto/device_to_device_messages.proto
@@ -16,7 +16,7 @@
 
 package securegcm;
 
-import "src/main/proto/securemessage.proto";
+import "securemessage.proto";
 
 option optimize_for = LITE_RUNTIME;
 option java_package = "com.google.security.cryptauth.lib.securegcm";
diff --git a/src/securemessage/BUILD b/src/securemessage/BUILD.bazel
similarity index 97%
rename from src/securemessage/BUILD
rename to src/securemessage/BUILD.bazel
index 6f9b9c8..8a79060 100644
--- a/src/securemessage/BUILD
+++ b/src/securemessage/BUILD.bazel
@@ -53,7 +53,7 @@
     hdrs = SECUREMESSAGE_CPP_PROTOBUF_HDRS,
     deps = [
         ":securemessage_common",
-        "//src/main/proto:cc_proto",
+        "//:cc_proto",
     ],
     visibility = ["//visibility:public"],
 )
diff --git a/src/securemessage/include/securemessage/public_key_proto_util.h b/src/securemessage/include/securemessage/public_key_proto_util.h
index de58a29..6c92c01 100644
--- a/src/securemessage/include/securemessage/public_key_proto_util.h
+++ b/src/securemessage/include/securemessage/public_key_proto_util.h
@@ -20,7 +20,7 @@
 #include <memory>
 #include "src/securemessage/include/securemessage/common.h"
 #include "src/securemessage/include/securemessage/crypto_ops.h"
-#include "src/main/proto/securemessage.pb.h"
+#include "securemessage.pb.h"
 
 namespace securemessage {
 
diff --git a/src/securemessage/include/securemessage/secure_message_builder.h b/src/securemessage/include/securemessage/secure_message_builder.h
index 47dcb94..1d38535 100644
--- a/src/securemessage/include/securemessage/secure_message_builder.h
+++ b/src/securemessage/include/securemessage/secure_message_builder.h
@@ -19,7 +19,7 @@
 
 #include <memory>
 
-#include "src/main/proto/securemessage.pb.h"
+#include "securemessage.pb.h"
 
 #include "src/securemessage/include/securemessage/byte_buffer.h"
 #include "src/securemessage/include/securemessage/common.h"
diff --git a/src/securemessage/include/securemessage/secure_message_parser.h b/src/securemessage/include/securemessage/secure_message_parser.h
index 4c936a8..46cb8b1 100644
--- a/src/securemessage/include/securemessage/secure_message_parser.h
+++ b/src/securemessage/include/securemessage/secure_message_parser.h
@@ -19,7 +19,7 @@
 
 #include <memory>
 
-#include "src/main/proto/securemessage.pb.h"
+#include "securemessage.pb.h"
 
 #include "src/securemessage/include/securemessage/common.h"
 #include "src/securemessage/include/securemessage/crypto_ops.h"
diff --git a/src/securemessage/src/securemessage/secure_message_wrapper.cc b/src/securemessage/src/securemessage/secure_message_wrapper.cc
index 4cb95a2..6ea8472 100644
--- a/src/securemessage/src/securemessage/secure_message_wrapper.cc
+++ b/src/securemessage/src/securemessage/secure_message_wrapper.cc
@@ -16,7 +16,7 @@
 
 #include "src/securemessage/include/securemessage/secure_message_wrapper.h"
 
-#include "src/main/proto/securemessage.pb.h"
+#include "securemessage.pb.h"
 #include "src/securemessage/include/securemessage/util.h"
 
 namespace securemessage {