Skip to content

Commit f07a23c

Browse files
Transurgeonclaude
andcommitted
fix Windows build: stub dense_matrix symbols and guard dense bindings
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent 9667d49 commit f07a23c

3 files changed

Lines changed: 34 additions & 0 deletions

File tree

setup.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,9 @@ def finalize_options(self) -> None:
4545
if not any(ex in s for ex in _exclude)
4646
] + ["sparsediffpy/_bindings/bindings.c"]
4747

48+
if system == "windows":
49+
diff_engine_sources.append("sparsediffpy/_bindings/dense_matrix_stub.c")
50+
4851
# Define _POSIX_C_SOURCE on Linux for clock_gettime and struct timespec
4952
defines = []
5053
if system == "linux":

sparsediffpy/_bindings/bindings.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,9 @@
1111
#include "atoms/const_vector_mult.h"
1212
#include "atoms/constant.h"
1313
#include "atoms/cos.h"
14+
#ifndef _MSC_VER
1415
#include "atoms/dense_matmul.h"
16+
#endif
1517
#include "atoms/diag_vec.h"
1618
#include "atoms/entr.h"
1719
#include "atoms/exp.h"
@@ -112,12 +114,16 @@ static PyMethodDef DNLPMethods[] = {
112114
{"make_xexp", py_make_xexp, METH_VARARGS, "Create xexp node"},
113115
{"make_sparse_left_matmul", py_make_sparse_left_matmul, METH_VARARGS,
114116
"Create sparse left matmul node (A @ f(x))"},
117+
#ifndef _MSC_VER
115118
{"make_dense_left_matmul", py_make_dense_left_matmul, METH_VARARGS,
116119
"Create dense left matmul node (A @ f(x)) where A is dense"},
120+
#endif
117121
{"make_sparse_right_matmul", py_make_sparse_right_matmul, METH_VARARGS,
118122
"Create sparse right matmul node (f(x) @ A)"},
123+
#ifndef _MSC_VER
119124
{"make_dense_right_matmul", py_make_dense_right_matmul, METH_VARARGS,
120125
"Create dense right matmul node (f(x) @ A) where A is dense"},
126+
#endif
121127
{"make_quad_form", py_make_quad_form, METH_VARARGS,
122128
"Create quadratic form node (x' * Q * x)"},
123129
{"make_quad_over_lin", py_make_quad_over_lin, METH_VARARGS,
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
/*
2+
* Stub implementations for dense matrix functions on Windows,
3+
* where BLAS is not available. These satisfy the linker for
4+
* left_matmul.c which references them, but the dense matmul
5+
* bindings are excluded via #ifndef _MSC_VER so they are
6+
* never actually called.
7+
*/
8+
#ifdef _MSC_VER
9+
#include "utils/matrix.h"
10+
#include <stdlib.h>
11+
12+
Matrix *new_dense_matrix(int m, int n, const double *data)
13+
{
14+
(void) m;
15+
(void) n;
16+
(void) data;
17+
return NULL;
18+
}
19+
20+
Matrix *dense_matrix_trans(const Dense_Matrix *self)
21+
{
22+
(void) self;
23+
return NULL;
24+
}
25+
#endif

0 commit comments

Comments
 (0)