aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rwxr-xr-xcompile.sh87
-rw-r--r--src/java_tools/buildjar/BUILD25
-rw-r--r--src/java_tools/singlejar/BUILD23
-rw-r--r--src/main/java/BUILD11
-rw-r--r--third_party/BUILD24
-rw-r--r--tools/build_rules/java_rules_skylark.bzl44
-rw-r--r--tools/jdk/BUILD2
7 files changed, 162 insertions, 54 deletions
diff --git a/compile.sh b/compile.sh
index 7001939a70..48a498faa8 100755
--- a/compile.sh
+++ b/compile.sh
@@ -52,10 +52,6 @@ EXE_EXT=""
PROTO_FILES=$(ls src/main/protobuf/*.proto)
LIBRARY_JARS=$(find third_party -name *.jar | tr "\n" " ")
DIRS=$(echo src/{main/java,tools/xcode-common/java/com/google/devtools/build/xcode/{common,util}} output/src)
-SINGLEJAR_DIRS="src/java_tools/singlejar/java src/main/java/com/google/devtools/build/lib/shell"
-SINGLEJAR_LIBRARIES="third_party/guava/guava-18.0.jar third_party/jsr305/jsr-305.jar"
-BUILDJAR_DIRS="src/java_tools/buildjar/java/com/google/devtools/build/buildjar output/src/com/google/devtools/build/lib/view/proto"
-BUILDJAR_LIBRARIES="third_party/error_prone/error_prone_core-2.0.2.jar third_party/guava/guava-18.0.jar third_party/protobuf/protobuf-2.5.0.jar third_party/jsr305/jsr-305.jar"
MSYS_DLLS=""
PATHSEP=":"
@@ -316,32 +312,8 @@ EOF
output third_party/javascript
fi
-if [ -z "${BAZEL_SKIP_SINGLEJAR_COMPILATION}" ]; then
- # Compile singlejar, a jar suitable for deployment.
- java_compilation "SingleJar tool" "$SINGLEJAR_DIRS" "$SINGLEJAR_LIBRARIES" \
- "output/singlejar"
-
- create_deploy_jar "SingleJar_deploy" \
- "com.google.devtools.build.singlejar.SingleJar" "output/singlejar"
- mkdir -p tools/jdk
- cp -f output/singlejar/SingleJar_deploy.jar tools/jdk
-fi
-
-if [ -z "${BAZEL_SKIP_BUILDJAR_COMPILATION}" ]; then
- # Compile buildjar, a wrapper around javac.
- java_compilation "JavaBuilder tool" "$BUILDJAR_DIRS" "$BUILDJAR_LIBRARIES" \
- "output/buildjar" $JAVA_HOME/lib/tools.jar
-
- create_deploy_jar "JavaBuilder_deploy" \
- "com.google.devtools.build.buildjar.BazelJavaBuilder" "output/buildjar"
- mkdir -p tools/jdk
- cp -f output/buildjar/JavaBuilder_deploy.jar tools/jdk
-fi
-
cc_build "client" "objs" "output/client" ${BLAZE_CC_FILES[@]}
-LDFLAGS="$LDFLAGS -lz" cc_build "ijar" "ijar" "tools/jdk/ijar" ${IJAR_CC_FILES[@]}
-
if [ ! -z "$JNILIB" ] ; then
log "Compiling JNI libraries..."
for FILE in "${NATIVE_CC_FILES[@]}"; do
@@ -397,30 +369,51 @@ zip -qA output/bazel \
chmod 755 output/bazel
-if [[ $PLATFORM == "darwin" ]]; then
- log "Creating objc helper tools..."
-
- zip_common="src/tools/xcode-common/java/com/google/devtools/build/xcode/zip src/tools/xcode-common/java/com/google/devtools/build/xcode/util src/java_tools/singlejar/java/com/google/devtools/build/zip src/java_tools/singlejar/java/com/google/devtools/build/singlejar/ZipCombiner.java src/java_tools/singlejar/java/com/google/devtools/build/singlejar/ZipEntryFilter.java src/java_tools/singlejar/java/com/google/devtools/build/singlejar/CopyEntryFilter.java"
-
- java_compilation "actoolzip" "src/tools/xcode-common/java/com/google/devtools/build/xcode/actoolzip src/tools/xcode-common/java/com/google/devtools/build/xcode/zippingoutput ${zip_common}" "third_party/guava/guava-18.0.jar third_party/jsr305/jsr-305.jar" "output/actoolzip"
- create_deploy_jar "precomp_actoolzip_deploy" "com.google.devtools.build.xcode.actoolzip.ActoolZip" "output/actoolzip"
-
- java_compilation "ibtoolzip" "src/tools/xcode-common/java/com/google/devtools/build/xcode/ibtoolzip src/tools/xcode-common/java/com/google/devtools/build/xcode/zippingoutput ${zip_common}" "third_party/guava/guava-18.0.jar third_party/jsr305/jsr-305.jar" "output/ibtoolzip"
- create_deploy_jar "precomp_ibtoolzip_deploy" "com.google.devtools.build.xcode.ibtoolzip.IbtoolZip" "output/ibtoolzip"
+function bootstrap_tool() {
+ output/bazel --blazerc=/dev/null build \
+ --singlejar_top=//src/java_tools/singlejar:bootstrap_deploy.jar \
+ --javabuilder_top=//src/java_tools/buildjar:bootstrap_deploy.jar \
+ --javacopt="-source ${JAVA_VERSION} -target ${JAVA_VERSION}" \
+ "${@}"
+}
- java_compilation "momczip" "src/objc_tools/momczip/java/com/google/devtools/build/xcode/momczip src/tools/xcode-common/java/com/google/devtools/build/xcode/zippingoutput ${zip_common}" "third_party/guava/guava-18.0.jar third_party/jsr305/jsr-305.jar" "output/momczip"
- create_deploy_jar "precomp_momczip_deploy" "com.google.devtools.build.xcode.momczip.MomcZip" "output/momczip"
+# Compile ijar
+bootstrap_tool //third_party/ijar
+mkdir -p tools/jdk
+cp -f bazel-bin/third_party/ijar/ijar tools/jdk
+chmod 755 tools/jdk/ijar
- java_compilation "bundlemerge" "src/objc_tools/bundlemerge/java/com/google/devtools/build/xcode/bundlemerge src/objc_tools/plmerge/java/com/google/devtools/build/xcode/plmerge src/tools/xcode-common/java/com/google/devtools/build/xcode/common output/src/com/google/devtools/build/xcode/bundlemerge/proto/BundleMergeProtos.java ${zip_common} third_party/java/dd_plist src/main/java/com/google/devtools/common/options" "third_party/guava/guava-18.0.jar third_party/jsr305/jsr-305.jar third_party/protobuf/protobuf-2.5.0.jar" "output/bundlemerge"
- create_deploy_jar "precomp_bundlemerge_deploy" "com.google.devtools.build.xcode.bundlemerge.BundleMerge" "output/bundlemerge"
+if [ -z "${BAZEL_SKIP_SINGLEJAR_COMPILATION}" ]; then
+ # Compile singlejar, a jar suitable for deployment.
+ bootstrap_tool //src/java_tools/singlejar:SingleJar_deploy.jar
+ mkdir -p tools/jdk
+ cp -f bazel-bin/src/java_tools/singlejar/SingleJar_deploy.jar tools/jdk
+ chmod 644 tools/jdk/SingleJar_deploy.jar
+fi
- java_compilation "plmerge" "src/objc_tools/plmerge/java/com/google/devtools/build/xcode/plmerge src/tools/xcode-common/java/com/google/devtools/build/xcode/common third_party/java/dd_plist src/main/java/com/google/devtools/common/options ${zip_common}" "third_party/guava/guava-18.0.jar third_party/jsr305/jsr-305.jar" "output/plmerge"
- create_deploy_jar "precomp_plmerge_deploy" "com.google.devtools.build.xcode.plmerge.PlMerge" "output/plmerge"
+if [ -z "${BAZEL_SKIP_BUILDJAR_COMPILATION}" ]; then
+ bootstrap_tool //src/java_tools/buildjar:JavaBuilder_deploy.jar
+ mkdir -p tools/jdk
+ cp -f bazel-bin/src/java_tools/buildjar/JavaBuilder_deploy.jar tools/jdk
+ chmod 644 tools/jdk/JavaBuilder_deploy.jar
+fi
- java_compilation "xcodegen" "src/objc_tools/xcodegen/java/com/google/devtools/build/xcode/xcodegen src/main/java/com/google/devtools/common/options output/src/com/google/devtools/build/xcode/xcodegen/proto/XcodeGenProtos.java third_party/java/buck-ios-support/java src/objc_tools/plmerge/java/com/google/devtools/build/xcode/plmerge src/tools/xcode-common/java/com/google/devtools/build/xcode/common src/tools/xcode-common/java/com/google/devtools/build/xcode/util third_party/java/dd_plist" "third_party/guava/guava-18.0.jar third_party/jsr305/jsr-305.jar third_party/protobuf/protobuf-2.5.0.jar" "output/xcodegen"
- create_deploy_jar "precomp_xcodegen_deploy" "com.google.devtools.build.xcode.xcodegen.XcodeGen" "output/xcodegen"
+if [[ $PLATFORM == "darwin" ]] && [ -z "${BAZEL_SKIP_OBJCTOOLS_COMPILATION}" ]; then
+ log "Creating objc helper tools..."
- cp -f output/actoolzip/precomp_actoolzip_deploy.jar output/ibtoolzip/precomp_ibtoolzip_deploy.jar output/momczip/precomp_momczip_deploy.jar output/bundlemerge/precomp_bundlemerge_deploy.jar output/plmerge/precomp_plmerge_deploy.jar output/xcodegen/precomp_xcodegen_deploy.jar tools/objc/
+ OBJC_TOOLS="src/tools/xcode-common/java/com/google/devtools/build/xcode/actoolzip:actoolzip_deploy.jar \
+ src/tools/xcode-common/java/com/google/devtools/build/xcode/ibtoolzip:ibtoolzip_deploy.jar \
+ src/objc_tools/momczip:momczip_deploy.jar \
+ src/objc_tools/bundlemerge:bundlemerge_deploy.jar \
+ src/objc_tools/plmerge:plmerge_deploy.jar \
+ src/objc_tools/xcodegen:xcodegen_deploy.jar"
+ bootstrap_tool ${OBJC_TOOLS}
+
+ for i in ${OBJC_TOOLS}; do
+ p=bazel-bin/$(echo $i | sed "s|:|/|")
+ cp $p tools/objc/precomp_$(basename $p)
+ chmod 0644 tools/objc/precomp_$(basename $p)
+ done
fi
# Create a bazelrc file with the base_workspace directory in the package path.
diff --git a/src/java_tools/buildjar/BUILD b/src/java_tools/buildjar/BUILD
index f8cfd4a625..eabf9d53b1 100644
--- a/src/java_tools/buildjar/BUILD
+++ b/src/java_tools/buildjar/BUILD
@@ -161,3 +161,28 @@ java_test(
"//third_party:truth",
],
)
+
+#
+# Bootstrapping using Skylark rules
+#
+load("/tools/build_rules/java_rules_skylark", "bootstrap_java_library", "bootstrap_java_binary")
+
+bootstrap_java_library(
+ name = "skylark-deps",
+ jars = [
+ "//third_party:error_prone-jars",
+ "//third_party:guava-jars",
+ "//third_party:jsr305-jars",
+ "//third_party:protobuf-jars",
+ ],
+ neverlink_jars = ["//tools/defaults:java_langtools"],
+ srcjars = ["//src/main/protobuf:proto_deps_srcjar"],
+)
+
+bootstrap_java_binary(
+ name = "bootstrap",
+ srcs = glob(["java/com/google/devtools/build/buildjar/**/*.java"]),
+ main_class = "com.google.devtools.build.buildjar.BazelJavaBuilder",
+ visibility = ["//visibility:public"],
+ deps = [":skylark-deps"],
+)
diff --git a/src/java_tools/singlejar/BUILD b/src/java_tools/singlejar/BUILD
index 6e1a388ff2..2f9391db40 100644
--- a/src/java_tools/singlejar/BUILD
+++ b/src/java_tools/singlejar/BUILD
@@ -53,3 +53,26 @@ java_test(
"//third_party:truth",
],
)
+
+#
+# Bootstrapping using Skylark rules
+#
+load("/tools/build_rules/java_rules_skylark", "bootstrap_java_library", "bootstrap_java_binary")
+
+bootstrap_java_library(
+ name = "skylark-deps",
+ jars = [
+ "//third_party:jsr305-jars",
+ ],
+)
+
+bootstrap_java_binary(
+ name = "bootstrap",
+ srcs = glob(["java/**/*.java"]),
+ main_class = "com.google.devtools.build.singlejar.SingleJar",
+ visibility = ["//visibility:public"],
+ deps = [
+ ":skylark-deps",
+ "//src/main/java:shell-skylark",
+ ],
+)
diff --git a/src/main/java/BUILD b/src/main/java/BUILD
index 5d9c44e7f0..0d0bda354c 100644
--- a/src/main/java/BUILD
+++ b/src/main/java/BUILD
@@ -267,3 +267,14 @@ genrule(
cmd = "$(location :skydoc_bin) $@",
tools = [":skydoc_bin"],
)
+
+#
+# Bootstrapping SingleJar using Skylark rules
+#
+load("/tools/build_rules/java_rules_skylark", "bootstrap_java_library")
+
+bootstrap_java_library(
+ name = "shell-skylark",
+ srcs = glob(["com/google/devtools/build/lib/shell/*.java"]),
+ jars = ["//third_party:guava"],
+)
diff --git a/third_party/BUILD b/third_party/BUILD
index de753d31e5..ecca1450c8 100644
--- a/third_party/BUILD
+++ b/third_party/BUILD
@@ -155,11 +155,23 @@ java_import(
jars = ["error_prone/error_prone_core-2.0.2.jar"],
)
+# For bootstrapping JavaBuilder
+filegroup(
+ name = "error_prone-jars",
+ srcs = ["error_prone/error_prone_core-2.0.2.jar"],
+)
+
java_import(
name = "guava",
jars = ["guava/guava-18.0.jar"],
)
+# For bootstrapping JavaBuilder
+filegroup(
+ name = "guava-jars",
+ srcs = ["guava/guava-18.0.jar"],
+)
+
java_import(
name = "joda_time",
jars = ["joda_time/joda-time-2.3.jar"],
@@ -170,6 +182,12 @@ java_import(
jars = ["jsr305/jsr-305.jar"],
)
+# For bootstrapping JavaBuilder
+filegroup(
+ name = "jsr305-jars",
+ srcs = ["jsr305/jsr-305.jar"],
+)
+
java_import(
name = "jsr330_inject",
jars = ["jsr330_inject/javax.inject.jar"],
@@ -199,6 +217,12 @@ java_import(
jars = ["protobuf/protobuf-2.5.0.jar"],
)
+# For bootstrapping JavaBuilder
+filegroup(
+ name = "protobuf-jars",
+ srcs = ["protobuf/protobuf-2.5.0.jar"],
+)
+
java_import(
name = "tomcat_annotations_api",
jars = ["tomcat_annotations_api/tomcat-annotations-api-8.0.5.jar"],
diff --git a/tools/build_rules/java_rules_skylark.bzl b/tools/build_rules/java_rules_skylark.bzl
index 1f556ef0d1..16640e965f 100644
--- a/tools/build_rules/java_rules_skylark.bzl
+++ b/tools/build_rules/java_rules_skylark.bzl
@@ -31,6 +31,7 @@ def path_separator(ctx):
# production ready.
def java_library_impl(ctx):
+ javac_options = ctx.configuration.fragment(java_configuration).default_javac_flags
class_jar = ctx.outputs.class_jar
compile_time_jars = set(order="link")
runtime_jars = set(order="link")
@@ -39,11 +40,14 @@ def java_library_impl(ctx):
runtime_jars += dep.runtime_jars
jars = jar_filetype.filter(ctx.files.jars)
- compile_time_jars += jars
+ neverlink_jars = jar_filetype.filter(ctx.files.neverlink_jars)
+ compile_time_jars += jars + neverlink_jars
runtime_jars += jars
compile_time_jars_list = list(compile_time_jars) # TODO: This is weird.
build_output = class_jar.path + ".build_output"
+ java_output = class_jar.path + ".build_java"
+ javalist_output = class_jar.path + ".build_java_list"
sources = ctx.files.srcs
sources_param_file = ctx.new_file(
@@ -54,12 +58,22 @@ def java_library_impl(ctx):
executable = False)
# Cleaning build output directory
- cmd = "set -e;rm -rf " + build_output + ";mkdir " + build_output + "\n"
- if ctx.files.srcs:
+ cmd = "set -e;rm -rf " + build_output + " " + java_output + " " + javalist_output + "\n"
+ cmd += "mkdir " + build_output + " " + java_output + "\n"
+ files = " @" + sources_param_file.path
+
+ if ctx.files.srcjars:
+ files += " @" + javalist_output
+ for file in ctx.files.srcjars:
+ cmd += "jar tf %s | grep '\.java$' | sed 's|^|%s/|' >> %s\n" % (file.path, java_output, javalist_output)
+ cmd += "unzip %s -d %s >/dev/null\n" % (file.path, java_output)
+
+ if ctx.files.srcs or ctx.files.srcjars:
cmd += JAVA_PATH + "javac"
+ cmd += " " + " ".join(javac_options)
if compile_time_jars:
cmd += " -classpath '" + cmd_helper.join_paths(path_separator(ctx), compile_time_jars) + "'"
- cmd += " -d " + build_output + " @" + sources_param_file.path + "\n"
+ cmd += " -d " + build_output + files + "\n"
# We haven't got a good story for where these should end up, so
# stick them in the root of the jar.
@@ -69,7 +83,7 @@ def java_library_impl(ctx):
"touch " + build_output + "\n")
ctx.action(
inputs = (sources + compile_time_jars_list + [sources_param_file] +
- ctx.files.resources),
+ ctx.files.resources + ctx.files.srcjars),
outputs = [class_jar],
mnemonic='Javac',
command=cmd,
@@ -167,9 +181,10 @@ def java_import_impl(ctx):
# TODO(bazel-team): Why do we need to filter here? The attribute
# already says only jars are allowed.
jars = set(jar_filetype.filter(ctx.files.jars))
+ neverlink_jars = set(jar_filetype.filter(ctx.files.neverlink_jars))
runfiles = ctx.runfiles(collect_data = True)
return struct(files = jars,
- compile_time_jars = jars,
+ compile_time_jars = jars + neverlink_jars,
runtime_jars = jars,
runfiles = runfiles)
@@ -179,6 +194,8 @@ java_library_attrs = {
"resources": attr.label_list(allow_files=True),
"srcs": attr.label_list(allow_files=java_filetype),
"jars": attr.label_list(allow_files=jar_filetype),
+ "neverlink_jars": attr.label_list(allow_files=jar_filetype),
+ "srcjars": attr.label_list(allow_files=srcjar_filetype),
"deps": attr.label_list(
allow_files=False,
providers = ["compile_time_jars", "runtime_jars"]),
@@ -191,6 +208,14 @@ java_library = rule(
"class_jar": "lib%{name}.jar",
})
+# A copy to avoid conflict with native rule.
+bootstrap_java_library = rule(
+ java_library_impl,
+ attrs = java_library_attrs,
+ outputs = {
+ "class_jar": "lib%{name}.jar",
+ })
+
java_binary_attrs_common = java_library_attrs + {
"jvm_flags": attr.string_list(),
"jvm": attr.label(default=Label("//tools/jdk:jdk"), allow_files=True),
@@ -213,6 +238,12 @@ java_binary = rule(java_binary_impl,
attrs = java_binary_attrs,
outputs = java_binary_outputs)
+# A copy to avoid conflict with native rule
+bootstrap_java_binary = rule(java_binary_impl,
+ executable = True,
+ attrs = java_binary_attrs,
+ outputs = java_binary_outputs)
+
java_test = rule(java_binary_impl,
executable = True,
attrs = java_binary_attrs_common + {
@@ -230,4 +261,5 @@ java_import = rule(
attrs = {
"jars": attr.label_list(allow_files=jar_filetype),
"srcjar": attr.label(allow_files=srcjar_filetype),
+ "neverlink_jars": attr.label_list(allow_files=jar_filetype, default=[]),
})
diff --git a/tools/jdk/BUILD b/tools/jdk/BUILD
index a3d4fe107d..4bc736bad5 100644
--- a/tools/jdk/BUILD
+++ b/tools/jdk/BUILD
@@ -45,7 +45,7 @@ filegroup(
java_import(
name = "langtools-neverlink",
- jars = ["//external:langtools"],
+ jars = ["//tools/defaults:java_langtools"],
neverlink = 1,
)