Merge changes I50f224f6,I66c34ac0,I63f5fb23,I70b57072,I1d73f843, ... am: 3d153d4f89

Original change: https://android-review.googlesource.com/c/platform/packages/modules/Connectivity/+/2279997

Change-Id: I1f7717628897040349fa6c2682155bae0431371e
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
diff --git a/tools/gn2bp/Android.bp.swp b/tools/gn2bp/Android.bp.swp
index 739b2b1..c88c09f 100644
--- a/tools/gn2bp/Android.bp.swp
+++ b/tools/gn2bp/Android.bp.swp
@@ -213,12 +213,11 @@
     local_include_dirs: [
         "./",
         "buildtools/third_party/libc++/",
-        "out/test/gen/",
+        "buildtools/third_party/libc++/trunk/include",
+        "buildtools/third_party/libc++abi/trunk/include",
         "third_party/android_ndk/sources/android/cpufeatures/",
     ],
-    header_libs: [
-        "jni_headers",
-    ],
+    cpp_std: "c++20",
 }
 
 // GN: //base/allocator/partition_allocator:partition_alloc_buildflags
@@ -266,14 +265,14 @@
     name: "cronet_aml_base_android_runtime_jni_headers",
     cmd: "$(location base/android/jni_generator/jni_generator.py) --ptr_type " +
          "long " +
-         "--prev_output_dir " +
-         "gen/base/android_runtime_jni_headers " +
+         " " +
+         " " +
          "--output_dir " +
-         "$(genDir)/jni_headers/base/android_runtime_jni_headers " +
+         "$(genDir)/base/android_runtime_jni_headers " +
          "--includes " +
-         "../../../../../../base/android/jni_generator/jni_generator_helper.h " +
+         "base/android/jni_generator/jni_generator_helper.h " +
          "--jar_file " +
-         "../../third_party/android_sdk/public/platforms/android-33/android.jar " +
+         "$(location third_party/android_sdk/public/platforms/android-33/android.jar) " +
          "--output_name " +
          "Runnable_jni.h " +
          "--output_name " +
@@ -281,10 +280,12 @@
          "--input_file " +
          "java/lang/Runnable.class " +
          "--input_file " +
-         "java/lang/Runtime.class",
+         "java/lang/Runtime.class " +
+         "--javap " +
+         "$$(find out/.path -name javap)",
     out: [
-        "jni_headers/base/android_runtime_jni_headers/Runnable_jni.h",
-        "jni_headers/base/android_runtime_jni_headers/Runtime_jni.h",
+        "base/android_runtime_jni_headers/Runnable_jni.h",
+        "base/android_runtime_jni_headers/Runtime_jni.h",
     ],
     tool_files: [
         "base/android/jni_generator/jni_generator.py",
@@ -957,8 +958,8 @@
     local_include_dirs: [
         "./",
         "buildtools/third_party/libc++/",
-        "out/test/gen/",
-        "out/test/gen/jni_headers/",
+        "buildtools/third_party/libc++/trunk/include",
+        "buildtools/third_party/libc++abi/trunk/include",
         "third_party/abseil-cpp/",
         "third_party/android_ndk/sources/android/cpufeatures/",
         "third_party/boringssl/src/include/",
@@ -968,6 +969,7 @@
     header_libs: [
         "jni_headers",
     ],
+    cpp_std: "c++20",
 }
 
 // GN: //base:base_jni_headers
@@ -1017,12 +1019,12 @@
     ],
     cmd: "$(location base/android/jni_generator/jni_generator.py) --ptr_type " +
          "long " +
-         "--prev_output_dir " +
-         "gen/base/base_jni_headers " +
+         " " +
+         " " +
          "--output_dir " +
-         "$(genDir)/jni_headers/base/base_jni_headers " +
+         "$(genDir)/base/base_jni_headers " +
          "--includes " +
-         "../../../../../../base/android/jni_generator/jni_generator_helper.h " +
+         "base/android/jni_generator/jni_generator_helper.h " +
          "--use_proxy_hash " +
          "--output_name " +
          "ApkAssets_jni.h " +
