[CMake] FortranCInterface generating header correctly?
Giovanni Azua
bravegag at gmail.com
Wed Mar 21 09:32:45 EDT 2012
Hello,
I have a project for which the main language is C (soon CPP) that calls some functions from Intel MKL. I have the need to use four third-party high performance fortran routines and I need to:
1) be able to call these Fortran routines from my C code
2) Automatically generate C headers I can include in my C code (use the FortranCInterface.cmake)
3) be able to compile the Fortran routines and have them linking with/calling MKL's LAPACK and BLAS implementations and not any other possible GNU variants.
I followed the example here <http://public.kitware.com/cgi-bin/viewcvs.cgi/Tests/Fortran/?root=CMake> and I think I am not too far from the target. However, there are a few unclear points e.g. I didn't exactly understand what this line is doing:
list(APPEND FORTRAN_FUNCTIONS my_sub mysub)
my attempt to achieve the same thing is:
add_library(qr_updates STATIC
src/addcols.f
src/addcolsq.f
src/delcols.f
src/delcolsq.f
)
list(APPEND FORTRAN_FUNCTIONS ADDCOLS addcols)
list(APPEND FORTRAN_FUNCTIONS ADDCOLSQ addcolsq)
list(APPEND FORTRAN_FUNCTIONS DELCOLS delcols)
list(APPEND FORTRAN_FUNCTIONS DELCOLSQ delcolsq)
FortranCInterface_HEADER(qr_updates.h
MACRO_NAMESPACE "FC_"
SYMBOL_NAMESPACE "F_"
SYMBOLS ${FORTRAN_FUNCTIONS}
)
include_directories("${myproject_BINARY_DIR}")
then I get the following qr_updates.h as output:
#ifndef FC_HEADER_INCLUDED
#define FC_HEADER_INCLUDED
/* Mangling for Fortran global symbols without underscores. */
#define FC_GLOBAL(name,NAME) name##_
/* Mangling for Fortran global symbols with underscores. */
#define FC_GLOBAL_(name,NAME) name##_
/* Mangling for Fortran module symbols without underscores. */
#define FC_MODULE(mod_name,name, mod_NAME,NAME) __##mod_name##_MOD_##name
/* Mangling for Fortran module symbols with underscores. */
#define FC_MODULE_(mod_name,name, mod_NAME,NAME) __##mod_name##_MOD_##name
/*--------------------------------------------------------------------------*/
/* Mangle some symbols automatically. */
#define F_ADDCOLS FC_GLOBAL(addcols, ADDCOLS)
#define F_addcols FC_GLOBAL(addcols, ADDCOLS)
#define F_ADDCOLSQ FC_GLOBAL(addcolsq, ADDCOLSQ)
#define F_addcolsq FC_GLOBAL(addcolsq, ADDCOLSQ)
#define F_DELCOLS FC_GLOBAL(delcols, DELCOLS)
#define F_delcols FC_GLOBAL(delcols, DELCOLS)
#define F_DELCOLSQ FC_GLOBAL(delcolsq, DELCOLSQ)
#define F_delcolsq FC_GLOBAL(delcolsq, DELCOLSQ)
#endif
but the signatures in this generated header look fishy, am I missing anything? For example the function signature for the ADDCOLSQ Fortran routine looks like this:
SUBROUTINE ADDCOLSQ( M, N, A, LDA, Q, LDQ, K, P, TAU, WORK, INFO)
*
* Craig Lucas, University of Manchester
* March, 2004
*
* .. Scalar Arguments ..
INTEGER INFO, K, LDA, LDQ, M, N, P
* ..
* .. Array Arguments ..
DOUBLE PRECISION A( LDA, * ), Q( LDQ, * ), TAU( * ), WORK( * )
I expected the generated header to contain a matching signature or?
TIA,
Best regards,
Giovanni
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.cmake.org/pipermail/cmake/attachments/20120321/7f0bd91c/attachment-0001.htm>
More information about the CMake
mailing list