Skip to content

Commit

Permalink
Overhaul cmake interface to ES2K SDE
Browse files Browse the repository at this point in the history
- Replace the es2k-driver.cmake include file with
  FindEs2kDriver.cmake, a find-module that allows us to use
  `find_package(Es2kDriver)` to define namespaced cmake targets
  for the ES2K SDE.

- Define an `add_es2k_target_libraries()` function that
  provides an abstract interface to set the properties a
  target needs in order to compile and link with the ES2K SDE.

- Update krnlmon submodule reference.

Signed-off-by: Derek G Foster <[email protected]>
  • Loading branch information
ffoulkes committed Sep 30, 2023
1 parent fe9fc27 commit adccc0f
Show file tree
Hide file tree
Showing 5 changed files with 154 additions and 88 deletions.
2 changes: 1 addition & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -147,7 +147,7 @@ find_package(gflags CONFIG REQUIRED)
if(DPDK_TARGET)
include(dpdk-driver)
elseif(ES2K_TARGET)
include(es2k-driver)
find_package(Es2kDriver)
elseif(TOFINO_TARGET)
include(tofino-driver)
endif()
Expand Down
151 changes: 151 additions & 0 deletions cmake/FindEs2kDriver.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,151 @@
# FindEs2kDriver.cmake - import ES2K P4 Driver (SDE).
#
# Copyright 2022-2023 Intel Corporation
# SPDX-License-Identifier: Apache 2.0
#

# This module requires that SDE_INSTALL_DIR be defined.
# It needs additional work to make it a proper CMake find-module.

#-----------------------------------------------------------------------
# Define SDE_INCLUDE_DIR
#-----------------------------------------------------------------------
find_path(SDE_INCLUDE_DIR
NAMES "bf_switchd/bf_switchd.h"
PATHS ${SDE_INSTALL_DIR}/include
)
if(NOT SDE_INCLUDE_DIR)
message(FATAL_ERROR "bf_switchd.h not found")
endif()
mark_as_advanced(SDE_INCLUDE_DIR)

#-----------------------------------------------------------------------
# Find libraries
#-----------------------------------------------------------------------
find_library(LIBBF_SWITCHD bf_switchd_lib)
if(NOT LIBBF_SWITCHD)
message(FATAL_ERROR "sde::bf_switchd_lib library not found")
endif()
mark_as_advanced(LIBBF_SWITCHD)

find_library(LIBDRIVER driver)
if(NOT LIBDRIVER)
message(FATAL_ERROR "sde::driver library not found")
endif()
mark_as_advanced(LIBDRIVER)

find_library(LIBTDI tdi)
if(NOT LIBTDI)
message(FATAL_ERROR "sde::tdi library not found")
endif()
mark_as_advanced(LIBTDI)

find_library(LIBTDI_JSON_PARSER tdi_json_parser)
if(NOT LIBTDI_JSON_PARSER)
message(FATAL_ERROR "sde::tdi_json_parser library not found")
endif()
mark_as_advanced(LIBTDI_JSON_PARSER)

find_library(LIBTARGET_SYS target_sys)
if(NOT LIBTARGET_SYS)
message(FATAL_ERROR "sde::target_sys library not found")
endif()
mark_as_advanced(LIBTARGET_SYS)

find_library(LIBTARGET_UTILS target_utils)
if(NOT LIBTARGET_UTILS)
message(FATAL_ERROR "sde::target_utils library not found")
endif()
mark_as_advanced(LIBTARGET_UTILS)

#-----------------------------------------------------------------------
# Get version number
#-----------------------------------------------------------------------
if(EXISTS ${SDE_INSTALL_DIR}/share/VERSION)
file(READ ${SDE_INSTALL_DIR}/share/VERSION _sde_version)
string(STRIP "${_sde_version}" _sde_version)
if(NOT _sde_version STREQUAL "")
set(SDE_VERSION "${_sde_version}" CACHE STRING "ES2K SDE version")
mark_as_advanced(SDE_VERSION)
endif()
unset(_sde_version)
endif()