@@ -1185,46 +1187,46 @@
          "--input_file " +
          "$(location base/android/java/src/org/chromium/base/task/TaskRunnerImpl.java)",
     out: [
-        "jni_headers/base/base_jni_headers/ApkAssets_jni.h",
-        "jni_headers/base/base_jni_headers/ApplicationStatus_jni.h",
-        "jni_headers/base/base_jni_headers/BaseFeatureList_jni.h",
-        "jni_headers/base/base_jni_headers/BuildInfo_jni.h",
-        "jni_headers/base/base_jni_headers/BundleUtils_jni.h",
-        "jni_headers/base/base_jni_headers/Callback_jni.h",
-        "jni_headers/base/base_jni_headers/ChildProcessService_jni.h",
-        "jni_headers/base/base_jni_headers/CommandLine_jni.h",
-        "jni_headers/base/base_jni_headers/ContentUriUtils_jni.h",
-        "jni_headers/base/base_jni_headers/CpuFeatures_jni.h",
-        "jni_headers/base/base_jni_headers/EarlyTraceEvent_jni.h",
-        "jni_headers/base/base_jni_headers/EventLog_jni.h",
-        "jni_headers/base/base_jni_headers/FeatureList_jni.h",
-        "jni_headers/base/base_jni_headers/Features_jni.h",
-        "jni_headers/base/base_jni_headers/FieldTrialList_jni.h",
-        "jni_headers/base/base_jni_headers/FileUtils_jni.h",
-        "jni_headers/base/base_jni_headers/ImportantFileWriterAndroid_jni.h",
-        "jni_headers/base/base_jni_headers/IntStringCallback_jni.h",
-        "jni_headers/base/base_jni_headers/JNIUtils_jni.h",
-        "jni_headers/base/base_jni_headers/JankMetricUMARecorder_jni.h",
-        "jni_headers/base/base_jni_headers/JavaExceptionReporter_jni.h",
-        "jni_headers/base/base_jni_headers/JavaHandlerThread_jni.h",
-        "jni_headers/base/base_jni_headers/JavaHeapDumpGenerator_jni.h",
-        "jni_headers/base/base_jni_headers/LibraryLoader_jni.h",
-        "jni_headers/base/base_jni_headers/LibraryPrefetcher_jni.h",
-        "jni_headers/base/base_jni_headers/LocaleUtils_jni.h",
-        "jni_headers/base/base_jni_headers/MemoryPressureListener_jni.h",
-        "jni_headers/base/base_jni_headers/NativeUmaRecorder_jni.h",
-        "jni_headers/base/base_jni_headers/PathService_jni.h",
-        "jni_headers/base/base_jni_headers/PathUtils_jni.h",
-        "jni_headers/base/base_jni_headers/PostTask_jni.h",
-        "jni_headers/base/base_jni_headers/PowerMonitor_jni.h",
-        "jni_headers/base/base_jni_headers/RadioUtils_jni.h",
-        "jni_headers/base/base_jni_headers/StatisticsRecorderAndroid_jni.h",
-        "jni_headers/base/base_jni_headers/SysUtils_jni.h",
-        "jni_headers/base/base_jni_headers/TaskRunnerImpl_jni.h",
-        "jni_headers/base/base_jni_headers/ThreadUtils_jni.h",
-        "jni_headers/base/base_jni_headers/TimezoneUtils_jni.h",
-        "jni_headers/base/base_jni_headers/TraceEvent_jni.h",
-        "jni_headers/base/base_jni_headers/UnguessableToken_jni.h",
+        "base/base_jni_headers/ApkAssets_jni.h",
+        "base/base_jni_headers/ApplicationStatus_jni.h",
+        "base/base_jni_headers/BaseFeatureList_jni.h",
+        "base/base_jni_headers/BuildInfo_jni.h",
+        "base/base_jni_headers/BundleUtils_jni.h",
+        "base/base_jni_headers/Callback_jni.h",
+        "base/base_jni_headers/ChildProcessService_jni.h",
+        "base/base_jni_headers/CommandLine_jni.h",
+        "base/base_jni_headers/ContentUriUtils_jni.h",
+        "base/base_jni_headers/CpuFeatures_jni.h",
+        "base/base_jni_headers/EarlyTraceEvent_jni.h",
+        "base/base_jni_headers/EventLog_jni.h",
+        "base/base_jni_headers/FeatureList_jni.h",
+        "base/base_jni_headers/Features_jni.h",
+        "base/base_jni_headers/FieldTrialList_jni.h",
+        "base/base_jni_headers/FileUtils_jni.h",
+        "base/base_jni_headers/ImportantFileWriterAndroid_jni.h",
+        "base/base_jni_headers/IntStringCallback_jni.h",
+        "base/base_jni_headers/JNIUtils_jni.h",
+        "base/base_jni_headers/JankMetricUMARecorder_jni.h",
+        "base/base_jni_headers/JavaExceptionReporter_jni.h",
+        "base/base_jni_headers/JavaHandlerThread_jni.h",
+        "base/base_jni_headers/JavaHeapDumpGenerator_jni.h",
+        "base/base_jni_headers/LibraryLoader_jni.h",
+        "base/base_jni_headers/LibraryPrefetcher_jni.h",
+        "base/base_jni_headers/LocaleUtils_jni.h",
+        "base/base_jni_headers/MemoryPressureListener_jni.h",
+        "base/base_jni_headers/NativeUmaRecorder_jni.h",
+        "base/base_jni_headers/PathService_jni.h",
+        "base/base_jni_headers/PathUtils_jni.h",
+        "base/base_jni_headers/PostTask_jni.h",
+        "base/base_jni_headers/PowerMonitor_jni.h",
+        "base/base_jni_headers/RadioUtils_jni.h",
+        "base/base_jni_headers/StatisticsRecorderAndroid_jni.h",
+        "base/base_jni_headers/SysUtils_jni.h",
+        "base/base_jni_headers/TaskRunnerImpl_jni.h",
+        "base/base_jni_headers/ThreadUtils_jni.h",
+        "base/base_jni_headers/TimezoneUtils_jni.h",
+        "base/base_jni_headers/TraceEvent_jni.h",
+        "base/base_jni_headers/UnguessableToken_jni.h",
     ],
     tool_files: [
         "base/android/jni_generator/jni_generator.py",
@@ -1269,11 +1271,10 @@
     local_include_dirs: [
         "./",
         "buildtools/third_party/libc++/",
-        "out/test/gen/",
+        "buildtools/third_party/libc++/trunk/include",
+        "buildtools/third_party/libc++abi/trunk/include",
     ],
-    header_libs: [
-        "jni_headers",
-    ],
+    cpp_std: "c++20",
 }
 
 // GN: //base:build_date
