• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1macro (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        # armnnTfLiteParser.dll
59        if ("armnnTfLiteParser" IN_LIST target_deps)
60            addDllCopyCommand(${target} "$<TARGET_FILE_DIR:armnnTfLiteParser>/armnnTfLiteParser.dll"
61                                        "$<TARGET_FILE_DIR:armnnTfLiteParser>/armnnTfLiteParser.dll")
62        endif()
63
64        # caffe.dll and its dependencies
65        listContainsRegex(includeCaffeDlls "${target_deps}" "caffe")
66        if (${includeCaffeDlls})
67            addDllCopyCommand(${target} "${CAFFE_BUILD_ROOT}/lib/caffe-d.dll"
68                                        "${CAFFE_BUILD_ROOT}/lib/caffe.dll")
69            addDllCopyCommand(${target} "${PROTOBUF_ROOT}/bin/libprotobufd.dll"
70                                        "${PROTOBUF_ROOT}/bin/libprotobuf.dll")
71            addDllCopyCommand(${target} "${BLAS_ROOT}/bin/libopenblas.dll"          "${BLAS_ROOT}/bin/libopenblas.dll")
72            addDllCopyCommand(${target} "${MINGW32_ROOT}/bin/libgfortran-3.dll"     "${MINGW32_ROOT}/bin/libgfortran-3.dll")
73            addDllCopyCommand(${target} "${MINGW32_ROOT}/bin/libgcc_s_dw2-1.dll"    "${MINGW32_ROOT}/bin/libgcc_s_dw2-1.dll")
74            addDllCopyCommand(${target} "${MINGW32_ROOT}/bin/libquadmath-0.dll"     "${MINGW32_ROOT}/bin/libquadmath-0.dll")
75        endif()
76    endif()
77endmacro()
78