diff gcc/jit/jit-tempdir.h @ 111:04ced10e8804

gcc 7
author kono
date Fri, 27 Oct 2017 22:46:09 +0900
parents
children 84e7813d76e9
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gcc/jit/jit-tempdir.h	Fri Oct 27 22:46:09 2017 +0900
@@ -0,0 +1,91 @@
+/* Managing temporary directories and their content within libgccjit.so
+   Copyright (C) 2014-2017 Free Software Foundation, Inc.
+   Contributed by David Malcolm <dmalcolm@redhat.com>.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3, or (at your option)
+any later version.
+
+GCC is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef JIT_TEMPDIR_H
+#define JIT_TEMPDIR_H
+
+#include "jit-logging.h"
+
+namespace gcc {
+
+namespace jit {
+
+/* A class to keep track of the jit::playback::context's tempdir.
+
+   The tempdir has the following layout:
+
+     /tmp/libgccjit-XXXXXX/
+			 ./fake.c
+			    (doesn't exist, but the rest of the
+			     compiler needs a source code filename)
+
+			 ./fake.s
+			      (created by toplev::main)
+
+			 ./fake.so
+			      (created by playback::context::convert_to_dso).
+
+  It is normally deleted from the filesystem in the playback::context's
+  dtor, unless GCC_JIT_BOOL_OPTION_KEEP_INTERMEDIATES was set.  */
+
+class tempdir : public log_user
+{
+ public:
+  tempdir (logger *logger, int keep_intermediates);
+  ~tempdir ();
+
+  bool create ();
+
+  const char * get_path () const { return m_path_tempdir; }
+  const char * get_path_c_file () const { return m_path_c_file; }
+  const char * get_path_s_file () const { return m_path_s_file; }
+  const char * get_path_so_file () const { return m_path_so_file; }
+
+  /* Add PATH to the vec of tempfiles that must be unlinked.
+     Take ownership of the buffer PATH; it will be freed.  */
+  void add_temp_file (char *path) { m_tempfiles.safe_push (path); }
+
+ private:
+  /* Was GCC_JIT_BOOL_OPTION_KEEP_INTERMEDIATES set?  If so, keep the
+     on-disk tempdir around after this wrapper object goes away.  */
+  int m_keep_intermediates;
+
+  /* Allocated using xmalloc (by xstrdup).  */
+  char *m_path_template;
+
+  /* This either aliases m_path_template, or is NULL.  */
+  char *m_path_tempdir;
+
+  /* The following are allocated using xmalloc.  */
+  char *m_path_c_file;
+  char *m_path_s_file;
+  char *m_path_so_file;
+
+  /* Other files within the tempdir to be cleaned up:
+     - certain ahead-of-time compilation artifacts (.o and .exe files)
+     - dumpfiles that were requested via gcc_jit_context_enable_dump.  */
+  auto_vec <char *> m_tempfiles;
+};
+
+} // namespace gcc::jit
+
+} // namespace gcc
+
+#endif /* JIT_TEMPDIR_H */