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 <bblanco@plumgrid.com>
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 <bblanco@plumgrid.com")
-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)
RUN wget -q -O - http://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
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:
--- /dev/null
+bcc (0.1.5-1) unstable; urgency=low
+
+ * Initial release
+
+ -- Brenden Blanco <bblanco@plumgrid.com> Mon, 06 Jul 2015 18:04:28 +0000
--- /dev/null
+Source: bcc
+Maintainer: Brenden Blanco <bblanco@plumgrid.com>
+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)
--- /dev/null
+Format: http://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
--- /dev/null
+FAQ.txt
+LICENSE.txt
+README.md
--- /dev/null
+usr/share/bcc/examples/*
--- /dev/null
+usr/include/bcc/*
+usr/lib/libbcc* /usr/lib/x86_64-linux-gnu/
+usr/share/bcc/include/*
--- /dev/null
+usr/lib/python*
+usr/bin/bpf-run
--- /dev/null
+#!/usr/bin/make -f
+# -*- makefile -*-
+
+# Uncomment this to turn on verbose mode.
+#export DH_VERBOSE=1
+
+%:
+ dh $@ --buildsystem=cmake --parallel
--- /dev/null
+3.0 (quilt)
[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
# 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")
# 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)
${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)
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}
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)
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