mirror of
https://github.com/opennetworkinglab/onos.git
synced 2025-10-16 18:02:05 +02:00
135 lines
4.7 KiB
Plaintext
135 lines
4.7 KiB
Plaintext
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
|
|
)
|