gn2bp: Ad hoc order update of local_include_dirs
Test: m //base:base
Change-Id: Ic60ad3f3ad041665ea955f64fc9419711db47737
diff --git a/tools/gn2bp/Android.bp.swp b/tools/gn2bp/Android.bp.swp
index e7a9382..3e9ebac 100644
--- a/tools/gn2bp/Android.bp.swp
+++ b/tools/gn2bp/Android.bp.swp
@@ -959,10 +959,10 @@
"buildtools/third_party/libc++abi/trunk/include",
"third_party/abseil-cpp/",
"third_party/android_ndk/sources/android/cpufeatures/",
- "third_party/android_ndk/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include",
"third_party/boringssl/src/include/",
"third_party/icu/source/common/",
"third_party/icu/source/i18n/",
+ "third_party/android_ndk/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include",
],
header_libs: [
"jni_headers",
@@ -2821,8 +2821,8 @@
"buildtools/third_party/libc++/",
"buildtools/third_party/libc++/trunk/include",
"buildtools/third_party/libc++abi/trunk/include",
- "third_party/android_ndk/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include",
"third_party/boringssl/src/include/",
+ "third_party/android_ndk/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include",
],
cpp_std: "c++20",
}
@@ -2878,9 +2878,9 @@
"buildtools/third_party/libc++/",
"buildtools/third_party/libc++/trunk/include",
"buildtools/third_party/libc++abi/trunk/include",
- "third_party/android_ndk/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include",
"third_party/icu/source/common/",
"third_party/icu/source/i18n/",
+ "third_party/android_ndk/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include",
],
cpp_std: "c++20",
}
@@ -2929,9 +2929,9 @@
"buildtools/third_party/libc++/",
"buildtools/third_party/libc++/trunk/include",
"buildtools/third_party/libc++abi/trunk/include",
- "third_party/android_ndk/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include",
"third_party/icu/source/common/",
"third_party/icu/source/i18n/",
+ "third_party/android_ndk/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include",
],
cpp_std: "c++20",
}
@@ -2984,8 +2984,8 @@
"buildtools/third_party/libc++/",
"buildtools/third_party/libc++/trunk/include",
"buildtools/third_party/libc++abi/trunk/include",
- "third_party/android_ndk/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include",
"third_party/libevent/android/",
+ "third_party/android_ndk/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include",
],
cpp_std: "c++20",
}
diff --git a/tools/gn2bp/gen_android_bp b/tools/gn2bp/gen_android_bp
index da45395..5e1a0fd 100755
--- a/tools/gn2bp/gen_android_bp
+++ b/tools/gn2bp/gen_android_bp
@@ -336,7 +336,7 @@
self.defaults = set()
self.cflags = set()
self.include_dirs = set()
- self.local_include_dirs = set()
+ self.local_include_dirs = []
self.header_libs = set()
self.required = set()
self.tool_files = set()
@@ -385,7 +385,7 @@
self._output_field(output, 'defaults')
self._output_field(output, 'cflags')
self._output_field(output, 'include_dirs')
- self._output_field(output, 'local_include_dirs')
+ self._output_field(output, 'local_include_dirs', sort=False)
self._output_field(output, 'header_libs')
self._output_field(output, 'required')
self._output_field(output, 'dist')
@@ -843,6 +843,7 @@
for src in target.sources
if is_supported_source_file(src))
+ local_include_dirs_set = set()
if target.type in gn_utils.LINKER_UNIT_TYPES:
module.cflags.update(_get_cflags(target))
# TODO: implement proper cflag parsing.
@@ -850,18 +851,24 @@
if '-std=' in flag:
module.cpp_std = flag[len('-std='):]
if '-isystem' in flag:
- module.local_include_dirs.add(flag[len('-isystem../../'):])
- if '--sysroot' in flag:
- module.local_include_dirs.add(flag[len('--sysroot=../../'):] + "/usr/include")
+ local_include_dirs_set.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)
+ local_include_dirs_set.update([gn_utils.label_to_path(d)
for d in target.include_dirs
if not re.match('^//out/.*', d)])
+ module.local_include_dirs = sorted(list(local_include_dirs_set))
+
+ # Order matters for some targets. For example, base/time/time_exploded_icu.cc
+ # in //base:base needs to have sysroot include after icu/source/common
+ # include. So adding sysroot include at the end.
+ for flag in target.cflags:
+ if '--sysroot' in flag:
+ module.local_include_dirs.append(flag[len('--sysroot=../../'):] + "/usr/include")
module_is_compiled = module.type not in ('genrule', 'filegroup')
if module_is_compiled: