Make osqp build
Prep for using it in the catapult.
Change-Id: Ic642b1c04469563de13a8a6227407aacb75eff6a
Signed-off-by: Austin Schuh <austin.linux@gmail.com>
diff --git a/third_party/osqp/BUILD b/third_party/osqp/BUILD
new file mode 100644
index 0000000..8276eff
--- /dev/null
+++ b/third_party/osqp/BUILD
@@ -0,0 +1,146 @@
+genrule(
+ name = "make_osqp_configure",
+ outs = ["include/osqp_configure.h"],
+ cmd = "echo > $@",
+)
+
+genrule(
+ name = "make_qdldl_version",
+ outs = ["lin_sys/direct/qdldl/qdldl_sources/include/qdldl_version.h"],
+ cmd = "echo > $@",
+)
+
+genrule(
+ name = "make_qdldl_types",
+ outs = ["lin_sys/direct/qdldl/qdldl_sources/include/qdldl_types.h"],
+ cmd = """cat << EOF > $@
+#ifndef QDLDL_TYPES_H
+# define QDLDL_TYPES_H
+
+# ifdef __cplusplus
+extern "C" {
+# endif /* ifdef __cplusplus */
+
+#include <limits.h> //for the QDLDL_INT_TYPE_MAX
+
+// QDLDL integer and float types
+
+typedef int QDLDL_int; /* for indices */
+typedef double QDLDL_float; /* for numerical values */
+typedef unsigned char QDLDL_bool; /* for boolean values */
+
+//Maximum value of the signed type QDLDL_int.
+#define QDLDL_INT_MAX LLONG_MAX
+
+# ifdef __cplusplus
+}
+# endif /* ifdef __cplusplus */
+
+#endif /* ifndef QDLDL_TYPES_H */
+EOF""",
+)
+
+cc_library(
+ name = "osqp_includes",
+ hdrs = [
+ "include/auxil.h",
+ "include/constants.h",
+ "include/cs.h",
+ "include/ctrlc.h",
+ "include/glob_opts.h",
+ "include/kkt.h",
+ "include/lin_alg.h",
+ "include/lin_sys.h",
+ "include/osqp.h",
+ "include/osqp_configure.h",
+ "include/osqp_error.h",
+ "include/polish.h",
+ "include/proj.h",
+ "include/scaling.h",
+ "include/types.h",
+ "include/util.h",
+ "include/version.h",
+ "lin_sys/lib_handler.h",
+ ],
+ defines = [
+ "IS_LINUX",
+ #"PRINTING",
+ "PROFILING",
+ "CTRLC",
+ # TODO(austin): Use floats instead
+ #"DFLOAT",
+ #"DLONG",
+ "ENABLE_MKL_PARDISO",
+ ],
+ includes = [
+ "include",
+ "lin_sys",
+ ],
+)
+
+cc_library(
+ name = "osqp",
+ srcs = [
+ "lin_sys/direct/pardiso/pardiso_interface.c",
+ "lin_sys/direct/pardiso/pardiso_loader.c",
+ "lin_sys/direct/qdldl/amd/src/SuiteSparse_config.c",
+ "lin_sys/direct/qdldl/amd/src/amd_1.c",
+ "lin_sys/direct/qdldl/amd/src/amd_2.c",
+ "lin_sys/direct/qdldl/amd/src/amd_aat.c",
+ "lin_sys/direct/qdldl/amd/src/amd_control.c",
+ "lin_sys/direct/qdldl/amd/src/amd_defaults.c",
+ "lin_sys/direct/qdldl/amd/src/amd_info.c",
+ "lin_sys/direct/qdldl/amd/src/amd_order.c",
+ "lin_sys/direct/qdldl/amd/src/amd_post_tree.c",
+ "lin_sys/direct/qdldl/amd/src/amd_postorder.c",
+ "lin_sys/direct/qdldl/amd/src/amd_preprocess.c",
+ "lin_sys/direct/qdldl/amd/src/amd_valid.c",
+ "lin_sys/direct/qdldl/qdldl_interface.c",
+ "lin_sys/direct/qdldl/qdldl_sources/src/qdldl.c",
+ "lin_sys/lib_handler.c",
+ "src/auxil.c",
+ "src/cs.c",
+ "src/ctrlc.c",
+ "src/error.c",
+ "src/kkt.c",
+ "src/lin_alg.c",
+ "src/lin_sys.c",
+ "src/osqp.c",
+ "src/polish.c",
+ "src/proj.c",
+ "src/scaling.c",
+ "src/util.c",
+ ],
+ hdrs = [
+ "lin_sys/direct/pardiso/pardiso_interface.h",
+ "lin_sys/direct/pardiso/pardiso_loader.h",
+ "lin_sys/direct/qdldl/amd/include/SuiteSparse_config.h",
+ "lin_sys/direct/qdldl/amd/include/amd.h",
+ "lin_sys/direct/qdldl/amd/include/amd_internal.h",
+ "lin_sys/direct/qdldl/qdldl_interface.h",
+ "lin_sys/direct/qdldl/qdldl_sources/include/qdldl.h",
+ "lin_sys/direct/qdldl/qdldl_sources/include/qdldl_types.h",
+ "lin_sys/direct/qdldl/qdldl_sources/include/qdldl_version.h",
+ ],
+ copts = [
+ "-Wno-cast-qual",
+ ],
+ defines = [
+ 'QDLDL_VERSION_MAJOR="0"',
+ 'QDLDL_VERSION_MINOR="1"',
+ 'QDLDL_VERSION_PATCH="6"',
+ 'QDLDL_VERSION="0.1.6"',
+ ],
+ includes = [
+ "lin_sys/direct/pardiso",
+ "lin_sys/direct/qdldl",
+ "lin_sys/direct/qdldl/amd/include",
+ "lin_sys/direct/qdldl/qdldl_sources/include",
+ ],
+ linkopts = ["-ldl"],
+ target_compatible_with = ["@platforms//os:linux"],
+ visibility = ["//visibility:public"],
+ deps = [
+ ":osqp_includes",
+ ],
+)