tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

BUILD.gn (9845B)


      1 # Copyright 2014 The Chromium Authors
      2 # Use of this source code is governed by a BSD-style license that can be
      3 # found in the LICENSE file.
      4 
      5 import("//chromium/build/config/android/build_vars.gni")
      6 import("//chromium/build/config/android/config.gni")
      7 import("//chromium/build/config/android/rules.gni")
      8 import("//chromium/build/config/clang/clang.gni")
      9 import("//chromium/build/config/coverage/coverage.gni")
     10 import("//chromium/build/config/gclient_args.gni")
     11 import("//chromium/build/config/python.gni")
     12 import("//build_overrides/build.gni")
     13 
     14 if (build_with_chromium) {
     15   import("//base/allocator/partition_allocator/partition_alloc.gni")
     16 }
     17 
     18 if (enable_java_templates) {
     19   # Create or update the API versions cache if necessary by running a
     20   # functionally empty lint task. This prevents racy creation of the
     21   # cache while linting java targets in android_lint.
     22   android_lint("prepare_android_lint_cache") {
     23     create_cache = true
     24   }
     25 
     26   generate_build_config_srcjar("placeholder_build_config_srcjar") {
     27   }
     28 
     29   generate_build_config_srcjar("build_config_for_robolectric_srcjar") {
     30     testonly = true
     31   }
     32 
     33   write_native_libraries_java("native_libraries_gen") {
     34     use_final_fields = false
     35   }
     36 
     37   java_library("build_java") {
     38     supports_android = true
     39 
     40     # Caused odd errors: https://crbug.com/404877460
     41     jacoco_never_instrument = true
     42 
     43     # Required to prevent circular dependency from //tools/android/errorprone_plugin.
     44     enable_errorprone = false
     45     srcjar_deps = [
     46       ":native_libraries_gen",
     47       ":placeholder_build_config_srcjar",
     48     ]
     49     sources = [
     50       "java/src/org/chromium/build/NullUtil.java",
     51       "java/src/org/chromium/build/annotations/AlwaysInline.java",
     52       "java/src/org/chromium/build/annotations/CheckDiscard.java",
     53       "java/src/org/chromium/build/annotations/Contract.java",
     54       "java/src/org/chromium/build/annotations/DoNotClassMerge.java",
     55       "java/src/org/chromium/build/annotations/DoNotInline.java",
     56       "java/src/org/chromium/build/annotations/DoNotStripLogs.java",
     57       "java/src/org/chromium/build/annotations/EnsuresNonNull.java",
     58       "java/src/org/chromium/build/annotations/EnsuresNonNullIf.java",
     59       "java/src/org/chromium/build/annotations/IdentifierNameString.java",
     60       "java/src/org/chromium/build/annotations/Initializer.java",
     61       "java/src/org/chromium/build/annotations/MockedInTests.java",
     62       "java/src/org/chromium/build/annotations/MonotonicNonNull.java",
     63       "java/src/org/chromium/build/annotations/NullMarked.java",
     64       "java/src/org/chromium/build/annotations/NullUnmarked.java",
     65       "java/src/org/chromium/build/annotations/Nullable.java",
     66       "java/src/org/chromium/build/annotations/OptimizeAsNonNull.java",
     67       "java/src/org/chromium/build/annotations/RequiresNonNull.java",
     68       "java/src/org/chromium/build/annotations/ServiceImpl.java",
     69       "java/src/org/chromium/build/annotations/UsedByReflection.java",
     70       "java/src/org/chromium/build/annotations/UsedReflectively.java",
     71     ]
     72 
     73     jar_excluded_patterns = [ "*/build/BuildConfig.class" ]
     74 
     75     # New version of NativeLibraries.java (with the actual correct values) will
     76     # be created when creating an apk.
     77     jar_excluded_patterns += [ "*/NativeLibraries.class" ]
     78 
     79     proguard_configs = [ "chromium_annotations.flags" ]
     80   }
     81 
     82   # Not all //build embedders pull in junit_binary deps that live in //third_party.
     83   if (build_with_chromium) {
     84     android_assets("junit_test_assets") {
     85       testonly = true
     86 
     87       # We just need any file here, so use the test itself.
     88       sources = [ "junit/src/org/chromium/build/AndroidAssetsTest.java" ]
     89     }
     90     android_resources("junit_test_resources") {
     91       testonly = true
     92       sources = [ "junit/res/values/strings.xml" ]
     93       mergeable_android_manifests = [ "junit/AndroidManifest_mergetest.xml" ]
     94     }
     95     robolectric_binary("build_junit_tests") {
     96       # Test has no JNI, so skip JNI Generator step.
     97       resources_package = "org.chromium.build"
     98       sources = [
     99         "junit/src/org/chromium/build/AndroidAssetsTest.java",
    100         "junit/src/org/chromium/build/IncrementalJavacTest.java",
    101       ]
    102       deps = [
    103         ":junit_test_assets",
    104         ":junit_test_resources",
    105         "//chromium/build/android/test/incremental_javac_gn:no_signature_change_prebuilt_java",
    106         "//third_party/junit",
    107       ]
    108     }
    109   }
    110 }
    111 
    112 if (defined(sanitizer_arch)) {
    113   action("generate_wrap_sh") {
    114     script = "generate_wrap_sh.py"
    115     outputs = [ "$target_gen_dir/$target_name/wrap.sh" ]
    116     args = [
    117       "--arch=$sanitizer_arch",
    118       "--output",
    119       rebase_path(outputs[0], root_build_dir),
    120     ]
    121     if (is_hwasan) {
    122       args += [ "--is_hwasan" ]
    123     }
    124   }
    125 }
    126 
    127 # TODO(go/turn-down-test-results): Remove once we turn down
    128 # test-results.appspot.com
    129 python_library("test_result_presentations_py") {
    130   pydeps_file = "pylib/results/presentation/test_results_presentation.pydeps"
    131   data = [
    132     "//chromium/build/android/pylib/results/presentation/template",
    133     "//chromium/build/android/pylib/results/presentation/javascript/main_html.js",
    134     "//third_party/catapult/third_party/gsutil/",
    135     "//third_party/jinja2/debug.py",
    136     "//third_party/six",
    137   ]
    138 }
    139 
    140 python_library("devil_chromium_py") {
    141   pydeps_file = "devil_chromium.pydeps"
    142   data = [
    143     "devil_chromium.py",
    144     "devil_chromium.json",
    145     "//third_party/catapult/third_party/gsutil/",
    146     "//third_party/catapult/devil/devil/devil_dependencies.json",
    147 
    148     # Read by gn_helpers.BuildWithChromium()
    149     "//chromium/build/config/gclient_args.gni",
    150   ]
    151 }
    152 
    153 # Contains runtime deps for installing apks.
    154 # E.g. from test_runner.py or from apk_operations.py.
    155 group("apk_installer_data") {
    156   # Other //build users let devil library fetch these from Google Storage.
    157   if (build_with_chromium) {
    158     if (!is_component_build) {
    159       data_deps = [
    160         "//chromium/build/android/pylib/device/commands",
    161         "//tools/android/devil_util",
    162       ]
    163     }
    164     data =
    165         [ "//third_party/android_build_tools/bundletool/cipd/bundletool.jar" ]
    166   }
    167 }
    168 
    169 python_library("apk_operations_py") {
    170   pydeps_file = "apk_operations.pydeps"
    171   deps = [ ":apk_installer_data" ]
    172 }
    173 
    174 group("test_runner_py") {
    175   testonly = true
    176   deps = [
    177     ":test_runner_core_py",
    178     ":test_runner_device_support",
    179   ]
    180 }
    181 
    182 python_library("test_runner_core_py") {
    183   testonly = true
    184   pydeps_file = "test_runner.pydeps"
    185   data = [
    186     "pylib/gtest/filter/",
    187     "pylib/instrumentation/render_test.html.jinja",
    188     "pylib/local/machine/local_machine_hostside_tradefed_config.xml",
    189     "test_wrapper/logdog_wrapper.py",
    190     "//third_party/requests/",
    191   ]
    192   data_deps = [ ":logdog_wrapper_py" ]
    193   if (use_clang_coverage && checkout_clang_coverage_tools) {
    194     # Test runner script may use `llvm-profdata` (if exists) to merge
    195     # clang code coverage data after each instrumentation test to
    196     # save space. The tool only exists when `checkout_clang_coverage_tools`
    197     # gclient custom_var is true.
    198     data += [ "${clang_base_path}/bin/llvm-profdata" ]
    199   }
    200 }
    201 
    202 group("test_runner_device_support") {
    203   testonly = true
    204 
    205   # We hardcode using these tools from the public sdk in devil_chromium.json and
    206   # in pylib's constants.
    207   data = [
    208     "${public_android_sdk_build_tools}/aapt",
    209     "${public_android_sdk_build_tools}/aapt2",
    210     "${public_android_sdk_build_tools}/dexdump",
    211     "${public_android_sdk_build_tools}/lib64/libc++.so",
    212     "${public_android_sdk_build_tools}/split-select",
    213     "${public_android_sdk_root}/platform-tools/adb",
    214   ]
    215   data_deps = [
    216     ":apk_installer_data",
    217     ":devil_chromium_py",
    218     ":stack_tools",
    219   ]
    220 
    221   # Other //build users let devil library fetch these from Google Storage.
    222   if (build_with_chromium) {
    223     if (!is_component_build) {
    224       data_deps += [ "//tools/android/forwarder2" ]
    225     }
    226     data += [ "//tools/android/avd/proto/" ]
    227     if (enable_chrome_android_internal) {
    228       data += [ "//clank/tools/android/avd/proto/" ]
    229     }
    230     if (use_full_mte) {
    231       data_deps += [ "//tools/android/mte:mte_device_setup" ]
    232     }
    233   }
    234 
    235   # Proguard is needed only when using apks (rather than native executables).
    236   if (enable_java_templates) {
    237     data_deps += [ "//chromium/build/android/stacktrace:java_deobfuscate" ]
    238   }
    239 }
    240 
    241 python_library("logdog_wrapper_py") {
    242   pydeps_file = "test_wrapper/logdog_wrapper.pydeps"
    243 }
    244 
    245 python_library("resource_sizes_py") {
    246   pydeps_file = "resource_sizes.pydeps"
    247   data_deps = [
    248     ":devil_chromium_py",
    249     "//third_party/catapult/tracing:convert_chart_json",
    250   ]
    251 
    252   data = [
    253     build_vars_file,
    254     "//third_party/llvm-build/Release+Asserts/bin/llvm-readobj",
    255   ]
    256 }
    257 
    258 # Tools necessary for symbolizing tombstones or stack traces that are output to
    259 # logcat.
    260 # Hidden behind build_with_chromium because some third party repos that use
    261 # //build don't pull in //third_party/android_platform.
    262 # TODO(crbug.com/40145789): Move stack script into //build/third_party
    263 #     and enable unconditionally.
    264 group("stack_tools") {
    265   if (build_with_chromium) {
    266     data = [
    267       "tombstones.py",
    268       "pylib/symbols/",
    269       "stacktrace/",
    270     ]
    271 
    272     data_deps =
    273         [ "//third_party/android_platform/development/scripts:stack_py" ]
    274   }
    275 }
    276 
    277 # GN evaluates each .gn file once per toolchain, so restricting to default
    278 # toolchain will ensure write_file() is called only once.
    279 assert(current_toolchain == default_toolchain)
    280 
    281 # NOTE: If other platforms would benefit from exporting variables, we should
    282 # move this to a more top-level place.
    283 # It is currently here (instead of //BUILD.gn) to ensure that the file is
    284 # written even for non-chromium embedders of //build.
    285 _build_vars_json = {
    286   # Underscore prefix so that it appears at the top.
    287   _HEADER = "Generated during 'gn gen' by //build/android/BUILD.gn."
    288   forward_variables_from(android_build_vars_json, "*")
    289 }
    290 
    291 write_file(build_vars_file, _build_vars_json, "json")