# ~~~ # 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}") set(UPDATE_DEPS_DIR_SUFFIX "${_build_type}") if (ANDROID) set(UPDATE_DEPS_DIR_SUFFIX "android/${UPDATE_DEPS_DIR_SUFFIX}") 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") 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 (GOOGLETEST_INSTALL_DIR) list(APPEND CMAKE_PREFIX_PATH ${GOOGLETEST_INSTALL_DIR}) endif() if (VULKAN_HEADERS_INSTALL_DIR) list(APPEND CMAKE_PREFIX_PATH ${VULKAN_HEADERS_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()