Blame opae-libs/cmake/modules/OPAETest.cmake

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