diff options
Diffstat (limited to 'infra/nnfw/cmake/modules/ExternalSourceTools.cmake')
-rw-r--r-- | infra/nnfw/cmake/modules/ExternalSourceTools.cmake | 102 |
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) |