#!/usr/bin/cmake -P ## Copyright(c) 2017-2020, Intel Corporation ## ## Redistribution and use in source and binary forms, with or without ## modification, are permitted provided that the following conditions are met: ## ## * Redistributions of source code must retain the above copyright notice, ## this list of conditions and the following disclaimer. ## * Redistributions in binary form must reproduce the above copyright notice, ## this list of conditions and the following disclaimer in the documentation ## and/or other materials provided with the distribution. ## * Neither the name of Intel Corporation nor the names of its contributors ## may be used to endorse or promote products derived from this software ## without specific prior written permission. ## ## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" ## AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE ## IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ## ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE ## LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR ## CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF ## SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS ## INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN ## CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ## ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE ## POSSIBILITY OF SUCH DAMAGE check_cxx_compiler_flag("-Wno-sign-compare" CXX_SUPPORTS_NO_SIGN_COMPARE) set(OPAE_TEST_LIBRARIES test_system fpga_db CACHE LIST "OPAE test libs." FORCE) function(opae_load_gtest) message(STATUS "Trying to fetch gtest through git...") find_package(Git REQUIRED) include(ExternalProject) # Download and install GoogleTest ExternalProject_Add( gtest GIT_REPOSITORY "https://github.com/google/googletest" GIT_TAG "release-1.8.0" UPDATE_COMMAND "" PREFIX ${CMAKE_CURRENT_BINARY_DIR}/gtest CMAKE_ARGS -DCMAKE_POSITION_INDEPENDENT_CODE=ON # Disable install step INSTALL_COMMAND "") set(gtest_root "${CMAKE_CURRENT_BINARY_DIR}/gtest/src/gtest/googletest") message(STATUS "gtest located at: ${gtest_root}") # Create a libgtest target to be used as a dependency by test programs add_library(libgtest IMPORTED STATIC GLOBAL) add_library(libgtest_main IMPORTED STATIC GLOBAL) add_dependencies(libgtest gtest) add_dependencies(libgtest_main gtest) # Get GTest source and binary directories from CMake project ExternalProject_Get_Property(gtest source_dir binary_dir) # Set libgtest properties set_target_properties(libgtest PROPERTIES "IMPORTED_LOCATION" "${binary_dir}/googlemock/gtest/libgtest.a" "IMPORTED_LINK_INTERFACE_LIBRARIES" "${CMAKE_THREAD_LIBS_INIT}") # Set libgtest_main properties set_target_properties(libgtest_main PROPERTIES "IMPORTED_LOCATION" "${binary_dir}/googlemock/gtest/libgtest_main.a" "IMPORTED_LINK_INTERFACE_LIBRARIES" "${CMAKE_THREAD_LIBS_INIT}") # Export gtest variables set(GTEST_ROOT "${gtest_root}" CACHE PATH "GTest root dir." FORCE) set(GTEST_INCLUDE_DIRS "${gtest_root}/include" CACHE PATH "GTest include dir." FORCE) set(GTEST_MAIN_LIBRARY "libgtest_main" CACHE PATH "GTest main lib." FORCE) set(GTEST_LIBRARIES "libgtest" CACHE PATH "GTest test lib." FORCE) set(GTEST_BOTH_LIBRARIES libgtest_main libgtest CACHE LIST "GTest both libs." FORCE) set(GTEST_FOUND TRUE CACHE BOOL "GTest found?" FORCE) endfunction() function(opae_test_add) set(options TEST_FPGAD) set(oneValueArgs TARGET) set(multiValueArgs SOURCE LIBS) cmake_parse_arguments(OPAE_TEST_ADD "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) if(OPAE_ENABLE_MOCK) set(MOCK_C ${opae-test_ROOT}/framework/mock/mock.c) endif() add_executable(${OPAE_TEST_ADD_TARGET} ${OPAE_TEST_ADD_SOURCE} ${MOCK_C}) set_target_properties(${OPAE_TEST_ADD_TARGET} PROPERTIES CXX_STANDARD 11 CXX_STANDARD_REQUIRED YES CXX_EXTENSIONS NO) target_compile_definitions(${OPAE_TEST_ADD_TARGET} PRIVATE HAVE_CONFIG_H=1) if(CMAKE_BUILD_TYPE STREQUAL "Debug") target_compile_definitions(${OPAE_TEST_ADD_TARGET} PRIVATE LIBOPAE_DEBUG=1) endif() if(CXX_SUPPORTS_NO_SIGN_COMPARE) target_compile_options(${OPAE_TEST_ADD_TARGET} PRIVATE -Wno-sign-compare) endif() target_include_directories(${OPAE_TEST_ADD_TARGET} PUBLIC $ $ $ PRIVATE ${OPAE_LIBS_ROOT} ${OPAE_LIBS_ROOT}/plugins/xfpga ${OPAE_LIBS_ROOT}/libopae-c ${opae-test_ROOT}/framework ${GTEST_INCLUDE_DIRS}) if(${OPAE_TEST_ADD_TEST_FPGAD}) target_include_directories(${OPAE_TEST_ADD_TARGET} PRIVATE ${opae-test_ROOT}/framework/mock/test_fpgad) endif(${OPAE_TEST_ADD_TEST_FPGAD}) target_link_libraries(${OPAE_TEST_ADD_TARGET} ${CMAKE_THREAD_LIBS_INIT} ${OPAE_TEST_LIBRARIES} ${libjson-c_LIBRARIES} ${libuuid_LIBRARIES} ${GTEST_BOTH_LIBRARIES} ${OPAE_TEST_ADD_LIBS}) opae_coverage_build(TARGET ${OPAE_TEST_ADD_TARGET} SOURCE ${OPAE_TEST_ADD_SOURCE}) add_test( NAME ${OPAE_TEST_ADD_TARGET} COMMAND $ WORKING_DIRECTORY ${CMAKE_BINARY_DIR} ) endfunction() function(opae_test_add_static_lib) set(options ) set(oneValueArgs TARGET) set(multiValueArgs SOURCE LIBS) cmake_parse_arguments(OPAE_TEST_ADD_STATIC_LIB "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) add_library(${OPAE_TEST_ADD_STATIC_LIB_TARGET} STATIC ${OPAE_TEST_ADD_STATIC_LIB_SOURCE}) target_include_directories(${OPAE_TEST_ADD_STATIC_LIB_TARGET} PUBLIC $ $ $ PRIVATE ${OPAE_LIBS_ROOT} ${OPAE_LIBS_ROOT}/plugins/xfpga ${OPAE_LIBS_ROOT}/libopae-c) set_property(TARGET ${OPAE_TEST_ADD_STATIC_LIB_TARGET} PROPERTY POSITION_INDEPENDENT_CODE ON) target_compile_definitions(${OPAE_TEST_ADD_STATIC_LIB_TARGET} PRIVATE HAVE_CONFIG_H=1 PIC=1 STATIC=) if(CMAKE_BUILD_TYPE STREQUAL "Debug") target_compile_definitions(${OPAE_TEST_ADD_STATIC_LIB_TARGET} PRIVATE LIBOPAE_DEBUG=1) endif() target_link_libraries(${OPAE_TEST_ADD_STATIC_LIB_TARGET} ${OPAE_TEST_ADD_STATIC_LIB_LIBS}) opae_coverage_build(TARGET ${OPAE_TEST_ADD_STATIC_LIB_TARGET} SOURCE ${OPAE_TEST_ADD_STATIC_LIB_SOURCE}) endfunction()