# Copyright (c) 2012 The Chromium Authors. All rights reserved. # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. # This file is meant to be included into a target to provide a rule # to build Java in a consistent manner. # # To use this, create a gyp target with the following form: # { # 'target_name': 'my-package_java', # 'type': 'none', # 'variables': { # 'java_in_dir': 'path/to/package/root', # }, # 'includes': ['path/to/this/gypi/file'], # } # # Required variables: # java_in_dir - The top-level java directory. The src should be in # /src. # Optional/automatic variables: # additional_input_paths - These paths will be included in the 'inputs' list to # ensure that this target is rebuilt when one of these paths changes. # additional_src_dirs - Additional directories with .java files to be compiled # and included in the output of this target. # generated_src_dirs - Same as additional_src_dirs except used for .java files # that are generated at build time. This should be set automatically by a # target's dependencies. The .java files in these directories are not # included in the 'inputs' list (unlike additional_src_dirs). # input_jars_paths - The path to jars to be included in the classpath. This # should be filled automatically by depending on the appropriate targets. # javac_includes - A list of specific files to include. This is by default # empty, which leads to inclusion of all files specified. May include # wildcard, and supports '**/' for recursive path wildcards, ie.: # '**/MyFileRegardlessOfDirectory.java', '**/IncludedPrefix*.java'. # has_java_resources - Set to 1 if the java target contains an # Android-compatible resources folder named res. If 1, R_package and # R_package_relpath must also be set. # R_package - The java package in which the R class (which maps resources to # integer IDs) should be generated, e.g. org.chromium.content. # R_package_relpath - Same as R_package, but replace each '.' with '/'. # java_strings_grd - The name of the grd file from which to generate localized # strings.xml files, if any. # res_extra_dirs - A list of extra directories containing Android resources. # These directories may be generated at build time. # res_extra_files - A list of the files in res_extra_dirs. { 'dependencies': [ '<(DEPTH)/build/android/setup.gyp:build_output_dirs' ], 'variables': { 'android_jar': '<(android_sdk)/android.jar', 'input_jars_paths': [ '<(android_jar)' ], 'additional_src_dirs': [], 'javac_includes': [], 'jar_name': '<(_target_name).jar', 'jar_path': '<(PRODUCT_DIR)/lib.java/<(jar_name)', 'jar_excluded_classes': [ '*/R.class', '*/R##*.class' ], 'additional_input_paths': [], 'dex_path': '<(PRODUCT_DIR)/lib.java/<(_target_name).dex.jar', 'generated_src_dirs': ['>@(generated_R_dirs)'], 'generated_R_dirs': [], 'has_java_resources%': 0, 'java_strings_grd%': '', 'res_extra_dirs': [], 'res_extra_files': [], 'res_v14_verify_only%': 0, 'resource_input_paths': ['>@(res_extra_files)'], 'intermediate_dir': '<(SHARED_INTERMEDIATE_DIR)/<(_target_name)', 'classes_dir': '<(intermediate_dir)/classes', 'compile_stamp': '<(intermediate_dir)/compile.stamp', }, # This all_dependent_settings is used for java targets only. This will add the # jar path to the classpath of dependent java targets. 'all_dependent_settings': { 'variables': { 'input_jars_paths': ['<(jar_path)'], 'library_dexed_jars_paths': ['<(dex_path)'], }, }, 'conditions': [ ['has_java_resources == 1', { 'variables': { 'res_dir': '<(java_in_dir)/res', 'res_crunched_dir': '<(intermediate_dir)/res_crunched', 'res_v14_compatibility_stamp': '<(intermediate_dir)/res_v14_compatibility.stamp', 'res_v14_compatibility_dir': '<(intermediate_dir)/res_v14_compatibility', 'res_input_dirs': ['<(res_dir)', '<@(res_extra_dirs)'], 'resource_input_paths': ['@(dependencies_res_input_dirs)',], # Write the inputs list to a file, so that the action command # line won't exceed the OS limits when calculating the checksum # of the list. 'inputs_list_file': '>|(inputs_list.<(_target_name).gypcmd >@(_inputs))' }, 'inputs': [ '<(DEPTH)/build/android/gyp/util/build_utils.py', '<(DEPTH)/build/android/gyp/process_resources.py', '>@(resource_input_paths)', '>@(dependencies_res_files)', ], 'outputs': [ '<(R_stamp)', ], 'action': [ 'python', '<(DEPTH)/build/android/gyp/process_resources.py', '--android-sdk', '<(android_sdk)', '--android-sdk-tools', '<(android_sdk_tools)', '--R-dir', '<(R_dir)', '--res-dirs', '>(all_res_dirs)', '--crunch-input-dir', '>(res_dir)', '--crunch-output-dir', '<(res_crunched_dir)', '--android-manifest', '<(android_manifest)', '--non-constant-id', '--custom-package', '<(R_package)', '--stamp', '<(R_stamp)', # Add hash of inputs to the command line, so if inputs change # (e.g. if a resource if removed), the command will be re-run. # TODO(newt): remove this once crbug.com/177552 is fixed in ninja. '--ignore=>!(md5sum >(inputs_list_file))', ], }, # Generate API 14 resources. { 'action_name': 'generate_api_14_resources_<(_target_name)', 'message': 'Generating Android API 14 resources <(_target_name)', 'variables' : { 'res_v14_additional_options': [], }, 'conditions': [ ['res_v14_verify_only == 1', { 'variables': { 'res_v14_additional_options': ['--verify-only'] }, }], ], 'inputs': [ '<(DEPTH)/build/android/gyp/util/build_utils.py', '<(DEPTH)/build/android/gyp/generate_v14_compatible_resources.py', '>@(resource_input_paths)', ], 'outputs': [ '<(res_v14_compatibility_stamp)', ], 'action': [ 'python', '<(DEPTH)/build/android/gyp/generate_v14_compatible_resources.py', '--res-dir=<(res_dir)', '--res-v14-compatibility-dir=<(res_v14_compatibility_dir)', '--stamp', '<(res_v14_compatibility_stamp)', '<@(res_v14_additional_options)', ] }, ], }], ], 'actions': [ { 'action_name': 'javac_<(_target_name)', 'message': 'Compiling <(_target_name) java sources', 'variables': { 'all_src_dirs': [ '>(java_in_dir)/src', '>@(additional_src_dirs)', '>@(generated_src_dirs)', ], }, 'inputs': [ '<(DEPTH)/build/android/gyp/util/build_utils.py', '<(DEPTH)/build/android/gyp/javac.py', '>!@(find >(java_in_dir)/src >(additional_src_dirs) -name "*.java")', '>@(input_jars_paths)', '>@(additional_input_paths)', ], 'outputs': [ '<(compile_stamp)', ], 'action': [ 'python', '<(DEPTH)/build/android/gyp/javac.py', '--output-dir=<(classes_dir)', '--classpath=>(input_jars_paths)', '--src-dirs=>(all_src_dirs)', '--javac-includes=<(javac_includes)', '--chromium-code=<(chromium_code)', '--stamp=<(compile_stamp)', # TODO(newt): remove this once http://crbug.com/177552 is fixed in ninja. '--ignore=>!(echo \'>(_inputs)\' | md5sum)', ] }, { 'action_name': 'jar_<(_target_name)', 'message': 'Creating <(_target_name) jar', 'inputs': [ '<(DEPTH)/build/android/gyp/util/build_utils.py', '<(DEPTH)/build/android/gyp/util/md5_check.py', '<(DEPTH)/build/android/gyp/jar.py', '<(compile_stamp)', ], 'outputs': [ '<(jar_path)', ], 'action': [ 'python', '<(DEPTH)/build/android/gyp/jar.py', '--classes-dir=<(classes_dir)', '--jar-path=<(jar_path)', '--excluded-classes=<(jar_excluded_classes)', # TODO(newt): remove this once http://crbug.com/177552 is fixed in ninja. '--ignore=>!(echo \'>(_inputs)\' | md5sum)', ] }, { 'action_name': 'jar_toc_<(_target_name)', 'message': 'Creating <(_target_name) jar.TOC', 'inputs': [ '<(DEPTH)/build/android/gyp/util/build_utils.py', '<(DEPTH)/build/android/gyp/util/md5_check.py', '<(DEPTH)/build/android/gyp/jar_toc.py', '<(jar_path)', ], 'outputs': [ '<(jar_path).TOC', ], 'action': [ 'python', '<(DEPTH)/build/android/gyp/jar_toc.py', '--jar-path=<(jar_path)', '--toc-path=<(jar_path).TOC', # TODO(newt): remove this once http://crbug.com/177552 is fixed in ninja. '--ignore=>!(echo \'>(_inputs)\' | md5sum)', ] }, { 'action_name': 'dex_<(_target_name)', 'variables': { 'dex_input_paths': [ '<(jar_path)' ], 'output_path': '<(dex_path)', }, 'includes': [ 'android/dex_action.gypi' ], }, ], }