| # ~~~ |
| # Copyright (c) 2023 LunarG, Inc. |
| # |
| # 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. |
| # ~~~ |
| |
| option(UPDATE_DEPS "Run update_deps.py for user") |
| if (UPDATE_DEPS) |
| find_package(Python3 REQUIRED QUIET) |
| |
| set(update_dep_py "${CMAKE_CURRENT_LIST_DIR}/update_deps.py") |
| set(known_good_json "${CMAKE_CURRENT_LIST_DIR}/known_good.json") |
| |
| set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS ${update_dep_py} ${known_good_json}) |
| |
| list(APPEND update_dep_command "${update_dep_py}") |
| list(APPEND update_dep_command "--generator") |
| list(APPEND update_dep_command "${CMAKE_GENERATOR}") |
| |
| if (CMAKE_GENERATOR_PLATFORM) |
| list(APPEND update_dep_command "--arch") |
| list(APPEND update_dep_command "${CMAKE_GENERATOR_PLATFORM}") |
| endif() |
| |
| if (NOT CMAKE_BUILD_TYPE) |
| message(WARNING "CMAKE_BUILD_TYPE not set. Using Debug for dependency build type") |
| set(_build_type Debug) |
| else() |
| set(_build_type ${CMAKE_BUILD_TYPE}) |
| endif() |
| list(APPEND update_dep_command "--config") |
| list(APPEND update_dep_command "${_build_type}") |
| list(APPEND update_dep_command "--api") |
| list(APPEND update_dep_command "${API_TYPE}") |
| |
| set(UPDATE_DEPS_DIR_SUFFIX "${_build_type}") |
| if (CMAKE_CROSSCOMPILING) |
| set(UPDATE_DEPS_DIR_SUFFIX "${CMAKE_SYSTEM_NAME}/${UPDATE_DEPS_DIR_SUFFIX}/${CMAKE_SYSTEM_PROCESSOR}") |
| else() |
| math(EXPR bitness "8 * ${CMAKE_SIZEOF_VOID_P}") |
| set(UPDATE_DEPS_DIR_SUFFIX "${UPDATE_DEPS_DIR_SUFFIX}/${bitness}") |
| endif() |
| set(UPDATE_DEPS_DIR "${PROJECT_SOURCE_DIR}/external/${UPDATE_DEPS_DIR_SUFFIX}" CACHE PATH "Location where update_deps.py installs packages") |
| list(APPEND update_dep_command "--dir" ) |
| list(APPEND update_dep_command "${UPDATE_DEPS_DIR}") |
| |
| if (NOT BUILD_TESTS) |
| list(APPEND update_dep_command "--optional=tests") |
| endif() |
| |
| if (UPDATE_DEPS_SKIP_EXISTING_INSTALL) |
| list(APPEND update_dep_command "--skip-existing-install") |
| endif() |
| |
| list(APPEND cmake_vars "CMAKE_TOOLCHAIN_FILE") |
| |
| # Avoids manually setting CMAKE_SYSTEM_NAME unless it's needed: |
| # https://cmake.org/cmake/help/latest/variable/CMAKE_CROSSCOMPILING.html |
| if (NOT "${CMAKE_SYSTEM_NAME}" STREQUAL "${CMAKE_HOST_SYSTEM_NAME}") |
| list(APPEND cmake_vars "CMAKE_SYSTEM_NAME") |
| endif() |
| if (APPLE) |
| list(APPEND cmake_vars "CMAKE_OSX_ARCHITECTURES" "CMAKE_OSX_DEPLOYMENT_TARGET") |
| endif() |
| if (NOT MSVC_IDE) |
| list(APPEND cmake_vars "CMAKE_CXX_COMPILER" "CMAKE_C_COMPILER" "CMAKE_ASM_COMPILER") |
| endif() |
| if (ANDROID) |
| list(APPEND cmake_vars "ANDROID_PLATFORM" "CMAKE_ANDROID_ARCH_ABI" "CMAKE_ANDROID_STL_TYPE" "CMAKE_ANDROID_RTTI" "CMAKE_ANDROID_EXCEPTIONS" "ANDROID_USE_LEGACY_TOOLCHAIN_FILE") |
| endif() |
| |
| set(cmake_var) |
| foreach(var IN LISTS cmake_vars) |
| if (DEFINED ${var}) |
| list(APPEND update_dep_command "--cmake_var") |
| list(APPEND update_dep_command "${var}=${${var}}") |
| endif() |
| endforeach() |
| |
| if (cmake_var) |
| list(APPEND update_dep_command "${cmake_var}") |
| endif() |
| |
| file(TIMESTAMP ${update_dep_py} timestamp_1) |
| file(TIMESTAMP ${known_good_json} timestamp_2) |
| |
| string("MD5" md5_hash "${timestamp_1}-${timestamp_2}-${update_dep_command}") |
| |
| set(UPDATE_DEPS_HASH "0" CACHE STRING "Default value until we run update_deps.py") |
| mark_as_advanced(UPDATE_DEPS_HASH) |
| |
| if ("${UPDATE_DEPS_HASH}" STREQUAL "0") |
| list(APPEND update_dep_command "--clean-build") |
| list(APPEND update_dep_command "--clean-install") |
| endif() |
| |
| if ("${md5_hash}" STREQUAL $CACHE{UPDATE_DEPS_HASH}) |
| message(DEBUG "update_deps.py: no work to do.") |
| else() |
| execute_process( |
| COMMAND ${Python3_EXECUTABLE} ${update_dep_command} |
| RESULT_VARIABLE _update_deps_result |
| ) |
| if (NOT (${_update_deps_result} EQUAL 0)) |
| message(FATAL_ERROR "Could not run update_deps.py which is necessary to download dependencies.") |
| endif() |
| set(UPDATE_DEPS_HASH ${md5_hash} CACHE STRING "Ensure we only run update_deps.py when we need to." FORCE) |
| include("${UPDATE_DEPS_DIR}/helper.cmake") |
| endif() |
| endif() |
| if (VULKAN_HEADERS_INSTALL_DIR) |
| list(APPEND CMAKE_PREFIX_PATH ${VULKAN_HEADERS_INSTALL_DIR}) |
| endif() |
| if (VOLK_INSTALL_DIR) |
| list(APPEND CMAKE_PREFIX_PATH ${VOLK_INSTALL_DIR}) |
| endif() |
| if (GOOGLETEST_INSTALL_DIR) |
| list(APPEND CMAKE_PREFIX_PATH ${GOOGLETEST_INSTALL_DIR}) |
| endif() |
| if (VULKAN_LOADER_INSTALL_DIR) |
| list(APPEND CMAKE_PREFIX_PATH ${VULKAN_LOADER_INSTALL_DIR}) |
| endif() |
| |
| if (CMAKE_CROSSCOMPILING) |
| set(CMAKE_FIND_ROOT_PATH ${CMAKE_FIND_ROOT_PATH} ${CMAKE_PREFIX_PATH} PARENT_SCOPE) |
| else() |
| set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} PARENT_SCOPE) |
| endif() |