Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Johannes Pfeifer
dynare
Commits
1db892ef
Commit
1db892ef
authored
Mar 23, 2013
by
Sébastien Villemot
Browse files
Fix compilation problems of bytecode with UMFPACK and MATLAB's libut
parent
a5e9c7be
Changes
4
Hide whitespace changes
Inline
Side-by-side
mex/build/matlab/bytecode/Makefile.am
View file @
1db892ef
include
../mex.am
include
../../bytecode.am
bytecode_LDADD
=
-lmwumfpack
-lut
mex/build/octave/bytecode/Makefile.am
View file @
1db892ef
EXEEXT
=
.mex
include
../mex.am
include
../../bytecode.am
bytecode_LDADD
=
-lumfpack
mex/sources/bytecode/SparseMatrix.cc
View file @
1db892ef
...
...
@@ -32,16 +32,10 @@
#endif
using
namespace
std
;
#if (defined _MSC_VER || defined OCTAVE_MEX_FILE)
#ifdef _MSC_VER
#include <windows.h>
HINSTANCE
hinstLib
;
#else
#include <sys/types.h>
#include <dlfcn.h>
void* hinstLib;
#endif
#define UMFPACK_INFO 90
#define UMFPACK_CONTROL 20
/* used in all UMFPACK_report_* routines: */
...
...
@@ -50,9 +44,6 @@ void* hinstLib;
#define UMFPACK_OK (0)
#define UMFPACK_STATUS 0
/* UMFPACK_OK, or other result */
typedef
void
(
*
t_umfpack_dl_free_numeric
)(
void
**
Numeric
);
t_umfpack_dl_free_numeric
umfpack_dl_free_numeric
;
typedef
void
(
*
t_umfpack_dl_free_symbolic
)(
void
**
Symbolic
);
...
...
@@ -117,17 +108,12 @@ dynSparseMatrix::dynSparseMatrix()
lu_inc_tol
=
1e-10
;
Symbolic
=
NULL
;
Numeric
=
NULL
;
#if (defined _MSC_VER || defined OCTAVE_MEX_FILE)
// Get a handle to the DLL module.
#ifdef _MSC_VER
// Get a handle to the DLL module.
hinstLib
=
LoadLibrary
(
TEXT
(
"libmwumfpack.dll"
));
#else
hinstLib = dlopen("libmwumfpack.dll",RTLD_LAZY);
#endif
// If the handle is valid, try to get the function address.
if
(
hinstLib
)
{
#ifdef _MSC_VER
umfpack_dl_free_numeric
=
(
t_umfpack_dl_free_numeric
)
GetProcAddress
(
hinstLib
,
"umfpack_dl_free_numeric"
);
if
(
!
umfpack_dl_free_numeric
)
{
...
...
@@ -185,97 +171,6 @@ dynSparseMatrix::dynSparseMatrix()
tmp
<<
" in libmwumfpack.dll, the function umfpack_dl_defaults is not found."
;
throw
FatalExceptionHandling
(
tmp
.
str
());
}
/*#else
mexPrintf("loading libmwumpfpack\n");
// reset errors
dlerror();
umfpack_dl_free_numeric = (t_umfpack_dl_free_numeric) dlsym(hinstLib, "umfpack_dl_free_numeric");
const char* dlsym_error = dlerror();
if (dlsym_error)
{
mexPrintf("umfpack_dl_free_numeric not found\n");
ostringstream tmp;
tmp << " in libmwumfpack.dll, the function umfpack_dl_free_numeric is not found.";
throw FatalExceptionHandling(tmp.str());
}
// reset errors
dlerror();
umfpack_dl_free_symbolic = (t_umfpack_dl_free_symbolic) dlsym(hinstLib, "umfpack_dl_free_symbolic");
dlsym_error = dlerror();
if (dlsym_error)
{
mexPrintf("umfpack_dl_free_symbolic not found\n");
ostringstream tmp;
tmp << " in libmwumfpack.dll, the function umfpack_dl_free_symbolic is not found.";
throw FatalExceptionHandling(tmp.str());
}
// reset errors
dlerror();
umfpack_dl_solve = (t_umfpack_dl_solve) dlsym(hinstLib, "umfpack_dl_solve");
dlsym_error = dlerror();
if (dlsym_error)
{
mexPrintf("umfpack_dl_solve not found\n");
ostringstream tmp;
tmp << " in libmwumfpack.dll, the function umfpack_dl_solve is not found.";
throw FatalExceptionHandling(tmp.str());
}
// reset errors
dlerror();
umfpack_dl_numeric = (t_umfpack_dl_numeric) dlsym(hinstLib, "umfpack_dl_numeric");
dlsym_error = dlerror();
if (dlsym_error)
{
mexPrintf("umfpack_dl_numeric not found\n");
ostringstream tmp;
tmp << " in libmwumfpack.dll, the function umfpack_dl_numeric is not found.";
throw FatalExceptionHandling(tmp.str());
}
// reset errors
dlerror();
umfpack_dl_symbolic = (t_umfpack_dl_symbolic) dlsym(hinstLib, "umfpack_dl_symbolic");
dlsym_error = dlerror();
if (dlsym_error)
{
mexPrintf("umfpack_dl_symbolic not found\n");
ostringstream tmp;
tmp << " in libmwumfpack.dll, the function umfpack_dl_symbolic is not found.";
throw FatalExceptionHandling(tmp.str());
}
// reset errors
dlerror();
umfpack_dl_report_info = (t_umfpack_dl_report_info) dlsym(hinstLib, "umfpack_dl_report_info");
dlsym_error = dlerror();
if (dlsym_error)
{
mexPrintf("umfpack_dl_report_info not found\n");
ostringstream tmp;
tmp << " in libmwumfpack.dll, the function umfpack_dl_report_info is not found.";
throw FatalExceptionHandling(tmp.str());
}
// reset errors
dlerror();
umfpack_dl_report_status = (t_umfpack_dl_report_status) dlsym(hinstLib, "umfpack_dl_report_status");
dlsym_error = dlerror();
if (dlsym_error)
{
mexPrintf("umfpack_dl_report_status not found\n");
ostringstream tmp;
tmp << " in libmwumfpack.dll, the function umfpack_dl_report_status is not found.";
throw FatalExceptionHandling(tmp.str());
}
// reset errors
dlerror();
umfpack_dl_defaults = (t_umfpack_dl_defaults) dlsym(hinstLib, "umfpack_dl_defaults");
dlsym_error = dlerror();
if (dlsym_error)
{
mexPrintf("umfpack_dl_defaults not found\n");
ostringstream tmp;
tmp << " in libmwumfpack.dll, the function umfpack_dl_defaults is not found.";
throw FatalExceptionHandling(tmp.str());
}*/
#endif
}
else
{
...
...
mex/sources/dynumfpack.h
View file @
1db892ef
/*
* Defines the prototypes for BLAS Fortran functions.
*
* Also defines a typedef blas_int to be used for all integers passed to BLAS
* functions.
*
* When used in the context of a MATLAB MEX file, you must define MATLAB_MEX_FILE
* and MATLAB_VERSION (for version 7.4, define it to 0x0704).
*
*
* Copyright (C) 2009-2011 Dynare Team
* Defines some prototypes for UMFPACK functions
*/
/*
* Copyright (C) 2013 Dynare Team
*
* This file is part of Dynare.
*
...
...
@@ -29,26 +24,10 @@
#ifndef _DYNUMFPACK_H
#define _DYNUMFPACK_H
/* Starting from version 7.8, MATLAB BLAS expects ptrdiff_t arguments for integers */
#if defined(MATLAB_MEX_FILE) && MATLAB_VERSION >= 0x0708
# ifdef __cplusplus
# include <cstddef>
# else
# include <stddef.h>
# endif
#endif
/*
#if defined(MATLAB_MEX_FILE) && defined(_WIN32) && !defined(_MSC_VER)
# define FORTRAN_WRAPPER(x) x
#else
# define FORTRAN_WRAPPER(x) x
#endif
*/
#ifdef __cplusplus
extern
"C"
{
#endif
/* -------------------------------------------------------------------------- */
/* size of Info and Control arrays */
/* -------------------------------------------------------------------------- */
...
...
@@ -64,57 +43,46 @@ extern "C" {
#define UMFPACK_OK (0)
#define UMFPACK_STATUS 0
/* UMFPACK_OK, or other result */
#ifdef _WIN64
typedef
long
long
int
SuiteSparse_long
;
#else
typedef
long
SuiteSparse_long
;
#endif
#define umfpack_dl_defaults FORTRAN_WRAPPER(umfpack_dl_defaults)
void
umfpack_dl_defaults
(
double
Control
[
UMFPACK_CONTROL
]);
#define umfpack_dl_symbolic FORTRAN_WRAPPER(umfpack_dl_symbolic)
SuiteSparse_long
umfpack_dl_symbolic
(
SuiteSparse_long
n_row
,
SuiteSparse_long
n_col
,
const
SuiteSparse_long
Ap
[
],
const
SuiteSparse_long
Ai
[
],
const
double
Ax
[
],
void
**
Symbolic
,
const
double
Control
[
UMFPACK_CONTROL
],
double
Info
[
UMFPACK_INFO
]);
#define umfpack_dl_numeric FORTRAN_WRAPPER(umfpack_dl_numeric)
SuiteSparse_long
umfpack_dl_numeric
(
const
SuiteSparse_long
Ap
[
],
const
SuiteSparse_long
Ai
[
],
const
double
Ax
[
],
void
*
Symbolic
,
void
**
Numeric
,
const
double
Control
[
UMFPACK_CONTROL
],
double
Info
[
UMFPACK_INFO
]);
#define umfpack_dl_solve FORTRAN_WRAPPER(umfpack_dl_solve)
SuiteSparse_long
umfpack_dl_solve
(
SuiteSparse_long
sys
,
const
SuiteSparse_long
Ap
[
],
const
SuiteSparse_long
Ai
[
],
const
double
Ax
[
],
double
X
[
],
const
double
B
[
],
void
*
Numeric
,
const
double
Control
[
UMFPACK_CONTROL
],
double
Info
[
UMFPACK_INFO
]);
#define umfpack_dl_report_info FORTRAN_WRAPPER(umfpack_dl_report_info)
void
umfpack_dl_report_info
(
const
double
Control
[
UMFPACK_CONTROL
],
const
double
Info
[
UMFPACK_INFO
]);
#define umfpack_dl_report_status FORTRAN_WRAPPER(umfpack_dl_report_status)
void
umfpack_dl_report_status
(
const
double
Control
[
UMFPACK_CONTROL
],
SuiteSparse_long
status
);
#define umfpack_dl_free_symbolic FORTRAN_WRAPPER(umfpack_dl_free_symbolic)
void
umfpack_dl_free_symbolic
(
void
**
Symbolic
);
#define umfpack_dl_free_numeric FORTRAN_WRAPPER(umfpack_dl_free_numeric)
void
umfpack_dl_free_numeric
(
void
**
Numeric
);
#define umfpack_dl_load_symbolic FORTRAN_WRAPPER(umfpack_dl_load_symbolic )
SuiteSparse_long
umfpack_dl_load_symbolic
(
void
**
Symbolic
,
char
*
filename
)
;
#define umfpack_dl_load_numeric FORTRAN_WRAPPER(umfpack_dl_load_numeric )
SuiteSparse_long
umfpack_dl_load_numeric
(
void
**
Numeric
,
char
*
filename
)
;
#define umfpack_dl_save_symbolic FORTRAN_WRAPPER(umfpack_dl_save_symbolic )
SuiteSparse_long
umfpack_dl_save_symbolic
(
void
*
Symbolic
,
char
*
filename
)
;
#define umfpack_dl_save_numeric FORTRAN_WRAPPER(umfpack_dl_save_numeric )
SuiteSparse_long
umfpack_dl_save_numeric
(
void
*
Numeric
,
char
*
filename
)
;
#ifdef __cplusplus
}
/* extern "C" */
#endif
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment