blob: b0f4ee0814cd4116a5e15e31d0c41c55658dc625 [file] [log] [blame]
telsoa014fcda012018-03-09 14:13:49 +00001macro (addDllCopyCommand target sourceDebug sourceRelease)
2 add_custom_command(TARGET ${target} POST_BUILD
3 COMMAND ${CMAKE_COMMAND} -E copy_if_different
4 "$<$<CONFIG:Debug>:${sourceDebug}>$<$<CONFIG:Release>:${sourceRelease}>$<$<CONFIG:RelWithDebInfo>:${sourceRelease}>$<$<CONFIG:MinSizeRel>:${sourceRelease}>"
5 $<TARGET_FILE_DIR:${target}>)
6endmacro()
7
8macro (addBoostDllCopyCommand target ignored sourceReleaseLib ignored sourceDebugLib)
9 string(REGEX REPLACE ".lib$" ".dll" sourceReleaseDll ${sourceReleaseLib})
10 string(REGEX REPLACE "/libboost" "/boost" sourceReleaseDll2 ${sourceReleaseDll})
11
12 string(REGEX REPLACE ".lib$" ".dll" sourceDebugDll ${sourceDebugLib})
13 string(REGEX REPLACE "/libboost" "/boost" sourceDebugDll2 ${sourceDebugDll})
14 addDllCopyCommand(${target} ${sourceDebugDll2} ${sourceReleaseDll2})
15endmacro()
16
17# Checks if the given list contains an entry which matches the given regex.
18function(listContainsRegex result list regex)
19 set(${result} 0 PARENT_SCOPE)
20 foreach(element ${list})
21 if(${element} MATCHES ${regex})
22 set(${result} 1 PARENT_SCOPE)
23 return()
24 endif()
25 endforeach()
26endfunction()
27
28macro(addDllCopyCommands target)
29 if(${CMAKE_CXX_COMPILER_ID} STREQUAL MSVC)
30 # Get the list of dependencies for the given target, so we can copy just the DLLs we need.
31 get_target_property(target_deps_str ${target} LINK_LIBRARIES)
32 set(target_deps)
33 list(APPEND target_deps ${target_deps_str})
34
35 cmake_policy(SET CMP0057 NEW) # Enable the "IN_LIST" operator
36
37 # armnn.dll
38 if ("armnn" IN_LIST target_deps)
39 addDllCopyCommand(${target} "$<TARGET_FILE_DIR:armnn>/armnn.dll" "$<TARGET_FILE_DIR:armnn>/armnn.dll")
40 endif()
41
42 # armnnCaffeParser.dll
43 if ("armnnCaffeParser" IN_LIST target_deps)
44 addDllCopyCommand(${target} "$<TARGET_FILE_DIR:armnnCaffeParser>/armnnCaffeParser.dll"
45 "$<TARGET_FILE_DIR:armnnCaffeParser>/armnnCaffeParser.dll")
46 addDllCopyCommand(${target} "${PROTOBUF_ROOT}/bin/libprotobufd.dll"
47 "${PROTOBUF_ROOT}/bin/libprotobuf.dll")
48 endif()
49
50 # armnnTfParser.dll
51 if ("armnnTfParser" IN_LIST target_deps)
52 addDllCopyCommand(${target} "$<TARGET_FILE_DIR:armnnTfParser>/armnnTfParser.dll"
53 "$<TARGET_FILE_DIR:armnnTfParser>/armnnTfParser.dll")
54 addDllCopyCommand(${target} "${PROTOBUF_ROOT}/bin/libprotobufd.dll"
55 "${PROTOBUF_ROOT}/bin/libprotobuf.dll")
56 endif()
57
58 # caffe.dll and its dependencies
59 listContainsRegex(includeCaffeDlls "${target_deps}" "caffe")
60 if (${includeCaffeDlls})
61 addDllCopyCommand(${target} "${CAFFE_BUILD_ROOT}/lib/caffe-d.dll"
62 "${CAFFE_BUILD_ROOT}/lib/caffe.dll")
63 addDllCopyCommand(${target} "${PROTOBUF_ROOT}/bin/libprotobufd.dll"
64 "${PROTOBUF_ROOT}/bin/libprotobuf.dll")
65 addDllCopyCommand(${target} "${BLAS_ROOT}/bin/libopenblas.dll" "${BLAS_ROOT}/bin/libopenblas.dll")
66 addDllCopyCommand(${target} "${MINGW32_ROOT}/bin/libgfortran-3.dll" "${MINGW32_ROOT}/bin/libgfortran-3.dll")
67 addDllCopyCommand(${target} "${MINGW32_ROOT}/bin/libgcc_s_dw2-1.dll" "${MINGW32_ROOT}/bin/libgcc_s_dw2-1.dll")
68 addDllCopyCommand(${target} "${MINGW32_ROOT}/bin/libquadmath-0.dll" "${MINGW32_ROOT}/bin/libquadmath-0.dll")
69 addBoostDllCopyCommand(${target} ${Boost_SYSTEM_LIBRARY})
70 addBoostDllCopyCommand(${target} ${Boost_THREAD_LIBRARY})
71 addBoostDllCopyCommand(${target} ${Boost_CHRONO_LIBRARY})
72 endif()
73 endif()
74endmacro()