1 # Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 # Use of this source code is governed by a BSD-style license that can be 3 # found in the LICENSE file. 4 5 # This file is meant to be included into a target to provide a rule 6 # to build Java in a consistent manner. 7 # 8 # To use this, create a gyp target with the following form: 9 # { 10 # 'target_name': 'my-package_java', 11 # 'type': 'none', 12 # 'variables': { 13 # 'java_in_dir': 'path/to/package/root', 14 # }, 15 # 'includes': ['path/to/this/gypi/file'], 16 # } 17 # 18 # Required variables: 19 # java_in_dir - The top-level java directory. The src should be in 20 # <java_in_dir>/src. 21 # Optional/automatic variables: 22 # additional_input_paths - These paths will be included in the 'inputs' list to 23 # ensure that this target is rebuilt when one of these paths changes. 24 # additional_src_dirs - Additional directories with .java files to be compiled 25 # and included in the output of this target. 26 # generated_src_dirs - Same as additional_src_dirs except used for .java files 27 # that are generated at build time. This should be set automatically by a 28 # target's dependencies. The .java files in these directories are not 29 # included in the 'inputs' list (unlike additional_src_dirs). 30 # input_jars_paths - The path to jars to be included in the classpath. This 31 # should be filled automatically by depending on the appropriate targets. 32 # javac_includes - A list of specific files to include. This is by default 33 # empty, which leads to inclusion of all files specified. May include 34 # wildcard, and supports '**/' for recursive path wildcards, ie.: 35 # '**/MyFileRegardlessOfDirectory.java', '**/IncludedPrefix*.java'. 36 # has_java_resources - Set to 1 if the java target contains an 37 # Android-compatible resources folder named res. If 1, R_package and 38 # R_package_relpath must also be set. 39 # R_package - The java package in which the R class (which maps resources to 40 # integer IDs) should be generated, e.g. org.chromium.content. 41 # R_package_relpath - Same as R_package, but replace each '.' with '/'. 42 # res_extra_dirs - A list of extra directories containing Android resources. 43 # These directories may be generated at build time. 44 # res_extra_files - A list of the files in res_extra_dirs. 45 # never_lint - Set to 1 to not run lint on this target. 46 47 { 48 'dependencies': [ 49 '<(DEPTH)/build/android/setup.gyp:build_output_dirs' 50 ], 51 'variables': { 52 'android_jar': '<(android_sdk)/android.jar', 53 'input_jars_paths': [ '<(android_jar)' ], 54 'additional_src_dirs': [], 55 'javac_includes': [], 56 'jar_name': '<(_target_name).jar', 57 'jar_dir': '<(PRODUCT_DIR)/lib.java', 58 'jar_path': '<(intermediate_dir)/<(jar_name)', 59 'jar_final_path': '<(jar_dir)/<(jar_name)', 60 'jar_excluded_classes': [ '*/R.class', '*/R##*.class' ], 61 'instr_stamp': '<(intermediate_dir)/instr.stamp', 62 'additional_input_paths': [], 63 'dex_path': '<(PRODUCT_DIR)/lib.java/<(_target_name).dex.jar', 64 'generated_src_dirs': ['>@(generated_R_dirs)'], 65 'generated_R_dirs': [], 66 'has_java_resources%': 0, 67 'res_extra_dirs': [], 68 'res_extra_files': [], 69 'res_v14_verify_only%': 0, 70 'resource_input_paths': ['>@(res_extra_files)'], 71 'intermediate_dir': '<(SHARED_INTERMEDIATE_DIR)/<(_target_name)', 72 'classes_dir': '<(intermediate_dir)/classes', 73 'compile_stamp': '<(intermediate_dir)/compile.stamp', 74 'lint_stamp': '<(intermediate_dir)/lint.stamp', 75 'lint_result': '<(intermediate_dir)/lint_result.xml', 76 'lint_config': '<(intermediate_dir)/lint_config.xml', 77 'never_lint%': 0, 78 'proguard_config%': '', 79 'proguard_preprocess%': '0', 80 'variables': { 81 'variables': { 82 'proguard_preprocess%': 0, 83 'emma_never_instrument%': 0, 84 }, 85 'conditions': [ 86 ['proguard_preprocess == 1', { 87 'javac_jar_path': '<(intermediate_dir)/<(_target_name).pre.jar' 88 }, { 89 'javac_jar_path': '<(jar_path)' 90 }], 91 ['chromium_code != 0 and emma_coverage != 0 and emma_never_instrument == 0', { 92 'emma_instrument': 1, 93 }, { 94 'emma_instrument': 0, 95 }], 96 ], 97 }, 98 'emma_instrument': '<(emma_instrument)', 99 'javac_jar_path': '<(javac_jar_path)', 100 }, 101 # This all_dependent_settings is used for java targets only. This will add the 102 # jar path to the classpath of dependent java targets. 103 'all_dependent_settings': { 104 'variables': { 105 'input_jars_paths': ['<(jar_final_path)'], 106 'library_dexed_jars_paths': ['<(dex_path)'], 107 }, 108 }, 109 'conditions': [ 110 ['has_java_resources == 1', { 111 'variables': { 112 'res_dir': '<(java_in_dir)/res', 113 'res_input_dirs': ['<(res_dir)', '<@(res_extra_dirs)'], 114 'resource_input_paths': ['<!@(find <(res_dir) -type f)'], 115 116 'R_dir': '<(intermediate_dir)/java_R', 117 'R_text_file': '<(R_dir)/R.txt', 118 119 'generated_src_dirs': ['<(R_dir)'], 120 'additional_input_paths': ['<(resource_zip_path)', ], 121 122 'dependencies_res_zip_paths': [], 123 'resource_zip_path': '<(PRODUCT_DIR)/res.java/<(_target_name).zip', 124 }, 125 'all_dependent_settings': { 126 'variables': { 127 # Dependent libraries include this target's R.java file via 128 # generated_R_dirs. 129 'generated_R_dirs': ['<(R_dir)'], 130 131 # Dependent libraries and apks include this target's resources via 132 # dependencies_res_zip_paths. 133 'additional_input_paths': ['<(resource_zip_path)'], 134 'dependencies_res_zip_paths': ['<(resource_zip_path)'], 135 136 # additional_res_packages and additional_R_text_files are used to 137 # create this packages R.java files when building the APK. 138 'additional_res_packages': ['<(R_package)'], 139 'additional_R_text_files': ['<(R_text_file)'], 140 }, 141 }, 142 'actions': [ 143 # Generate R.java and crunch image resources. 144 { 145 'action_name': 'process_resources', 146 'message': 'processing resources for <(_target_name)', 147 'variables': { 148 'android_manifest': '<(DEPTH)/build/android/AndroidManifest.xml', 149 # Write the inputs list to a file, so that its mtime is updated when 150 # the list of inputs changes. 151 'inputs_list_file': '>|(java_resources.<(_target_name).gypcmd >@(resource_input_paths))', 152 'process_resources_options': [], 153 'conditions': [ 154 ['res_v14_verify_only == 1', { 155 'process_resources_options': ['--v14-verify-only'] 156 }], 157 ], 158 }, 159 'inputs': [ 160 '<(DEPTH)/build/android/gyp/util/build_utils.py', 161 '<(DEPTH)/build/android/gyp/process_resources.py', 162 '<(DEPTH)/build/android/gyp/generate_v14_compatible_resources.py', 163 '>@(resource_input_paths)', 164 '>@(dependencies_res_zip_paths)', 165 '>(inputs_list_file)', 166 ], 167 'outputs': [ 168 '<(resource_zip_path)', 169 ], 170 'action': [ 171 'python', '<(DEPTH)/build/android/gyp/process_resources.py', 172 '--android-sdk', '<(android_sdk)', 173 '--android-sdk-tools', '<(android_sdk_tools)', 174 '--non-constant-id', 175 176 '--android-manifest', '<(android_manifest)', 177 '--custom-package', '<(R_package)', 178 179 '--dependencies-res-zips', '>(dependencies_res_zip_paths)', 180 '--resource-dirs', '<(res_input_dirs)', 181 182 '--R-dir', '<(R_dir)', 183 '--resource-zip-out', '<(resource_zip_path)', 184 185 '<@(process_resources_options)', 186 ], 187 }, 188 ], 189 }], 190 ['proguard_preprocess == 1', { 191 'actions': [ 192 { 193 'action_name': 'proguard_<(_target_name)', 194 'message': 'Proguard preprocessing <(_target_name) jar', 195 'inputs': [ 196 '<(android_sdk_root)/tools/proguard/lib/proguard.jar', 197 '<(DEPTH)/build/android/gyp/util/build_utils.py', 198 '<(DEPTH)/build/android/gyp/proguard.py', 199 '<(javac_jar_path)', 200 '<(proguard_config)', 201 ], 202 'outputs': [ 203 '<(jar_path)', 204 ], 205 'action': [ 206 'python', '<(DEPTH)/build/android/gyp/proguard.py', 207 '--proguard-path=<(android_sdk_root)/tools/proguard/lib/proguard.jar', 208 '--input-path=<(javac_jar_path)', 209 '--output-path=<(jar_path)', 210 '--proguard-config=<(proguard_config)', 211 '--classpath=<(android_sdk_jar) >(input_jars_paths)', 212 ] 213 }, 214 ], 215 }], 216 ], 217 'actions': [ 218 { 219 'action_name': 'javac_<(_target_name)', 220 'message': 'Compiling <(_target_name) java sources', 221 'variables': { 222 'java_sources': ['>!@(find >(java_in_dir)/src >(additional_src_dirs) -name "*.java")'], 223 }, 224 'inputs': [ 225 '<(DEPTH)/build/android/gyp/util/build_utils.py', 226 '<(DEPTH)/build/android/gyp/javac.py', 227 '>@(java_sources)', 228 '>@(input_jars_paths)', 229 '>@(additional_input_paths)', 230 ], 231 'outputs': [ 232 '<(compile_stamp)', 233 ], 234 'action': [ 235 'python', '<(DEPTH)/build/android/gyp/javac.py', 236 '--output-dir=<(classes_dir)', 237 '--classpath=>(input_jars_paths)', 238 '--src-gendirs=>(generated_src_dirs)', 239 '--javac-includes=<(javac_includes)', 240 '--chromium-code=<(chromium_code)', 241 '--stamp=<(compile_stamp)', 242 '>@(java_sources)', 243 ] 244 }, 245 { 246 'variables': { 247 'src_dirs': [ 248 '<(java_in_dir)/src', 249 '>@(additional_src_dirs)', 250 ], 251 'stamp_path': '<(lint_stamp)', 252 'result_path': '<(lint_result)', 253 'config_path': '<(lint_config)', 254 }, 255 'inputs': [ 256 '<(compile_stamp)', 257 ], 258 'outputs': [ 259 '<(lint_stamp)', 260 ], 261 'includes': [ 'android/lint_action.gypi' ], 262 }, 263 { 264 'action_name': 'jar_<(_target_name)', 265 'message': 'Creating <(_target_name) jar', 266 'inputs': [ 267 '<(DEPTH)/build/android/gyp/util/build_utils.py', 268 '<(DEPTH)/build/android/gyp/util/md5_check.py', 269 '<(DEPTH)/build/android/gyp/jar.py', 270 '<(compile_stamp)', 271 ], 272 'outputs': [ 273 '<(javac_jar_path)', 274 ], 275 'action': [ 276 'python', '<(DEPTH)/build/android/gyp/jar.py', 277 '--classes-dir=<(classes_dir)', 278 '--jar-path=<(javac_jar_path)', 279 '--excluded-classes=<(jar_excluded_classes)', 280 ] 281 }, 282 { 283 'action_name': 'instr_jar_<(_target_name)', 284 'message': 'Instrumenting <(_target_name) jar', 285 'variables': { 286 'input_path': '<(jar_path)', 287 'output_path': '<(jar_final_path)', 288 'stamp_path': '<(instr_stamp)', 289 'instr_type': 'jar', 290 }, 291 'outputs': [ 292 '<(jar_final_path)', 293 ], 294 'inputs': [ 295 '<(jar_path)', 296 ], 297 'includes': [ 'android/instr_action.gypi' ], 298 }, 299 { 300 'action_name': 'jar_toc_<(_target_name)', 301 'message': 'Creating <(_target_name) jar.TOC', 302 'inputs': [ 303 '<(DEPTH)/build/android/gyp/util/build_utils.py', 304 '<(DEPTH)/build/android/gyp/util/md5_check.py', 305 '<(DEPTH)/build/android/gyp/jar_toc.py', 306 '<(jar_final_path)', 307 ], 308 'outputs': [ 309 '<(jar_final_path).TOC', 310 ], 311 'action': [ 312 'python', '<(DEPTH)/build/android/gyp/jar_toc.py', 313 '--jar-path=<(jar_final_path)', 314 '--toc-path=<(jar_final_path).TOC', 315 ] 316 }, 317 { 318 'action_name': 'dex_<(_target_name)', 319 'variables': { 320 'conditions': [ 321 ['emma_instrument != 0', { 322 'dex_no_locals': 1, 323 }], 324 ], 325 'dex_input_paths': [ '<(jar_final_path)' ], 326 'output_path': '<(dex_path)', 327 }, 328 'includes': [ 'android/dex_action.gypi' ], 329 }, 330 ], 331 } 332