diff options
-rwxr-xr-x | compile.sh | 87 | ||||
-rw-r--r-- | src/java_tools/buildjar/BUILD | 25 | ||||
-rw-r--r-- | src/java_tools/singlejar/BUILD | 23 | ||||
-rw-r--r-- | src/main/java/BUILD | 11 | ||||
-rw-r--r-- | third_party/BUILD | 24 | ||||
-rw-r--r-- | tools/build_rules/java_rules_skylark.bzl | 44 | ||||
-rw-r--r-- | tools/jdk/BUILD | 2 |
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, ) |