|
| 1 | +# Levenberg Marquardt curve fitting in CUDA |
| 2 | +# https://github.com/gpufit/Gpufit |
| 3 | +# see also CMake configuration in /docs/installation.rst |
| 4 | + |
| 5 | +# CMake |
| 6 | + |
| 7 | +cmake_minimum_required( VERSION 3.7 ) |
| 8 | +set_property( GLOBAL PROPERTY USE_FOLDERS ON ) |
| 9 | + |
| 10 | +if( NOT PROJECT_NAME ) |
| 11 | + project( Gpufit VERSION 1.0.0 ) |
| 12 | + include( CTest ) |
| 13 | +endif() |
| 14 | + |
| 15 | +if( MSVC ) # link runtime statically |
| 16 | + foreach( type ${CMAKE_CONFIGURATION_TYPES} ${CMAKE_BUILD_TYPE} ) |
| 17 | + string( TOUPPER ${type} TYPE ) |
| 18 | + foreach( flags CMAKE_C_FLAGS_${TYPE} CMAKE_CXX_FLAGS_${TYPE} ) |
| 19 | + get_property( help CACHE ${flags} PROPERTY HELPSTRING ) |
| 20 | + string( REPLACE "/MD" "/MT" ${flags} "${${flags}}" ) |
| 21 | + set( ${flags} "${${flags}}" CACHE STRING "${help}" FORCE ) |
| 22 | + endforeach() |
| 23 | + endforeach() |
| 24 | +endif() |
| 25 | + |
| 26 | +function( add_launcher target executable arguments working_directory ) |
| 27 | + if( MSVC12 OR MSVC14 ) |
| 28 | + file( WRITE ${CMAKE_CURRENT_BINARY_DIR}/${target}.vcxproj.user |
| 29 | +"<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" |
| 30 | +"<Project ToolsVersion=\"14.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n" |
| 31 | +" <PropertyGroup>\n" |
| 32 | +" <LocalDebuggerCommand>${executable}</LocalDebuggerCommand>\n" |
| 33 | +" <LocalDebuggerCommandArguments>${arguments}</LocalDebuggerCommandArguments>\n" |
| 34 | +" <LocalDebuggerWorkingDirectory>${working_directory}</LocalDebuggerWorkingDirectory>\n" |
| 35 | +" </PropertyGroup>\n" |
| 36 | +"</Project>\n" |
| 37 | + ) |
| 38 | + endif() |
| 39 | +endfunction() |
| 40 | + |
| 41 | +# Boost |
| 42 | + |
| 43 | +find_package( Boost 1.58.0 ) |
| 44 | +if( Boost_FOUND ) |
| 45 | + function( add_boost_test modules name ) |
| 46 | + string( REPLACE ";" "_" prefix "${modules}" ) |
| 47 | + set( target ${prefix}_Test_${name} ) |
| 48 | + add_executable( ${target} ${name}.cpp |
| 49 | + ${PROJECT_SOURCE_DIR}/Tests/utils.h |
| 50 | + ${PROJECT_SOURCE_DIR}/Tests/utils.cpp |
| 51 | + ) |
| 52 | + target_include_directories( ${target} PRIVATE ${PROJECT_SOURCE_DIR} ) |
| 53 | + target_link_libraries( ${target} ${modules} Boost::boost ) |
| 54 | + set_property( TARGET ${target} |
| 55 | + PROPERTY RUNTIME_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}" ) |
| 56 | + set_property( TARGET ${target} PROPERTY FOLDER Tests ) |
| 57 | + |
| 58 | + add_test( NAME ${target} |
| 59 | + COMMAND ${target} --build_info --log_level=all --report_level=detailed ) |
| 60 | + endfunction() |
| 61 | +else() |
| 62 | + set( BUILD_TESTING OFF ) |
| 63 | + message( WARNING "Boost NOT found - skipping tests! (set BOOST_ROOT manually)" ) |
| 64 | +endif() |
| 65 | + |
| 66 | +# MATLAB |
| 67 | + |
| 68 | +find_package( Matlab ) |
| 69 | +if( Matlab_FOUND ) |
| 70 | + find_program( Matlab_EXECUTABLE matlab |
| 71 | + PATHS "${Matlab_ROOT_DIR}/bin" PATH_SUFFIXES win32 win64 NO_DEFAULT_PATH ) |
| 72 | + function( add_matlab_launcher target ) |
| 73 | + set( paths "${CMAKE_BINARY_DIR}/$(Configuration)" ${ARGN} ) |
| 74 | + list( GET paths -1 working_directory ) |
| 75 | + string( REPLACE ";" "','" paths "${paths}" ) |
| 76 | + set( arguments "-r addpath('${paths}');addpath(genpath(pwd))" ) |
| 77 | + add_launcher( ${target} "${Matlab_EXECUTABLE}" "${arguments}" "${working_directory}" ) |
| 78 | + endfunction() |
| 79 | +endif() |
| 80 | + |
| 81 | +# Python |
| 82 | + |
| 83 | +find_package( PythonInterp ) |
| 84 | +if( PYTHONINTERP_FOUND ) |
| 85 | + function( add_python_launcher target ) |
| 86 | + set( paths "${CMAKE_BINARY_DIR}/$(Configuration)" ${ARGN} ) |
| 87 | + list( GET paths -1 working_directory ) |
| 88 | + string( REPLACE ";" "')\nsys.path.append('" paths "${paths}" ) |
| 89 | + set( arguments "-i -c \"import sys\nsys.path.append('${paths}')\"" ) |
| 90 | + add_launcher( ${target} "${PYTHON_EXECUTABLE}" "${arguments}" "${working_directory}" ) |
| 91 | + endfunction() |
| 92 | +endif() |
| 93 | + |
| 94 | +# Cpufit |
| 95 | + |
| 96 | +add_subdirectory( Cpufit ) |
| 97 | + |
| 98 | +# Gpufit |
| 99 | + |
| 100 | +add_subdirectory( Gpufit ) |
| 101 | + |
| 102 | +# Examples using Gpufit and Cpufit |
| 103 | + |
| 104 | +add_subdirectory( examples ) |
| 105 | + |
| 106 | +# Launcher |
| 107 | +# |
| 108 | +# Uses the following variables: |
| 109 | +# |
| 110 | +# Matlab_WORKING_DIRECTORY (Default: user home directory) |
| 111 | +# -- Working directory for MATLAB applications using Cpufit and Gpufit. |
| 112 | +# Python_WORKING_DIRECTORY (Default: user home directory) |
| 113 | +# -- Working directory for Python applications using Gpufit. |
| 114 | + |
| 115 | +if( WIN32 ) |
| 116 | + file( TO_CMAKE_PATH "$ENV{HOMEPATH}" home ) |
| 117 | +else() |
| 118 | + file( TO_CMAKE_PATH "$ENV{HOME}" home ) |
| 119 | +endif() |
| 120 | + |
| 121 | +if( Matlab_FOUND ) |
| 122 | + set( Matlab_WORKING_DIRECTORY "${home}" CACHE PATH "MATLAB working directory" ) |
| 123 | + if( Matlab_WORKING_DIRECTORY ) |
| 124 | + add_custom_target( RUN_MATLAB ) |
| 125 | + set_property( TARGET RUN_MATLAB PROPERTY FOLDER CMakePredefinedTargets ) |
| 126 | + add_dependencies( RUN_MATLAB CpufitMex GpufitMex ) |
| 127 | + add_matlab_launcher( RUN_MATLAB |
| 128 | + "${CMAKE_SOURCE_DIR}/Cpufit/matlab" |
| 129 | + "${CMAKE_SOURCE_DIR}/Gpufit/matlab" |
| 130 | + "${Matlab_WORKING_DIRECTORY}" |
| 131 | + ) |
| 132 | + endif() |
| 133 | +endif() |
| 134 | + |
| 135 | +if( PYTHONINTERP_FOUND ) |
| 136 | + set( Python_WORKING_DIRECTORY "${home}" CACHE PATH "Python working directory" ) |
| 137 | + if( Python_WORKING_DIRECTORY ) |
| 138 | + add_custom_target( RUN_PYTHON ) |
| 139 | + set_property( TARGET RUN_PYTHON PROPERTY FOLDER CMakePredefinedTargets ) |
| 140 | + add_dependencies( RUN_PYTHON Gpufit ) |
| 141 | + add_python_launcher( RUN_PYTHON |
| 142 | + "${CMAKE_SOURCE_DIR}/Gpufit/python" |
| 143 | + "${Python_WORKING_DIRECTORY}" |
| 144 | + ) |
| 145 | + endif() |
| 146 | +endif() |
| 147 | + |
| 148 | +# Tests |
| 149 | + |
| 150 | +if( BUILD_TESTING ) |
| 151 | + add_subdirectory( tests ) |
| 152 | +endif() |
| 153 | + |
| 154 | +# Package |
| 155 | + |
| 156 | +#set( CPACK_PACKAGE_VERSION ${PROJECT_VERSION} ) |
| 157 | +#set( CPACK_GENERATOR ZIP ) |
| 158 | + |
| 159 | +#include( CPack ) |
0 commit comments