[libc-commits] [libc] cdbba15 - [libc] Add --write-if-changed switch to hdrgen/main.py (#122037)
via libc-commits
libc-commits at lists.llvm.org
Wed Jan 8 11:00:35 PST 2025
Author: Roland McGrath
Date: 2025-01-08T11:00:31-08:00
New Revision: cdbba15c6cd53291358bf95a9a9057042fcbf163
URL: https://github.com/llvm/llvm-project/commit/cdbba15c6cd53291358bf95a9a9057042fcbf163
DIFF: https://github.com/llvm/llvm-project/commit/cdbba15c6cd53291358bf95a9a9057042fcbf163.diff
LOG: [libc] Add --write-if-changed switch to hdrgen/main.py (#122037)
This avoids touching the output file when it hasn't changed. The
cmake build integration now uses this so that touching a .yaml or
.h.def file in ways that don't affect the generated header output
won't cause unnecessary recompilations.
Added:
Modified:
libc/cmake/modules/LLVMLibCHeaderRules.cmake
libc/utils/hdrgen/main.py
Removed:
################################################################################
diff --git a/libc/cmake/modules/LLVMLibCHeaderRules.cmake b/libc/cmake/modules/LLVMLibCHeaderRules.cmake
index a95c13389012f8..288e4dade0b472 100644
--- a/libc/cmake/modules/LLVMLibCHeaderRules.cmake
+++ b/libc/cmake/modules/LLVMLibCHeaderRules.cmake
@@ -113,6 +113,7 @@ function(add_gen_header target_name)
COMMAND ${Python3_EXECUTABLE} "${LIBC_SOURCE_DIR}/utils/hdrgen/main.py"
--output ${out_file}
--depfile ${dep_file}
+ --write-if-changed
${entry_points}
${yaml_file}
DEPENDS ${yaml_file} ${fq_data_files}
diff --git a/libc/utils/hdrgen/main.py b/libc/utils/hdrgen/main.py
index 2bba1efa04e42a..5dd392ab6662ee 100755
--- a/libc/utils/hdrgen/main.py
+++ b/libc/utils/hdrgen/main.py
@@ -37,6 +37,12 @@ def main():
help="Path to write a depfile",
type=Path,
)
+ parser.add_argument(
+ "--write-if-changed",
+ help="Write the output file only if its contents have changed",
+ action="store_true",
+ default=False,
+ )
parser.add_argument(
"-e",
"--entry-point",
@@ -72,9 +78,13 @@ def write_depfile():
write_depfile()
- args.output.parent.mkdir(parents=True, exist_ok=True)
- with open(args.output, "w") as out:
- out.write(contents)
+ if (
+ not args.write_if_changed
+ or not args.output.exists()
+ or args.output.read_text() != contents
+ ):
+ args.output.parent.mkdir(parents=True, exist_ok=True)
+ args.output.write_text(contents)
if __name__ == "__main__":
More information about the libc-commits
mailing list