Publishing 2019 R1 content
[platform/upstream/dldt.git] / inference-engine / cmake / dependency_solver.cmake
1 # Copyright (C) 2018-2019 Intel Corporation
2 #
3 # SPDX-License-Identifier: Apache-2.0
4 #
5
6 include ("download")
7
8 function (resolve_archive_dependency VAR COMPONENT ARCHIVE ARCHIVE_UNIFIED ARCHIVE_WIN ARCHIVE_LIN ARCHIVE_MAC TARGET_PATH FOLDER ENVIRONMENT)
9
10   if (ENVIRONMENT AND (DEFINED ENV{${ENVIRONMENT}}))
11     set(HAS_ENV "TRUE")
12   endif()
13
14   if (NOT DEFINED HAS_ENV)
15     if (ARCHIVE)
16       #TODO: check whether this is platform specific binary with same name per or it is in common folder
17       DownloadAndExtract(${COMPONENT} ${ARCHIVE} ${TARGET_PATH} result_path ${FOLDER})
18     else()
19       DownloadAndExtractPlatformSpecific(${COMPONENT} ${ARCHIVE_UNIFIED} ${ARCHIVE_WIN} ${ARCHIVE_LIN} ${ARCHIVE_MAC} ${TARGET_PATH} result_path  ${FOLDER})
20     endif()
21
22     set (${VAR} ${result_path} PARENT_SCOPE)
23   else()
24     set (${VAR} $ENV{${ENVIRONMENT}} PARENT_SCOPE)
25   endif()
26
27 endfunction(resolve_archive_dependency)
28
29 function(resolve_pull_request GITHUB_PULL_REQUEST TARGET_PATH)
30     get_filename_component(FILE_NAME ${GITHUB_PULL_REQUEST} NAME)
31     set (PATCH_URL "")
32     DownloadAndApply("${PATCH_URL}/${GITHUB_PULL_REQUEST}" "${IE_MAIN_SOURCE_DIR}/${TARGET_PATH}/${FILE_NAME}")
33 endfunction(resolve_pull_request)
34
35 function(extract_version_from_filename filename regex version)
36     string(REGEX MATCH ${regex} match ${filename})
37
38     if (CMAKE_MATCH_1)
39         set(${version} ${CMAKE_MATCH_1} PARENT_SCOPE)
40     else()
41         set(${version} ${filename} PARENT_SCOPE)
42     endif()
43 endfunction(extract_version_from_filename)
44
45 function(read_version archive regex version_var)
46     extract_version_from_filename(${archive} ${regex} version)
47     set(${version_var} "${version}" CACHE INTERNAL "" FORCE)
48     debug_message(STATUS "${version_var} = " ${version})
49 endfunction(read_version)
50
51 function (RESOLVE_DEPENDENCY NAME_OF_CMAKE_VAR)
52
53   list(REMOVE_AT ARGV 0)
54   set(SUPPORTED_ARGS FOLDER ARCHIVE ARCHIVE_UNIFIED ARCHIVE_WIN ARCHIVE_LIN ARCHIVE_MAC TARGET_PATH ENVIRONMENT GITHUB_PULL_REQUEST VERSION_REGEX)
55
56
57   #unnecessary vars
58   foreach(arg ${ARGV})
59     #message("one_arg=" ${one_arg})
60     #message("arg=" ${arg})
61     #parse no arg vars
62     if (";${SUPPORTED_ARGS};" MATCHES ";${arg};")
63       if(DEFINED one_arg)
64         set(${one_arg} TRUE)
65       endif()
66       set (one_arg ${arg})
67     elseif(DEFINED one_arg)
68       set(${one_arg} ${arg})
69       unset(one_arg)
70     else()
71       message(FATAL_ERROR "invalid argument passed to resolve dependency: " ${arg})
72     endif()
73   endforeach(arg)
74
75   #if last token was bool
76   if(DEFINED one_arg)
77     set(${one_arg} TRUE)
78   endif()
79
80
81   if (NOT DEFINED ARCHIVE)
82     SET(ARCHIVE "OFF")
83   endif()
84
85   if (NOT DEFINED ARCHIVE_UNIFIED)
86     SET(ARCHIVE_UNIFIED "OFF")
87   endif()
88
89   if (NOT DEFINED ARCHIVE_WIN)
90     SET(ARCHIVE_WIN "OFF")
91   endif()
92
93   if (NOT DEFINED ARCHIVE_LIN)
94     SET(ARCHIVE_LIN "OFF")
95   endif()
96
97   if (NOT DEFINED ARCHIVE_MAC)
98     SET(ARCHIVE_MAC "OFF")
99   endif()
100
101   if (NOT DEFINED ENVIRONMENT)
102     set (ENVIRONMENT "OFF")
103   endif()
104
105   if (NOT DEFINED FOLDER)
106     set (FOLDER FALSE)
107   endif()
108
109   #for each dependency type have to do separate things
110   if (ARCHIVE_WIN OR ARCHIVE_LIN OR ARCHIVE_MAC OR ARCHIVE OR ARCHIVE_UNIFIED)
111     if (NOT DEFINED TARGET_PATH)
112       message(FATAL_ERROR "TARGET_PATH should be defined for every dependency")
113     endif()
114
115     resolve_archive_dependency(RESULT ${NAME_OF_CMAKE_VAR} ${ARCHIVE} ${ARCHIVE_UNIFIED} ${ARCHIVE_WIN} ${ARCHIVE_LIN} ${ARCHIVE_MAC} ${TARGET_PATH} ${FOLDER} ${ENVIRONMENT})
116     set(${NAME_OF_CMAKE_VAR} ${RESULT} PARENT_SCOPE)
117     if (VERSION_REGEX)
118         GetNameAndUrlToDownload(archive RELATIVE_URL ${ARCHIVE_UNIFIED} ${ARCHIVE_WIN} ${ARCHIVE_LIN} ${ARCHIVE_MAC})
119         if (archive)
120             read_version(${archive} ${VERSION_REGEX} "${NAME_OF_CMAKE_VAR}_VERSION")
121         endif()
122     endif()
123
124   elseif (DEFINED GITHUB_PULL_REQUEST)
125     resolve_pull_request(${GITHUB_PULL_REQUEST} ${TARGET_PATH})
126   else()
127     message(FATAL_ERROR "Dependency of unknowntype, SHOULD set one of ARCHIVE_WIN, ARCHIVE, ARCHIVE_LIN, ARCHIVE_MAC, GITHUB_PULL_REQUEST")
128   endif()
129
130 endfunction(RESOLVE_DEPENDENCY)