libbpf: Build as PIC and statically link into libdwarves

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>
This commit is contained in:
Andrii Nakryiko 2019-02-18 19:02:08 -08:00 committed by Arnaldo Carvalho de Melo
parent cf4f3e282d
commit e6c59bd11d
1 changed files with 5 additions and 10 deletions

View File

@ -72,24 +72,19 @@ if (NOT HAVE_REALLOCARRAY_SUPPORT)
endif()
file(GLOB libbpf_sources "lib/bpf/src/*.c")
add_library(bpf-static STATIC ${libbpf_sources})
set_target_properties(bpf-static PROPERTIES OUTPUT_NAME bpf)
target_include_directories(bpf-static PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}/lib/bpf/include
${CMAKE_CURRENT_SOURCE_DIR}/lib/bpf/include/uapi)
add_library(bpf-shared SHARED ${libbpf_sources})
set_target_properties(bpf-shared PROPERTIES OUTPUT_NAME bpf)
target_include_directories(bpf-shared PRIVATE
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})
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} bpf-shared)
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})