Damien Martin-Guillerez | f88f4d8 | 2015-09-25 13:56:55 +0000 | [diff] [blame] | 1 | # Copyright 2014 The Bazel Authors. All rights reserved. |
Han-Wen Nienhuys | d08b27f | 2015-02-25 16:45:20 +0100 | [diff] [blame] | 2 | # |
| 3 | # Licensed under the Apache License, Version 2.0 (the "License"); |
| 4 | # you may not use this file except in compliance with the License. |
| 5 | # You may obtain a copy of the License at |
| 6 | # |
| 7 | # http://www.apache.org/licenses/LICENSE-2.0 |
| 8 | # |
| 9 | # Unless required by applicable law or agreed to in writing, software |
| 10 | # distributed under the License is distributed on an "AS IS" BASIS, |
| 11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| 12 | # See the License for the specific language governing permissions and |
| 13 | # limitations under the License. |
| 14 | |
laurentlb | a7f3b85 | 2018-09-03 04:29:01 -0700 | [diff] [blame] | 15 | """Java rules for bootstraping Bazel. |
Han-Wen Nienhuys | d08b27f | 2015-02-25 16:45:20 +0100 | [diff] [blame] | 16 | |
laurentlb | a7f3b85 | 2018-09-03 04:29:01 -0700 | [diff] [blame] | 17 | |
| 18 | This is a quick and dirty rule to make Bazel compile itself. It's not production |
| 19 | ready. |
| 20 | """ |
Han-Wen Nienhuys | d08b27f | 2015-02-25 16:45:20 +0100 | [diff] [blame] | 21 | |
cparsons | 3f87a95 | 2019-04-19 12:13:36 -0700 | [diff] [blame] | 22 | _JarsInfo = provider(fields = ["compile_time_jars", "runtime_jars"]) |
| 23 | |
| 24 | def _java_library_impl(ctx): |
vladmos | 20a042f | 2018-06-01 04:51:21 -0700 | [diff] [blame] | 25 | javac_options = ctx.fragments.java.default_javac_flags |
| 26 | class_jar = ctx.outputs.class_jar |
| 27 | compile_time_jars = depset(order = "topological") |
| 28 | runtime_jars = depset(order = "topological") |
| 29 | for dep in ctx.attr.deps: |
cparsons | 3f87a95 | 2019-04-19 12:13:36 -0700 | [diff] [blame] | 30 | compile_time_jars = depset( |
| 31 | transitive = [compile_time_jars, dep[_JarsInfo].compile_time_jars], |
| 32 | ) |
| 33 | runtime_jars = depset( |
| 34 | transitive = [runtime_jars, dep[_JarsInfo].runtime_jars], |
| 35 | ) |
Han-Wen Nienhuys | d08b27f | 2015-02-25 16:45:20 +0100 | [diff] [blame] | 36 | |
laurentlb | a7f3b85 | 2018-09-03 04:29:01 -0700 | [diff] [blame] | 37 | jars = ctx.files.jars |
| 38 | neverlink_jars = ctx.files.neverlink_jars |
laurentlb | e5d4219 | 2019-04-25 10:50:14 -0700 | [diff] [blame] | 39 | compile_time_jars = depset(jars + neverlink_jars, transitive = [compile_time_jars]) |
| 40 | runtime_jars = depset(jars, transitive = [runtime_jars]) |
twerth | b57c2a4 | 2018-11-13 11:23:59 -0800 | [diff] [blame] | 41 | compile_time_jars_list = compile_time_jars.to_list() # TODO: This is weird. |
Han-Wen Nienhuys | d08b27f | 2015-02-25 16:45:20 +0100 | [diff] [blame] | 42 | |
vladmos | 20a042f | 2018-06-01 04:51:21 -0700 | [diff] [blame] | 43 | build_output = class_jar.path + ".build_output" |
| 44 | java_output = class_jar.path + ".build_java" |
| 45 | javalist_output = class_jar.path + ".build_java_list" |
| 46 | sources = ctx.files.srcs |
Han-Wen Nienhuys | d08b27f | 2015-02-25 16:45:20 +0100 | [diff] [blame] | 47 | |
laurentlb | f09429c | 2018-11-14 06:07:43 -0800 | [diff] [blame] | 48 | sources_param_file = ctx.actions.declare_file(class_jar.basename + "-2.params") |
| 49 | ctx.actions.write( |
vladmos | 20a042f | 2018-06-01 04:51:21 -0700 | [diff] [blame] | 50 | output = sources_param_file, |
| 51 | content = cmd_helper.join_paths("\n", depset(sources)), |
laurentlb | f09429c | 2018-11-14 06:07:43 -0800 | [diff] [blame] | 52 | is_executable = False, |
vladmos | 20a042f | 2018-06-01 04:51:21 -0700 | [diff] [blame] | 53 | ) |
Han-Wen Nienhuys | d08b27f | 2015-02-25 16:45:20 +0100 | [diff] [blame] | 54 | |
vladmos | 20a042f | 2018-06-01 04:51:21 -0700 | [diff] [blame] | 55 | # Cleaning build output directory |
| 56 | cmd = "set -e;rm -rf " + build_output + " " + java_output + " " + javalist_output + "\n" |
| 57 | cmd += "mkdir " + build_output + " " + java_output + "\n" |
| 58 | files = " @" + sources_param_file.path |
cushon | 366da4c | 2018-08-08 08:38:54 -0700 | [diff] [blame] | 59 | java_runtime = ctx.attr._jdk[java_common.JavaRuntimeInfo] |
| 60 | jar_path = "%s/bin/jar" % java_runtime.java_home |
Damien Martin-Guillerez | d6f4808 | 2015-06-05 10:50:43 +0000 | [diff] [blame] | 61 | |
vladmos | 20a042f | 2018-06-01 04:51:21 -0700 | [diff] [blame] | 62 | if ctx.files.srcjars: |
| 63 | files += " @" + javalist_output |
| 64 | for file in ctx.files.srcjars: |
cushon | 366da4c | 2018-08-08 08:38:54 -0700 | [diff] [blame] | 65 | cmd += "%s tf %s | grep '\.java$' | sed 's|^|%s/|' >> %s\n" % (jar_path, file.path, java_output, javalist_output) |
vladmos | 20a042f | 2018-06-01 04:51:21 -0700 | [diff] [blame] | 66 | cmd += "unzip %s -d %s >/dev/null\n" % (file.path, java_output) |
Damien Martin-Guillerez | d6f4808 | 2015-06-05 10:50:43 +0000 | [diff] [blame] | 67 | |
vladmos | 20a042f | 2018-06-01 04:51:21 -0700 | [diff] [blame] | 68 | if ctx.files.srcs or ctx.files.srcjars: |
cushon | 366da4c | 2018-08-08 08:38:54 -0700 | [diff] [blame] | 69 | cmd += "%s/bin/javac" % java_runtime.java_home |
vladmos | 20a042f | 2018-06-01 04:51:21 -0700 | [diff] [blame] | 70 | cmd += " " + " ".join(javac_options) |
| 71 | if compile_time_jars: |
| 72 | cmd += " -classpath '" + cmd_helper.join_paths(ctx.configuration.host_path_separator, compile_time_jars) + "'" |
| 73 | cmd += " -d " + build_output + files + "\n" |
Han-Wen Nienhuys | d08b27f | 2015-02-25 16:45:20 +0100 | [diff] [blame] | 74 | |
vladmos | 20a042f | 2018-06-01 04:51:21 -0700 | [diff] [blame] | 75 | # We haven't got a good story for where these should end up, so |
| 76 | # stick them in the root of the jar. |
| 77 | for r in ctx.files.resources: |
| 78 | cmd += "cp %s %s\n" % (r.path, build_output) |
cushon | 366da4c | 2018-08-08 08:38:54 -0700 | [diff] [blame] | 79 | cmd += (jar_path + " cf " + class_jar.path + " -C " + build_output + " .\n" + |
vladmos | 20a042f | 2018-06-01 04:51:21 -0700 | [diff] [blame] | 80 | "touch " + build_output + "\n") |
laurentlb | f09429c | 2018-11-14 06:07:43 -0800 | [diff] [blame] | 81 | ctx.actions.run_shell( |
vladmos | 20a042f | 2018-06-01 04:51:21 -0700 | [diff] [blame] | 82 | inputs = (sources + compile_time_jars_list + [sources_param_file] + |
cushon | 366da4c | 2018-08-08 08:38:54 -0700 | [diff] [blame] | 83 | ctx.files._jdk + ctx.files.resources + ctx.files.srcjars), |
vladmos | 20a042f | 2018-06-01 04:51:21 -0700 | [diff] [blame] | 84 | outputs = [class_jar], |
| 85 | mnemonic = "JavacBootstrap", |
| 86 | command = cmd, |
| 87 | use_default_shell_env = True, |
| 88 | ) |
Han-Wen Nienhuys | d08b27f | 2015-02-25 16:45:20 +0100 | [diff] [blame] | 89 | |
vladmos | 20a042f | 2018-06-01 04:51:21 -0700 | [diff] [blame] | 90 | runfiles = ctx.runfiles(collect_data = True) |
Han-Wen Nienhuys | d08b27f | 2015-02-25 16:45:20 +0100 | [diff] [blame] | 91 | |
cparsons | 3f87a95 | 2019-04-19 12:13:36 -0700 | [diff] [blame] | 92 | compile_time_jars = depset(transitive = [compile_time_jars], direct = [class_jar]) |
| 93 | runtime_jars = depset(transitive = [runtime_jars], direct = [class_jar]) |
| 94 | |
| 95 | return [ |
| 96 | DefaultInfo( |
cparsons | 6e821a1 | 2019-04-04 12:46:55 -0700 | [diff] [blame] | 97 | files = depset([class_jar]), |
| 98 | runfiles = runfiles, |
cparsons | 3f87a95 | 2019-04-19 12:13:36 -0700 | [diff] [blame] | 99 | ), |
| 100 | _JarsInfo( |
| 101 | compile_time_jars = compile_time_jars, |
| 102 | runtime_jars = runtime_jars, |
| 103 | ), |
| 104 | ] |
Han-Wen Nienhuys | d08b27f | 2015-02-25 16:45:20 +0100 | [diff] [blame] | 105 | |
cparsons | 3f87a95 | 2019-04-19 12:13:36 -0700 | [diff] [blame] | 106 | def _java_binary_impl(ctx): |
| 107 | library_result = _java_library_impl(ctx) |
Han-Wen Nienhuys | d08b27f | 2015-02-25 16:45:20 +0100 | [diff] [blame] | 108 | |
vladmos | 20a042f | 2018-06-01 04:51:21 -0700 | [diff] [blame] | 109 | deploy_jar = ctx.outputs.deploy_jar |
| 110 | manifest = ctx.outputs.manifest |
| 111 | build_output = deploy_jar.path + ".build_output" |
| 112 | main_class = ctx.attr.main_class |
cushon | 366da4c | 2018-08-08 08:38:54 -0700 | [diff] [blame] | 113 | java_runtime = ctx.attr._jdk[java_common.JavaRuntimeInfo] |
| 114 | jar_path = "%s/bin/jar" % java_runtime.java_home |
laurentlb | f09429c | 2018-11-14 06:07:43 -0800 | [diff] [blame] | 115 | ctx.actions.write( |
vladmos | 20a042f | 2018-06-01 04:51:21 -0700 | [diff] [blame] | 116 | output = manifest, |
| 117 | content = "Main-Class: " + main_class + "\n", |
laurentlb | f09429c | 2018-11-14 06:07:43 -0800 | [diff] [blame] | 118 | is_executable = False, |
vladmos | 20a042f | 2018-06-01 04:51:21 -0700 | [diff] [blame] | 119 | ) |
Han-Wen Nienhuys | d08b27f | 2015-02-25 16:45:20 +0100 | [diff] [blame] | 120 | |
vladmos | 20a042f | 2018-06-01 04:51:21 -0700 | [diff] [blame] | 121 | # Cleaning build output directory |
| 122 | cmd = "set -e;rm -rf " + build_output + ";mkdir " + build_output + "\n" |
laurentlb | 67ba1d6 | 2019-06-03 07:58:51 -0700 | [diff] [blame] | 123 | for jar in library_result[1].runtime_jars.to_list(): |
vladmos | 20a042f | 2018-06-01 04:51:21 -0700 | [diff] [blame] | 124 | cmd += "unzip -qn " + jar.path + " -d " + build_output + "\n" |
cushon | 366da4c | 2018-08-08 08:38:54 -0700 | [diff] [blame] | 125 | cmd += (jar_path + " cmf " + manifest.path + " " + |
vladmos | 20a042f | 2018-06-01 04:51:21 -0700 | [diff] [blame] | 126 | deploy_jar.path + " -C " + build_output + " .\n" + |
| 127 | "touch " + build_output + "\n") |
Han-Wen Nienhuys | d08b27f | 2015-02-25 16:45:20 +0100 | [diff] [blame] | 128 | |
laurentlb | f09429c | 2018-11-14 06:07:43 -0800 | [diff] [blame] | 129 | ctx.actions.run_shell( |
laurentlb | 67ba1d6 | 2019-06-03 07:58:51 -0700 | [diff] [blame] | 130 | inputs = library_result[1].runtime_jars.to_list() + [manifest] + ctx.files._jdk, |
vladmos | 20a042f | 2018-06-01 04:51:21 -0700 | [diff] [blame] | 131 | outputs = [deploy_jar], |
| 132 | mnemonic = "Deployjar", |
| 133 | command = cmd, |
| 134 | use_default_shell_env = True, |
| 135 | ) |
Han-Wen Nienhuys | d08b27f | 2015-02-25 16:45:20 +0100 | [diff] [blame] | 136 | |
vladmos | 20a042f | 2018-06-01 04:51:21 -0700 | [diff] [blame] | 137 | # Write the wrapper. |
| 138 | executable = ctx.outputs.executable |
laurentlb | f09429c | 2018-11-14 06:07:43 -0800 | [diff] [blame] | 139 | ctx.actions.write( |
vladmos | 20a042f | 2018-06-01 04:51:21 -0700 | [diff] [blame] | 140 | output = executable, |
| 141 | content = "\n".join([ |
| 142 | "#!/bin/bash", |
| 143 | "# autogenerated - do not edit.", |
| 144 | "case \"$0\" in", |
| 145 | "/*) self=\"$0\" ;;", |
| 146 | "*) self=\"$PWD/$0\";;", |
| 147 | "esac", |
| 148 | "", |
| 149 | "if [[ -z \"$JAVA_RUNFILES\" ]]; then", |
| 150 | " if [[ -e \"${self}.runfiles\" ]]; then", |
| 151 | " export JAVA_RUNFILES=\"${self}.runfiles\"", |
| 152 | " fi", |
| 153 | " if [[ -n \"$JAVA_RUNFILES\" ]]; then", |
| 154 | " export TEST_SRCDIR=${TEST_SRCDIR:-$JAVA_RUNFILES}", |
| 155 | " fi", |
| 156 | "fi", |
| 157 | "", |
cushon | 366da4c | 2018-08-08 08:38:54 -0700 | [diff] [blame] | 158 | "jvm_bin=%s" % (ctx.attr._jdk[java_common.JavaRuntimeInfo].java_executable_exec_path), |
vladmos | 20a042f | 2018-06-01 04:51:21 -0700 | [diff] [blame] | 159 | "if [[ ! -x ${jvm_bin} ]]; then", |
| 160 | " jvm_bin=$(which java)", |
| 161 | "fi", |
Han-Wen Nienhuys | d08b27f | 2015-02-25 16:45:20 +0100 | [diff] [blame] | 162 | |
vladmos | 20a042f | 2018-06-01 04:51:21 -0700 | [diff] [blame] | 163 | # We extract the .so into a temp dir. If only we could mmap |
| 164 | # directly from the zip file. |
| 165 | "DEPLOY=$(dirname $self)/$(basename %s)" % deploy_jar.path, |
Han-Wen Nienhuys | d08b27f | 2015-02-25 16:45:20 +0100 | [diff] [blame] | 166 | |
vladmos | 20a042f | 2018-06-01 04:51:21 -0700 | [diff] [blame] | 167 | # This works both on Darwin and Linux, with the darwin path |
| 168 | # looking like tmp.XXXXXXXX.{random} |
| 169 | "SO_DIR=$(mktemp -d -t tmp.XXXXXXXXX)", |
| 170 | "function cleanup() {", |
| 171 | " rm -rf ${SO_DIR}", |
| 172 | "}", |
| 173 | "trap cleanup EXIT", |
| 174 | "unzip -q -d ${SO_DIR} ${DEPLOY} \"*.so\" \"*.dll\" \"*.dylib\" >& /dev/null", |
| 175 | ("${jvm_bin} -Djava.library.path=${SO_DIR} %s -jar $DEPLOY \"$@\"" % |
| 176 | " ".join(ctx.attr.jvm_flags)), |
| 177 | "", |
Han-Wen Nienhuys | d08b27f | 2015-02-25 16:45:20 +0100 | [diff] [blame] | 178 | ]), |
laurentlb | f09429c | 2018-11-14 06:07:43 -0800 | [diff] [blame] | 179 | is_executable = True, |
vladmos | 20a042f | 2018-06-01 04:51:21 -0700 | [diff] [blame] | 180 | ) |
Han-Wen Nienhuys | d08b27f | 2015-02-25 16:45:20 +0100 | [diff] [blame] | 181 | |
vladmos | 20a042f | 2018-06-01 04:51:21 -0700 | [diff] [blame] | 182 | runfiles = ctx.runfiles(files = [deploy_jar, executable] + ctx.files._jdk, collect_data = True) |
cparsons | 3f87a95 | 2019-04-19 12:13:36 -0700 | [diff] [blame] | 183 | files_to_build = depset( |
| 184 | transitive = [library_result[0].files], |
| 185 | direct = [deploy_jar, manifest, executable], |
| 186 | ) |
Han-Wen Nienhuys | d08b27f | 2015-02-25 16:45:20 +0100 | [diff] [blame] | 187 | |
cparsons | 6e821a1 | 2019-04-04 12:46:55 -0700 | [diff] [blame] | 188 | return [DefaultInfo(files = files_to_build, runfiles = runfiles)] |
Han-Wen Nienhuys | d08b27f | 2015-02-25 16:45:20 +0100 | [diff] [blame] | 189 | |
cparsons | 3f87a95 | 2019-04-19 12:13:36 -0700 | [diff] [blame] | 190 | def _java_import_impl(ctx): |
vladmos | 20a042f | 2018-06-01 04:51:21 -0700 | [diff] [blame] | 191 | # TODO(bazel-team): Why do we need to filter here? The attribute |
| 192 | # already says only jars are allowed. |
laurentlb | a7f3b85 | 2018-09-03 04:29:01 -0700 | [diff] [blame] | 193 | jars = depset(ctx.files.jars) |
| 194 | neverlink_jars = depset(ctx.files.neverlink_jars) |
vladmos | 20a042f | 2018-06-01 04:51:21 -0700 | [diff] [blame] | 195 | runfiles = ctx.runfiles(collect_data = True) |
cparsons | 3f87a95 | 2019-04-19 12:13:36 -0700 | [diff] [blame] | 196 | compile_time_jars = depset(transitive = [jars, neverlink_jars]) |
| 197 | |
| 198 | return [ |
| 199 | DefaultInfo(files = jars, runfiles = runfiles), |
| 200 | _JarsInfo( |
| 201 | compile_time_jars = compile_time_jars, |
| 202 | runtime_jars = jars, |
| 203 | ), |
| 204 | ] |
Han-Wen Nienhuys | d08b27f | 2015-02-25 16:45:20 +0100 | [diff] [blame] | 205 | |
| 206 | java_library_attrs = { |
cushon | 366da4c | 2018-08-08 08:38:54 -0700 | [diff] [blame] | 207 | "_jdk": attr.label( |
| 208 | default = Label("//tools/jdk:current_java_runtime"), |
| 209 | providers = [java_common.JavaRuntimeInfo], |
| 210 | ), |
gregce | d92725b | 2018-07-09 15:30:19 -0700 | [diff] [blame] | 211 | "data": attr.label_list(allow_files = True), |
vladmos | 20a042f | 2018-06-01 04:51:21 -0700 | [diff] [blame] | 212 | "resources": attr.label_list(allow_files = True), |
laurentlb | a7f3b85 | 2018-09-03 04:29:01 -0700 | [diff] [blame] | 213 | "srcs": attr.label_list(allow_files = [".java"]), |
| 214 | "jars": attr.label_list(allow_files = [".jar"]), |
| 215 | "neverlink_jars": attr.label_list(allow_files = [".jar"]), |
| 216 | "srcjars": attr.label_list(allow_files = [".jar", ".srcjar"]), |
Han-Wen Nienhuys | d08b27f | 2015-02-25 16:45:20 +0100 | [diff] [blame] | 217 | "deps": attr.label_list( |
vladmos | 20a042f | 2018-06-01 04:51:21 -0700 | [diff] [blame] | 218 | allow_files = False, |
cparsons | 3f87a95 | 2019-04-19 12:13:36 -0700 | [diff] [blame] | 219 | providers = [_JarsInfo], |
vladmos | 20a042f | 2018-06-01 04:51:21 -0700 | [diff] [blame] | 220 | ), |
| 221 | } |
Han-Wen Nienhuys | d08b27f | 2015-02-25 16:45:20 +0100 | [diff] [blame] | 222 | |
| 223 | java_library = rule( |
cparsons | 3f87a95 | 2019-04-19 12:13:36 -0700 | [diff] [blame] | 224 | _java_library_impl, |
Han-Wen Nienhuys | d08b27f | 2015-02-25 16:45:20 +0100 | [diff] [blame] | 225 | attrs = java_library_attrs, |
| 226 | outputs = { |
| 227 | "class_jar": "lib%{name}.jar", |
Ulf Adams | 52bcf5a | 2015-08-24 07:41:45 +0000 | [diff] [blame] | 228 | }, |
vladmos | 20a042f | 2018-06-01 04:51:21 -0700 | [diff] [blame] | 229 | fragments = ["java", "cpp"], |
Ulf Adams | 52bcf5a | 2015-08-24 07:41:45 +0000 | [diff] [blame] | 230 | ) |
Han-Wen Nienhuys | d08b27f | 2015-02-25 16:45:20 +0100 | [diff] [blame] | 231 | |
Damien Martin-Guillerez | d6f4808 | 2015-06-05 10:50:43 +0000 | [diff] [blame] | 232 | # A copy to avoid conflict with native rule. |
| 233 | bootstrap_java_library = rule( |
cparsons | 3f87a95 | 2019-04-19 12:13:36 -0700 | [diff] [blame] | 234 | _java_library_impl, |
Damien Martin-Guillerez | d6f4808 | 2015-06-05 10:50:43 +0000 | [diff] [blame] | 235 | attrs = java_library_attrs, |
| 236 | outputs = { |
| 237 | "class_jar": "lib%{name}.jar", |
Ulf Adams | 52bcf5a | 2015-08-24 07:41:45 +0000 | [diff] [blame] | 238 | }, |
vladmos | 20a042f | 2018-06-01 04:51:21 -0700 | [diff] [blame] | 239 | fragments = ["java"], |
Ulf Adams | 52bcf5a | 2015-08-24 07:41:45 +0000 | [diff] [blame] | 240 | ) |
Damien Martin-Guillerez | d6f4808 | 2015-06-05 10:50:43 +0000 | [diff] [blame] | 241 | |
vladmos | ceaed51 | 2018-01-03 12:20:57 -0800 | [diff] [blame] | 242 | java_binary_attrs_common = dict(java_library_attrs) |
| 243 | java_binary_attrs_common.update({ |
Han-Wen Nienhuys | d08b27f | 2015-02-25 16:45:20 +0100 | [diff] [blame] | 244 | "jvm_flags": attr.string_list(), |
vladmos | 20a042f | 2018-06-01 04:51:21 -0700 | [diff] [blame] | 245 | "jvm": attr.label(default = Label("//tools/jdk:jdk"), allow_files = True), |
vladmos | ceaed51 | 2018-01-03 12:20:57 -0800 | [diff] [blame] | 246 | }) |
Han-Wen Nienhuys | d08b27f | 2015-02-25 16:45:20 +0100 | [diff] [blame] | 247 | |
vladmos | ceaed51 | 2018-01-03 12:20:57 -0800 | [diff] [blame] | 248 | java_binary_attrs = dict(java_binary_attrs_common) |
vladmos | 20a042f | 2018-06-01 04:51:21 -0700 | [diff] [blame] | 249 | java_binary_attrs["main_class"] = attr.string(mandatory = True) |
Han-Wen Nienhuys | d08b27f | 2015-02-25 16:45:20 +0100 | [diff] [blame] | 250 | |
| 251 | java_binary_outputs = { |
| 252 | "class_jar": "lib%{name}.jar", |
| 253 | "deploy_jar": "%{name}_deploy.jar", |
vladmos | 20a042f | 2018-06-01 04:51:21 -0700 | [diff] [blame] | 254 | "manifest": "%{name}_MANIFEST.MF", |
Han-Wen Nienhuys | d08b27f | 2015-02-25 16:45:20 +0100 | [diff] [blame] | 255 | } |
| 256 | |
vladmos | 20a042f | 2018-06-01 04:51:21 -0700 | [diff] [blame] | 257 | java_binary = rule( |
cparsons | 3f87a95 | 2019-04-19 12:13:36 -0700 | [diff] [blame] | 258 | _java_binary_impl, |
vladmos | 20a042f | 2018-06-01 04:51:21 -0700 | [diff] [blame] | 259 | executable = True, |
| 260 | attrs = java_binary_attrs, |
| 261 | outputs = java_binary_outputs, |
| 262 | fragments = ["java", "cpp"], |
Ulf Adams | 52bcf5a | 2015-08-24 07:41:45 +0000 | [diff] [blame] | 263 | ) |
Han-Wen Nienhuys | d08b27f | 2015-02-25 16:45:20 +0100 | [diff] [blame] | 264 | |
Damien Martin-Guillerez | d6f4808 | 2015-06-05 10:50:43 +0000 | [diff] [blame] | 265 | # A copy to avoid conflict with native rule |
vladmos | 20a042f | 2018-06-01 04:51:21 -0700 | [diff] [blame] | 266 | bootstrap_java_binary = rule( |
cparsons | 3f87a95 | 2019-04-19 12:13:36 -0700 | [diff] [blame] | 267 | _java_binary_impl, |
vladmos | 20a042f | 2018-06-01 04:51:21 -0700 | [diff] [blame] | 268 | executable = True, |
| 269 | attrs = java_binary_attrs, |
| 270 | outputs = java_binary_outputs, |
| 271 | fragments = ["java"], |
Ulf Adams | 52bcf5a | 2015-08-24 07:41:45 +0000 | [diff] [blame] | 272 | ) |
Damien Martin-Guillerez | d6f4808 | 2015-06-05 10:50:43 +0000 | [diff] [blame] | 273 | |
vladmos | 20a042f | 2018-06-01 04:51:21 -0700 | [diff] [blame] | 274 | java_test = rule( |
cparsons | 3f87a95 | 2019-04-19 12:13:36 -0700 | [diff] [blame] | 275 | _java_binary_impl, |
vladmos | 20a042f | 2018-06-01 04:51:21 -0700 | [diff] [blame] | 276 | executable = True, |
Googler | 9a8318e | 2019-01-11 11:12:01 -0800 | [diff] [blame] | 277 | attrs = dict(list(java_binary_attrs_common.items()) + [ |
vladmos | 20a042f | 2018-06-01 04:51:21 -0700 | [diff] [blame] | 278 | ("main_class", attr.string(default = "org.junit.runner.JUnitCore")), |
| 279 | # TODO(bazel-team): it would be better if we could offer a |
| 280 | # test_class attribute, but the "args" attribute is hard |
| 281 | # coded in the bazel infrastructure. |
| 282 | ]), |
| 283 | outputs = java_binary_outputs, |
| 284 | test = True, |
| 285 | fragments = ["java", "cpp"], |
Han-Wen Nienhuys | d08b27f | 2015-02-25 16:45:20 +0100 | [diff] [blame] | 286 | ) |
| 287 | |
| 288 | java_import = rule( |
cparsons | 3f87a95 | 2019-04-19 12:13:36 -0700 | [diff] [blame] | 289 | _java_import_impl, |
Han-Wen Nienhuys | d08b27f | 2015-02-25 16:45:20 +0100 | [diff] [blame] | 290 | attrs = { |
laurentlb | a7f3b85 | 2018-09-03 04:29:01 -0700 | [diff] [blame] | 291 | "jars": attr.label_list(allow_files = [".jar"]), |
| 292 | "srcjar": attr.label(allow_files = [".jar", ".srcjar"]), |
| 293 | "neverlink_jars": attr.label_list(allow_files = [".jar"], default = []), |
vladmos | 20a042f | 2018-06-01 04:51:21 -0700 | [diff] [blame] | 294 | }, |
| 295 | ) |