diff --git a/bucklets/grpc.bucklet b/bucklets/grpc.bucklet index 6afcea7b86..f8fe5798e6 100644 --- a/bucklets/grpc.bucklet +++ b/bucklets/grpc.bucklet @@ -2,17 +2,15 @@ include_defs('//onos.defs') include_defs('//bucklets/onos.bucklet') -PROTOC_VERSION = '3.2.0' -GRPC_PLUGIN_VERSION = '1.3.0' +DEFAULT_PROTOC_VERSION = '3.2.0' +DEFAULT_GRPC_PLUGIN_VERSION = '1.3.0' -PROTOC_EXECUTABLE_BASE_URL = "https://repo1.maven.org/maven2/com/google/protobuf/protoc" +PROTOC_RELEASE_BASE_URL = "https://github.com/google/protobuf/releases/download" GRPC_PLUGIN_BASE_URL = "https://repo1.maven.org/maven2/io/grpc/protoc-gen-grpc-java" PROTOC_SHA1S = { - "protoc-3.3.0-osx-x86_64.exe":"3070e439f9557bb72fb04df631f29d7556c9029c", - "protoc-3.3.0-linux-x86_64.exe":"e6a95fc7477c602cc402ed976d3edbd82c841879", - "protoc-3.2.0-linux-x86_64.exe":"086893ffdc1023e503ccd0ee522ca1e6046b12a7", - "protoc-3.2.0-osx-x86_64.exe":"87f532ef51bb314d2c5d2ba7842b39cbbdb60323" + "protoc-3.2.0-linux-x86_64.zip":"f418d246d183a534d9bd749e614f639a55f6829b", + "protoc-3.2.0-osx-x86_64.zip":"81f4fac3200ba2cb12a98df0a9ee4d1c584e9210" } GRPC_JAVA_SHA1S = { @@ -29,43 +27,47 @@ def get_system_arch(): os = "osx" return "%s-%s" % ( os, arch) -def fetch_protoc_binary( - protoc_version = PROTOC_VERSION +def fetch_protoc( + version ): - file_name = "protoc-%s-%s.exe" % (protoc_version, get_system_arch()) + file_name = "protoc-%s-%s.zip" % (version, get_system_arch()) if file_name not in PROTOC_SHA1S: - raise Exception('Cannot download %s, architecture not supported' % file_name) + raise Exception('Cannot download %s, architecture or version not supported' % file_name) remote_file( - name = 'fetch-protoc-binary-' + protoc_version, - out = 'protoc-binary', - url = PROTOC_EXECUTABLE_BASE_URL + '/' + protoc_version + '/' + file_name, + name = 'protoc-release-' + version, + url = PROTOC_RELEASE_BASE_URL + '/v' + version + '/' + file_name, sha1 = PROTOC_SHA1S[file_name], ) genrule( - name = 'prepare-protoc-executable-' + protoc_version, - srcs = [ ':fetch-protoc-binary-' + protoc_version ], - bash = 'cp $(location :fetch-protoc-binary-' + protoc_version +') $OUT && chmod +x $OUT', + name = 'protoc-exe-' + version, + bash = 'jar xf $(location :protoc-release-' + version + ') bin/protoc && ' + + 'mv bin/protoc $OUT && ' + + 'chmod +x $OUT', + out = 'protoc.exe', executable = True, visibility = [ "PUBLIC" ], - out = 'protoc.exe', + ) + genrule( + name = 'protoc-lib-' + version, + bash = 'jar xf $(location :protoc-release-' + version + ') include && mv include $OUT', + out = 'include', + visibility = [ "PUBLIC" ], ) -def fetch_grpc_plugin_binary( - grpc_plugin_version = GRPC_PLUGIN_VERSION - ): - file_name = "protoc-gen-grpc-java-%s-%s.exe" % (grpc_plugin_version, get_system_arch()) +def fetch_grpc_plugin( + version +): + file_name = "protoc-gen-grpc-java-%s-%s.exe" % (version, get_system_arch()) if file_name not in GRPC_JAVA_SHA1S: - raise Exception('Cannot download %s, architecture not supported' % file_name) + raise Exception('Cannot download %s, architecture or version not supported' % file_name) remote_file( - name = 'fetch-grpc-plugin-binary-' + grpc_plugin_version, - out = 'grpc-plugin-binary', - url = GRPC_PLUGIN_BASE_URL + '/' + grpc_plugin_version + '/' + file_name, + name = 'grpc-plugin-binary-' + version, + url = GRPC_PLUGIN_BASE_URL + '/' + version + '/' + file_name, sha1 = GRPC_JAVA_SHA1S[file_name], ) genrule( - name = 'prepare-grpc-plugin-executable-' + grpc_plugin_version, - srcs = [ ':fetch-grpc-plugin-binary-' + grpc_plugin_version ], - bash = 'cp $(location :fetch-grpc-plugin-binary-' + grpc_plugin_version + ') $OUT && chmod +x $OUT', + name = 'grpc-plugin-exe-' + version, + bash = 'cp $(location :grpc-plugin-binary-' + version + ') $OUT && chmod +x $OUT', executable = True, visibility = [ "PUBLIC" ], out = 'grpc-plugin.exe', @@ -84,9 +86,12 @@ def grpc_jar( # listed in the first listed proto_path which contains the specified # file proto_paths = [], + srcs = [], + src_string = '', # Useful to build proto files external to the ONOS sources, using BUCK's environment variables. proto_match_patterns = [ "**/proto/**/*.proto" ], - protoc_version = PROTOC_VERSION, - plugin_version = GRPC_PLUGIN_VERSION, + protoc_version = DEFAULT_PROTOC_VERSION, + plugin_version = DEFAULT_GRPC_PLUGIN_VERSION, + include_std_lib = False, **kwargs ): @@ -94,7 +99,12 @@ def grpc_jar( if name is None: name = _get_name() - #Create the string for the proto_path arguments (order matters, similar to classpath) + # Create the string for the proto_path arguments (order matters, similar to classpath) + + if include_std_lib: + # Add protoc standard lib to the includes + proto_paths = ['$(location //incubator/protobuf-dependencies:protoc-lib-' + protoc_version + ')'] + proto_paths + if len(proto_paths) != 0: proto_paths_string = "-I=" + reduce(lambda a,b: a +" -I=" + b, proto_paths) else: @@ -107,9 +117,9 @@ def grpc_jar( out = 'grpc.src.zip', cmd = '$(location //buck-tools:grpc) $OUT ' + '\"' + proto_paths_string + '\" ' - + '$(location //incubator/protobuf-dependencies:prepare-protoc-executable-'+ protoc_version + ') ' - + '$(location //incubator/grpc-dependencies:prepare-grpc-plugin-executable-' + plugin_version + ') ' - + '$SRCS', + + '$(location //incubator/protobuf-dependencies:protoc-exe-'+ protoc_version + ') ' + + '$(location //incubator/grpc-dependencies:grpc-plugin-exe-' + plugin_version + ') ' + + '$SRCS' + src_string, ) osgi_jar( diff --git a/incubator/grpc-dependencies/BUCK b/incubator/grpc-dependencies/BUCK index 393524a004..8006e2761a 100644 --- a/incubator/grpc-dependencies/BUCK +++ b/incubator/grpc-dependencies/BUCK @@ -1,3 +1,3 @@ include_defs('//bucklets/grpc.bucklet') -fetch_grpc_plugin_binary() \ No newline at end of file +fetch_grpc_plugin(version = '1.3.0') \ No newline at end of file diff --git a/incubator/protobuf-dependencies/BUCK b/incubator/protobuf-dependencies/BUCK index 825a32404c..01222cd7a5 100644 --- a/incubator/protobuf-dependencies/BUCK +++ b/incubator/protobuf-dependencies/BUCK @@ -1,3 +1,3 @@ include_defs('//bucklets/grpc.bucklet') -fetch_protoc_binary() \ No newline at end of file +fetch_protoc(version = '3.2.0') \ No newline at end of file