summaryrefslogtreecommitdiff
path: root/infra/nnfw/cmake/modules/ExternalSourceTools.cmake
diff options
context:
space:
mode:
Diffstat (limited to 'infra/nnfw/cmake/modules/ExternalSourceTools.cmake')
-rw-r--r--infra/nnfw/cmake/modules/ExternalSourceTools.cmake102
1 files changed, 102 insertions, 0 deletions
diff --git a/infra/nnfw/cmake/modules/ExternalSourceTools.cmake b/infra/nnfw/cmake/modules/ExternalSourceTools.cmake
new file mode 100644
index 000000000..01a0c4d00
--- /dev/null
+++ b/infra/nnfw/cmake/modules/ExternalSourceTools.cmake
@@ -0,0 +1,102 @@
+function(ExternalSource_Download PREFIX URL)
+ get_filename_component(FILENAME ${URL} NAME)
+
+ set(CACHE_DIR "${NNFW_EXTERNALS_DIR}")
+ set(OUT_DIR "${CACHE_DIR}/${PREFIX}")
+ set(TMP_DIR "${CACHE_DIR}/${PREFIX}-tmp")
+
+ set(DOWNLOAD_PATH "${CACHE_DIR}/${PREFIX}-${FILENAME}")
+ set(STAMP_PATH "${CACHE_DIR}/${PREFIX}.stamp")
+
+ if(NOT EXISTS "${CACHE_DIR}")
+ file(MAKE_DIRECTORY "${CACHE_DIR}")
+ endif(NOT EXISTS "${CACHE_DIR}")
+
+ # TODO Check MD5 for correctness
+ set(MATCH_URL FALSE)
+ if(EXISTS "${STAMP_PATH}")
+ file(READ "${STAMP_PATH}" SAVED_URL)
+ if("${SAVED_URL}" STREQUAL "${URL}")
+ set(MATCH_URL TRUE)
+ endif("${SAVED_URL}" STREQUAL "${URL}")
+ endif(EXISTS "${STAMP_PATH}")
+
+ if(NOT EXISTS "${STAMP_PATH}" OR NOT EXISTS "${OUT_DIR}" OR NOT MATCH_URL)
+ file(REMOVE_RECURSE "${OUT_DIR}")
+ file(REMOVE_RECURSE "${TMP_DIR}")
+
+ file(MAKE_DIRECTORY "${TMP_DIR}")
+
+ message(STATUS "Download ${PREFIX} from ${URL}")
+ file(DOWNLOAD ${URL} "${DOWNLOAD_PATH}"
+ STATUS status
+ LOG log)
+
+ list(GET status 0 status_code)
+ list(GET status 1 status_string)
+
+ if(NOT status_code EQUAL 0)
+ message(FATAL_ERROR "error: downloading '${URL}' failed
+ status_code: ${status_code}
+ status_string: ${status_string}
+ log: ${log}")
+ endif()
+ message(STATUS "Download ${PREFIX} from ${URL} - done")
+
+ message(STATUS "Extract ${PREFIX}")
+ execute_process(COMMAND ${CMAKE_COMMAND} -E tar xfz "${DOWNLOAD_PATH}"
+ WORKING_DIRECTORY "${TMP_DIR}")
+ file(REMOVE "${DOWNLOAD_PATH}")
+ message(STATUS "Extract ${PREFIX} - done")
+
+ message(STATUS "Cleanup ${PREFIX}")
+ file(GLOB contents "${TMP_DIR}/*")
+ list(LENGTH contents n)
+ if(NOT n EQUAL 1 OR NOT IS_DIRECTORY "${contents}")
+ set(contents "${TMP_DIR}")
+ endif()
+
+ get_filename_component(contents ${contents} ABSOLUTE)
+
+ file(RENAME ${contents} "${OUT_DIR}")
+ file(REMOVE_RECURSE "${TMP_DIR}")
+ file(WRITE "${STAMP_PATH}" "${URL}")
+ message(STATUS "Cleanup ${PREFIX} - done")
+ endif()
+
+ set(${PREFIX}_SOURCE_DIR "${OUT_DIR}" PARENT_SCOPE)
+endfunction(ExternalSource_Download)
+
+function(ExternalSource_Get PREFIX DOWNLOAD_FLAG URL)
+ set(CACHE_DIR "${NNFW_EXTERNALS_DIR}")
+ set(OUT_DIR "${CACHE_DIR}/${PREFIX}")
+ set(STAMP_PATH "${CACHE_DIR}/${PREFIX}.stamp")
+
+ if(NOT EXISTS "${CACHE_DIR}")
+ file(MAKE_DIRECTORY "${CACHE_DIR}")
+ endif(NOT EXISTS "${CACHE_DIR}")
+
+ # TODO Check MD5 for correctness
+ set(MATCH_URL FALSE)
+ if(EXISTS "${STAMP_PATH}")
+ file(READ "${STAMP_PATH}" SAVED_URL)
+ if("${SAVED_URL}" STREQUAL "${URL}")
+ set(MATCH_URL TRUE)
+ endif("${SAVED_URL}" STREQUAL "${URL}")
+ endif(EXISTS "${STAMP_PATH}")
+
+ set(SOURCE_GET TRUE)
+
+ if(NOT EXISTS "${STAMP_PATH}" OR NOT EXISTS "${OUT_DIR}" OR NOT MATCH_URL)
+ if(NOT DOWNLOAD_FLAG)
+ set(SOURCE_GET FALSE)
+ else(NOT DOWNLOAD_FLAG)
+ ExternalSource_Download(${PREFIX} ${URL})
+ endif(NOT DOWNLOAD_FLAG)
+ endif()
+
+ set(${PREFIX}_SOURCE_GET ${SOURCE_GET} PARENT_SCOPE)
+ set(${PREFIX}_SOURCE_DIR "${OUT_DIR}" PARENT_SCOPE)
+endfunction(ExternalSource_Get)
+
+set(ExternalSourceTools_FOUND TRUE)