cmake_minimum_required(VERSION 4.0) project(pylibbpf) add_subdirectory(pybind11) pybind11_add_module(pylibbpf src/main.cpp) # Build vendored libbpf include(ExternalProject) ExternalProject_Add( libbpf PREFIX libbpf SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/libbpf/src CONFIGURE_COMMAND "" BUILD_COMMAND make 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) 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(LIBBPF_INCLUDE_DIRS ${CMAKE_CURRENT_BINARY_DIR}/libbpf) set(LIBBPF_LIBRARIES ${CMAKE_CURRENT_BINARY_DIR}/libbpf/libbpf.a) # EXAMPLE_VERSION_INFO is defined by setup.py and passed into the C++ code as a # define (VERSION_INFO) here. target_compile_definitions(pylibbpf PRIVATE VERSION_INFO=${EXAMPLE_VERSION_INFO})