diff --git a/examples/c/CMakeLists.txt b/examples/c/CMakeLists.txt index de3ff164..bc675e03 100644 --- a/examples/c/CMakeLists.txt +++ b/examples/c/CMakeLists.txt @@ -13,6 +13,7 @@ ExternalProject_Add(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 @@ -38,15 +39,49 @@ ExternalProject_Add(bpftool find_program(CARGO_EXISTS cargo) if(CARGO_EXISTS) - 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 - ) + 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 @@ -91,6 +126,7 @@ foreach(app ${apps}) target_include_directories(${app_stem} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/../../blazesym/capi/include) target_link_libraries(${app_stem} - ${CMAKE_CURRENT_SOURCE_DIR}/../../blazesym/target/release/libblazesym_c.a -lpthread -lrt -ldl) + ${CMAKE_CURRENT_SOURCE_DIR}/../../blazesym/target/${CARGO_TARGET}/release/libblazesym_c.a -lpthread -lrt -ldl) + add_dependencies(${app_stem} blazesym) endif() endforeach() diff --git a/tools/cmake/FindBpfObject.cmake b/tools/cmake/FindBpfObject.cmake index 27290436..d48a85ae 100644 --- a/tools/cmake/FindBpfObject.cmake +++ b/tools/cmake/FindBpfObject.cmake @@ -139,18 +139,20 @@ else() endif() # Get target arch -execute_process(COMMAND uname -m - COMMAND sed -e "s/x86_64/x86/" -e "s/aarch64/arm64/" -e "s/ppc64le/powerpc/" -e "s/mips.*/mips/" -e "s/riscv64/riscv/" - OUTPUT_VARIABLE ARCH_output - ERROR_VARIABLE ARCH_error - RESULT_VARIABLE ARCH_result - OUTPUT_STRIP_TRAILING_WHITESPACE) -if(${ARCH_result} EQUAL 0) - set(ARCH ${ARCH_output}) - message(STATUS "BPF target arch: ${ARCH}") +if(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64") + set(ARCH x86) +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) else() - message(FATAL_ERROR "Failed to determine target architecture: ${ARCH_error}") + set(ARCH ${CMAKE_SYSTEM_PROCESSOR}) endif() +message(STATUS "BPF target arch: ${ARCH}") # Public macro macro(bpf_object name input)