mirror of
https://github.com/opennetworkinglab/onos.git
synced 2025-11-02 09:11:29 +01:00
163 lines
4.7 KiB
Python
163 lines
4.7 KiB
Python
COMPILE_DEPS = [
|
|
'//lib:CORE_DEPS',
|
|
]
|
|
|
|
|
|
PI_BASEURL = 'https://github.com/p4lang/PI.git'
|
|
PROTOBUF_BASEURL = 'https://github.com/google/protobuf.git'
|
|
|
|
PROTOC_VER = '3.3.0'
|
|
GRPC_VER = '1.3.0'
|
|
|
|
PROTOC_EXE_BASEURL = 'http://central.maven.org/maven2/com/google/protobuf/protoc/'
|
|
GRPC_JAVA_BASEURL = 'http://central.maven.org/maven2/io/grpc/protoc-gen-grpc-java/'
|
|
|
|
|
|
PROTOC_SHA1S = {
|
|
'protoc-3.3.0-linux-x86_64.exe':'e6a95fc7477c602cc402ed976d3edbd82c841879',
|
|
'protoc-3.3.0-osx-x86_64.exe':'3070e439f9557bb72fb04df631f29d7556c9029c'
|
|
}
|
|
|
|
GRPC_JAVA_SHA1S = {
|
|
'protoc-gen-grpc-java-1.3.0-linux-x86_64.exe':'44a0fa3e6074852ea84f93d258233b3f4f6d9e53',
|
|
'protoc-gen-grpc-java-1.3.0-osx-x86_64.exe':'61a1b81b9f0af7d0900c314a4201972b52fb5f12'
|
|
}
|
|
|
|
|
|
GRPC_DEPS = [
|
|
'//lib:grpc-core-' + GRPC_VER,
|
|
'//lib:grpc-protobuf-' + GRPC_VER,
|
|
'//lib:grpc-stub-' + GRPC_VER,
|
|
'//lib:grpc-netty-' + GRPC_VER,
|
|
'//lib:grpc-auth-' + GRPC_VER,
|
|
'//lib:protobuf-java-' + PROTOC_VER,
|
|
]
|
|
|
|
|
|
def get_arch():
|
|
import platform
|
|
os_name = platform.system().lower()
|
|
if os_name == 'darwin':
|
|
os_name = 'osx'
|
|
arch = '%s-%s' % (os_name, platform.machine())
|
|
return arch
|
|
|
|
# TODO: defs to download prebuilt protoc and grpc java plugin should visible by other BUCK files.
|
|
|
|
def prebuilt_protoc():
|
|
fname = 'protoc-%s-%s.exe' % (PROTOC_VER, get_arch())
|
|
if fname not in PROTOC_SHA1S:
|
|
raise Exception('Cannot download %s, architecture not supported' % fname)
|
|
remote_file(
|
|
name = 'protoc-binary',
|
|
out = 'protoc.binary',
|
|
url = PROTOC_EXE_BASEURL + PROTOC_VER + '/' + fname,
|
|
sha1 = PROTOC_SHA1S[fname],
|
|
)
|
|
genrule (
|
|
name = 'protoc-exe',
|
|
srcs = [ ':protoc-binary' ],
|
|
bash = 'cp $(location :protoc-binary) $OUT && chmod +x $OUT',
|
|
executable = True,
|
|
out = 'protoc.exe'
|
|
)
|
|
|
|
|
|
def prebuilt_protoc_java_plugin():
|
|
arch = get_arch()
|
|
fname = 'protoc-gen-grpc-java-%s-%s.exe' % (GRPC_VER, get_arch())
|
|
if fname not in GRPC_JAVA_SHA1S:
|
|
raise Exception('Cannot download %s, architecture not supported' % fname)
|
|
remote_file(
|
|
name = 'grpc-java-binary',
|
|
out = 'grpc-java.binary',
|
|
url = GRPC_JAVA_BASEURL + GRPC_VER + '/' + fname,
|
|
sha1 = GRPC_JAVA_SHA1S[fname],
|
|
)
|
|
genrule (
|
|
name = 'grpc-java-exe',
|
|
srcs = [ ':grpc-java-binary' ],
|
|
bash = 'cp $(location :grpc-java-binary) $OUT && chmod +x $OUT',
|
|
executable = True,
|
|
out = 'grpc-java.exe'
|
|
)
|
|
|
|
prebuilt_protoc()
|
|
prebuilt_protoc_java_plugin()
|
|
|
|
genrule (
|
|
name = 'p4lang-pi-repo',
|
|
# FIXME: should download a specific commit id/tag of p4runtime, right now we get the master.
|
|
bash = 'git clone --quiet ' + PI_BASEURL + ' $OUT > /dev/null && cd $OUT && '
|
|
+ 'git submodule update --quiet --init --recursive > /dev/null',
|
|
out = 'repo',
|
|
)
|
|
|
|
genrule (
|
|
name = 'protoc-repo',
|
|
bash = 'git clone --quiet ' + PROTOBUF_BASEURL + ' $OUT > /dev/null && cd $OUT && '
|
|
+ 'git checkout --quiet -b x tags/v' + PROTOC_VER + ' > /dev/null',
|
|
out = 'repo',
|
|
)
|
|
|
|
def protoc_gen(
|
|
name,
|
|
proto_file,
|
|
out_pkg,
|
|
):
|
|
genrule(
|
|
name = name + '-gen',
|
|
cmd = '$(exe :protoc-exe) --plugin=protoc-gen-grpc-java=$(location :grpc-java-exe) '
|
|
+ '--grpc-java_out=$SRCDIR/../' + name + '-gen '
|
|
+ '--java_out=$SRCDIR/../' + name + '-gen '
|
|
+ '-I$(location :p4lang-pi-repo)/proto '
|
|
+ '-I$(location :protoc-repo)/src '
|
|
+ proto_file,
|
|
out = out_pkg,
|
|
)
|
|
zip_file(
|
|
name = name,
|
|
out = name + '.src.zip',
|
|
srcs = [':'+name+'-gen']
|
|
)
|
|
|
|
# Wondering which .proto files to build? Check p4runtime's Makefile:
|
|
# https://github.com/p4lang/PI/blob/master/proto/Makefile.am
|
|
protoc_gen(
|
|
name = 'p4runtime',
|
|
proto_file = '$(location :p4lang-pi-repo)/proto/p4/p4runtime.proto',
|
|
out_pkg = 'p4',
|
|
)
|
|
protoc_gen(
|
|
name = 'p4info',
|
|
proto_file = '$(location :p4lang-pi-repo)/proto/p4/config/p4info.proto',
|
|
out_pkg = 'p4',
|
|
)
|
|
protoc_gen(
|
|
name = 'google-rpc-status',
|
|
proto_file = '$(location :p4lang-pi-repo)/proto/google/rpc/status.proto',
|
|
out_pkg = 'com',
|
|
)
|
|
protoc_gen(
|
|
name = 'google-rpc-code',
|
|
proto_file = '$(location :p4lang-pi-repo)/proto/google/rpc/code.proto',
|
|
out_pkg = 'com',
|
|
)
|
|
protoc_gen(
|
|
name = 'p4config',
|
|
proto_file = '$(location :p4lang-pi-repo)/proto/p4/tmp/p4config.proto',
|
|
out_pkg = 'p4',
|
|
)
|
|
|
|
|
|
osgi_jar(
|
|
srcs = [':p4runtime', ':p4info', ':google-rpc-status', ':google-rpc-code', ':p4config'],
|
|
deps = COMPILE_DEPS + GRPC_DEPS,
|
|
do_javadocs = False,
|
|
do_checkstyle = False
|
|
)
|
|
|
|
|
|
project_config(
|
|
src_target = ':onos-drivers-p4runtime-proto'
|
|
) |