Squashed 'third_party/osqp/' content from commit 33454b3e23

Change-Id: I056df0582ca06664e86554c341a94c47ab932001
git-subtree-dir: third_party/osqp
git-subtree-split: 33454b3e236f1f44193bfbbb6b8c8e71f8f04e9a
Signed-off-by: Austin Schuh <austin.linux@gmail.com>
diff --git a/include/glob_opts.h b/include/glob_opts.h
new file mode 100644
index 0000000..e2b5b24
--- /dev/null
+++ b/include/glob_opts.h
@@ -0,0 +1,167 @@
+#ifndef GLOB_OPTS_H
+# define GLOB_OPTS_H
+
+# ifdef __cplusplus
+extern "C" {
+# endif /* ifdef __cplusplus */
+
+/*
+   Define OSQP compiler flags
+ */
+
+// cmake generated compiler flags
+#include "osqp_configure.h"
+
+/* DATA CUSTOMIZATIONS (depending on memory manager)-----------------------   */
+
+// We do not need memory allocation functions if EMBEDDED is enabled
+# ifndef EMBEDDED
+
+/* define custom printfs and memory allocation (e.g. matlab/python) */
+#  ifdef MATLAB
+    #   include "mex.h"
+static void* c_calloc(size_t num, size_t size) {
+  void *m = mxCalloc(num, size);
+  mexMakeMemoryPersistent(m);
+  return m;
+}
+
+static void* c_malloc(size_t size) {
+  void *m = mxMalloc(size);
+  mexMakeMemoryPersistent(m);
+  return m;
+}
+
+static void* c_realloc(void *ptr, size_t size) {
+  void *m = mxRealloc(ptr, size);
+  mexMakeMemoryPersistent(m);
+  return m;
+}
+    #   define c_free mxFree
+#  elif defined PYTHON
+// Define memory allocation for python. Note that in Python 2 memory manager
+// Calloc is not implemented
+#   include <Python.h>
+#   if PY_MAJOR_VERSION >= 3
+// https://docs.python.org/3/c-api/memory.html
+// The following function sets are wrappers to the system allocator. These functions are thread-safe, the GIL does not need to be held.
+// The default raw memory allocator uses the following functions: malloc(), calloc(), realloc() and free(); call malloc(1) (or calloc(1, 1)) when requesting zero bytes.
+#    define c_malloc PyMem_RawMalloc
+#    define c_calloc PyMem_RawCalloc
+#    define c_free PyMem_RawFree
+#    define c_realloc PyMem_RawRealloc
+#   else  /* if PY_MAJOR_VERSION >= 3 */
+#   define c_malloc PyMem_Malloc
+#   define c_free PyMem_Free
+#   define c_realloc PyMem_Realloc
+static void* c_calloc(size_t num, size_t size) {
+	void *m = PyMem_Malloc(num * size);
+	memset(m, 0, num * size);
+	return m;
+}
+#   endif /* if PY_MAJOR_VERSION >= 3 */
+
+# elif !defined OSQP_CUSTOM_MEMORY
+/* If no custom memory allocator defined, use
+ * standard linux functions. Custom memory allocator definitions
+ * appear in the osqp_configure.h generated file. */
+    #  include <stdlib.h>
+    #  define c_malloc  malloc
+    #  define c_calloc  calloc
+    #  define c_free    free
+    #  define c_realloc realloc
+#  endif /* ifdef MATLAB */
+
+# endif // end ifndef EMBEDDED
+
+
+/* Use customized number representation -----------------------------------   */
+# ifdef DLONG            // long integers
+typedef long long c_int; /* for indices */
+# else // standard integers
+typedef int c_int;       /* for indices */
+# endif /* ifdef DLONG */
+
+
+# ifndef DFLOAT         // Doubles
+typedef double c_float; /* for numerical values  */
+# else                  // Floats
+typedef float c_float;  /* for numerical values  */
+# endif /* ifndef DFLOAT */
+
+
+/* Use customized operations */
+
+# ifndef c_absval
+#  define c_absval(x) (((x) < 0) ? -(x) : (x))
+# endif /* ifndef c_absval */
+
+# ifndef c_max
+#  define c_max(a, b) (((a) > (b)) ? (a) : (b))
+# endif /* ifndef c_max */
+
+# ifndef c_min
+#  define c_min(a, b) (((a) < (b)) ? (a) : (b))
+# endif /* ifndef c_min */
+
+// Round x to the nearest multiple of N
+# ifndef c_roundmultiple
+#  define c_roundmultiple(x, N) ((x) + .5 * (N)-c_fmod((x) + .5 * (N), (N)))
+# endif /* ifndef c_roundmultiple */
+
+
+/* Use customized functions -----------------------------------------------   */
+
+# if EMBEDDED != 1
+
+#  include <math.h>
+#  ifndef DFLOAT // Doubles
+#   define c_sqrt sqrt
+#   define c_fmod fmod
+#  else          // Floats
+#   define c_sqrt sqrtf
+#   define c_fmod fmodf
+#  endif /* ifndef DFLOAT */
+
+# endif // end EMBEDDED
+
+# ifdef PRINTING
+#  include <stdio.h>
+#  include <string.h>
+
+/* informational print function */
+#  ifdef MATLAB
+#   define c_print mexPrintf
+#  elif defined PYTHON
+#   include <Python.h>
+# define c_print(...)                              \
+  {                                                  \
+    PyGILState_STATE gilstate = PyGILState_Ensure(); \
+    PySys_WriteStdout(__VA_ARGS__);                  \
+    PyGILState_Release(gilstate);                    \
+  }
+#  elif defined R_LANG
+#   include <R_ext/Print.h>
+#   define c_print Rprintf
+#  else  /* ifdef MATLAB */
+#   define c_print printf
+#  endif /* c_print configuration */
+
+/* error printing function */
+#  ifdef R_LANG
+    /* Some CRAN builds complain about __VA_ARGS__, so just print */
+    /* out the error messages on R without the __FUNCTION__ trace */
+#   define c_eprint Rprintf
+#  else
+#   define c_eprint(...) c_print("ERROR in %s: ", __FUNCTION__); \
+            c_print(__VA_ARGS__); c_print("\n");
+#  endif /* c_eprint configuration */
+
+# endif  /* PRINTING */
+
+
+# ifdef __cplusplus
+}
+# endif /* ifdef __cplusplus */
+
+#endif /* ifndef GLOB_OPTS_H */