[PATCH] D54930: [gn build] Add a script to check if source lists in BUILD.gn files and CMakeLists.txt files match.
Nico Weber via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Thu Nov 29 07:57:27 PST 2018
thakis updated this revision to Diff 175872.
thakis marked 4 inline comments as done.
thakis added a comment.
address comments
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D54930/new/
https://reviews.llvm.org/D54930
Files:
llvm/utils/gn/README.rst
llvm/utils/gn/build/sync_source_lists_from_cmake.py
llvm/utils/gn/secondary/llvm/lib/Support/BUILD.gn
Index: llvm/utils/gn/secondary/llvm/lib/Support/BUILD.gn
===================================================================
--- llvm/utils/gn/secondary/llvm/lib/Support/BUILD.gn
+++ llvm/utils/gn/secondary/llvm/lib/Support/BUILD.gn
@@ -39,6 +39,7 @@
"BinaryStreamWriter.cpp",
"BlockFrequency.cpp",
"BranchProbability.cpp",
+ "BuryPointer.cpp",
"COM.cpp",
"CachePruning.cpp",
"Chrono.cpp",
Index: llvm/utils/gn/build/sync_source_lists_from_cmake.py
===================================================================
--- /dev/null
+++ llvm/utils/gn/build/sync_source_lists_from_cmake.py
@@ -0,0 +1,54 @@
+#!/usr/bin/env python
+
+"""Helps to keep BUILD.gn files in sync with the corresponding CMakeLists.txt.
+
+For each BUILD.gn file in the tree, checks if the list of cpp files in
+it is identical to the list of cpp files in the corresponding CMakeLists.txt
+file, and prints the difference if not."""
+
+from __future__ import print_function
+
+import os
+import re
+import subprocess
+
+def main():
+ gn_files = subprocess.check_output(
+ ['git', 'ls-files', '*BUILD.gn']).splitlines()
+
+ # Matches e.g. | "foo.cpp",|.
+ gn_cpp_re = re.compile(r'^\s*"([^"]+\.(?:cpp|h))",$', re.MULTILINE)
+ # Matches e.g. | "foo.cpp"|.
+ cmake_cpp_re = re.compile(r'^\s*([A-Za-z_0-9/-]+\.(?:cpp|h))$',
+ re.MULTILINE)
+
+ for gn_file in gn_files:
+ # The CMakeLists.txt for llvm/utils/gn/secondary/foo/BUILD.gn is
+ # directly at foo/CMakeLists.txt.
+ strip_prefix = 'llvm/utils/gn/secondary/'
+ if not gn_file.startswith(strip_prefix):
+ continue
+ cmake_file = os.path.join(
+ os.path.dirname(gn_file[len(strip_prefix):]), 'CMakeLists.txt')
+ if not os.path.exists(cmake_file):
+ continue
+
+ def get_sources(source_re, text):
+ return set([m.group(1) for m in source_re.finditer(text)])
+ gn_cpp = get_sources(gn_cpp_re, open(gn_file).read())
+ cmake_cpp = get_sources(cmake_cpp_re, open(cmake_file).read())
+
+ if gn_cpp == cmake_cpp:
+ continue
+
+ print(gn_file)
+ add = cmake_cpp - gn_cpp
+ if add:
+ print('add:\n' + '\n'.join(' "%s",' % a for a in add))
+ remove = gn_cpp - cmake_cpp
+ if remove:
+ print('remove:\n' + '\n'.join(remove))
+ print()
+
+if __name__ == '__main__':
+ main()
Index: llvm/utils/gn/README.rst
===================================================================
--- llvm/utils/gn/README.rst
+++ llvm/utils/gn/README.rst
@@ -82,6 +82,24 @@
`utils/gn/secondary`. For example, the build file for `llvm/lib/Support` is in
`utils/gn/secondary/llvm/lib/Support`.
+.. _Syncing GN files from CMake files:
+
+Syncing GN files from CMake files
+=================================
+
+Sometimes after pulling in the latest changes, the GN build doesn't work.
+Most of the time this is due to someone adding a file to CMakeLists.txt file.
+Run `llvm/utils/gn/build/sync_source_lists_from_cmake.py` to print a report
+of which files need to be added to or removed from `BUILD.gn` files to
+match the corresponding `CMakeLists.txt`. You have to manually read the output
+of the script and implement its suggestions.
+
+If new `CMakeLists.txt` files have been added, you have to manually create
+a new corresponding `BUILD.gn` file below `llvm/utils/gn/secondary/`.
+
+If the dependencies in a `CMakeLists.txt` file have been changed, you have to
+manually analyze and fix.
+
.. _Philosophy:
Philosophy
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D54930.175872.patch
Type: text/x-patch
Size: 3613 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20181129/6bb4aef0/attachment.bin>
More information about the llvm-commits
mailing list