@@ -1590,11 +1591,10 @@
     local_include_dirs: [
         "./",
         "buildtools/third_party/libc++/",
-        "out/test/gen/",
+        "buildtools/third_party/libc++/trunk/include",
+        "buildtools/third_party/libc++abi/trunk/include",
     ],
-    header_libs: [
-        "jni_headers",
-    ],
+    cpp_std: "c++20",
 }
 
 // GN: //base/third_party/dynamic_annotations:dynamic_annotations
@@ -1624,11 +1624,10 @@
     local_include_dirs: [
         "./",
         "buildtools/third_party/libc++/",
-        "out/test/gen/",
+        "buildtools/third_party/libc++/trunk/include",
+        "buildtools/third_party/libc++abi/trunk/include",
     ],
-    header_libs: [
-        "jni_headers",
-    ],
+    cpp_std: "c++20",
 }
 
 // GN: //base:tracing_buildflags
@@ -1742,11 +1741,14 @@
     cflags: [
         "-O2",
         "-Wno-error=return-type",
+        "-Wno-missing-field-initializers",
+        "-Wno-non-virtual-dtor",
         "-Wno-sign-compare",
         "-Wno-sign-promo",
         "-Wno-unused-parameter",
         "-fvisibility=hidden",
     ],
+    stl: "none",
 }
 
 // GN: //third_party/abseil-cpp:absl
@@ -2816,12 +2818,11 @@
     local_include_dirs: [
         "./",
         "buildtools/third_party/libc++/",
-        "out/test/gen/",
+        "buildtools/third_party/libc++/trunk/include",
+        "buildtools/third_party/libc++abi/trunk/include",
         "third_party/boringssl/src/include/",
     ],
-    header_libs: [
-        "jni_headers",
-    ],
+    cpp_std: "c++20",
 }
 
 // GN: //third_party/boringssl:boringssl_asm
