|
| 1 | +cmake_minimum_required (VERSION 3.5) |
| 2 | +project (matconvnet) |
| 3 | + |
| 4 | +set(default_build_type "Release") |
| 5 | +if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) |
| 6 | + message(STATUS "Setting build type to '${default_build_type}' as none was specified.") |
| 7 | + set(CMAKE_BUILD_TYPE "${default_build_type}" CACHE |
| 8 | + STRING "Choose the type of build." FORCE) |
| 9 | + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS |
| 10 | + "Debug" "Release" "MinSizeRel" "RelWithDebInfo") |
| 11 | +endif() |
| 12 | + |
| 13 | +find_package(Matlab COMPONENTS MX_LIBRARY REQUIRED) |
| 14 | +find_package(JPEG REQUIRED) |
| 15 | +find_package(OpenMP REQUIRED) |
| 16 | +if (OPENMP_FOUND) |
| 17 | + set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}") |
| 18 | +endif() |
| 19 | + |
| 20 | +add_definitions(-DENABLE_DOUBLE) |
| 21 | +include_directories(${JPEG_INCLUDE_DIR}) |
| 22 | +include_directories(${Matlab_INCLUDE_DIRS}) |
| 23 | + |
| 24 | +if(MSVC) |
| 25 | + set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS TRUE) |
| 26 | + add_definitions(-D_CRT_SECURE_NO_DEPRECATE) |
| 27 | + if(CMAKE_CXX_FLAGS MATCHES "/W[0-4]") |
| 28 | + string(REGEX REPLACE "/W[0-4]" "/W1" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") |
| 29 | + endif() |
| 30 | + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4068") |
| 31 | +endif() |
| 32 | + |
| 33 | +# Snippet to locate the matlab-blas library to link |
| 34 | +if(NOT Matlab_BLAS_LIBRARY) |
| 35 | + include(${CMAKE_ROOT}/Modules/SelectLibraryConfigurations.cmake) |
| 36 | + find_library(Matlab_BLAS_LIBRARY_RELEASE NAMES mwblas libmwblas PATHS ${Matlab_ROOT_DIR} PATH_SUFFIXES extern/lib/win64/microsoft bin/maci64 bin/glnxa64) |
| 37 | + find_library(Matlab_BLAS_LIBRARY_DEBUG NAMES mwblasd libmwblasd PATHS ${Matlab_ROOT_DIR} PATH_SUFFIXES extern/lib/win64/microsoft bin/maci64 bin/glnxa64) |
| 38 | + select_library_configurations(Matlab_BLAS) |
| 39 | +endif() |
| 40 | + |
| 41 | +add_library(matconvnet SHARED |
| 42 | + matlab/src/bits/data.cpp |
| 43 | + matlab/src/bits/datamex.cpp |
| 44 | + matlab/src/bits/nnconv.cpp |
| 45 | + matlab/src/bits/nnbias.cpp |
| 46 | + matlab/src/bits/nnfullyconnected.cpp |
| 47 | + matlab/src/bits/nnsubsample.cpp |
| 48 | + matlab/src/bits/nnpooling.cpp |
| 49 | + matlab/src/bits/nnnormalize.cpp |
| 50 | + matlab/src/bits/nnnormalizelp.cpp |
| 51 | + matlab/src/bits/nnbnorm.cpp |
| 52 | + matlab/src/bits/nnbilinearsampler.cpp |
| 53 | + matlab/src/bits/nnroipooling.cpp |
| 54 | + matlab/src/bits/impl/im2row_cpu.cpp |
| 55 | + matlab/src/bits/impl/copy_cpu.cpp |
| 56 | + matlab/src/bits/impl/tinythread.cpp |
| 57 | + matlab/src/bits/impl/imread_libjpeg.cpp |
| 58 | + matlab/src/bits/imread.cpp |
| 59 | +) |
| 60 | +set_property(TARGET matconvnet PROPERTY POSITION_INDEPENDENT_CODE ON) |
| 61 | +target_link_libraries(matconvnet ${Matlab_BLAS_LIBRARY} ${JPEG_LIBRARY} ${Matlab_MEX_LIBRARY} ${Matlab_MX_LIBRARY}) |
| 62 | +install(TARGETS matconvnet DESTINATION ${CMAKE_SOURCE_DIR}/matlab/) |
| 63 | + |
| 64 | +if(NOT MSVC) |
| 65 | + set(VL_TMOVE "vl_tmove" "matlab/src/vl_tmove.cpp") |
| 66 | +endif() |
| 67 | + |
| 68 | +list(APPEND vl_files |
| 69 | +vl_imreadjpeg matlab/src/vl_imreadjpeg.cpp |
| 70 | +vl_imreadjpeg_old matlab/src/vl_imreadjpeg_old.cpp |
| 71 | +vl_nnbilinearsampler matlab/src/vl_nnbilinearsampler.cpp |
| 72 | +vl_nnbnorm matlab/src/vl_nnbnorm.cpp |
| 73 | +vl_nnconv matlab/src/vl_nnconv.cpp |
| 74 | +vl_nnconvt matlab/src/vl_nnconvt.cpp |
| 75 | +vl_nnnormalize matlab/src/vl_nnnormalize.cpp |
| 76 | +vl_nnnormalizelp matlab/src/vl_nnnormalizelp.cpp |
| 77 | +vl_nnpool matlab/src/vl_nnpool.cpp |
| 78 | +vl_nnroipool matlab/src/vl_nnroipool.cpp |
| 79 | +vl_taccummex matlab/src/vl_taccummex.cpp |
| 80 | +${VL_TMOVE} |
| 81 | +) |
| 82 | + |
| 83 | +list(LENGTH vl_files size) |
| 84 | +math(EXPR size "${size} - 1") |
| 85 | +foreach(val RANGE 0 ${size} 2) |
| 86 | + math(EXPR nextval "${val} + 1") |
| 87 | + list(GET vl_files ${val} mex) |
| 88 | + list(GET vl_files ${nextval} src) |
| 89 | + matlab_add_mex(NAME ${mex} SRC ${src} LINK_TO ${JPEG_LIBRARY} matconvnet) |
| 90 | + install(TARGETS ${mex} DESTINATION ${CMAKE_SOURCE_DIR}/matlab/) |
| 91 | +endforeach() |
0 commit comments