Skip to content

Commit

Permalink
fix(cmake): add zig workarounds for libelf and grpc cmake modules.
Browse files Browse the repository at this point in the history
Signed-off-by: Federico Di Pierro <[email protected]>
  • Loading branch information
FedeDP committed Sep 11, 2024
1 parent 215db2d commit e63d212
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 4 deletions.
12 changes: 12 additions & 0 deletions cmake/modules/grpc.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -174,6 +174,17 @@ else()
"${GRPC_SRC}/third_party/abseil-cpp/absl/random/libabsl_random_seed_gen_exception.a"
)

set(GRPC_PATCH_CMD "")
# Zig workaround:
# Add a PATCH_COMMAND to grpc cmake
## to fixup emitted -march by abseil-cpp cmake module,
## making it use a name understood by zig for arm64.
## See https://github.com/abseil/abseil-cpp/blob/master/absl/copts/GENERATED_AbseilCopts.cmake#L226.
if (CMAKE_C_COMPILER MATCHES "zig")
message(STATUS "Enabling zig workaround for abseil-cpp")
set(GRPC_PATCH_CMD sh -c "sed -i 's/armv8-a/cortex_a57/g' ${GRPC_SRC}/third_party/abseil-cpp/absl/copts/GENERATED_AbseilCopts.cmake")
endif()

ExternalProject_Add(
grpc
PREFIX "${PROJECT_BINARY_DIR}/grpc-prefix"
Expand Down Expand Up @@ -223,6 +234,7 @@ else()
# Keep installation files into the local ${GRPC_INSTALL_DIR} since here is the case when
# we are embedding gRPC
UPDATE_COMMAND ""
PATCH_COMMAND ${GRPC_PATCH_CMD}
INSTALL_COMMAND DESTDIR= ${CMAKE_MAKE_PROGRAM} install
)
install(
Expand Down
22 changes: 18 additions & 4 deletions cmake/modules/libelf.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -25,15 +25,29 @@ elseif(NOT USE_BUNDLED_LIBELF)
else()
set(LIBELF_LIB_SUFFIX ${CMAKE_STATIC_LIBRARY_SUFFIX})
endif()
find_library(LIBELF_LIB NAMES libelf${LIBELF_LIB_SUFFIX})
# Zig workaround:
# since it won't look up in /usr/lib/..., add an HINT
if (CMAKE_C_COMPILER MATCHES "zig")
find_library(LIBELF_LIB NAMES libelf${LIBELF_LIB_SUFFIX} HINTS /usr/lib/${CMAKE_SYSTEM_PROCESSOR}-linux-gnu/)
else()
find_library(LIBELF_LIB NAMES libelf${LIBELF_LIB_SUFFIX})
endif()
if(LIBELF_LIB)
# Zig workaround:
# avoid include whole /usr/include because it would
# include also system glibc headers breaking the build since
# we are targeting the build against our boostrapped zig.
if (CMAKE_C_COMPILER MATCHES "zig")
message(STATUS "Enabling zig workaround for libelf")
configure_file(${LIBELF_INCLUDE}/libelf.h libelf/libelf.h COPYONLY)
configure_file(${LIBELF_INCLUDE}/elf.h libelf/elf.h COPYONLY)
configure_file(${LIBELF_INCLUDE}/gelf.h libelf/gelf.h COPYONLY)
set(LIBELF_INCLUDE ${CMAKE_CURRENT_BINARY_DIR}/libelf)
endif()
message(STATUS "Found LIBELF: include: ${LIBELF_INCLUDE}, lib: ${LIBELF_LIB}")
else()
message(FATAL_ERROR "Couldn't find system libelf")
endif()
# We add a custom target, in this way we can always depend on `libelf` without distinguishing
# between "bundled" and "not-bundled" case
add_custom_target(libelf)
else()
if(BUILD_SHARED_LIBS)
set(LIBELF_LIB_SUFFIX ${CMAKE_SHARED_LIBRARY_SUFFIX})
Expand Down

0 comments on commit e63d212

Please sign in to comment.