@@ -2873,13 +2874,12 @@
     local_include_dirs: [
         "./",
         "buildtools/third_party/libc++/",
-        "out/test/gen/",
+        "buildtools/third_party/libc++/trunk/include",
+        "buildtools/third_party/libc++abi/trunk/include",
         "third_party/icu/source/common/",
         "third_party/icu/source/i18n/",
     ],
-    header_libs: [
-        "jni_headers",
-    ],
+    cpp_std: "c++20",
 }
 
 // GN: //third_party/icu:icuuc_private
@@ -2924,13 +2924,12 @@
     local_include_dirs: [
         "./",
         "buildtools/third_party/libc++/",
-        "out/test/gen/",
+        "buildtools/third_party/libc++/trunk/include",
+        "buildtools/third_party/libc++abi/trunk/include",
         "third_party/icu/source/common/",
         "third_party/icu/source/i18n/",
     ],
-    header_libs: [
-        "jni_headers",
-    ],
+    cpp_std: "c++20",
 }
 
 // GN: //third_party/icu:icuuc_public
@@ -2979,12 +2978,11 @@
     local_include_dirs: [
         "./",
         "buildtools/third_party/libc++/",
-        "out/test/gen/",
+        "buildtools/third_party/libc++/trunk/include",
+        "buildtools/third_party/libc++abi/trunk/include",
         "third_party/libevent/android/",
     ],
-    header_libs: [
-        "jni_headers",
-    ],
+    cpp_std: "c++20",
 }
 
 // GN: //third_party/modp_b64:modp_b64
@@ -3016,10 +3014,9 @@
     local_include_dirs: [
         "./",
         "buildtools/third_party/libc++/",
-        "out/test/gen/",
+        "buildtools/third_party/libc++/trunk/include",
+        "buildtools/third_party/libc++abi/trunk/include",
     ],
-    header_libs: [
-        "jni_headers",
-    ],
+    cpp_std: "c++20",
 }
 
diff --git a/tools/gn2bp/gen_android_bp b/tools/gn2bp/gen_android_bp
index 40addef..0a73a19 100755
--- a/tools/gn2bp/gen_android_bp
+++ b/tools/gn2bp/gen_android_bp
@@ -343,6 +343,7 @@
     self.android = Target('android')
     self.host = Target('host')
     self.stl = None
+    self.cpp_std = None
     self.dist = dict()
     self.strip = dict()
     self.data = set()
@@ -354,6 +355,7 @@
     self.genrule_headers = set()
     self.genrule_srcs = set()
     self.genrule_shared_libs = set()
+    self.genrule_header_libs = set()
     self.version_script = None
     self.test_suites = set()
     self.test_config = None
@@ -391,6 +393,7 @@
     self._output_field(output, 'tool_files')
     self._output_field(output, 'data')
     self._output_field(output, 'stl')
+    self._output_field(output, 'cpp_std')
     self._output_field(output, 'apex_available')
     self._output_field(output, 'min_sdk_version')
     self._output_field(output, 'version_script')
@@ -664,9 +667,10 @@
 
   blueprint.add_module(module)
 
-# There may be a better way to do target specific modification
-# Target specific modification before create_action_module
-def pre_create_action_module(target):
+def create_action_module(blueprint, target):
+  bp_module_name = label_to_module_name(target.name)
+  module = Module('genrule', bp_module_name, target.name)
+
   # Convert ['--param=value'] to ['--param', 'value'] for consistency.
   # TODO: we may want to only do this for python scripts arguments. If argparse
   # is used, this transformation is safe.
@@ -681,10 +685,14 @@
         break
 
   elif target.script == '//base/android/jni_generator/jni_generator.py':
+    # chromium builds against a prebuilt ndk that contains the jni_headers, so
+    # a dependency is never explicitly created.
+    module.genrule_header_libs.add('jni_headers')
+    needs_javap = False
     for i, val in enumerate(target.args):
       if val == '--output_dir':
