15db71995Sopenharmony_ci# ~~~ 25db71995Sopenharmony_ci# Copyright (c) 2023 LunarG, Inc. 35db71995Sopenharmony_ci# 45db71995Sopenharmony_ci# Licensed under the Apache License, Version 2.0 (the "License"); 55db71995Sopenharmony_ci# you may not use this file except in compliance with the License. 65db71995Sopenharmony_ci# You may obtain a copy of the License at 75db71995Sopenharmony_ci# 85db71995Sopenharmony_ci# http://www.apache.org/licenses/LICENSE-2.0 95db71995Sopenharmony_ci# 105db71995Sopenharmony_ci# Unless required by applicable law or agreed to in writing, software 115db71995Sopenharmony_ci# distributed under the License is distributed on an "AS IS" BASIS, 125db71995Sopenharmony_ci# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 135db71995Sopenharmony_ci# See the License for the specific language governing permissions and 145db71995Sopenharmony_ci# limitations under the License. 155db71995Sopenharmony_ci# ~~~ 165db71995Sopenharmony_ci 175db71995Sopenharmony_cioption(UPDATE_DEPS "Run update_deps.py for user") 185db71995Sopenharmony_ciif (UPDATE_DEPS) 195db71995Sopenharmony_ci find_package(Python3 REQUIRED QUIET) 205db71995Sopenharmony_ci 215db71995Sopenharmony_ci set(update_dep_py "${CMAKE_CURRENT_LIST_DIR}/update_deps.py") 225db71995Sopenharmony_ci set(known_good_json "${CMAKE_CURRENT_LIST_DIR}/known_good.json") 235db71995Sopenharmony_ci 245db71995Sopenharmony_ci set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS ${update_dep_py} ${known_good_json}) 255db71995Sopenharmony_ci 265db71995Sopenharmony_ci list(APPEND update_dep_command "${update_dep_py}") 275db71995Sopenharmony_ci list(APPEND update_dep_command "--generator") 285db71995Sopenharmony_ci list(APPEND update_dep_command "${CMAKE_GENERATOR}") 295db71995Sopenharmony_ci 305db71995Sopenharmony_ci if (CMAKE_GENERATOR_PLATFORM) 315db71995Sopenharmony_ci list(APPEND update_dep_command "--arch") 325db71995Sopenharmony_ci list(APPEND update_dep_command "${CMAKE_GENERATOR_PLATFORM}") 335db71995Sopenharmony_ci endif() 345db71995Sopenharmony_ci 355db71995Sopenharmony_ci if ("${CMAKE_OSX_ARCHITECTURES}" MATCHES ";") 365db71995Sopenharmony_ci list(APPEND update_dep_command "--osx-archs") 375db71995Sopenharmony_ci string(REPLACE ";" ":" osx_archs "${CMAKE_OSX_ARCHITECTURES}") 385db71995Sopenharmony_ci list(APPEND update_dep_command "${osx_archs}") 395db71995Sopenharmony_ci 405db71995Sopenharmony_ci set(APPLE_UNIVERSAL_BINARY ON) 415db71995Sopenharmony_ci endif() 425db71995Sopenharmony_ci 435db71995Sopenharmony_ci if (NOT CMAKE_BUILD_TYPE) 445db71995Sopenharmony_ci message(WARNING "CMAKE_BUILD_TYPE not set. Using Debug for dependency build type") 455db71995Sopenharmony_ci set(_build_type Debug) 465db71995Sopenharmony_ci else() 475db71995Sopenharmony_ci set(_build_type ${CMAKE_BUILD_TYPE}) 485db71995Sopenharmony_ci endif() 495db71995Sopenharmony_ci list(APPEND update_dep_command "--config") 505db71995Sopenharmony_ci list(APPEND update_dep_command "${_build_type}") 515db71995Sopenharmony_ci list(APPEND update_dep_command "--api") 525db71995Sopenharmony_ci list(APPEND update_dep_command "${API_TYPE}") 535db71995Sopenharmony_ci 545db71995Sopenharmony_ci set(UPDATE_DEPS_DIR_SUFFIX "${_build_type}") 555db71995Sopenharmony_ci if (CMAKE_CROSSCOMPILING) 565db71995Sopenharmony_ci if (APPLE_UNIVERSAL_BINARY) 575db71995Sopenharmony_ci set(UPDATE_DEPS_DIR_SUFFIX "${CMAKE_SYSTEM_NAME}/${UPDATE_DEPS_DIR_SUFFIX}/universal") 585db71995Sopenharmony_ci else() 595db71995Sopenharmony_ci set(UPDATE_DEPS_DIR_SUFFIX "${CMAKE_SYSTEM_NAME}/${UPDATE_DEPS_DIR_SUFFIX}/${CMAKE_SYSTEM_PROCESSOR}") 605db71995Sopenharmony_ci endif() 615db71995Sopenharmony_ci else() 625db71995Sopenharmony_ci if (APPLE_UNIVERSAL_BINARY) 635db71995Sopenharmony_ci set(UPDATE_DEPS_DIR_SUFFIX "${UPDATE_DEPS_DIR_SUFFIX}/universal") 645db71995Sopenharmony_ci else() 655db71995Sopenharmony_ci math(EXPR bitness "8 * ${CMAKE_SIZEOF_VOID_P}") 665db71995Sopenharmony_ci set(UPDATE_DEPS_DIR_SUFFIX "${UPDATE_DEPS_DIR_SUFFIX}/${bitness}") 675db71995Sopenharmony_ci endif() 685db71995Sopenharmony_ci endif() 695db71995Sopenharmony_ci set(UPDATE_DEPS_DIR "${PROJECT_SOURCE_DIR}/external/${UPDATE_DEPS_DIR_SUFFIX}" CACHE PATH "Location where update_deps.py installs packages") 705db71995Sopenharmony_ci list(APPEND update_dep_command "--dir" ) 715db71995Sopenharmony_ci list(APPEND update_dep_command "${UPDATE_DEPS_DIR}") 725db71995Sopenharmony_ci 735db71995Sopenharmony_ci if (NOT BUILD_TESTS) 745db71995Sopenharmony_ci list(APPEND update_dep_command "--optional=tests") 755db71995Sopenharmony_ci endif() 765db71995Sopenharmony_ci 775db71995Sopenharmony_ci if (UPDATE_DEPS_SKIP_EXISTING_INSTALL) 785db71995Sopenharmony_ci list(APPEND update_dep_command "--skip-existing-install") 795db71995Sopenharmony_ci endif() 805db71995Sopenharmony_ci 815db71995Sopenharmony_ci list(APPEND cmake_vars "CMAKE_TOOLCHAIN_FILE") 825db71995Sopenharmony_ci 835db71995Sopenharmony_ci # Avoids manually setting CMAKE_SYSTEM_NAME unless it's needed: 845db71995Sopenharmony_ci # https://cmake.org/cmake/help/latest/variable/CMAKE_CROSSCOMPILING.html 855db71995Sopenharmony_ci if (NOT "${CMAKE_SYSTEM_NAME}" STREQUAL "${CMAKE_HOST_SYSTEM_NAME}") 865db71995Sopenharmony_ci list(APPEND cmake_vars "CMAKE_SYSTEM_NAME") 875db71995Sopenharmony_ci endif() 885db71995Sopenharmony_ci if (APPLE) 895db71995Sopenharmony_ci list(APPEND cmake_vars "CMAKE_OSX_DEPLOYMENT_TARGET") 905db71995Sopenharmony_ci endif() 915db71995Sopenharmony_ci if (NOT MSVC_IDE) 925db71995Sopenharmony_ci list(APPEND cmake_vars "CMAKE_CXX_COMPILER" "CMAKE_C_COMPILER" "CMAKE_ASM_COMPILER") 935db71995Sopenharmony_ci endif() 945db71995Sopenharmony_ci if (ANDROID) 955db71995Sopenharmony_ci 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") 965db71995Sopenharmony_ci endif() 975db71995Sopenharmony_ci 985db71995Sopenharmony_ci set(cmake_var) 995db71995Sopenharmony_ci foreach(var IN LISTS cmake_vars) 1005db71995Sopenharmony_ci if (DEFINED ${var}) 1015db71995Sopenharmony_ci list(APPEND update_dep_command "--cmake_var") 1025db71995Sopenharmony_ci list(APPEND update_dep_command "${var}=${${var}}") 1035db71995Sopenharmony_ci endif() 1045db71995Sopenharmony_ci endforeach() 1055db71995Sopenharmony_ci 1065db71995Sopenharmony_ci if (cmake_var) 1075db71995Sopenharmony_ci list(APPEND update_dep_command "${cmake_var}") 1085db71995Sopenharmony_ci endif() 1095db71995Sopenharmony_ci 1105db71995Sopenharmony_ci file(TIMESTAMP ${update_dep_py} timestamp_1) 1115db71995Sopenharmony_ci file(TIMESTAMP ${known_good_json} timestamp_2) 1125db71995Sopenharmony_ci 1135db71995Sopenharmony_ci string("MD5" md5_hash "${timestamp_1}-${timestamp_2}-${update_dep_command}") 1145db71995Sopenharmony_ci 1155db71995Sopenharmony_ci set(UPDATE_DEPS_HASH "0" CACHE STRING "Default value until we run update_deps.py") 1165db71995Sopenharmony_ci mark_as_advanced(UPDATE_DEPS_HASH) 1175db71995Sopenharmony_ci 1185db71995Sopenharmony_ci if ("${UPDATE_DEPS_HASH}" STREQUAL "0") 1195db71995Sopenharmony_ci list(APPEND update_dep_command "--clean-build") 1205db71995Sopenharmony_ci list(APPEND update_dep_command "--clean-install") 1215db71995Sopenharmony_ci endif() 1225db71995Sopenharmony_ci 1235db71995Sopenharmony_ci if ("${md5_hash}" STREQUAL $CACHE{UPDATE_DEPS_HASH}) 1245db71995Sopenharmony_ci message(DEBUG "update_deps.py: no work to do.") 1255db71995Sopenharmony_ci else() 1265db71995Sopenharmony_ci execute_process( 1275db71995Sopenharmony_ci COMMAND ${Python3_EXECUTABLE} ${update_dep_command} 1285db71995Sopenharmony_ci RESULT_VARIABLE _update_deps_result 1295db71995Sopenharmony_ci ) 1305db71995Sopenharmony_ci if (NOT (${_update_deps_result} EQUAL 0)) 1315db71995Sopenharmony_ci message(FATAL_ERROR "Could not run update_deps.py which is necessary to download dependencies.") 1325db71995Sopenharmony_ci endif() 1335db71995Sopenharmony_ci set(UPDATE_DEPS_HASH ${md5_hash} CACHE STRING "Ensure we only run update_deps.py when we need to." FORCE) 1345db71995Sopenharmony_ci include("${UPDATE_DEPS_DIR}/helper.cmake") 1355db71995Sopenharmony_ci endif() 1365db71995Sopenharmony_ciendif() 1375db71995Sopenharmony_ciif (VULKAN_HEADERS_INSTALL_DIR) 1385db71995Sopenharmony_ci list(APPEND CMAKE_PREFIX_PATH ${VULKAN_HEADERS_INSTALL_DIR}) 1395db71995Sopenharmony_ci set(CMAKE_REQUIRE_FIND_PACKAGE_VulkanHeaders TRUE PARENT_SCOPE) 1405db71995Sopenharmony_ciendif() 1415db71995Sopenharmony_ci 1425db71995Sopenharmony_ciif (CMAKE_CROSSCOMPILING) 1435db71995Sopenharmony_ci set(CMAKE_FIND_ROOT_PATH ${CMAKE_FIND_ROOT_PATH} ${CMAKE_PREFIX_PATH} PARENT_SCOPE) 1445db71995Sopenharmony_cielse() 1455db71995Sopenharmony_ci set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} PARENT_SCOPE) 1465db71995Sopenharmony_ciendif() 147