For anyone interested in a test case here it is. Put all files into same directory. Or see attached zip file.<br><br>--snip add_gpu_matlab_mex_library.cmake --<br><br><br>macro( add_gpu_matlab_mex_library LIB_NAME )<br>#function( add_gpu_matlab_mex_library LIB_NAME )<br>
<br> PARSE_CMAKE_ARGUMENTS(ARG<br> "SRCDIRS;CPP_SOURCES;CU_SOURCES;LINK_LIBS;DEFINES" ""<br> ${ARGN}<br> )<br><br><br> message( "ARG_SRCDIRS = ${ARG_SRCDIRS}" )<br> message( "ARG_CPP_SOURCES = ${ARG_CPP_SOURCES}" )<br>
message( "ARG_CU_SOURCES = ${ARG_CU_SOURCES}" )<br> message( "ARG_LINK_LIBS= ${ARG_LINK_LIBS}")<br> <br> cmake_minimum_required(VERSION 2.8)<br><br># SET( MATLAB_CUDA_MEX_NAME ${LIB_NAME} )<br>
<br> SET( MATLAB_CUDA_FILES ${ARG_CU_SOURCES} ${ARG_CPP_SOURCES} )<br><br> set_property(GLOBAL PROPERTY FIND_LIBRARY_USE_LIB64_PATHS 1)<br><br><br> INCLUDE_DIRECTORIES( <br> ./<br> )<br><br><br> LINK_DIRECTORIES(<br>
${MATLAB_LIBRARIES}<br> ${MATLAB_MEX_LIBRARY}<br> ${MATLAB_MX_LIBRARY}<br> ${MATLAB_ENG_LIBRARY}<br> "${TOP}/build/dvip4-Win64/lib/Debug"<br> )<br><br> SET( MATLAB_LINK_LIBS<br>
# libmx<br># libmex<br># libmat<br> )<br><br><br><br> SET( ${CUDA_LIBRARIES}<br># cudart<br># cuda<br># cublas<br># cublasemu<br> )<br><br><br> foreach( DEFINE_STR ${ARG_DEFINES} )<br>
message( "DEFINE_STR = ${DEFINE_STR}" )<br> add_definitions( -D${DEFINE_STR} )<br> endforeach()<br><br><br> if(DEFINED ARG_CU_SOURCES )<br> message( "ARG_CU_SOURCES is defined as = ${ARG_CU_SOURCES}" )<br>
CUDA_ADD_LIBRARY( ${LIB_NAME} SHARED ${MATLAB_CUDA_FILES} )<br> else()<br> message( "ARG_CU_SOURCES is not defined" )<br> ADD_LIBRARY( ${LIB_NAME} SHARED ${MATLAB_CUDA_FILES} )<br> endif()<br>
<br> TARGET_LINK_LIBRARIES( ${LIB_NAME}<br> ${MATLAB_LINK_LIBS}<br> ${CUDA_LIBRARIES}<br> ${ARG_LINK_LIBS}<br> )<br><br><br> if( DEFINED ARG_DEFINES )<br> SET_TARGET_PROPERTIES( ${LIB_NAME} PROPERTIES <br>
PREFIX "" <br># COMPILE_DEFINITIONS ${ARG_DEFINES} )<br># COMPILE_DEFINITIONS MY_DEFINE=DEFINE_THIS_GOOP<br> COMPILE_FLAGS -DMY_DEFINE=DEFINE_THIS_GOOP<br> )<br> endif()<br>
<br> SET_TARGET_PROPERTIES( ${LIB_NAME} PROPERTIES<br> SUFFIX .mexw64<br> LINKER_LANGUAGE CXX <br> LINK_FLAGS /export:mexFunction<br> COMPILE_FLAGS -DMY_DEFINE=DEFINE_THIS_GOOP<br> COMPILE_FLAGS_DEBUG -DMY_DEFINE=DEFINE_THIS_GOOP<br>
COMPILE_DEFINITIONS MY_DEFINE=DEFINE_THIS_GOOP<br> )<br><br> INSTALL( TARGETS ${LIB_NAME} DESTINATION ${CMAKE_CURRENT_SOURCE_DIR} )<br><br> INSTALL( TARGETS ${SQUARE_ME_TEST_APP}<br> DESTINATION ${CMAKE_CURRENT_SOURCE_DIR}<br>
)<br><br><br><br><br>endmacro()<br>#endfunction()<br><br>--end snip-<br><br>--snip CMakeLists.txt --<br>include( parse_cmake_arguments.cmake )<br>include( add_gpu_matlab_mex_library.cmake )<br><br> cmake_minimum_required(VERSION 2.8)<br>
<br><br>find_package( cuda )<br><br>SET( CUDA_VERBOSE_BUILD YES CACHE BOOL "" FORCE )<br><br>add_gpu_matlab_mex_library( <br> gpuPMatrixRecon<br> CPP_SOURCES <br> test1.cpp <br> test2.cpp<br>
CU_SOURCES <a href="http://test1.cu">test1.cu</a><br> DEFINES CUDADeviceProperties_DLLExport=yes GPU_RECON=yes<br>)<br> <br># This does not work here either <br>#SET_TARGET_PROPERTIES( gpuPMatrixRecon PROPERTIES<br>
# COMPILE_DEFINITIONS GPU_RECON=yes<br># )<br> <br> <br>add_gpu_matlab_mex_library( <br> cpuPMatrixRecon<br> CPP_SOURCES <br> test1.cpp<br> test2.cpp<br> CU_SOURCES <a href="http://test1.cu">test1.cu</a><br>
DEFINES CUDADeviceProperties_DLLExport=yes CPU_RECON=yes<br>)<br><br><br>#SET_TARGET_PROPERTIES( cpuPMatrixRecon PROPERTIES<br># COMPILE_DEFINITIONS CPU_RECON=yes<br># )<br>-- end snip --<br><br>--snip parse_cmake_arguments.cmake--<br>
<br># code from <a href="http://www.cmake.org/Wiki/CMakeMacroParseArguments">http://www.cmake.org/Wiki/CMakeMacroParseArguments</a><br>MACRO(PARSE_CMAKE_ARGUMENTS prefix arg_names option_names)<br> SET(DEFAULT_ARGS)<br> FOREACH(arg_name ${arg_names}) <br>
SET(${prefix}_${arg_name})<br> ENDFOREACH(arg_name)<br> FOREACH(option ${option_names})<br> SET(${prefix}_${option} FALSE)<br> ENDFOREACH(option)<br><br> SET(current_arg_name DEFAULT_ARGS)<br> SET(current_arg_list)<br>
FOREACH(arg ${ARGN}) <br> SET(larg_names ${arg_names}) <br> LIST(FIND larg_names "${arg}" is_arg_name) <br> IF (is_arg_name GREATER -1)<br> SET(${prefix}_${current_arg_name} ${current_arg_list})<br>
SET(current_arg_name ${arg})<br> SET(current_arg_list)<br> ELSE (is_arg_name GREATER -1)<br> SET(loption_names ${option_names}) <br> LIST(FIND loption_names "${arg}" is_option) <br>
IF (is_option GREATER -1)<br> SET(${prefix}_${arg} TRUE)<br> ELSE (is_option GREATER -1)<br> SET(current_arg_list ${current_arg_list} ${arg})<br> ENDIF (is_option GREATER -1)<br> ENDIF (is_arg_name GREATER -1)<br>
ENDFOREACH(arg)<br> SET(${prefix}_${current_arg_name} ${current_arg_list})<br>ENDMACRO(PARSE_CMAKE_ARGUMENTS)<br><br><br>--end snip--<br><br>--snip test1.cpp--<br>/* Gateway function */<br>void mexFunction( void /*int nlhs, mxArray *plhs[],<br>
int nrhs, const mxArray *prhs[]*/)<br>{<br>}<br>--end snip--<br><br>--snip <a href="http://test1.cu">test1.cu</a> --<br><br>__global__ void my_kernel( float * data )<br>{<br><br>}<br>--end snip--<br><br>-snip test2.cpp --<br>
void foo( void )<br>{<br><br>}<br>--end snip-<br>