-        # replace --output_dir gen/... with --output_dir $(genDir)/...
-        target.args[i + 1] = re.sub('^gen', '$(genDir)', target.args[i + 1])
+        # replace --output_dir gen/jni_headers/... with --output_dir $(genDir)/...
+        target.args[i + 1] = re.sub('^gen/jni_headers', '$(genDir)', target.args[i + 1])
       if val == '--input_file':
         # --input_file supports both .class specifiers or source files as arguments.
         # Only source files need to be wrapped inside a $(location <label>) tag.
@@ -694,11 +702,25 @@
         # TODO: put inside function
         filename = re.sub('^\.\./\.\./', '', target.args[i + 1])
         target.args[i + 1] = '$(location %s)' % filename
+      if val == '--includes' and 'jni_generator_helper' in target.args[i + 1]:
+        # delete all leading ../
+        target.args[i + 1] = re.sub('^(\.\./)+', '', target.args[i + 1])
+      if val == '--prev_output_dir':
+        # this is not needed for aosp builds.
+        target.args[i] = ''
+        target.args[i + 1] = ''
+      if val == '--jar_file':
+        # delete leading ../../ and add path to javap
+        filename = re.sub('^\.\./\.\./', '', target.args[i + 1])
+        target.args[i + 1] = '$(location %s)' % filename
+        needs_javap = True
 
+    if needs_javap:
+      target.args.append('--javap')
+      target.args.append('$$(find out/.path -name javap)')
+    # fix target.output directory to match #include statements.
+    target.outputs = [re.sub('^jni_headers/', '', out) for out in target.outputs]
 
-def create_action_module(blueprint, target):
-  bp_module_name = label_to_module_name(target.name)
-  module = Module('genrule', bp_module_name, target.name)
   script = gn_utils.label_to_path(target.script)
   module.tool_files.add(script)
 
@@ -803,7 +825,6 @@
         name_without_toolchain == gn_utils.GEN_VERSION_TARGET:
       module = create_gen_version_module(blueprint, target, bp_module_name)
     else:
-      pre_create_action_module(target)
       module = create_action_module(blueprint, target)
   elif target.type == 'copy':
     # TODO: careful now! copy targets are not supported yet, but this will stop
@@ -824,13 +845,21 @@
 
   if target.type in gn_utils.LINKER_UNIT_TYPES:
     module.cflags.update(_get_cflags(target))
-    # HACK! We may have to link against chromium's sysroot instead, but this
-    # seems to work for //base:base.
     # TODO: implement proper cflag parsing.
     for flag in target.cflags:
-      if '--sysroot=' in flag:
-        module.header_libs.add('jni_headers')
-    module.local_include_dirs.update(gn_utils.label_to_path(it) for it in target.include_dirs)
+      if '-std=' in flag:
+        module.cpp_std = flag[len('-std='):]
+      if '-isystem' in flag:
+        module.local_include_dirs.add(flag[len('-isystem../../'):])
+
+    # Adding local_include_dirs is necessary due to source_sets / filegroups
+    # which do not properly propagate include directories.
+    # Filter any directory inside //out as a) this directory does not exist for
+    # aosp / soong builds and b) the include directory should already be
+    # configured via library dependency.
+    module.local_include_dirs.update([gn_utils.label_to_path(d)
+                                      for d in target.include_dirs
+                                      if not re.match('^//out/.*', d)])
 
   module_is_compiled = module.type not in ('genrule', 'filegroup')
   if module_is_compiled:
@@ -896,6 +925,7 @@
       module.generated_headers.update(dep_module.genrule_headers)
       module.srcs.update(dep_module.genrule_srcs)
       module.shared_libs.update(dep_module.genrule_shared_libs)
+      module.header_libs.update(dep_module.genrule_header_libs)
     elif dep_module.type == 'cc_binary':
       continue  # Ignore executables deps (used by cmdline integration tests).
     else:
@@ -913,12 +943,15 @@
   defaults = Module('cc_defaults', defaults_module, '//gn:default_deps')
   defaults.cflags = [
       '-Wno-error=return-type',
+      '-Wno-non-virtual-dtor',
+      '-Wno-missing-field-initializers',
       '-Wno-sign-compare',
       '-Wno-sign-promo',
       '-Wno-unused-parameter',
       '-fvisibility=hidden',
       '-O2',
   ]
+  defaults.stl = 'none'
   blueprint.add_module(defaults)
 
   for target in targets: