已有数据同步功能完成
This commit is contained in:
133
ebpf/c/CMakeLists.txt
Normal file
133
ebpf/c/CMakeLists.txt
Normal file
@@ -0,0 +1,133 @@
|
||||
# SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause
|
||||
|
||||
cmake_minimum_required(VERSION 3.16)
|
||||
project(examples C)
|
||||
|
||||
# Tell cmake where to find BpfObject module
|
||||
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/../../tools/cmake)
|
||||
|
||||
# Build vendored libbpf
|
||||
include(ExternalProject)
|
||||
ExternalProject_Add(libbpf
|
||||
PREFIX libbpf
|
||||
SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../../libbpf/src
|
||||
CONFIGURE_COMMAND ""
|
||||
BUILD_COMMAND make
|
||||
CC=${CMAKE_C_COMPILER}
|
||||
BUILD_STATIC_ONLY=1
|
||||
OBJDIR=${CMAKE_CURRENT_BINARY_DIR}/libbpf/libbpf
|
||||
DESTDIR=${CMAKE_CURRENT_BINARY_DIR}/libbpf
|
||||
INCLUDEDIR=
|
||||
LIBDIR=
|
||||
UAPIDIR=
|
||||
install install_uapi_headers
|
||||
BUILD_IN_SOURCE TRUE
|
||||
INSTALL_COMMAND ""
|
||||
STEP_TARGETS build
|
||||
BUILD_BYPRODUCTS ${CMAKE_CURRENT_BINARY_DIR}/libbpf/libbpf.a
|
||||
)
|
||||
|
||||
ExternalProject_Add(bpftool
|
||||
PREFIX bpftool
|
||||
SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../../bpftool/src
|
||||
CONFIGURE_COMMAND ""
|
||||
BUILD_COMMAND make bootstrap
|
||||
OUTPUT=${CMAKE_CURRENT_BINARY_DIR}/bpftool/
|
||||
BUILD_IN_SOURCE TRUE
|
||||
INSTALL_COMMAND ""
|
||||
STEP_TARGETS build
|
||||
)
|
||||
|
||||
find_program(CARGO_EXISTS cargo)
|
||||
if(CARGO_EXISTS)
|
||||
if(CMAKE_CROSSCOMPILING)
|
||||
# Determine target triple
|
||||
if(CMAKE_SYSTEM_NAME MATCHES "Linux")
|
||||
if(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64")
|
||||
set(CARGO_TARGET "x86_64-unknown-linux-gnu")
|
||||
elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64")
|
||||
set(CARGO_TARGET "aarch64-unknown-linux-gnu")
|
||||
else()
|
||||
message(FATAL_ERROR "Unsupported processor for Linux: ${CMAKE_SYSTEM_PROCESSOR}")
|
||||
endif()
|
||||
|
||||
if(CMAKE_CXX_COMPILER)
|
||||
set(RUST_LINKER ${CMAKE_CXX_COMPILER})
|
||||
else()
|
||||
set(RUST_LINKER ${CMAKE_C_COMPILER})
|
||||
endif()
|
||||
else()
|
||||
message((FATAL_ERROR "Unsupported platform: ${CMAKE_SYSTEM_NAME}"))
|
||||
endif()
|
||||
|
||||
ExternalProject_Add(blazesym
|
||||
PREFIX blazesym
|
||||
SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../../blazesym
|
||||
CONFIGURE_COMMAND ""
|
||||
BUILD_COMMAND ${CMAKE_COMMAND} -E env
|
||||
RUSTFLAGS=-C\ linker=${RUST_LINKER}
|
||||
cargo build --package=blazesym-c --release --target=${CARGO_TARGET}
|
||||
BUILD_IN_SOURCE TRUE
|
||||
INSTALL_COMMAND ""
|
||||
STEP_TARGETS build
|
||||
)
|
||||
else() # Host
|
||||
ExternalProject_Add(blazesym
|
||||
PREFIX blazesym
|
||||
SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../../blazesym
|
||||
CONFIGURE_COMMAND ""
|
||||
BUILD_COMMAND
|
||||
cargo build --package=blazesym-c --release
|
||||
BUILD_IN_SOURCE TRUE
|
||||
INSTALL_COMMAND ""
|
||||
STEP_TARGETS build
|
||||
)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# Set BpfObject input parameters -- note this is usually not necessary unless
|
||||
# you're in a highly vendored environment (like libbpf-bootstrap)
|
||||
if(${CMAKE_SYSTEM_PROCESSOR} MATCHES "x86_64")
|
||||
set(ARCH "x86")
|
||||
elseif(${CMAKE_SYSTEM_PROCESSOR} MATCHES "arm")
|
||||
set(ARCH "arm")
|
||||
elseif(${CMAKE_SYSTEM_PROCESSOR} MATCHES "aarch64")
|
||||
set(ARCH "arm64")
|
||||
elseif(${CMAKE_SYSTEM_PROCESSOR} MATCHES "ppc64le")
|
||||
set(ARCH "powerpc")
|
||||
elseif(${CMAKE_SYSTEM_PROCESSOR} MATCHES "mips")
|
||||
set(ARCH "mips")
|
||||
elseif(${CMAKE_SYSTEM_PROCESSOR} MATCHES "riscv64")
|
||||
set(ARCH "riscv")
|
||||
elseif(${CMAKE_SYSTEM_PROCESSOR} MATCHES "loongarch64")
|
||||
set(ARCH "loongarch")
|
||||
endif()
|
||||
|
||||
set(BPFOBJECT_BPFTOOL_EXE ${CMAKE_CURRENT_BINARY_DIR}/bpftool/bootstrap/bpftool)
|
||||
set(BPFOBJECT_VMLINUX_H ${CMAKE_CURRENT_SOURCE_DIR}/../../vmlinux.h/include/${ARCH}/vmlinux.h)
|
||||
set(LIBBPF_INCLUDE_DIRS ${CMAKE_CURRENT_BINARY_DIR}/libbpf)
|
||||
set(LIBBPF_LIBRARIES ${CMAKE_CURRENT_BINARY_DIR}/libbpf/libbpf.a)
|
||||
find_package(BpfObject REQUIRED)
|
||||
|
||||
# Create an executable for each application
|
||||
file(GLOB apps *.bpf.c)
|
||||
if(NOT CARGO_EXISTS)
|
||||
list(REMOVE_ITEM apps ${CMAKE_CURRENT_SOURCE_DIR}/profile.bpf.c)
|
||||
endif()
|
||||
foreach(app ${apps})
|
||||
get_filename_component(app_stem ${app} NAME_WE)
|
||||
|
||||
# Build object skeleton and depend skeleton on libbpf build
|
||||
bpf_object(${app_stem} ${app_stem}.bpf.c)
|
||||
add_dependencies(${app_stem}_skel libbpf bpftool)
|
||||
|
||||
add_executable(${app_stem} ${app_stem}.c)
|
||||
target_link_libraries(${app_stem} ${app_stem}_skel)
|
||||
if(${app_stem} STREQUAL profile)
|
||||
target_include_directories(${app_stem} PRIVATE
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/../../blazesym/capi/include)
|
||||
target_link_libraries(${app_stem}
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/../../blazesym/target/${CARGO_TARGET}/release/libblazesym_c.a -lpthread -lrt -ldl)
|
||||
add_dependencies(${app_stem} blazesym)
|
||||
endif()
|
||||
endforeach()
|
||||
Reference in New Issue
Block a user