Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Overhaul cmake interface to Tofino SDE #307

Merged
merged 2 commits into from
Oct 3, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -149,7 +149,7 @@ if(DPDK_TARGET)
elseif(ES2K_TARGET)
find_package(Es2kDriver)
elseif(TOFINO_TARGET)
include(tofino-driver)
find_package(TofinoDriver)
endif()

if(WITH_OVSP4RT)
Expand Down
117 changes: 117 additions & 0 deletions cmake/FindTofinoDriver.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,117 @@
# FindTofinoDriver.cmake - import Tofino P4 Driver (SDE).
#
# Copyright 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(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 "Tofino SDE version")
mark_as_advanced(SDE_VERSION)
endif()
unset(_sde_version)
endif()

#-----------------------------------------------------------------------
# Define library targets
#-----------------------------------------------------------------------
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
#-----------------------------------------------------------------------
set(SDE_LIBRARY_DIRS ${SDE_INSTALL_DIR}/lib)

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

This file was deleted.

2 changes: 1 addition & 1 deletion infrap4d/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ if(DPDK_TARGET)
elseif(ES2K_TARGET)
add_es2k_target_libraries(infrap4d)
elseif(TOFINO_TARGET)
target_link_libraries(infrap4d PUBLIC ${DRIVER_SDK_LIBS})
add_tofino_target_libraries(infrap4d)
endif()

if(WITH_KRNLMON)
Expand Down
Loading