# Copyright (c) 2020 Cisco and/or its affiliates. # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at: # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. ############################################################################## # vat2 ############################################################################## add_vpp_executable(vat2 ENABLE_EXPORTS NO_INSTALL SOURCES main.c plugin.c jsonconvert.c DEPENDS api_headers LINK_LIBRARIES vlibmemoryclient svm vppinfra vppapiclient Threads::Threads rt m dl crypto ) # # Unit test code. Call generator directly to avoid it being installed #set_source_files_properties(vat2_test.c PROPERTIES # COMPILE_FLAGS " -fsanitize=address" #) vpp_generate_api_c_header (test/vat2_test.api) add_vpp_executable(test_vat2 ENABLE_EXPORTS NO_INSTALL SOURCES test/vat2_test.c jsonconvert.c DEPENDS api_headers LINK_LIBRARIES vlibmemoryclient svm vppinfra vppapiclient Threads::Threads rt m dl crypto ) #target_link_options(test_vat2 PUBLIC "LINKER:-fsanitize=address") if("${CMAKE_VERSION}" VERSION_GREATER_EQUAL "3.13" AND "${CMAKE_C_COMPILER_ID}" MATCHES "(Apple)?[Cc]lang") set(TARGET_NAME test_vat2) set(COV_SOURCES ${CMAKE_SOURCE_DIR}/vat2/jsonconvert.c) message("Building with llvm Code Coverage Tools ${TARGET_NAME}") target_compile_options(${TARGET_NAME} PRIVATE -fprofile-instr-generate -fcoverage-mapping) target_link_options(${TARGET_NAME} PRIVATE -fprofile-instr-generate -fcoverage-mapping) target_compile_options(${TARGET_NAME} PRIVATE -fsanitize=address) target_link_options(${TARGET_NAME} PRIVATE -fsanitize=address) # llvm-cov add_custom_target(${TARGET_NAME}-ccov-preprocessing COMMAND LLVM_PROFILE_FILE=${TARGET_NAME}.profraw $<TARGET_FILE:${TARGET_NAME}> COMMAND llvm-profdata merge -sparse ${TARGET_NAME}.profraw -o ${TARGET_NAME}.profdata DEPENDS ${TARGET_NAME}) add_custom_target(${TARGET_NAME}-ccov-show COMMAND llvm-cov show $<TARGET_FILE:${TARGET_NAME}> -instr-profile=${TARGET_NAME}.profdata -show-line-counts-or-regions ${COV_SOURCES} DEPENDS ${TARGET_NAME}-ccov-preprocessing) add_custom_target(${TARGET_NAME}-ccov-report COMMAND llvm-cov report -show-functions $<TARGET_FILE:${TARGET_NAME}> -instr-profile=${TARGET_NAME}.profdata ${COV_SOURCES} DEPENDS ${TARGET_NAME}-ccov-preprocessing) add_custom_target(${TARGET_NAME}-ccov COMMAND llvm-cov show $<TARGET_FILE:${TARGET_NAME}> -instr-profile=${TARGET_NAME}.profdata -show-line-counts-or-regions -output-dir=${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${TARGET_NAME}-llvm-cov -format="html" ${COV_SOURCES} DEPENDS ${TARGET_NAME}-ccov-preprocessing) add_custom_command(TARGET ${TARGET_NAME}-ccov POST_BUILD COMMAND ; COMMENT "Open ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${TARGET_NAME}-llvm-cov/index.html in your browser to view the coverage report." ) endif() ############################################################################## # vat2 headers ############################################################################## install( FILES jsonconvert.h vat2_helpers.h DESTINATION include/vat2 COMPONENT vpp-dev )