Skip to content

Commit

Permalink
Add proper debian build support
Browse files Browse the repository at this point in the history
The cmake based build system is nice, but not quite production ready.
Move to the more painful but featureful debuild style. This is one step
towards an upstreamable package.

Rename libbpfprog (ugh) to libbcc.

Split out python-bpf and libbcc-examples into separate packages that
depend on libbcc.

Signed-off-by: Brenden Blanco <[email protected]>
  • Loading branch information
Brenden Blanco committed Aug 26, 2015
1 parent 0c7ab87 commit bd8fea4
Show file tree
Hide file tree
Showing 18 changed files with 85 additions and 36 deletions.
14 changes: 0 additions & 14 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -49,17 +49,3 @@ add_subdirectory(scripts)
add_subdirectory(examples)
add_subdirectory(src)
add_subdirectory(tests)

set(CPACK_PACKAGE_NAME "libbcc")
set(CPACK_PACKAGE_VERSION "${REVISION}")
set(CPACK_PACKAGE_CONTACT "Brenden Blanco <[email protected]")
if(EXISTS "/etc/redhat-release")
set(CPACK_GENERATOR "RPM")
else()
set(CPACK_GENERATOR "DEB")
endif()
set(CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}")
set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE "amd64")
set(CPACK_DEBIAN_PACKAGE_DEPENDS "libc6, libstdc++6, python, make, gcc")
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Shared Library for BPF Compiler Collection (BCC)")
include(CPack)
11 changes: 6 additions & 5 deletions Dockerfile.ubuntu
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,12 @@ RUN printf "deb http:https://llvm.org/apt/trusty/ llvm-toolchain-trusty main\ndeb-src
RUN wget -q -O - http:https://llvm.org/apt/llvm-snapshot.gpg.key | apt-key add -
RUN apt-get -y update

RUN apt-get -y install bison build-essential cmake flex git libedit-dev python zlib1g-dev
RUN apt-get -y install libllvm3.7 llvm-3.7-dev libclang-3.7-dev
RUN apt-get -y install bison build-essential cmake debhelper devscripts flex git libedit-dev python zlib1g-dev
RUN apt-get -y install libllvm3.8 llvm-3.8-dev libclang-3.8-dev

RUN mkdir -p /root/bcc/build
COPY ./ /root/bcc/
WORKDIR /root/bcc/build
RUN cmake .. -DCMAKE_INSTALL_PREFIX=/usr
RUN make -j$(grep -c ^process /proc/cpuinfo) package
WORKDIR /root
RUN tar zcf bcc_0.1.1.orig.tar.gz bcc/
WORKDIR /root/bcc
RUN DEB_BUILD_OPTIONS="nocheck parallel=4" debuild -us -uc
4 changes: 2 additions & 2 deletions FAQ.txt
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,9 @@ A: Install pyroute2:
cd pyroute2; sudo make install

Q: hello_world.py fails with:
OSError: libbpfprog.so: cannot open shared object file: No such file or directory
OSError: libbcc.so: cannot open shared object file: No such file or directory
A: make sure to 'make install' and add the directory
where libbpfprog.so was installed into your LD_LIBRARY_PATH
where libbcc.so was installed into your LD_LIBRARY_PATH
export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH

Q: hello_world.py fails with:
Expand Down
5 changes: 5 additions & 0 deletions debian/changelog
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
bcc (0.1.5-1) unstable; urgency=low

* Initial release

-- Brenden Blanco <[email protected]> Mon, 06 Jul 2015 18:04:28 +0000
1 change: 1 addition & 0 deletions debian/compat
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
9
24 changes: 24 additions & 0 deletions debian/control
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
Source: bcc
Maintainer: Brenden Blanco <[email protected]>
Section: misc
Priority: optional
Standards-Version: 3.9.5
Build-Depends: debhelper (>= 9), cmake, libllvm3.8, llvm-3.8-dev, libclang-3.8-dev
Homepage: https://github.com/iovisor/bcc

Package: libbcc
Architecture: amd64
Depends: libc6, libstdc++6, make, gcc
Description: Shared Library for BPF Compiler Collection (BCC)
Shared Library for BPF Compiler Collection to control BPF programs
from userspace.

Package: libbcc-examples
Architecture: any
Depends: libbcc
Description: Shared Library for BPF Compiler Collection (BCC)

Package: python-bpf
Architecture: all
Depends: libbcc, python
Description: Python wrappers for BPF Compiler Collection (BCC)
7 changes: 7 additions & 0 deletions debian/copyright
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
Format: http:https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
Upstream-Name: bcc
Source: https://github.com/iovisor/bcc

