2023-01-16 01:02:17 -06:00
|
|
|
# Copyright (C) 2018-2023 Intel Corporation
|
2020-10-16 02:58:38 -05:00
|
|
|
# SPDX-License-Identifier: Apache-2.0
|
|
|
|
#
|
|
|
|
|
|
|
|
if(WIN32)
|
|
|
|
set(PROGRAMFILES_ENV "ProgramFiles(X86)")
|
|
|
|
file(TO_CMAKE_PATH $ENV{${PROGRAMFILES_ENV}} PROGRAMFILES)
|
|
|
|
set(UWP_SDK_PATH "${PROGRAMFILES}/Windows Kits/10/bin/${CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION}/x64")
|
|
|
|
|
|
|
|
message(STATUS "Trying to find apivalidator in: ${UWP_SDK_PATH}")
|
|
|
|
find_host_program(UWP_API_VALIDATOR
|
|
|
|
NAMES apivalidator
|
|
|
|
PATHS "${UWP_SDK_PATH}"
|
|
|
|
DOC "ApiValidator for UWP compliance")
|
|
|
|
|
|
|
|
if(UWP_API_VALIDATOR)
|
|
|
|
message(STATUS "Found apivalidator: ${UWP_API_VALIDATOR}")
|
|
|
|
endif()
|
|
|
|
endif()
|
|
|
|
|
|
|
|
function(_ie_add_api_validator_post_build_step_recursive)
|
|
|
|
cmake_parse_arguments(API_VALIDATOR "" "TARGET" "" ${ARGN})
|
|
|
|
|
2023-02-24 15:11:50 -06:00
|
|
|
get_target_property(LIBRARY_TYPE ${API_VALIDATOR_TARGET} TYPE)
|
|
|
|
if(LIBRARY_TYPE MATCHES "^(SHARED_LIBRARY|MODULE_LIBRARY|EXECUTABLE)$" AND
|
|
|
|
NOT ${API_VALIDATOR_TARGET} IN_LIST API_VALIDATOR_TARGETS)
|
|
|
|
list(APPEND API_VALIDATOR_TARGETS ${API_VALIDATOR_TARGET})
|
2020-10-16 02:58:38 -05:00
|
|
|
endif()
|
|
|
|
|
2023-02-24 15:11:50 -06:00
|
|
|
if(NOT LIBRARY_TYPE STREQUAL "INTERFACE_LIBRARY")
|
2020-10-16 02:58:38 -05:00
|
|
|
get_target_property(LINKED_LIBRARIES ${API_VALIDATOR_TARGET} LINK_LIBRARIES)
|
2023-02-24 15:11:50 -06:00
|
|
|
else()
|
|
|
|
set(LINKED_LIBRARIES)
|
2020-10-16 02:58:38 -05:00
|
|
|
endif()
|
2023-02-24 15:11:50 -06:00
|
|
|
get_target_property(INTERFACE_LINKED_LIBRARIES ${API_VALIDATOR_TARGET} INTERFACE_LINK_LIBRARIES)
|
|
|
|
|
|
|
|
foreach(library IN LISTS LINKED_LIBRARIES INTERFACE_LINKED_LIBRARIES)
|
|
|
|
if(TARGET "${library}")
|
|
|
|
get_target_property(orig_library ${library} ALIASED_TARGET)
|
|
|
|
if(TARGET "${orig_library}")
|
|
|
|
_ie_add_api_validator_post_build_step_recursive(TARGET ${orig_library})
|
|
|
|
else()
|
|
|
|
_ie_add_api_validator_post_build_step_recursive(TARGET ${library})
|
|
|
|
endif()
|
|
|
|
endif()
|
|
|
|
endforeach()
|
2020-10-16 02:58:38 -05:00
|
|
|
|
|
|
|
set(API_VALIDATOR_TARGETS ${API_VALIDATOR_TARGETS} PARENT_SCOPE)
|
|
|
|
endfunction()
|
|
|
|
|
2023-02-24 15:11:50 -06:00
|
|
|
set(VALIDATED_TARGETS "" CACHE INTERNAL "")
|
2020-10-16 02:58:38 -05:00
|
|
|
|
2022-01-26 08:35:31 -06:00
|
|
|
function(_ov_add_api_validator_post_build_step)
|
2020-10-16 02:58:38 -05:00
|
|
|
set(UWP_API_VALIDATOR_APIS "${PROGRAMFILES}/Windows Kits/10/build/universalDDIs/x64/UniversalDDIs.xml")
|
|
|
|
set(UWP_API_VALIDATOR_EXCLUSION "${UWP_SDK_PATH}/BinaryExclusionlist.xml")
|
|
|
|
|
2020-10-29 04:38:15 -05:00
|
|
|
if((NOT UWP_API_VALIDATOR) OR (WINDOWS_STORE OR WINDOWS_PHONE))
|
2020-10-16 02:58:38 -05:00
|
|
|
return()
|
|
|
|
endif()
|
|
|
|
|
|
|
|
cmake_parse_arguments(API_VALIDATOR "" "TARGET" "" ${ARGN})
|
|
|
|
|
|
|
|
if(NOT API_VALIDATOR_TARGET)
|
|
|
|
message(FATAL_ERROR "RunApiValidator requires TARGET to validate!")
|
|
|
|
endif()
|
|
|
|
|
|
|
|
if(NOT TARGET ${API_VALIDATOR_TARGET})
|
|
|
|
message(FATAL_ERROR "${API_VALIDATOR_TARGET} is not a TARGET in the project tree.")
|
|
|
|
endif()
|
|
|
|
|
|
|
|
# collect targets
|
|
|
|
|
|
|
|
_ie_add_api_validator_post_build_step_recursive(TARGET ${API_VALIDATOR_TARGET})
|
|
|
|
|
|
|
|
# remove targets which were tested before
|
2021-12-17 04:37:16 -06:00
|
|
|
foreach(item IN LISTS VALIDATED_TARGETS)
|
2020-10-16 02:58:38 -05:00
|
|
|
list(REMOVE_ITEM API_VALIDATOR_TARGETS ${item})
|
|
|
|
endforeach()
|
|
|
|
|
|
|
|
if(NOT API_VALIDATOR_TARGETS)
|
|
|
|
return()
|
|
|
|
endif()
|
|
|
|
|
2020-10-29 04:38:15 -05:00
|
|
|
# apply check
|
|
|
|
|
|
|
|
macro(api_validator_get_target_name)
|
|
|
|
get_target_property(IS_IMPORTED ${target} IMPORTED)
|
2021-07-05 01:48:05 -05:00
|
|
|
get_target_property(orig_target ${target} ALIASED_TARGET)
|
2020-10-29 04:38:15 -05:00
|
|
|
if(IS_IMPORTED)
|
2021-11-27 05:58:24 -06:00
|
|
|
get_target_property(target_location ${target} LOCATION)
|
2020-10-29 04:38:15 -05:00
|
|
|
get_filename_component(target_name "${target_location}" NAME_WE)
|
2021-07-05 01:48:05 -05:00
|
|
|
elseif(TARGET "${orig_target}")
|
|
|
|
set(target_name ${orig_target})
|
2023-02-24 15:11:50 -06:00
|
|
|
set(target_location $<TARGET_FILE:${orig_target}>)
|
2020-10-29 04:38:15 -05:00
|
|
|
else()
|
|
|
|
set(target_name ${target})
|
2023-02-24 15:11:50 -06:00
|
|
|
set(target_location $<TARGET_FILE:${target}>)
|
2020-10-29 04:38:15 -05:00
|
|
|
endif()
|
|
|
|
endmacro()
|
2020-10-16 02:58:38 -05:00
|
|
|
|
|
|
|
foreach(target IN LISTS API_VALIDATOR_TARGETS)
|
2020-10-29 04:38:15 -05:00
|
|
|
api_validator_get_target_name()
|
2021-11-27 05:58:24 -06:00
|
|
|
if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.21 AND OV_GENERATOR_MULTI_CONFIG)
|
|
|
|
set(output_file "${CMAKE_BINARY_DIR}/api_validator/$<CONFIG>/${target_name}.txt")
|
|
|
|
else()
|
|
|
|
set(output_file "${CMAKE_BINARY_DIR}/api_validator/${target_name}.txt")
|
|
|
|
endif()
|
2020-10-29 04:38:15 -05:00
|
|
|
|
|
|
|
add_custom_command(TARGET ${API_VALIDATOR_TARGET} POST_BUILD
|
2021-11-27 05:58:24 -06:00
|
|
|
COMMAND ${CMAKE_COMMAND} --config $<CONFIG>
|
2020-10-29 04:38:15 -05:00
|
|
|
-D UWP_API_VALIDATOR=${UWP_API_VALIDATOR}
|
2023-02-24 15:11:50 -06:00
|
|
|
-D UWP_API_VALIDATOR_TARGET=${target_location}
|
2020-10-29 04:38:15 -05:00
|
|
|
-D UWP_API_VALIDATOR_APIS=${UWP_API_VALIDATOR_APIS}
|
|
|
|
-D UWP_API_VALIDATOR_EXCLUSION=${UWP_API_VALIDATOR_EXCLUSION}
|
|
|
|
-D UWP_API_VALIDATOR_OUTPUT=${output_file}
|
2020-11-10 07:29:37 -06:00
|
|
|
-D CMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}
|
2020-12-22 09:44:59 -06:00
|
|
|
-P "${IEDevScripts_DIR}/api_validator/api_validator_run.cmake"
|
2020-10-29 04:38:15 -05:00
|
|
|
BYPRODUCTS ${output_file}
|
|
|
|
COMMENT "[apiValidator] Check ${target_name} for OneCore compliance"
|
|
|
|
VERBATIM)
|
2020-10-16 02:58:38 -05:00
|
|
|
endforeach()
|
|
|
|
|
|
|
|
# update list of validated libraries
|
|
|
|
|
2023-02-24 15:11:50 -06:00
|
|
|
list(APPEND VALIDATED_TARGETS ${API_VALIDATOR_TARGETS})
|
|
|
|
set(VALIDATED_TARGETS "${VALIDATED_TARGETS}" CACHE INTERNAL "" FORCE)
|
2020-10-16 02:58:38 -05:00
|
|
|
endfunction()
|
|
|
|
|
|
|
|
#
|
|
|
|
# ie_add_api_validator_post_build_step(TARGET <name>)
|
|
|
|
#
|
|
|
|
macro(ie_add_api_validator_post_build_step)
|
2022-01-26 08:35:31 -06:00
|
|
|
_ov_add_api_validator_post_build_step(${ARGV})
|
2020-10-16 02:58:38 -05:00
|
|
|
endmacro()
|