[PATCH] D73524: [CMake][DFSan] Don't use cat as it's not available on Windows

Petr Hosek via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Mon Jan 27 19:31:03 PST 2020


phosek created this revision.
phosek added reviewers: beanz, smeenai.
Herald added subscribers: llvm-commits, Sanitizers, mgorny.
Herald added projects: Sanitizers, LLVM.

We shouldn't be using cat in the build since this command isn't
available on Windows (unless installed as part of gnuwin32). Rather,
we'll use a Python script, this solution is already used by other
LLVM runtimes.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D73524

Files:
  compiler-rt/lib/dfsan/CMakeLists.txt
  compiler-rt/utils/cat_files.py


Index: compiler-rt/utils/cat_files.py
===================================================================
--- /dev/null
+++ compiler-rt/utils/cat_files.py
@@ -0,0 +1,45 @@
+#!/usr/bin/env python
+#===----------------------------------------------------------------------===##
+#
+# Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+# See https://llvm.org/LICENSE.txt for license information.
+# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+#
+#===----------------------------------------------------------------------===##
+
+from argparse import ArgumentParser
+import sys
+
+def print_and_exit(msg):
+    sys.stderr.write(msg + '\n')
+    sys.exit(1)
+
+def main():
+    parser = ArgumentParser(
+        description="Concatenate two files into a single file")
+    parser.add_argument(
+        '-o', '--output', dest='output', required=True,
+        help='The output file. stdout is used if not given',
+        type=str, action='store')
+    parser.add_argument(
+        'files', metavar='files',  nargs='+',
+        help='The files to concatenate')
+
+    args = parser.parse_args()
+
+    if len(args.files) < 2:
+        print_and_exit('fewer than 2 inputs provided')
+    data = ''
+    for filename in args.files:
+        with open(filename, 'r') as f:
+            data += f.read()
+        if len(data) != 0 and data[-1] != '\n':
+            data += '\n'
+    assert len(data) > 0 and "cannot cat empty files"
+    with open(args.output, 'w') as f:
+        f.write(data)
+
+
+if __name__ == '__main__':
+    main()
+    sys.exit(0)
Index: compiler-rt/lib/dfsan/CMakeLists.txt
===================================================================
--- compiler-rt/lib/dfsan/CMakeLists.txt
+++ compiler-rt/lib/dfsan/CMakeLists.txt
@@ -50,9 +50,10 @@
                    COMMAND
                     ${CMAKE_COMMAND} -E make_directory ${dfsan_abilist_dir}
                    COMMAND
-                     cat ${CMAKE_CURRENT_SOURCE_DIR}/done_abilist.txt
-                         ${CMAKE_CURRENT_SOURCE_DIR}/libc_ubuntu1404_abilist.txt
-                         > ${dfsan_abilist_filename}
+                    ${PYTHON_EXECUTABLE} ${COMPILER_RT_SOURCE_DIR}/utils/cat_files.py
+                    ${CMAKE_CURRENT_SOURCE_DIR}/done_abilist.txt
+                    ${CMAKE_CURRENT_SOURCE_DIR}/libc_ubuntu1404_abilist.txt
+                    -o ${dfsan_abilist_filename}
                    DEPENDS done_abilist.txt libc_ubuntu1404_abilist.txt)
 add_dependencies(dfsan dfsan_abilist)
 install(FILES ${dfsan_abilist_filename}


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D73524.240757.patch
Type: text/x-patch
Size: 2578 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20200128/362d267a/attachment.bin>


More information about the llvm-commits mailing list