Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add support for properly disabling the DLONG support #16

Draft
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

imciner2
Copy link
Member

@imciner2 imciner2 commented Feb 3, 2021

This fixes the compile error on systems where QDLDL_int is a 32-bit integer instead of a 64-bit integer. The problem is that the DLONG flag was being always defined in the code, and that then the qdldl interface code was always calling the long version of the amd_order instead of the one for the size of the integer. I have tested this on a 32-bit Beaglebone Black and my 64-bit Fedora machine and it compiles on both. (I can't run the tests on the 32-bit machine because I don't have Python >3.7).

Note that this will depend on PR osqp/qdldl#37 being merged into QDLDL and then being included here. In the mean time, it can be tested with the proposed QDLDL fix by running the following commands inside the qdldl submodule

git remote add imremote https://github.com/imciner2/qdldl.git
git fetch imremote
git checkout im/confheader

Fixes #15

@tatokis
Copy link

tatokis commented Sep 8, 2024

If anyone is interested, the patch should now be

diff --git a/c/amd/include/SuiteSparse_config.h b/c/amd/include/SuiteSparse_config.h
index ea3cea4..5a15deb 100644
--- a/c/amd/include/SuiteSparse_config.h
+++ b/c/amd/include/SuiteSparse_config.h
@@ -43,7 +43,6 @@ extern "C" {
 #endif
 
 #include "qdldl_types.h"
-#define DLONG
 typedef QDLDL_float c_float;
 
 #include <limits.h>
diff --git a/c/amd/include/amd_internal.h b/c/amd/include/amd_internal.h
index eccde9f..cd745fd 100644
--- a/c/amd/include/amd_internal.h
+++ b/c/amd/include/amd_internal.h
@@ -38,9 +38,6 @@
 #endif
 
 #include "qdldl_types.h"
-#ifndef DLONG
-#define DLONG
-#endif
 
 /*
     To enable debugging, uncomment the following line:
diff --git a/cpp/qdldl.cpp b/cpp/qdldl.cpp
index e304dbe..4751926 100644
--- a/cpp/qdldl.cpp
+++ b/cpp/qdldl.cpp
@@ -1,5 +1,6 @@
 #include "qdldl.hpp"
 
+#include "qdldl/include/qdldl_types.h"
 using namespace qdldl;
 
 
@@ -31,7 +32,11 @@ Solver::Solver(QDLDL_int n, QDLDL_int * Ap, QDLDL_int *Ai, QDLDL_float * Ax){
 	Pinv = new QDLDL_int[n];
 
 	// Permutation
+#ifdef DLONG
 	QDLDL_int amd_status = amd_l_order(nx, Ap, Ai, P, NULL, NULL);
+#else
+	QDLDL_int amd_status = amd_order(nx, Ap, Ai, P, NULL, NULL);
+#endif
 	if (amd_status < 0)
 		throw std::runtime_error(std::string("Error in AMD computation ") + std::to_string(amd_status));
 

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Build fails on i386, armv7 architectures
2 participants