Initial builds using bazel
Change-Id: I38123b396a2ffda5f36cdca43f3ad1fa67a7ab52
diff --git a/tools/build/bazel/osgi-java-library.bzl b/tools/build/bazel/osgi-java-library.bzl
new file mode 100644
index 0000000..680ecc9
--- /dev/null
+++ b/tools/build/bazel/osgi-java-library.bzl
@@ -0,0 +1,182 @@
+load("//tools/build/bazel:generate_workspace.bzl", "COMPILE", "TEST")
+load("//tools/build/bazel:variables.bzl", "ONOS_VERSION")
+load("//tools/build/bazel:generate_test_rules.bzl", "generate_test_rules")
+
+def all_java_sources():
+ return native.glob(["src/main/java/**/*.java"])
+
+def all_java_test_sources():
+ return native.glob(["src/test/java/**/*.java"])
+
+def all_test_resources():
+ return native.glob(["src/test/resources/**"])
+
+def all_resources(resources_root):
+ if resources_root == None:
+ return native.glob(["src/main/resources/**"])
+ else:
+ return native.glob([resources_root + '**'])
+
+# Implementation of the rule to call bnd to make an OSGI jar file
+def _bnd_impl(ctx):
+
+ jar = ctx.file.source.path
+ output = ctx.outputs.osgi_jar.path
+ cp = ""
+ name = ctx.attr.source.label.name
+ group = ctx.attr.package_name_root
+ version = ctx.attr.version
+ license = ""
+ importPackages = "*"
+ exportPackages = "*"
+ includeResources = ""
+ webContext = "NONE"
+ dynamicimportPackages = ""
+
+ inputDependencies = [ctx.file.source]
+
+ # determine the dependencies and build the class path
+ for dep in ctx.attr.deps:
+ file = dep.java.outputs.jars[0].class_jar
+
+ if cp:
+ cp += ":"
+ cp += file.path
+ inputDependencies = inputDependencies + [file]
+
+ # extract the class files for use by bnd
+ classes = ctx.actions.declare_file("classes")
+ classesPath = classes.path
+ jarCommand = "mkdir -p %s && cp %s %s && cd %s && jar xf *.jar" % (classesPath, jar, classesPath, classesPath)
+ ctx.actions.run_shell(
+ inputs=inputDependencies,
+ outputs=[classes],
+ command=jarCommand,
+ progress_message="Expanding jar file: %s" % jar,
+ )
+ inputDependencies += [classes]
+
+ # call bnd to make the OSGI jar file
+ arguments=[
+ jar,
+ output,
+ cp,
+ name,
+ group,
+ version,
+ license,
+ importPackages,
+ exportPackages,
+ includeResources,
+ webContext,
+ dynamicimportPackages,
+ classesPath,
+ ]
+ ctx.actions.run(
+ inputs=inputDependencies,
+ outputs=[ctx.outputs.osgi_jar],
+ arguments=arguments,
+ progress_message="Running bnd wrapper on: %s" % ctx.attr.name,
+ executable=ctx.executable._bnd_exe,
+ )
+
+bnd = rule(
+ attrs = {
+ "deps": attr.label_list(),
+ "version": attr.string(),
+ "package_name_root": attr.string(),
+ "source": attr.label(allow_single_file = True),
+ "_bnd_exe": attr.label(
+ executable = True,
+ cfg = "host",
+ allow_files = True,
+ default = Label("//utils/osgiwrap:osgi-jar"),
+ ),
+ },
+ fragments = ["java"],
+ outputs = {
+ "osgi_jar": "lib%{name}.jar",
+ },
+ implementation = _bnd_impl,
+)
+
+def _fwd_bnd(name, source, deps, version, package_name_root, visibility):
+ bnd(name = name, source = source, deps = deps, version = version, package_name_root = package_name_root, visibility = visibility)
+
+def wrapped_osgi_library(name, jar, deps, version = ONOS_VERSION, package_name_root = "org.onosproject", visibility = [ "//visibility:private" ]):
+ _fwd_bnd(name, jar, deps, version, package_name_root, visibility)
+
+def osgi_jar_with_tests(name = None,
+ deps = None,
+ test_deps = None,
+ package_name_root = "org.onosproject",
+ srcs = None,
+ resources_root = None,
+ resources = None,
+ test_srcs = None,
+ exclude_tests = None,
+ test_resources = None,
+ visibility = [ "//visibility:public" ],
+ version = ONOS_VERSION):
+ if name == None:
+ name = "onos-" + native.package_name().replace("/", "-")
+ if srcs == None:
+ srcs = all_java_sources()
+ if resources == None:
+ resources = all_resources(resources_root)
+ if test_srcs == None:
+ test_srcs = all_java_test_sources()
+ if test_resources == None:
+ test_resources = all_test_resources()
+ if exclude_tests == None:
+ exclude_tests = []
+ if deps == None:
+ deps = COMPILE
+ if test_deps == None:
+ test_deps = TEST
+ tests_name = name + '-tests'
+ tests_jar_deps = list(depset(deps + test_deps)) + [ name ]
+ all_test_deps = tests_jar_deps + [ tests_name ]
+
+ native.java_library(name = name, srcs = srcs, resources = resources, deps = deps, visibility = visibility)
+ _fwd_bnd(name + '-osgi', name, deps, version, package_name_root, visibility)
+ if test_srcs != []:
+ native.java_library(name = tests_name,
+ srcs = test_srcs,
+ resources = test_resources,
+ deps = tests_jar_deps,
+ visibility = visibility)
+
+ generate_test_rules(
+ name = name + "-tests-gen",
+ test_files = test_srcs,
+ exclude_tests = exclude_tests,
+ deps = all_test_deps
+ )
+
+def osgi_jar(name = None,
+ deps = None,
+ package_name_root = "org.onosproject",
+ srcs = None,
+ resources_root = None,
+ resources = None,
+ visibility = [ "//visibility:public" ],
+ version = ONOS_VERSION):
+ if srcs == None:
+ srcs = all_java_sources()
+ if deps == None:
+ deps = COMPILE
+
+ osgi_jar_with_tests(name = name,
+ deps = deps,
+ test_deps = [],
+ package_name_root = package_name_root,
+ srcs = srcs,
+ resources = resources,
+ resources_root = resources_root,
+ test_srcs = [],
+ exclude_tests = [],
+ test_resources = [],
+ visibility = visibility,
+ version = version)
+