summaryrefslogtreecommitdiff
path: root/scripts/cmake/util_functions.cmake
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/cmake/util_functions.cmake')
-rw-r--r--scripts/cmake/util_functions.cmake143
1 files changed, 143 insertions, 0 deletions
diff --git a/scripts/cmake/util_functions.cmake b/scripts/cmake/util_functions.cmake
new file mode 100644
index 0000000..6d76131
--- /dev/null
+++ b/scripts/cmake/util_functions.cmake
@@ -0,0 +1,143 @@
+#----------------------------------------------------------------------------
+# Copyright (c) 2021 Arm Limited. All rights reserved.
+# SPDX-License-Identifier: Apache-2.0
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#----------------------------------------------------------------------------
+
+##############################################################################
+# Helper function to provide user option and corresponding default value
+##############################################################################
+function(USER_OPTION name description default type)
+
+ if (NOT DEFINED ${name})
+ set(${name} ${default} CACHE ${type} ${description})
+ endif()
+
+ # if it is a path
+ if (${type} STREQUAL PATH)
+
+ # Get the absolute path, relative to the cmake root
+ get_filename_component(ABSPATH "${${name}}" ABSOLUTE BASE_DIR ${CMAKE_SOURCE_DIR})
+
+ # check that this is a directory
+ if (NOT IS_DIRECTORY ${ABSPATH})
+ message(FATAL_ERROR
+ "Invalid directory path. Description: ${description}; Path: ${ABSPATH}")
+ endif()
+
+ set(${name} ${ABSPATH} CACHE ${type} ${description} FORCE)
+
+ # if this is a file path
+ elseif(${type} STREQUAL FILEPATH)
+
+ # Get the absolute path, relative to the cmake root
+ get_filename_component(ABSPATH "${${name}}" ABSOLUTE BASE_DIR ${CMAKE_SOURCE_DIR})
+
+ # check that the file exists:
+ if (NOT EXISTS ${ABSPATH})
+ message(FATAL_ERROR
+ "Invalid file path. Description: ${description}; Path: ${ABSPATH}")
+ endif()
+
+ set(${name} ${ABSPATH} CACHE ${type} ${description} FORCE)
+
+ endif()
+
+ message(STATUS "User option ${name} is set to ${${name}}")
+ LIST(APPEND USER_OPTIONS ${name})
+ set(USER_OPTIONS ${USER_OPTIONS} CACHE INTERNAL "")
+
+endfunction()
+
+# Function to get the path type for a variable
+# Args:
+# path_var[in]: path variable for which the cmake path type is requested
+# cmake_path_type[out]: CMake path type. Set to FILEPATH when it is a file
+# or PATH when it points to a directory. If the path
+# is invalid, this remains empty.
+function(get_path_type path_var cmake_path_type)
+ # Validate path - get absolute value
+ get_filename_component(ABSPATH "${path_var}" ABSOLUTE
+ BASE_DIR ${CMAKE_SOURCE_DIR})
+
+ if (DEFINED path_var)
+ if (IS_DIRECTORY ${ABSPATH})
+ set(${cmake_path_type} PATH PARENT_SCOPE)
+ message(STATUS "Variable of PATH type")
+ elseif(EXISTS ${ABSPATH})
+ set(${cmake_path_type} FILEPATH PARENT_SCOPE)
+ else()
+ set(${cmake_path_type} "" PARENT_SCOPE)
+ endif()
+ else()
+ set(${cmake_path_type} UNINITIALIZED PARENT_SCOPE)
+ endif()
+
+endfunction()
+
+# Function to print all the user options added using the function `USER_OPTION`
+function(print_useroptions)
+ message(STATUS "--------------------------------------------------------------------------------------------------")
+ message(STATUS "Defined build user options:")
+ message(STATUS "")
+ foreach(opt ${USER_OPTIONS})
+ message(STATUS " ${opt}=${${opt}}")
+ endforeach()
+ message(STATUS "--------------------------------------------------------------------------------------------------")
+endfunction()
+
+function (SUBDIRLIST result curdir)
+ file(GLOB children RELATIVE ${curdir} ${curdir}/*)
+ set(dirlist "")
+ foreach(child ${children})
+ if(IS_DIRECTORY ${curdir}/${child})
+ LIST(APPEND dirlist ${child})
+ endif()
+ endforeach()
+ set(${result} ${dirlist} PARENT_SCOPE)
+endfunction()
+
+function(to_py_bool cmake_bool py_bool)
+ if(${${cmake_bool}})
+ set(${py_bool} True PARENT_SCOPE)
+ else()
+ set(${py_bool} False PARENT_SCOPE)
+ endif()
+endfunction()
+
+# Function to download a files from the Arm Model Zoo
+# Arguments:
+# file_sub_path: subpath within the model zoo respository
+# download_path: location where this file is to be downloaded (path including filename)
+function(download_file_from_modelzoo file_sub_path download_path)
+
+ set(MODEL_ZOO_REPO "https://github.com/ARM-software/ML-zoo/raw")
+ set(MODEL_ZOO_VERSION "68b5fbc77ed28e67b2efc915997ea4477c1d9d5b")
+
+ string(JOIN "/" FILE_URL
+ ${MODEL_ZOO_REPO} ${MODEL_ZOO_VERSION} ${file_sub_path})
+
+ message(STATUS "Downloading ${FILE_URL} to ${download_path}...")
+
+ file(DOWNLOAD ${FILE_URL} ${download_path}
+ STATUS DOWNLOAD_STATE)
+ list(GET DOWNLOAD_STATE 0 RET_VAL)
+
+ if(${RET_VAL})
+ list(GET DOWNLOAD_STATE 1 RET_MSG)
+ message(FATAL_ERROR "Download failed with error code: ${RET_VAL}; "
+ "Error message: ${RET_MSG}")
+ endif()
+
+endfunction()