From 063781f6efec45bf302c678535c78199220c789b Mon Sep 17 00:00:00 2001
From: Yichao Yu <yyc1992@gmail.com>
Date: Mon, 16 Jun 2014 03:28:49 -0400
Subject: [PATCH] runtime debug switch

---
 pyopencl/c_wrapper/wrap_cl_core.h |  2 ++
 setup.py                          |  1 +
 src/c_wrapper/debug.cpp           | 43 +++++++++++++++++++++++++++++++
 src/c_wrapper/debug.h             | 13 ++++++++++
 4 files changed, 59 insertions(+)
 create mode 100644 src/c_wrapper/debug.cpp
 create mode 100644 src/c_wrapper/debug.h

diff --git a/pyopencl/c_wrapper/wrap_cl_core.h b/pyopencl/c_wrapper/wrap_cl_core.h
index 6494a460..7069dcbc 100644
--- a/pyopencl/c_wrapper/wrap_cl_core.h
+++ b/pyopencl/c_wrapper/wrap_cl_core.h
@@ -54,6 +54,8 @@ int have_gl();
 
 unsigned bitlog2(unsigned long v);
 void populate_constants(void(*add)(const char*, const char*, long value));
+int get_debug();
+void set_debug(int debug);
 
 // Platform
 error *get_platforms(clobj_t **ptr_platforms, uint32_t *num_platforms);
diff --git a/setup.py b/setup.py
index e2f56902..59bf27de 100644
--- a/setup.py
+++ b/setup.py
@@ -249,6 +249,7 @@ def main():
                                 "src/c_wrapper/sampler.cpp",
                                 "src/c_wrapper/program.cpp",
                                 "src/c_wrapper/kernel.cpp",
+                                "src/c_wrapper/debug.cpp",
                                 ],
                                include_dirs=(
                                    conf["CL_INC_DIR"]
diff --git a/src/c_wrapper/debug.cpp b/src/c_wrapper/debug.cpp
new file mode 100644
index 00000000..1a1b76a1
--- /dev/null
+++ b/src/c_wrapper/debug.cpp
@@ -0,0 +1,43 @@
+#include "debug.h"
+#include <stdlib.h>
+
+namespace pyopencl {
+
+static PYOPENCL_INLINE bool
+_get_debug_env()
+{
+    const char *env = getenv("PYOPENCL_DEBUG");
+#ifdef PYOPENCL_TRACE
+    const bool default_debug = true;
+#else
+    const bool default_debug = false;
+#endif
+    if (!env) {
+        return default_debug;
+    }
+    if (strcasecmp(env, "0") == 0 || strcasecmp(env, "f") == 0 ||
+        strcasecmp(env, "false") == 0 || strcasecmp(env, "off") == 0) {
+        return false;
+    }
+    if (strcasecmp(env, "1") == 0 || strcasecmp(env, "t") == 0 ||
+        strcasecmp(env, "true") == 0 || strcasecmp(env, "on") == 0) {
+        return true;
+    }
+    return default_debug;
+}
+
+bool debug_enabled = _get_debug_env();
+
+}
+
+int
+get_debug()
+{
+    return (int)pyopencl::debug_enabled;
+}
+
+void
+set_debug(int debug)
+{
+    pyopencl::debug_enabled = (bool)debug;
+}
diff --git a/src/c_wrapper/debug.h b/src/c_wrapper/debug.h
new file mode 100644
index 00000000..ba46f744
--- /dev/null
+++ b/src/c_wrapper/debug.h
@@ -0,0 +1,13 @@
+#include "wrap_cl.h"
+#include "utils.h"
+
+#ifndef __PYOPENCL_DEBUG_H
+#define __PYOPENCL_DEBUG_H
+
+namespace pyopencl {
+
+extern bool debug_enabled;
+
+}
+
+#endif
-- 
GitLab