| include_defs('//onos.defs') |
| include_defs('//bucklets/onos.bucklet') |
| |
| |
| DEFAULT_PROTOC_VERSION = '3.2.0' |
| DEFAULT_GRPC_PLUGIN_VERSION = '1.3.1' |
| |
| 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.0.2-linux-x86_64.zip":"779ed606f524eb2c8c116b0fce7a3bc6507769e7", |
| "protoc-3.0.2-osx-x86_64.zip":"f71d97affca4ffe32747772539c0bcbf76c9dc9b", |
| "protoc-3.2.0-linux-x86_64.zip":"f418d246d183a534d9bd749e614f639a55f6829b", |
| "protoc-3.2.0-osx-x86_64.zip":"81f4fac3200ba2cb12a98df0a9ee4d1c584e9210", |
| } |
| |
| GRPC_JAVA_SHA1S = { |
| "protoc-gen-grpc-java-1.3.1-linux-x86_64.exe":"9598b00ad0f41a6bd6aeb01f647903dbc62792cc", |
| "protoc-gen-grpc-java-1.3.1-osx-x86_64.exe":"f4eccb96524b8b9f152024890550d9b88398b8cd" |
| } |
| |
| #Returns the string for the OS and architecture of the system of the form 'OS-ARCH' |
| def get_system_arch(): |
| import platform |
| os = platform.system().lower() |
| arch = platform.machine() |
| if os == "darwin": |
| os = "osx" |
| return "%s-%s" % ( os, arch) |
| |
| def fetch_protoc( |
| version |
| ): |
| file_name = "protoc-%s-%s.zip" % (version, get_system_arch()) |
| if file_name not in PROTOC_SHA1S: |
| raise Exception('Cannot download %s, architecture or version not supported' % file_name) |
| remote_file( |
| name = 'protoc-release-' + version, |
| url = PROTOC_RELEASE_BASE_URL + '/v' + version + '/' + file_name, |
| sha1 = PROTOC_SHA1S[file_name], |
| ) |
| genrule( |
| 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" ], |
| ) |
| genrule( |
| name = 'protoc-lib-' + version, |
| bash = 'jar xf $(location :protoc-release-' + version + ') include && mv include $OUT', |
| out = 'include', |
| visibility = [ "PUBLIC" ], |
| ) |
| |
| 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 or version not supported' % file_name) |
| remote_file( |
| name = 'grpc-plugin-binary-' + version, |
| url = GRPC_PLUGIN_BASE_URL + '/' + version + '/' + file_name, |
| sha1 = GRPC_JAVA_SHA1S[file_name], |
| ) |
| genrule( |
| name = 'grpc-plugin-exe-' + version, |
| bash = 'cp $(location :grpc-plugin-binary-' + version + ') $OUT && chmod +x $OUT', |
| executable = True, |
| visibility = [ "PUBLIC" ], |
| out = 'grpc-plugin.exe', |
| ) |
| |
| def _get_name(): |
| base_path = get_base_path() |
| return ONOS_ARTIFACT_BASE + base_path.replace('/', '-') #TODO Unix-separator |
| |
| def grpc_jar( |
| name = None, |
| deps = [], |
| #NOTE: if targeting a directory also built with maven this path MUST end in |
| # /proto because maven plugin interprets imports relative to the proto |
| # directory and BUCK interprets imports relative to the last directory |
| # 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 = [ "src/main/proto/**/*.proto" ], |
| protoc_version = DEFAULT_PROTOC_VERSION, |
| plugin_version = DEFAULT_GRPC_PLUGIN_VERSION, |
| include_std_lib = False, |
| **kwargs |
| ): |
| |
| #Get the correct name for the protoc compilation call |
| if name is None: |
| name = _get_name() |
| |
| # 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: |
| proto_paths_string = "" |
| protoc = name + '-protoc' |
| |
| genrule( |
| name = protoc, |
| srcs = glob(proto_match_patterns), |
| out = 'grpc.src.zip', |
| cmd = '$(location //buck-tools:grpc) $OUT ' |
| + '\"' + proto_paths_string + '\" ' |
| + '$(location //incubator/protobuf-dependencies:protoc-exe-'+ protoc_version + ') ' |
| + '$(location //incubator/grpc-dependencies:grpc-plugin-exe-' + plugin_version + ') ' |
| + '$SRCS' + src_string, |
| ) |
| |
| osgi_jar( |
| name = name, |
| srcs = [ ':' + protoc ], |
| deps = deps + [ ':' + protoc ], |
| do_javadocs = False, |
| do_checkstyle = False, |
| **kwargs |
| ) |