From e3cc20fdcc0387c5f6705dd86eddd86e2157de84 Mon Sep 17 00:00:00 2001 From: Mateusz Jablonski Date: Thu, 9 Jan 2020 16:14:59 +0100 Subject: [PATCH] Link igdgmm in link time change mock_gmm to object library Resolves: NEO-2551 Change-Id: I7546868209191cc5833b2048ce9298881d2b79ac Signed-off-by: Mateusz Jablonski --- CMakeLists.txt | 144 +++++++++--------- core/gmm_helper/gmm_helper.cpp | 3 +- core/gmm_helper/gmm_helper.h | 5 - package.cmake | 4 +- package_config.cmake | 7 + runtime/CMakeLists.txt | 8 +- runtime/dll/linux/options_linux.cpp | 3 - runtime/dll/windows/options_windows.cpp | 3 - runtime/gmm_helper/CMakeLists.txt | 1 - runtime/gmm_helper/gmm_interface.cpp | 27 ---- unit_tests/CMakeLists.txt | 3 +- unit_tests/aub_tests/CMakeLists.txt | 2 +- unit_tests/gmm_helper/CMakeLists.txt | 3 +- unit_tests/gmm_helper/gmm_helper_tests.cpp | 50 ++++++ unit_tests/gmm_helper/gmm_interface_tests.cpp | 144 ------------------ unit_tests/linux/CMakeLists.txt | 5 +- unit_tests/main.cpp | 12 +- unit_tests/mock_gmm/CMakeLists.txt | 13 +- unit_tests/mock_gmm/mock_gmm.cpp | 20 +-- unit_tests/mock_gmm/mock_gmm.def | 10 -- unit_tests/mt_tests/CMakeLists.txt | 5 +- unit_tests/os_interface/windows/options.cpp | 5 +- .../page_fault_manager_tests/CMakeLists.txt | 1 + unit_tests/windows/CMakeLists.txt | 3 +- 24 files changed, 165 insertions(+), 316 deletions(-) create mode 100644 package_config.cmake delete mode 100644 runtime/gmm_helper/gmm_interface.cpp delete mode 100644 unit_tests/gmm_helper/gmm_interface_tests.cpp delete mode 100644 unit_tests/mock_gmm/mock_gmm.def diff --git a/CMakeLists.txt b/CMakeLists.txt index f80be03f4a..265de94a38 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -4,7 +4,11 @@ # SPDX-License-Identifier: MIT # -cmake_minimum_required(VERSION 3.2.0 FATAL_ERROR) +if(WIN32) + cmake_minimum_required(VERSION 3.13.0 FATAL_ERROR) +else() + cmake_minimum_required(VERSION 3.2.0 FATAL_ERROR) +endif() include(ExternalProject) # Include custom configs @@ -368,92 +372,90 @@ if(WIN32) endif() # GmmLib detection -if(NOT DEFINED GMMUMD_LIB_NAME) - if(TARGET igfx_gmmumd_dll) - set(GMMUMD_LIB_NAME "igfx_gmmumd_dll") - if(UNIX) - set(IGDRCL__GMM_LIBRARY_PATH "$") - endif() +if(TARGET igfx_gmmumd_dll) + set(GMM_TARGET_NAME "igfx_gmmumd_dll") + set(GMM_LINK_NAME $) + set(IGDRCL__GMM_LIBRARY_PATH $) + set(UMKM_SHAREDDATA_INCLUDE_PATHS $) +else() + if(DEFINED GMM_DIR) + get_filename_component(GMM_DIR "${GMM_DIR}" ABSOLUTE) else() - if(DEFINED GMM_DIR) - get_filename_component(GMM_DIR "${GMM_DIR}" ABSOLUTE) - else() - get_filename_component(GMM_DIR_tmp "${NEO_SOURCE_DIR}/../gmmlib" ABSOLUTE) - if(IS_DIRECTORY "${GMM_DIR_tmp}") - set(GMM_DIR "${GMM_DIR_tmp}") - endif() - endif() - - if(UNIX) - if(DEFINED GMM_DIR) - if(IS_DIRECTORY "${GMM_DIR}/lib/pkgconfig/") - set(__tmp_LIBDIR "lib") - elseif(IS_DIRECTORY "${GMM_DIR}/${CMAKE_INSTALL_LIBDIR}/pkgconfig/") - set(__tmp_LIBDIR ${CMAKE_INSTALL_LIBDIR}) - endif() - endif() - - find_package(PkgConfig) - if(DEFINED __tmp_LIBDIR) - set(OLD_PKG_CONFIG_PATH $ENV{PKG_CONFIG_PATH}) - set(ENV{PKG_CONFIG_PATH} "${GMM_DIR}/${__tmp_LIBDIR}/pkgconfig/") - endif() - pkg_check_modules(IGDRCL__GMM igdgmm) - if(DEFINED __tmp_LIBDIR) - set(ENV{PKG_CONFIG_PATH} ${OLD_PKG_CONFIG_PATH}) - endif() - - if(IGDRCL__GMM_FOUND) - if(DEFINED __tmp_LIBDIR) - string(REPLACE "${IGDRCL__GMM_INCLUDEDIR}" "${GMM_DIR}/include/igdgmm" IGDRCL__GMM_INCLUDE_DIRS "${IGDRCL__GMM_INCLUDE_DIRS}") - string(REPLACE "${IGDRCL__GMM_LIBDIR}" "${GMM_DIR}/${__tmp_LIBDIR}" IGDRCL__GMM_LIBDIR "${IGDRCL__GMM_LIBDIR}") - set(IGDRCL__GMM_LIBRARY_PATH "${IGDRCL__GMM_LIBDIR}") - endif() - - set(GMMUMD_LIB_NAME "igfx_gmmumd_dll") - - set(IGDRCL__GMM_INCLUDE_DIR ${IGDRCL__GMM_INCLUDE_DIRS}) - set(UMKM_SHAREDDATA_INCLUDE_PATHS "${IGDRCL__GMM_INCLUDE_DIR}") - message(STATUS "GmmLib include dirs: ${IGDRCL__GMM_INCLUDE_DIR}") - else() - message(FATAL_ERROR "GmmLib not found!") - endif() - if(DEFINED __tmp_LIBDIR) - unset(__tmp_LIBDIR) - endif() - else() - if(EXISTS "${GMM_DIR}/CMakeLists.txt") - message(STATUS "GmmLib source dir is: ${GMM_DIR}") - add_subdirectory_unique("${GMM_DIR}" "${NEO_BUILD_DIR}/gmmlib") - - if(NOT DEFINED GMMUMD_LIB_NAME) - set(GMMUMD_LIB_NAME "igfx_gmmumd_dll") - endif() - - set(UMKM_SHAREDDATA_INCLUDE_PATHS $) - else() - message(FATAL_ERROR "GmmLib not found!") - endif() + get_filename_component(GMM_DIR_tmp "${NEO_SOURCE_DIR}/../gmmlib" ABSOLUTE) + if(IS_DIRECTORY "${GMM_DIR_tmp}") + set(GMM_DIR "${GMM_DIR_tmp}") endif() endif() -else() - set(UMKM_SHAREDDATA_INCLUDE_PATHS $) + if(UNIX) - set(IGDRCL__GMM_LIBRARY_PATH "$") + if(DEFINED GMM_DIR) + if(IS_DIRECTORY "${GMM_DIR}/lib/pkgconfig/") + set(__tmp_LIBDIR "lib") + elseif(IS_DIRECTORY "${GMM_DIR}/${CMAKE_INSTALL_LIBDIR}/pkgconfig/") + set(__tmp_LIBDIR ${CMAKE_INSTALL_LIBDIR}) + endif() + endif() + + find_package(PkgConfig) + if(DEFINED __tmp_LIBDIR) + set(OLD_PKG_CONFIG_PATH $ENV{PKG_CONFIG_PATH}) + set(ENV{PKG_CONFIG_PATH} "${GMM_DIR}/${__tmp_LIBDIR}/pkgconfig/") + endif() + pkg_check_modules(IGDRCL__GMM igdgmm) + if(DEFINED __tmp_LIBDIR) + set(ENV{PKG_CONFIG_PATH} ${OLD_PKG_CONFIG_PATH}) + endif() + + if(IGDRCL__GMM_FOUND) + if(DEFINED __tmp_LIBDIR) + string(REPLACE "${IGDRCL__GMM_INCLUDEDIR}" "${GMM_DIR}/include/igdgmm" IGDRCL__GMM_INCLUDE_DIRS "${IGDRCL__GMM_INCLUDE_DIRS}") + string(REPLACE "${IGDRCL__GMM_LIBDIR}" "${GMM_DIR}/${__tmp_LIBDIR}" IGDRCL__GMM_LIBDIR "${IGDRCL__GMM_LIBDIR}") + set(IGDRCL__GMM_LIBRARY_PATH "${IGDRCL__GMM_LIBDIR}") + endif() + + set(GMM_TARGET_NAME "igfx_gmmumd_dll") + set(GMM_LINK_NAME ${IGDRCL__GMM_LIBRARIES}) + + set(IGDRCL__GMM_INCLUDE_DIR ${IGDRCL__GMM_INCLUDE_DIRS}) + set(UMKM_SHAREDDATA_INCLUDE_PATHS "${IGDRCL__GMM_INCLUDE_DIR}") + message(STATUS "GmmLib include dirs: ${IGDRCL__GMM_INCLUDE_DIR}") + else() + message(FATAL_ERROR "GmmLib not found!") + endif() + if(DEFINED __tmp_LIBDIR) + unset(__tmp_LIBDIR) + endif() + else() + if(EXISTS "${GMM_DIR}/CMakeLists.txt") + message(STATUS "GmmLib source dir is: ${GMM_DIR}") + add_subdirectory_unique("${GMM_DIR}" "${NEO_BUILD_DIR}/gmmlib") + + if(NOT DEFINED GMM_TARGET_NAME) + set(GMM_TARGET_NAME "igfx_gmmumd_dll") + endif() + + set(UMKM_SHAREDDATA_INCLUDE_PATHS $) + set(IGDRCL__GMM_LIBRARY_PATH $) + set(GMM_LINK_NAME $) + else() + message(FATAL_ERROR "GmmLib not found!") + endif() endif() endif() macro(copy_gmm_dll_for target) if(NOT UNIX) - add_dependencies(${target} ${GMMUMD_LIB_NAME}) + add_dependencies(${target} ${GMM_TARGET_NAME}) add_custom_command( TARGET ${target} POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy_if_different $ $ + COMMAND ${CMAKE_COMMAND} -E copy_if_different $ $ ) endif() endmacro() +link_directories(${IGDRCL__GMM_LIBRARY_PATH}) + # Instrumentation detection if(NOT DEFINED INSTRUMENTATION_LIB_NAME) if(DEFINED INSTRUMENTATION_SOURCE_DIR) diff --git a/core/gmm_helper/gmm_helper.cpp b/core/gmm_helper/gmm_helper.cpp index 0275e8b8ec..4cb85495de 100644 --- a/core/gmm_helper/gmm_helper.cpp +++ b/core/gmm_helper/gmm_helper.cpp @@ -36,10 +36,9 @@ uint32_t GmmHelper::getMOCS(uint32_t type) { } GmmHelper::GmmHelper(OSInterface *osInterface, const HardwareInfo *pHwInfo) : hwInfo(pHwInfo) { - loadLib(); auto hwInfoAddressWidth = Math::log2(hwInfo->capabilityTable.gpuAddressSpace + 1); GmmHelper::addressWidth = std::max(hwInfoAddressWidth, static_cast(48)); - gmmClientContext = GmmHelper::createGmmContextWrapperFunc(osInterface, const_cast(pHwInfo), this->initGmmFunc, this->destroyGmmFunc); + gmmClientContext = GmmHelper::createGmmContextWrapperFunc(osInterface, const_cast(pHwInfo), InitializeGmm, GmmAdapterDestroy); UNRECOVERABLE_IF(!gmmClientContext); } diff --git a/core/gmm_helper/gmm_helper.h b/core/gmm_helper/gmm_helper.h index 3a6ddc5d14..bd8389517f 100644 --- a/core/gmm_helper/gmm_helper.h +++ b/core/gmm_helper/gmm_helper.h @@ -42,13 +42,8 @@ class GmmHelper { static std::unique_ptr (*createGmmContextWrapperFunc)(OSInterface *, HardwareInfo *, decltype(&InitializeGmm), decltype(&GmmAdapterDestroy)); protected: - void loadLib(); - static uint32_t addressWidth; const HardwareInfo *hwInfo = nullptr; - std::unique_ptr gmmLib; std::unique_ptr gmmClientContext; - decltype(&InitializeGmm) initGmmFunc; - decltype(&GmmAdapterDestroy) destroyGmmFunc; }; } // namespace NEO diff --git a/package.cmake b/package.cmake index 5a24c08d38..44805ad54e 100644 --- a/package.cmake +++ b/package.cmake @@ -1,5 +1,5 @@ # -# Copyright (C) 2017-2019 Intel Corporation +# Copyright (C) 2017-2020 Intel Corporation # # SPDX-License-Identifier: MIT # @@ -132,6 +132,8 @@ if(UNIX) string(REPLACE ";" ", " CPACK_RPM_OPENCL_PACKAGE_REQUIRES "${_external_package_dependencies_rpm}") string(REPLACE ";" ", " CPACK_RPM_OCLOC_PACKAGE_REQUIRES "${_igc_package_dependencies_rpm}") + set(CPACK_PROPERTIES_FILE "${CMAKE_CURRENT_SOURCE_DIR}/package_config.cmake") + set(CPACK_LD_LIBRARY_PATH "${IGDRCL__GMM_LIBRARY_PATH}") include(CPack) get_directory_property(__HAS_PARENT PARENT_DIRECTORY) diff --git a/package_config.cmake b/package_config.cmake new file mode 100644 index 0000000000..cbb415352b --- /dev/null +++ b/package_config.cmake @@ -0,0 +1,7 @@ +# +# Copyright (C) 2020 Intel Corporation +# +# SPDX-License-Identifier: MIT +# + +set(ENV{LD_LIBRARY_PATH} ${CPACK_LD_LIBRARY_PATH}) diff --git a/runtime/CMakeLists.txt b/runtime/CMakeLists.txt index 95012ca51f..7c06a74397 100644 --- a/runtime/CMakeLists.txt +++ b/runtime/CMakeLists.txt @@ -1,5 +1,5 @@ # -# Copyright (C) 2018-2019 Intel Corporation +# Copyright (C) 2018-2020 Intel Corporation # # SPDX-License-Identifier: MIT # @@ -140,8 +140,8 @@ if(${GENERATE_EXECUTABLE}) set_property(GLOBAL APPEND PROPERTY NEO_COMPONENTS_LIST "opencl") endif() - if(TARGET ${GMMUMD_LIB_NAME}) - add_dependencies(${NEO_DYNAMIC_LIB_NAME} ${GMMUMD_LIB_NAME}) + if(TARGET ${GMM_TARGET_NAME}) + add_dependencies(${NEO_DYNAMIC_LIB_NAME} ${GMM_TARGET_NAME}) endif() if(NOT DISABLED_GTPIN_SUPPORT) @@ -153,7 +153,7 @@ if(${GENERATE_EXECUTABLE}) add_subdirectory(dll) - target_link_libraries(${NEO_DYNAMIC_LIB_NAME} ${NEO_STATIC_LIB_NAME} ${IGDRCL_EXTRA_LIBS}) + target_link_libraries(${NEO_DYNAMIC_LIB_NAME} ${NEO_STATIC_LIB_NAME} ${IGDRCL_EXTRA_LIBS} ${GMM_LINK_NAME}) target_include_directories(${NEO_DYNAMIC_LIB_NAME} BEFORE PRIVATE ${CMAKE_CURRENT_BINARY_DIR} diff --git a/runtime/dll/linux/options_linux.cpp b/runtime/dll/linux/options_linux.cpp index e03b5daa1e..210dc73a98 100644 --- a/runtime/dll/linux/options_linux.cpp +++ b/runtime/dll/linux/options_linux.cpp @@ -15,9 +15,6 @@ namespace Os { const char *frontEndDllName = FCL_LIBRARY_NAME; const char *igcDllName = IGC_LIBRARY_NAME; const char *libvaDllName = "libva.so.2"; -const char *gmmDllName = GMM_UMD_DLL; -const char *gmmInitFuncName = GMM_ADAPTER_INIT_NAME; -const char *gmmDestroyFuncName = GMM_ADAPTER_DESTROY_NAME; const char *sysFsPciPath = "/sys/bus/pci/devices/"; const char *tbxLibName = "libtbxAccess.so"; diff --git a/runtime/dll/windows/options_windows.cpp b/runtime/dll/windows/options_windows.cpp index 6cba1a71a2..d2cd7841a3 100644 --- a/runtime/dll/windows/options_windows.cpp +++ b/runtime/dll/windows/options_windows.cpp @@ -13,9 +13,6 @@ namespace Os { const char *frontEndDllName = FCL_LIBRARY_NAME; const char *igcDllName = IGC_LIBRARY_NAME; const char *gdiDllName = "gdi32.dll"; -const char *gmmDllName = GMM_UMD_DLL; -const char *gmmInitFuncName = GMM_ADAPTER_INIT_NAME; -const char *gmmDestroyFuncName = GMM_ADAPTER_DESTROY_NAME; // Os specific Metrics Library name #if _WIN64 diff --git a/runtime/gmm_helper/CMakeLists.txt b/runtime/gmm_helper/CMakeLists.txt index 68043eb972..1695759c8d 100644 --- a/runtime/gmm_helper/CMakeLists.txt +++ b/runtime/gmm_helper/CMakeLists.txt @@ -6,7 +6,6 @@ set(RUNTIME_SRCS_GMM_HELPER_BASE ${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt - ${CMAKE_CURRENT_SOURCE_DIR}/gmm_interface.cpp ${CMAKE_CURRENT_SOURCE_DIR}/gmm_types_converter.cpp ${CMAKE_CURRENT_SOURCE_DIR}/gmm_types_converter.h ${CMAKE_CURRENT_SOURCE_DIR}${BRANCH_DIR_SUFFIX}/gmm_utils.cpp diff --git a/runtime/gmm_helper/gmm_interface.cpp b/runtime/gmm_helper/gmm_interface.cpp deleted file mode 100644 index bb501bcd94..0000000000 --- a/runtime/gmm_helper/gmm_interface.cpp +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright (C) 2018-2020 Intel Corporation - * - * SPDX-License-Identifier: MIT - * - */ - -#include "core/gmm_helper/gmm_helper.h" -#include "core/helpers/debug_helpers.h" -#include "core/os_interface/os_library.h" - -namespace Os { -extern const char *gmmDllName; -extern const char *gmmInitFuncName; -extern const char *gmmDestroyFuncName; -} // namespace Os - -namespace NEO { - -void GmmHelper::loadLib() { - gmmLib.reset(OsLibrary::load(Os::gmmDllName)); - UNRECOVERABLE_IF(!gmmLib); - initGmmFunc = reinterpret_cast(gmmLib->getProcAddress(Os::gmmInitFuncName)); - destroyGmmFunc = reinterpret_cast(gmmLib->getProcAddress(Os::gmmDestroyFuncName)); - UNRECOVERABLE_IF(!initGmmFunc || !destroyGmmFunc); -} -} // namespace NEO diff --git a/unit_tests/CMakeLists.txt b/unit_tests/CMakeLists.txt index f420bb8cc7..56317122aa 100644 --- a/unit_tests/CMakeLists.txt +++ b/unit_tests/CMakeLists.txt @@ -83,6 +83,7 @@ set(NEO_IGDRCL_TESTS__TARGET_OBJECTS $ $ $ + $ $ $ $ @@ -513,8 +514,6 @@ macro(macro_for_each_gen) endmacro() apply_macro_for_each_gen("TESTED") add_subdirectories() -add_dependencies(unit_tests mock_gmm) -add_dependencies(igdrcl_tests mock_gmm) create_project_source_tree(igdrcl_tests ${NEO_SOURCE_DIR}/runtime) set(UltPchHeader "${CMAKE_CURRENT_SOURCE_DIR}/igdrcl_tests_pch.h") diff --git a/unit_tests/aub_tests/CMakeLists.txt b/unit_tests/aub_tests/CMakeLists.txt index 147a676b1a..3b50af6d4e 100644 --- a/unit_tests/aub_tests/CMakeLists.txt +++ b/unit_tests/aub_tests/CMakeLists.txt @@ -65,7 +65,7 @@ add_subdirectories() target_link_libraries(igdrcl_aub_tests igdrcl_mocks) target_link_libraries(igdrcl_aub_tests ${NEO_MOCKABLE_LIB_NAME}) target_link_libraries(igdrcl_aub_tests igdrcl_mocks) -target_link_libraries(igdrcl_aub_tests gmock-gtest ${IGDRCL_EXTRA_LIBS}) +target_link_libraries(igdrcl_aub_tests gmock-gtest ${IGDRCL_EXTRA_LIBS} ${GMM_LINK_NAME}) target_include_directories(igdrcl_aub_tests BEFORE PRIVATE ${NEO_SOURCE_DIR}/core/unit_tests/test_macros${BRANCH_DIR_SUFFIX}) diff --git a/unit_tests/gmm_helper/CMakeLists.txt b/unit_tests/gmm_helper/CMakeLists.txt index e251a4bd85..c97632fd87 100644 --- a/unit_tests/gmm_helper/CMakeLists.txt +++ b/unit_tests/gmm_helper/CMakeLists.txt @@ -1,5 +1,5 @@ # -# Copyright (C) 2018 Intel Corporation +# Copyright (C) 2018-2020 Intel Corporation # # SPDX-License-Identifier: MIT # @@ -7,7 +7,6 @@ set(IGDRCL_SRCS_tests_gmm_helper ${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt ${CMAKE_CURRENT_SOURCE_DIR}/gmm_helper_tests.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/gmm_interface_tests.cpp ) target_sources(igdrcl_tests PRIVATE ${IGDRCL_SRCS_tests_gmm_helper}) add_subdirectories() diff --git a/unit_tests/gmm_helper/gmm_helper_tests.cpp b/unit_tests/gmm_helper/gmm_helper_tests.cpp index f1c476e5fe..6e274a617c 100644 --- a/unit_tests/gmm_helper/gmm_helper_tests.cpp +++ b/unit_tests/gmm_helper/gmm_helper_tests.cpp @@ -10,6 +10,7 @@ #include "core/helpers/hw_info.h" #include "core/helpers/options.h" #include "core/helpers/ptr_math.h" +#include "core/sku_info/operations/sku_info_transfer.h" #include "core/unit_tests/helpers/debug_manager_state_restore.h" #include "runtime/gmm_helper/gmm_types_converter.h" #include "runtime/memory_manager/os_agnostic_memory_manager.h" @@ -29,6 +30,10 @@ using namespace ::testing; +extern GMM_INIT_IN_ARGS passedInputArgs; +extern SKU_FEATURE_TABLE passedFtrTable; +extern WA_TABLE passedWaTable; +extern bool copyInputArgs; namespace NEO { struct GmmTests : public ::testing::Test { void SetUp() override { @@ -780,4 +785,49 @@ TEST(GmmHelperTest, givenPlatformAlreadyDestroyedWhenResourceIsBeingDestroyedThe executionEnvironment->decRefInternal(); } +TEST(GmmHelperTest, givenValidGmmFunctionsWhenCreateGmmHelperWithInitializedOsInterfaceThenProperParametersArePassed) { + std::unique_ptr gmmHelper; + auto executionEnvironment = platform()->peekExecutionEnvironment(); + size_t numDevices; + DeviceFactory::getDevices(numDevices, *executionEnvironment); + VariableBackup passedInputArgsBackup(&passedInputArgs); + VariableBackup passedFtrTableBackup(&passedFtrTable); + VariableBackup passedWaTableBackup(&passedWaTable); + VariableBackup copyInputArgsBackup(©InputArgs, true); + + auto hwInfo = platformDevices[0]; + SKU_FEATURE_TABLE expectedFtrTable = {}; + WA_TABLE expectedWaTable = {}; + SkuInfoTransfer::transferFtrTableForGmm(&expectedFtrTable, &hwInfo->featureTable); + SkuInfoTransfer::transferWaTableForGmm(&expectedWaTable, &hwInfo->workaroundTable); + + gmmHelper.reset(new GmmHelper(executionEnvironment->osInterface.get(), hwInfo)); + EXPECT_EQ(0, memcmp(&hwInfo->platform, &passedInputArgs.Platform, sizeof(PLATFORM))); + EXPECT_EQ(&hwInfo->gtSystemInfo, passedInputArgs.pGtSysInfo); + EXPECT_EQ(0, memcmp(&expectedFtrTable, &passedFtrTable, sizeof(SKU_FEATURE_TABLE))); + EXPECT_EQ(0, memcmp(&expectedWaTable, &passedWaTable, sizeof(WA_TABLE))); + EXPECT_EQ(GMM_CLIENT::GMM_OCL_VISTA, passedInputArgs.ClientType); +} + +TEST(GmmHelperTest, givenValidGmmFunctionsWhenCreateGmmHelperWithoutOsInterfaceThenInitializationDoesntCrashAndProperParametersArePassed) { + std::unique_ptr gmmHelper; + VariableBackup passedInputArgsBackup(&passedInputArgs); + VariableBackup passedFtrTableBackup(&passedFtrTable); + VariableBackup passedWaTableBackup(&passedWaTable); + VariableBackup copyInputArgsBackup(©InputArgs, true); + + auto hwInfo = platformDevices[0]; + SKU_FEATURE_TABLE expectedFtrTable = {}; + WA_TABLE expectedWaTable = {}; + SkuInfoTransfer::transferFtrTableForGmm(&expectedFtrTable, &hwInfo->featureTable); + SkuInfoTransfer::transferWaTableForGmm(&expectedWaTable, &hwInfo->workaroundTable); + + gmmHelper.reset(new GmmHelper(nullptr, hwInfo)); + EXPECT_EQ(0, memcmp(&hwInfo->platform, &passedInputArgs.Platform, sizeof(PLATFORM))); + EXPECT_EQ(&hwInfo->gtSystemInfo, passedInputArgs.pGtSysInfo); + EXPECT_EQ(0, memcmp(&expectedFtrTable, &passedFtrTable, sizeof(SKU_FEATURE_TABLE))); + EXPECT_EQ(0, memcmp(&expectedWaTable, &passedWaTable, sizeof(WA_TABLE))); + EXPECT_EQ(GMM_CLIENT::GMM_OCL_VISTA, passedInputArgs.ClientType); +} + } // namespace NEO diff --git a/unit_tests/gmm_helper/gmm_interface_tests.cpp b/unit_tests/gmm_helper/gmm_interface_tests.cpp deleted file mode 100644 index f7169587d5..0000000000 --- a/unit_tests/gmm_helper/gmm_interface_tests.cpp +++ /dev/null @@ -1,144 +0,0 @@ -/* - * Copyright (C) 2018-2019 Intel Corporation - * - * SPDX-License-Identifier: MIT - * - */ - -#include "core/gmm_helper/gmm_helper.h" -#include "core/helpers/hw_info.h" -#include "core/sku_info/operations/sku_info_transfer.h" -#include "runtime/execution_environment/execution_environment.h" -#include "runtime/os_interface/os_interface.h" -#include "runtime/platform/platform.h" -#include "unit_tests/helpers/variable_backup.h" - -#include "gtest/gtest.h" - -#include - -#ifdef _WIN32 -#ifdef _WIN64 -const char *mockGmmInitFuncName = "initMockGmm"; -const char *mockGmmDestroyFuncName = "destroyMockGmm"; -#else -const char *mockGmmInitFuncName = "_initMockGmm@8"; -const char *mockGmmDestroyFuncName = "_destroyMockGmm@4"; -#endif -#define EXPORT_KEYWORD __declspec(dllexport) -#else -const char *mockGmmInitFuncName = "initMockGmm"; -const char *mockGmmDestroyFuncName = "destroyMockGmm"; -#define EXPORT_KEYWORD -#endif - -GMM_STATUS openGmmReturnValue = GMM_SUCCESS; -GMM_INIT_IN_ARGS passedInputArgs = {}; -SKU_FEATURE_TABLE passedFtrTable = {}; -WA_TABLE passedWaTable = {}; -bool copyInputArgs = false; -extern "C" { -EXPORT_KEYWORD GMM_STATUS GMM_STDCALL initMockGmm(GMM_INIT_IN_ARGS *pInArgs, GMM_INIT_OUT_ARGS *pOutArgs) { - if (copyInputArgs && pInArgs) { - passedInputArgs = *pInArgs; - passedFtrTable = *reinterpret_cast(pInArgs->pSkuTable); - passedWaTable = *reinterpret_cast(pInArgs->pWaTable); - } - pOutArgs->pGmmClientContext = reinterpret_cast(0x01); - return openGmmReturnValue; -} - -EXPORT_KEYWORD void GMM_STDCALL destroyMockGmm(GMM_INIT_OUT_ARGS *pInArgs) { -} -} - -namespace Os { -extern const char *gmmDllName; -extern const char *gmmInitFuncName; -extern const char *gmmDestroyFuncName; -} // namespace Os -namespace NEO { -extern const HardwareInfo **platformDevices; -} -using namespace NEO; -struct GmmInterfaceTest : public ::testing::Test { - const char *empty = ""; - - VariableBackup gmmDllNameBackup = {&Os::gmmDllName, empty}; - VariableBackup gmmInitNameBackup = {&Os::gmmInitFuncName, mockGmmInitFuncName}; - VariableBackup gmmDestroyNameBackup = {&Os::gmmDestroyFuncName, mockGmmDestroyFuncName}; -}; - -TEST_F(GmmInterfaceTest, givenValidGmmLibWhenCreateGmmHelperThenEverythingWorksFine) { - std::unique_ptr gmmHelper; - EXPECT_NO_THROW(gmmHelper.reset(new GmmHelper(nullptr, *platformDevices))); -} - -TEST_F(GmmInterfaceTest, givenInvalidGmmLibNameWhenCreateGmmHelperThenThrowException) { - std::unique_ptr gmmHelper; - gmmDllNameBackup = "invalidName"; - EXPECT_THROW(gmmHelper.reset(new GmmHelper(nullptr, *platformDevices)), std::exception); -} - -TEST_F(GmmInterfaceTest, givenGmmLibWhenOpenGmmFunctionFailsThenThrowException) { - std::unique_ptr gmmHelper; - VariableBackup openGmmReturnValueBackup(&openGmmReturnValue, GMM_ERROR); - EXPECT_THROW(gmmHelper.reset(new GmmHelper(nullptr, *platformDevices)), std::exception); -} - -TEST_F(GmmInterfaceTest, givenInvalidGmmInitFunctionNameWhenCreateGmmHelperThenThrowException) { - std::unique_ptr gmmHelper; - gmmInitNameBackup = "invalidName"; - EXPECT_THROW(gmmHelper.reset(new GmmHelper(nullptr, *platformDevices)), std::exception); -} - -TEST_F(GmmInterfaceTest, givenInvalidGmmDestroyFunctionNameWhenCreateGmmHelperThenThrowException) { - std::unique_ptr gmmHelper; - gmmDestroyNameBackup = "invalidName"; - EXPECT_THROW(gmmHelper.reset(new GmmHelper(nullptr, *platformDevices)), std::exception); -} - -TEST_F(GmmInterfaceTest, givenValidGmmFunctionsWhenCreateGmmHelperWithInitializedOsInterfaceThenProperParametersArePassed) { - std::unique_ptr gmmHelper; - auto executionEnvironment = platform()->peekExecutionEnvironment(); - size_t numDevices; - DeviceFactory::getDevices(numDevices, *executionEnvironment); - VariableBackup passedInputArgsBackup(&passedInputArgs); - VariableBackup passedFtrTableBackup(&passedFtrTable); - VariableBackup passedWaTableBackup(&passedWaTable); - VariableBackup copyInputArgsBackup(©InputArgs, true); - - auto hwInfo = platformDevices[0]; - SKU_FEATURE_TABLE expectedFtrTable = {}; - WA_TABLE expectedWaTable = {}; - SkuInfoTransfer::transferFtrTableForGmm(&expectedFtrTable, &hwInfo->featureTable); - SkuInfoTransfer::transferWaTableForGmm(&expectedWaTable, &hwInfo->workaroundTable); - - gmmHelper.reset(new GmmHelper(executionEnvironment->osInterface.get(), hwInfo)); - EXPECT_EQ(0, memcmp(&hwInfo->platform, &passedInputArgs.Platform, sizeof(PLATFORM))); - EXPECT_EQ(&hwInfo->gtSystemInfo, passedInputArgs.pGtSysInfo); - EXPECT_EQ(0, memcmp(&expectedFtrTable, &passedFtrTable, sizeof(SKU_FEATURE_TABLE))); - EXPECT_EQ(0, memcmp(&expectedWaTable, &passedWaTable, sizeof(WA_TABLE))); - EXPECT_EQ(GMM_CLIENT::GMM_OCL_VISTA, passedInputArgs.ClientType); -} - -TEST_F(GmmInterfaceTest, givenValidGmmFunctionsWhenCreateGmmHelperWithoutOsInterfaceThenInitializationDoesntCrashAndProperParametersArePassed) { - std::unique_ptr gmmHelper; - VariableBackup passedInputArgsBackup(&passedInputArgs); - VariableBackup passedFtrTableBackup(&passedFtrTable); - VariableBackup passedWaTableBackup(&passedWaTable); - VariableBackup copyInputArgsBackup(©InputArgs, true); - - auto hwInfo = platformDevices[0]; - SKU_FEATURE_TABLE expectedFtrTable = {}; - WA_TABLE expectedWaTable = {}; - SkuInfoTransfer::transferFtrTableForGmm(&expectedFtrTable, &hwInfo->featureTable); - SkuInfoTransfer::transferWaTableForGmm(&expectedWaTable, &hwInfo->workaroundTable); - - gmmHelper.reset(new GmmHelper(nullptr, hwInfo)); - EXPECT_EQ(0, memcmp(&hwInfo->platform, &passedInputArgs.Platform, sizeof(PLATFORM))); - EXPECT_EQ(&hwInfo->gtSystemInfo, passedInputArgs.pGtSysInfo); - EXPECT_EQ(0, memcmp(&expectedFtrTable, &passedFtrTable, sizeof(SKU_FEATURE_TABLE))); - EXPECT_EQ(0, memcmp(&expectedWaTable, &passedWaTable, sizeof(WA_TABLE))); - EXPECT_EQ(GMM_CLIENT::GMM_OCL_VISTA, passedInputArgs.ClientType); -} diff --git a/unit_tests/linux/CMakeLists.txt b/unit_tests/linux/CMakeLists.txt index fe20d8afa0..3c43c7bf33 100644 --- a/unit_tests/linux/CMakeLists.txt +++ b/unit_tests/linux/CMakeLists.txt @@ -1,5 +1,5 @@ # -# Copyright (C) 2017-2019 Intel Corporation +# Copyright (C) 2017-2020 Intel Corporation # # SPDX-License-Identifier: MIT # @@ -49,6 +49,7 @@ foreach(target_name linux_tests linux_dll_tests) ${IGDRCL_SRCS_${target_name}} $ $ + $ ) target_link_libraries(igdrcl_${target_name} ${NEO_MOCKABLE_LIB_NAME} igdrcl_mocks ${IGDRCL_EXTRA_LIBS} gmock-gtest) @@ -61,4 +62,4 @@ foreach(target_name linux_tests linux_dll_tests) ) add_dependencies(unit_tests igdrcl_${target_name}) endforeach() -add_subdirectories() \ No newline at end of file +add_subdirectories() diff --git a/unit_tests/main.cpp b/unit_tests/main.cpp index d9043212d6..dd32cf0fa0 100644 --- a/unit_tests/main.cpp +++ b/unit_tests/main.cpp @@ -54,11 +54,6 @@ namespace MockSipData { extern std::unique_ptr mockSipKernel; } } // namespace NEO -namespace Os { -extern const char *gmmDllName; -extern const char *gmmInitFuncName; -extern const char *gmmDestroyFuncName; -} // namespace Os using namespace NEO; TestEnvironment *gEnvironment; @@ -459,14 +454,9 @@ int main(int argc, char **argv) { #else SetUnhandledExceptionFilter(&UltExceptionFilter); #endif - if (!useMockGmm) { - Os::gmmDllName = GMM_UMD_DLL; - Os::gmmInitFuncName = GMM_ADAPTER_INIT_NAME; - Os::gmmDestroyFuncName = GMM_ADAPTER_DESTROY_NAME; - } else { + if (useMockGmm) { GmmHelper::createGmmContextWrapperFunc = GmmClientContextBase::create; } - std::unique_ptr gmmLib(OsLibrary::load(Os::gmmDllName)); initializeTestHelpers(); retVal = RUN_ALL_TESTS(); diff --git a/unit_tests/mock_gmm/CMakeLists.txt b/unit_tests/mock_gmm/CMakeLists.txt index e3ed451d69..489ec7fc9e 100644 --- a/unit_tests/mock_gmm/CMakeLists.txt +++ b/unit_tests/mock_gmm/CMakeLists.txt @@ -1,5 +1,5 @@ # -# Copyright (C) 2018-2019 Intel Corporation +# Copyright (C) 2018-2020 Intel Corporation # # SPDX-License-Identifier: MIT # @@ -11,23 +11,14 @@ project(${target_name}) set(IGDRCL_SRCS_tests_mock_gmm ${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt ${CMAKE_CURRENT_SOURCE_DIR}/mock_gmm.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/mock_gmm.def ) -add_library(${target_name} EXCLUDE_FROM_ALL SHARED ${IGDRCL_SRCS_tests_mock_gmm}) +add_library(${target_name} EXCLUDE_FROM_ALL OBJECT ${IGDRCL_SRCS_tests_mock_gmm}) target_include_directories(${target_name} PRIVATE ${WDK_INCLUDE_PATHS} ${UMKM_SHAREDDATA_INCLUDE_PATHS} ) -set_target_properties( - ${target_name} - PROPERTIES DEBUG_OUTPUT_NAME ${target_name} - RELEASE_OUTPUT_NAME ${target_name} - RELEASEINTERNAL_OUTPUT_NAME ${target_name} - OUTPUT_NAME ${target_name} -) - create_project_source_tree(${target_name}) set_target_properties(${target_name} PROPERTIES FOLDER "test mocks") target_compile_definitions(${target_name} PUBLIC) diff --git a/unit_tests/mock_gmm/mock_gmm.cpp b/unit_tests/mock_gmm/mock_gmm.cpp index 82262e1c02..cc3c91f590 100644 --- a/unit_tests/mock_gmm/mock_gmm.cpp +++ b/unit_tests/mock_gmm/mock_gmm.cpp @@ -7,22 +7,24 @@ #include "GmmLib.h" -#ifdef __cplusplus -extern "C" { -#endif +GMM_INIT_IN_ARGS passedInputArgs = {}; +SKU_FEATURE_TABLE passedFtrTable = {}; +WA_TABLE passedWaTable = {}; +bool copyInputArgs = false; -GMM_STATUS GMM_STDCALL initMockGmm(GMM_INIT_IN_ARGS *pInArgs, GMM_INIT_OUT_ARGS *pOutArgs) { +GMM_STATUS GMM_STDCALL InitializeGmm(GMM_INIT_IN_ARGS *pInArgs, GMM_INIT_OUT_ARGS *pOutArgs) { pOutArgs->pGmmClientContext = reinterpret_cast(0x01); if (pInArgs->Platform.eProductFamily == PRODUCT_FAMILY::IGFX_UNKNOWN && pInArgs->Platform.ePCHProductFamily == PCH_PRODUCT_FAMILY::PCH_UNKNOWN) { return GMM_ERROR; } + if (copyInputArgs && pInArgs) { + passedInputArgs = *pInArgs; + passedFtrTable = *reinterpret_cast(pInArgs->pSkuTable); + passedWaTable = *reinterpret_cast(pInArgs->pWaTable); + } return GMM_SUCCESS; } -void GMM_STDCALL destroyMockGmm(GMM_INIT_OUT_ARGS *pInArgs) { +void GMM_STDCALL GmmAdapterDestroy(GMM_INIT_OUT_ARGS *pInArgs) { } - -#ifdef __cplusplus -} -#endif diff --git a/unit_tests/mock_gmm/mock_gmm.def b/unit_tests/mock_gmm/mock_gmm.def deleted file mode 100644 index 6c02920ca3..0000000000 --- a/unit_tests/mock_gmm/mock_gmm.def +++ /dev/null @@ -1,10 +0,0 @@ -; -; Copyright (C) 2018-2019 Intel Corporation -; -; SPDX-License-Identifier: MIT -; - -LIBRARY "mock_gmm" -EXPORTS -initMockGmm -destroyMockGmm \ No newline at end of file diff --git a/unit_tests/mt_tests/CMakeLists.txt b/unit_tests/mt_tests/CMakeLists.txt index 5112775fe2..5f0127aeff 100644 --- a/unit_tests/mt_tests/CMakeLists.txt +++ b/unit_tests/mt_tests/CMakeLists.txt @@ -1,5 +1,5 @@ # -# Copyright (C) 2017-2019 Intel Corporation +# Copyright (C) 2017-2020 Intel Corporation # # SPDX-License-Identifier: MIT # @@ -15,6 +15,7 @@ add_executable(igdrcl_mt_tests EXCLUDE_FROM_ALL $ $ $ + $ $ ) @@ -45,7 +46,7 @@ endif() add_custom_target(run_mt_unit_tests) -add_dependencies(igdrcl_mt_tests test_dynamic_lib mock_gmm) +add_dependencies(igdrcl_mt_tests test_dynamic_lib) create_project_source_tree(igdrcl_mt_tests ${NEO_SOURCE_DIR}/runtime ${NEO_SOURCE_DIR}/unit_tests) diff --git a/unit_tests/os_interface/windows/options.cpp b/unit_tests/os_interface/windows/options.cpp index aacd319730..38faaa2899 100644 --- a/unit_tests/os_interface/windows/options.cpp +++ b/unit_tests/os_interface/windows/options.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2017-2019 Intel Corporation + * Copyright (C) 2017-2020 Intel Corporation * * SPDX-License-Identifier: MIT * @@ -18,9 +18,6 @@ namespace Os { const char *frontEndDllName = ""; const char *igcDllName = ""; const char *gdiDllName = "gdi32_mock.dll"; -const char *gmmDllName = "mock_gmm.dll"; -const char *gmmInitFuncName = "initMockGmm"; -const char *gmmDestroyFuncName = "destroyMockGmm"; const char *testDllName = "test_dynamic_lib.dll"; const char *metricsLibraryDllName = ""; } // namespace Os diff --git a/unit_tests/page_fault_manager_tests/CMakeLists.txt b/unit_tests/page_fault_manager_tests/CMakeLists.txt index 645de0018b..5c84f5431f 100644 --- a/unit_tests/page_fault_manager_tests/CMakeLists.txt +++ b/unit_tests/page_fault_manager_tests/CMakeLists.txt @@ -10,6 +10,7 @@ add_executable(neo_page_fault_manager_tests $ $ $ + $ ${NEO_SOURCE_DIR}/runtime/aub/aub_stream_interface.cpp ${NEO_SOURCE_DIR}/unit_tests/libult/os_interface.cpp ${NEO_SOURCE_DIR}/unit_tests/ult_configuration.cpp diff --git a/unit_tests/windows/CMakeLists.txt b/unit_tests/windows/CMakeLists.txt index 677fc39580..eb8428e7a7 100644 --- a/unit_tests/windows/CMakeLists.txt +++ b/unit_tests/windows/CMakeLists.txt @@ -1,5 +1,5 @@ # -# Copyright (C) 2018-2019 Intel Corporation +# Copyright (C) 2018-2020 Intel Corporation # # SPDX-License-Identifier: MIT # @@ -10,6 +10,7 @@ project(igdrcl_windows_dll_tests) set(NEO_IGDRCL_WINDOWS_DLL_TESTS_TARGET_OBJECTS $ $ + $ ) add_executable(igdrcl_windows_dll_tests