#-----------------------------------------------------------------------
# Define library targets
#-----------------------------------------------------------------------
add_library(sde::bf_switchd UNKNOWN IMPORTED)
set_target_properties(sde::bf_switchd PROPERTIES
IMPORTED_LOCATION ${LIBBF_SWITCHD}
INTERFACE_INCLUDE_DIRECTORIES ${SDE_INCLUDE_DIR}
IMPORTED_LINK_INTERFACE_LANGUAGES C)

add_library(sde::driver UNKNOWN IMPORTED)
set_target_properties(sde::driver PROPERTIES
IMPORTED_LOCATION ${LIBDRIVER}
INTERFACE_INCLUDE_DIRECTORIES ${SDE_INCLUDE_DIR}
IMPORTED_LINK_INTERFACE_LANGUAGES C)

add_library(sde::tdi UNKNOWN IMPORTED)
set_target_properties(sde::tdi PROPERTIES
IMPORTED_LOCATION ${LIBTDI}
INTERFACE_INCLUDE_DIRECTORIES ${SDE_INCLUDE_DIR}
IMPORTED_LINK_INTERFACE_LANGUAGES CXX)

add_library(sde::tdi_json_parser UNKNOWN IMPORTED)
set_target_properties(sde::tdi_json_parser PROPERTIES
IMPORTED_LOCATION ${LIBTDI_JSON_PARSER}
INTERFACE_INCLUDE_DIRECTORIES ${SDE_INCLUDE_DIR}
IMPORTED_LINK_INTERFACE_LANGUAGES CXX)

add_library(sde::target_sys UNKNOWN IMPORTED)
set_target_properties(sde::target_sys PROPERTIES
IMPORTED_LOCATION ${LIBTARGET_SYS}
INTERFACE_INCLUDE_DIRECTORIES ${SDE_INCLUDE_DIR}
IMPORTED_LINK_INTERFACE_LANGUAGES C)

add_library(sde::target_utils UNKNOWN IMPORTED)
set_target_properties(sde::target_utils PROPERTIES
IMPORTED_LOCATION ${LIBTARGET_UTILS}
INTERFACE_INCLUDE_DIRECTORIES ${SDE_INCLUDE_DIR}
IMPORTED_LINK_INTERFACE_LANGUAGES C)

#-----------------------------------------------------------------------
# Define SDE_LIBRARY_DIRS
#-----------------------------------------------------------------------
function(_define_es2k_library_dirs DIRS)
set(dirs ${SDE_INCLUDE_DIR}/lib)

set(candidates
${SDE_INCLUDE_DIR}/lib/x86_64-linux-gnu
${SDE_INCLUDE_DIR}/lib64
)

# Find the auxiliary directory that contains the RTE libraries
# and add it to the link directories list.
foreach(dirpath ${candidates})
if(EXISTS ${dirpath}/librte_ethdev.so)
list(APPEND dirs ${dirpath})
break()
endif()
endforeach()

set(${DIRS} ${dirs} PARENT_SCOPE)
endfunction()

_define_es2k_library_dirs(SDE_LIBRARY_DIRS)

#-----------------------------------------------------------------------
# Apply SDE properties to target
#-----------------------------------------------------------------------
function(add_es2k_target_libraries TGT)
target_link_libraries(${TGT} PUBLIC
sde::bf_switchd
sde::driver
sde::target_sys
sde::target_utils
sde::tdi
sde::tdi_json_parser
)
target_link_directories(${TGT} PUBLIC ${SDE_LIBRARY_DIRS})
endfunction()
84 changes: 0 additions & 84 deletions cmake/es2k-driver.cmake

This file was deleted.

3 changes: 1 addition & 2 deletions infrap4d/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -36,8 +36,7 @@ if(DPDK_TARGET)
target_link_directories(infrap4d PUBLIC ${DRIVER_SDK_DIRS})
target_link_options(infrap4d PUBLIC ${DRIVER_SDK_OPTS})
elseif(ES2K_TARGET)
target_link_libraries(infrap4d PUBLIC ${ES2K_SDK_LIBS})
target_link_directories(infrap4d PUBLIC ${ES2K_SDK_DIRS})
add_es2k_target_libraries(infrap4d)
elseif(TOFINO_TARGET)
target_link_libraries(infrap4d PUBLIC ${DRIVER_SDK_LIBS})
endif()
Expand Down
2 changes: 1 addition & 1 deletion krnlmon/krnlmon

0 comments on commit adccc0f

Please sign in to comment.