Files: *
Copyright: 2015 PLUMgrid, Inc.
License: Apache-2.0
3 changes: 3 additions & 0 deletions debian/docs
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
FAQ.txt
LICENSE.txt
README.md
1 change: 1 addition & 0 deletions debian/libbcc-examples.install
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
usr/share/bcc/examples/*
3 changes: 3 additions & 0 deletions debian/libbcc.install
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
usr/include/bcc/*
usr/lib/libbcc* /usr/lib/x86_64-linux-gnu/
usr/share/bcc/include/*
2 changes: 2 additions & 0 deletions debian/python-bpf.install
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
usr/lib/python*
usr/bin/bpf-run
8 changes: 8 additions & 0 deletions debian/rules
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
#!/usr/bin/make -f
# -*- makefile -*-

# Uncomment this to turn on verbose mode.
#export DH_VERBOSE=1

%:
dh $@ --buildsystem=cmake --parallel
1 change: 1 addition & 0 deletions debian/source/format
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
3.0 (quilt)
4 changes: 2 additions & 2 deletions scripts/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -50,8 +50,8 @@ Reconnect and run the final step, building and testing bcc.
[root@bpf-demo ~]# bcc-setup
Cloning into 'bcc'...
...
Linking CXX shared library libbpfprog.so
[100%] Built target bpfprog
Linking CXX shared library libcc.so
[100%] Built target bcc
...
Running tests...
Test project /root/bcc/build
Expand Down
22 changes: 14 additions & 8 deletions src/cc/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ include_directories(${LLVM_INCLUDE_DIRS})
# todo: if check for kernel version
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/compat)
add_definitions(${LLVM_DEFINITIONS})
configure_file(libbpfprog.pc.in ${CMAKE_CURRENT_BINARY_DIR}/libbpfprog.pc @ONLY)
configure_file(libbcc.pc.in ${CMAKE_CURRENT_BINARY_DIR}/libbcc.pc @ONLY)

# prune unused llvm static library stuff when linking into the new .so
set(CMAKE_SHARED_LINKER_FLAGS "-Wl,--exclude-libs=ALL")
Expand All @@ -29,7 +29,8 @@ endif()
# tell the shared library where it is being installed so it can find shared header files
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DBCC_INSTALL_PREFIX='\"${CMAKE_INSTALL_PREFIX}\"'")

add_library(bpfprog SHARED bpf_common.cc bpf_module.cc libbpf.c)
add_library(bcc SHARED bpf_common.cc bpf_module.cc libbpf.c)
set_target_properties(bcc PROPERTIES VERSION ${REVISION} SOVERSION 0)

# BPF is still experimental otherwise it should be available
#llvm_map_components_to_libnames(llvm_libs bpf mcjit irreader passes)
Expand All @@ -41,14 +42,19 @@ set(clang_libs ${libclangFrontend} ${libclangSerialization} ${libclangDriver} ${
${libclangAST} ${libclangLex} ${libclangBasic})

# Link against LLVM libraries
target_link_libraries(bpfprog b_frontend clang_frontend ${clang_libs} ${llvm_libs} LLVMBPFCodeGen)
target_link_libraries(bcc b_frontend clang_frontend ${clang_libs} ${llvm_libs} LLVMBPFCodeGen)

install(TARGETS bpfprog LIBRARY DESTINATION lib${LIBSUFFIX})
install(DIRECTORY export/ DESTINATION share/bcc/include/bcc
install(TARGETS bcc LIBRARY COMPONENT libbcc
DESTINATION lib${LIBSUFFIX})
install(DIRECTORY export/ COMPONENT libbcc
DESTINATION share/bcc/include/bcc
FILES_MATCHING PATTERN "*.h")
install(FILES bpf_common.h ../libbpf.h DESTINATION include/bcc)
install(DIRECTORY compat/linux/ DESTINATION include/bcc/compat/linux
install(FILES bpf_common.h ../libbpf.h COMPONENT libbcc
DESTINATION include/bcc)
install(DIRECTORY compat/linux/ COMPONENT libbcc
DESTINATION include/bcc/compat/linux
FILES_MATCHING PATTERN "*.h")
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/libbpfprog.pc DESTINATION lib${LIBSUFFIX}/pkgconfig)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/libbcc.pc COMPONENT libbcc
DESTINATION lib${LIBSUFFIX}/pkgconfig)

add_subdirectory(frontends)
6 changes: 3 additions & 3 deletions src/cc/libbpfprog.pc.in → src/cc/libbcc.pc.in
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,9 @@ datarootdir=${prefix}/share

compatdir=${includedir}/bcc/compat

Name: libbpfprog
Name: libbcc
Version: @REVISION@
Description: BPF Program library
Description: BCC Program library
Requires:
Libs: -L${libdir} -lbpfprog
Libs: -L${libdir} -lbcc
Cflags: -I${includedir} -I${compatdir}
3 changes: 2 additions & 1 deletion src/python/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -22,4 +22,5 @@ if(EXISTS "/etc/debian_version")
set(PYTHON_FLAGS "${PYTHON_FLAGS} --install-layout deb")
endif()
install(CODE "execute_process(COMMAND python setup.py install -f ${PYTHON_FLAGS}
--prefix=${CMAKE_INSTALL_PREFIX} WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})")
--prefix=${CMAKE_INSTALL_PREFIX} WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})"
COMPONENT python)
2 changes: 1 addition & 1 deletion src/python/bpf/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
import sys
basestring = (unicode if sys.version_info[0] < 3 else str)

lib = ct.CDLL("libbpfprog.so")
lib = ct.CDLL("libbcc.so")

# keep in sync with bpf_common.h
lib.bpf_module_create_b.restype = ct.c_void_p
Expand Down

0 comments on commit bd8fea4

Please sign in to comment.