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