aboutsummaryrefslogtreecommitdiff
path: root/gcc/jit/jit-tempdir.h
diff options
context:
space:
mode:
authorDavid Malcolm <dmalcolm@redhat.com>2014-12-09 20:00:07 +0000
committerDavid Malcolm <dmalcolm@gcc.gnu.org>2014-12-09 20:00:07 +0000
commitd1e5f2c7e2a800e99509aadb9cdc6d3e76eeb1a9 (patch)
tree83b8fc521cc13d74c7018f55655bf98202b25e4b /gcc/jit/jit-tempdir.h
parent661fce82a67307196182f81dd7d627d05aef4816 (diff)
downloadgcc-d1e5f2c7e2a800e99509aadb9cdc6d3e76eeb1a9.zip
gcc-d1e5f2c7e2a800e99509aadb9cdc6d3e76eeb1a9.tar.gz
gcc-d1e5f2c7e2a800e99509aadb9cdc6d3e76eeb1a9.tar.bz2
Add jit-tempdir.{c|h}
gcc/jit/ChangeLog: PR jit/64206 * Make-lang.in (jit_OBJS): Add jit/jit-tempdir.o. * jit-common.h (gcc::jit::tempdir): New forward decl. * jit-playback.c: Include jit-tempdir.h. (gcc::jit::playback::context::context): Initialize m_tempdir. (gcc::jit::playback::context::~context): Move tempdir cleanup to new file jit-tempdir.c (make_tempdir_path_template): Move to new file jit-tempdir.c. (gcc::jit::playback::context::compile): Move tempdir creation to new tempdir object in new file jit-tempdir.c. (gcc::jit::playback::context::make_fake_args): Get path from tempdir object rather than from member data. (gcc::jit::playback::context::convert_to_dso): Likewise. (gcc::jit::playback::context::dlopen_built_dso): Likewise. (gcc::jit::playback::context::dump_generated_code): Likewise. (gcc::jit::playback::context::get_path_c_file): New function. (gcc::jit::playback::context::get_path_s_file): New function. (gcc::jit::playback::context::get_path_so_file): New function. * jit-playback.h (gcc::jit::playback::context::get_path_c_file): New function. (gcc::jit::playback::context::get_path_s_file): New function. (gcc::jit::playback::context::get_path_so_file): New function. (gcc::jit::playback::context): Move fields "m_path_template", "m_path_tempdir", "m_path_c_file", "m_path_s_file", "m_path_so_file" to new jit::tempdir class; add field "m_tempdir". * jit-tempdir.c: New file. * jit-tempdir.h: New file. From-SVN: r218533
Diffstat (limited to 'gcc/jit/jit-tempdir.h')
-rw-r--r--gcc/jit/jit-tempdir.h81
1 files changed, 81 insertions, 0 deletions
diff --git a/gcc/jit/jit-tempdir.h b/gcc/jit/jit-tempdir.h
new file mode 100644
index 0000000..31636dd
--- /dev/null
+++ b/gcc/jit/jit-tempdir.h
@@ -0,0 +1,81 @@
+/* Managing temporary directories and their content within libgccjit.so
+ Copyright (C) 2014 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
+
+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:
+ tempdir (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; }
+
+ 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;
+
+};
+
+} // namespace gcc::jit
+
+} // namespace gcc
+
+#endif /* JIT_TEMPDIR_H */