e6c59bd11d
As libbpf is not yet widely available, it's safer to statically link it into libdwarves for now. Easiest way to define that in cmake is through OBJECT library with PIC. Committer testing: $ file build/pahole build/pahole: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=666c97e5763ac0f4c5eff229be1532f1e60195e6, with debug_info, not stripped $ ldd build/pahole linux-vdso.so.1 (0x00007ffe5fdf8000) libdwarves_reorganize.so.1 => /home/acme/git/pahole/build/libdwarves_reorganize.so.1 (0x00007f1c84fa4000) libdwarves.so.1 => /home/acme/git/pahole/build/libdwarves.so.1 (0x00007f1c84f5e000) libdw.so.1 => /lib64/libdw.so.1 (0x00007f1c84eee000) libelf.so.1 => /lib64/libelf.so.1 (0x00007f1c84ed4000) libz.so.1 => /lib64/libz.so.1 (0x00007f1c84eba000) libc.so.6 => /lib64/libc.so.6 (0x00007f1c84cf4000) libdl.so.2 => /lib64/libdl.so.2 (0x00007f1c84cec000) liblzma.so.5 => /lib64/liblzma.so.5 (0x00007f1c84cc3000) libbz2.so.1 => /lib64/libbz2.so.1 (0x00007f1c84cb0000) /lib64/ld-linux-x86-64.so.2 (0x00007f1c84fad000) libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f1c84c8e000) $ $ nm build/libdwarves.so.1.0.0 | grep b[pt]f__ 0000000000028aae T btf__dedup 0000000000027d44 T btf__fd 0000000000027a37 T btf__find_by_name 0000000000027ad9 T btf__free 0000000000027da8 T btf__get_from_id 0000000000027f6c T btf__get_map_kv_tids 0000000000027739 T btf__get_nr_types 0000000000027d55 T btf__get_raw_data 0000000000027c2e T btf__load 0000000000027d77 T btf__name_by_offset 0000000000027b36 T btf__new 00000000000277eb T btf__resolve_size 0000000000027960 T btf__resolve_type 000000000002774a T btf__type_by_id $ Signed-off-by: Andrii Nakryiko <andriin@fb.com> Suggested-by: Arnaldo Carvalho de Melo <acme@redhat.com> Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com> Cc: Alexei Starovoitov <ast@fb.com> Cc: Jiri Olsa <jolsa@kernel.org> Cc: Namhyung Kim <namhyung@kernel.org> Cc: Wang Nan <wangnan0@huawei.com> Cc: Yonghong Song <yhs@fb.com> Cc: bpf@vger.kernel.org Cc: dwarves@vger.kernel.org Cc: kernel-team@fb.com [ split from a larger patch ] Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
152 lines
5.7 KiB
CMake
152 lines
5.7 KiB
CMake
project(pahole C)
|
|
cmake_minimum_required(VERSION 2.8.8)
|
|
cmake_policy(SET CMP0005 NEW)
|
|
|
|
INCLUDE_DIRECTORIES( ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR} )
|
|
|
|
# Try to parse this later, Helio just showed me a KDE4 example to support
|
|
# x86-64 builds.
|
|
# the following are directories where stuff will be installed to
|
|
set(__LIB "" CACHE STRING "Define suffix of directory name (32/64)" )
|
|
|
|
macro(_set_fancy _var _value _comment)
|
|
if (NOT DEFINED ${_var})
|
|
set(${_var} ${_value})
|
|
else (NOT DEFINED ${_var})
|
|
set(${_var} "${${_var}}" CACHE PATH "${_comment}")
|
|
endif (NOT DEFINED ${_var})
|
|
endmacro(_set_fancy)
|
|
|
|
# where to look first for cmake modules,
|
|
# before ${CMAKE_ROOT}/Modules/ is checked
|
|
set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake/modules")
|
|
|
|
if (NOT CMAKE_BUILD_TYPE)
|
|
set (CMAKE_BUILD_TYPE Debug CACHE STRING
|
|
"Choose the type of build, options are: None Debug Release RelWithDebInfo MinSizeRel."
|
|
FORCE)
|
|
endif (NOT CMAKE_BUILD_TYPE)
|
|
|
|
add_definitions(-D_GNU_SOURCE -DDWARVES_VERSION="v1.12")
|
|
find_package(DWARF REQUIRED)
|
|
find_package(ZLIB REQUIRED)
|
|
|
|
# make sure git submodule(s) are checked out
|
|
find_package(Git QUIET)
|
|
if(GIT_FOUND AND EXISTS "${PROJECT_SOURCE_DIR}/.git")
|
|
# Update submodules as needed
|
|
option(GIT_SUBMODULE "Check submodules during build" ON)
|
|
if(GIT_SUBMODULE)
|
|
message(STATUS "Submodule update")
|
|
execute_process(COMMAND ${GIT_EXECUTABLE} submodule update --init --recursive
|
|
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
|
|
RESULT_VARIABLE GIT_SUBMOD_RESULT)
|
|
if(NOT GIT_SUBMOD_RESULT EQUAL "0")
|
|
message(FATAL_ERROR "git submodule update --init failed with ${GIT_SUBMOD_RESULT}, please checkout submodules")
|
|
else()
|
|
message(STATUS "Submodule update - done")
|
|
endif()
|
|
endif()
|
|
endif()
|
|
if(NOT EXISTS "${PROJECT_SOURCE_DIR}/lib/bpf/src/btf.h")
|
|
message(FATAL_ERROR "The submodules were not downloaded! GIT_SUBMODULE was turned off or failed. Please update submodules and try again.")
|
|
endif()
|
|
|
|
_set_fancy(LIB_INSTALL_DIR "${EXEC_INSTALL_PREFIX}${CMAKE_INSTALL_PREFIX}/${__LIB}" "libdir")
|
|
|
|
# libbpf uses reallocarray, which is not available in all versions of glibc
|
|
# libbpf's include/tools/libc_compat.h provides implementation, but needs
|
|
# COMPACT_NEED_REALLOCARRAY to be set
|
|
INCLUDE(CheckCSourceCompiles)
|
|
CHECK_C_SOURCE_COMPILES(
|
|
"
|
|
#define _GNU_SOURCE
|
|
#include <stdlib.h>
|
|
int main(void)
|
|
{
|
|
return !!reallocarray(NULL, 1, 1);
|
|
}
|
|
" HAVE_REALLOCARRAY_SUPPORT)
|
|
if (NOT HAVE_REALLOCARRAY_SUPPORT)
|
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DCOMPAT_NEED_REALLOCARRAY")
|
|
endif()
|
|
|
|
file(GLOB libbpf_sources "lib/bpf/src/*.c")
|
|
add_library(bpf OBJECT ${libbpf_sources})
|
|
set_property(TARGET bpf PROPERTY POSITION_INDEPENDENT_CODE 1)
|
|
target_include_directories(bpf PRIVATE
|
|
${CMAKE_CURRENT_SOURCE_DIR}/lib/bpf/include
|
|
${CMAKE_CURRENT_SOURCE_DIR}/lib/bpf/include/uapi)
|
|
|
|
set(dwarves_LIB_SRCS dwarves.c dwarves_fprintf.c gobuffer strings
|
|
ctf_encoder.c ctf_loader.c libctf.c btf_encoder.c btf_loader.c libbtf.c
|
|
dwarf_loader.c dutil.c elf_symtab.c rbtree.c)
|
|
add_library(dwarves SHARED ${dwarves_LIB_SRCS} $<TARGET_OBJECTS:bpf>)
|
|
set_target_properties(dwarves PROPERTIES VERSION 1.0.0 SOVERSION 1)
|
|
set_target_properties(dwarves PROPERTIES INTERFACE_LINK_LIBRARIES "")
|
|
target_link_libraries(dwarves ${DWARF_LIBRARIES} ${ZLIB_LIBRARIES})
|
|
|
|
set(dwarves_emit_LIB_SRCS dwarves_emit.c)
|
|
add_library(dwarves_emit SHARED ${dwarves_emit_LIB_SRCS})
|
|
set_target_properties(dwarves_emit PROPERTIES VERSION 1.0.0 SOVERSION 1)
|
|
target_link_libraries(dwarves_emit dwarves)
|
|
|
|
set(dwarves_reorganize_LIB_SRCS dwarves_reorganize.c)
|
|
add_library(dwarves_reorganize SHARED ${dwarves_reorganize_LIB_SRCS})
|
|
set_target_properties(dwarves_reorganize PROPERTIES VERSION 1.0.0 SOVERSION 1)
|
|
target_link_libraries(dwarves_reorganize dwarves)
|
|
|
|
set(codiff_SRCS codiff.c)
|
|
add_executable(codiff ${codiff_SRCS})
|
|
target_link_libraries(codiff dwarves)
|
|
|
|
set(ctracer_SRCS ctracer.c)
|
|
add_executable(ctracer ${ctracer_SRCS})
|
|
target_link_libraries(ctracer dwarves dwarves_emit dwarves_reorganize ${ELF_LIBRARY})
|
|
|
|
set(dtagnames_SRCS dtagnames.c)
|
|
add_executable(dtagnames ${dtagnames_SRCS})
|
|
target_link_libraries(dtagnames dwarves)
|
|
|
|
set(pahole_SRCS pahole.c)
|
|
add_executable(pahole ${pahole_SRCS})
|
|
target_link_libraries(pahole dwarves dwarves_reorganize)
|
|
|
|
set(pdwtags_SRCS pdwtags.c)
|
|
add_executable(pdwtags ${pdwtags_SRCS})
|
|
target_link_libraries(pdwtags dwarves)
|
|
|
|
set(pglobal_SRCS pglobal.c)
|
|
add_executable(pglobal ${pglobal_SRCS})
|
|
target_link_libraries(pglobal dwarves)
|
|
|
|
set(pfunct_SRCS pfunct.c)
|
|
add_executable(pfunct ${pfunct_SRCS})
|
|
target_link_libraries(pfunct dwarves dwarves_emit ${ELF_LIBRARY})
|
|
|
|
set(prefcnt_SRCS prefcnt.c)
|
|
add_executable(prefcnt ${prefcnt_SRCS})
|
|
target_link_libraries(prefcnt dwarves)
|
|
|
|
set(scncopy_SRCS scncopy.c elfcreator.c)
|
|
add_executable(scncopy ${scncopy_SRCS})
|
|
target_link_libraries(scncopy dwarves ${ELF_LIBRARY})
|
|
|
|
set(syscse_SRCS syscse.c)
|
|
add_executable(syscse ${syscse_SRCS})
|
|
target_link_libraries(syscse dwarves)
|
|
|
|
install(TARGETS codiff ctracer dtagnames pahole pdwtags
|
|
pfunct pglobal prefcnt scncopy syscse RUNTIME DESTINATION
|
|
${CMAKE_INSTALL_PREFIX}/bin)
|
|
install(TARGETS dwarves LIBRARY DESTINATION ${LIB_INSTALL_DIR})
|
|
install(TARGETS dwarves dwarves_emit dwarves_reorganize LIBRARY DESTINATION ${LIB_INSTALL_DIR})
|
|
install(FILES dwarves.h dwarves_emit.h dwarves_reorganize.h
|
|
dutil.h gobuffer.h list.h rbtree.h strings.h
|
|
DESTINATION ${CMAKE_INSTALL_PREFIX}/include/dwarves/)
|
|
install(FILES man-pages/pahole.1 DESTINATION ${CMAKE_INSTALL_PREFIX}/share/man/man1/)
|
|
install(PROGRAMS ostra/ostra-cg DESTINATION ${CMAKE_INSTALL_PREFIX}/bin)
|
|
install(FILES ostra/python/ostra.py DESTINATION ${CMAKE_INSTALL_PREFIX}/share/dwarves/runtime/python)
|
|
install(FILES lib/Makefile lib/ctracer_relay.c lib/ctracer_relay.h lib/linux.blacklist.cu
|
|
DESTINATION ${CMAKE_INSTALL_PREFIX}/share/dwarves/runtime)
|