# Copyright 2017 The Bazel Authors. All rights reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. """Bazel rules for creating Java toolchains.""" JDK8_JVM_OPTS = [ "-Xbootclasspath/p:$(location //third_party/java/jdk/langtools:javac_jar)", ] JDK9_JVM_OPTS = [ # Allow JavaBuilder to access internal javac APIs. "--add-exports=jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED", "--add-exports=jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED", "--add-exports=jdk.compiler/com.sun.tools.javac.comp=ALL-UNNAMED", "--add-exports=jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED", "--add-exports=jdk.compiler/com.sun.tools.javac.main=ALL-UNNAMED", "--add-exports=jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED", "--add-exports=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED", "--add-opens=jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED", # TODO(cushon): override the javac in the JDK. # "--patch-module=java.compiler=$(location //third_party/java/jdk/langtools/blaze:java_compiler_jar)", # "--patch-module=jdk.compiler=$(location //third_party/java/jdk/langtools/blaze:jdk_compiler_jar)", ] DEFAULT_COMPATIBLE_JAVACOPTS = { # Restrict protos to Java 7 so that they are compatible with Android. "proto": [ "-source", "7", "-target", "7", ], } DEFAULT_JAVACOPTS = [ "-XDskipDuplicateBridges=true", "-g", "-parameters", ] DEFAULT_TOOLCHAIN_CONFIGURATION = { # javac -extdirs is implemented by appending the contents to the platform # class path after -bootclasspath. For convenience, we currently have a # single jar that contains the contents of both the bootclasspath and # extdirs. "bootclasspath": ["@bazel_tools//tools/jdk:platformclasspath.jar"], "extclasspath": [], "compatible_javacopts": DEFAULT_COMPATIBLE_JAVACOPTS, "encoding": "UTF-8", "forcibly_disable_header_compilation": 0, "genclass": ["@bazel_tools//tools/jdk:genclass"], "header_compiler": ["@bazel_tools//tools/jdk:turbine"], "ijar": ["@bazel_tools//tools/jdk:ijar"], "javabuilder": ["@bazel_tools//tools/jdk:javabuilder"], "javac": ["//third_party/java/jdk/langtools:javac_jar"], "javac_supports_workers": 1, "jvm_opts": JDK8_JVM_OPTS, "misc": DEFAULT_JAVACOPTS, "singlejar": ["@bazel_tools//tools/jdk:singlejar"], "source_version": "8", "target_version": "8", } def default_java_toolchain(name, **kwargs): """Defines a java_toolchain with appropriate defaults for Bazel.""" toolchain_args = dict(DEFAULT_TOOLCHAIN_CONFIGURATION) toolchain_args.update(kwargs) native.java_toolchain( name = name, **toolchain_args )