1*387f9dfdSAndroid Build Coastguard Worker# Copyright (c) PLUMgrid, Inc. 2*387f9dfdSAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License") 3*387f9dfdSAndroid Build Coastguard Worker 4*387f9dfdSAndroid Build Coastguard Workerinclude_directories(${CMAKE_CURRENT_BINARY_DIR}) 5*387f9dfdSAndroid Build Coastguard Workerinclude_directories(${CMAKE_CURRENT_SOURCE_DIR}) 6*387f9dfdSAndroid Build Coastguard Worker# to be removed 7*387f9dfdSAndroid Build Coastguard Workerinclude_directories(${CMAKE_CURRENT_BINARY_DIR}/frontends/b) 8*387f9dfdSAndroid Build Coastguard Workerinclude_directories(${CMAKE_CURRENT_SOURCE_DIR}/frontends/b) 9*387f9dfdSAndroid Build Coastguard Workerinclude_directories(${CMAKE_CURRENT_SOURCE_DIR}/frontends/clang) 10*387f9dfdSAndroid Build Coastguard Workerinclude_directories(${LLVM_INCLUDE_DIRS}) 11*387f9dfdSAndroid Build Coastguard Workerinclude_directories(${LIBELF_INCLUDE_DIRS}) 12*387f9dfdSAndroid Build Coastguard Workerif (LIBLZMA_FOUND) 13*387f9dfdSAndroid Build Coastguard Worker include_directories(${LIBLZMA_INCLUDE_DIRS}) 14*387f9dfdSAndroid Build Coastguard Workerendif(LIBLZMA_FOUND) 15*387f9dfdSAndroid Build Coastguard Workerif (LIBDEBUGINFOD_FOUND AND ENABLE_LIBDEBUGINFOD) 16*387f9dfdSAndroid Build Coastguard Worker include_directories(${LIBDEBUGINFOD_INCLUDE_DIRS}) 17*387f9dfdSAndroid Build Coastguard Workerendif (LIBDEBUGINFOD_FOUND AND ENABLE_LIBDEBUGINFOD) 18*387f9dfdSAndroid Build Coastguard Worker# todo: if check for kernel version 19*387f9dfdSAndroid Build Coastguard Workerif (CMAKE_USE_LIBBPF_PACKAGE AND LIBBPF_FOUND) 20*387f9dfdSAndroid Build Coastguard Worker include_directories(${LIBBPF_INCLUDE_DIRS}) 21*387f9dfdSAndroid Build Coastguard Worker # create up-to-date linux/bpf.h from virtual_bpf.h (remove string wrapper); 22*387f9dfdSAndroid Build Coastguard Worker # when libbpf is built as a submodule we use its version of linux/bpf.h 23*387f9dfdSAndroid Build Coastguard Worker # so this does similar for the libbpf package, removing reliance on the 24*387f9dfdSAndroid Build Coastguard Worker # system uapi header which can be out of date. 25*387f9dfdSAndroid Build Coastguard Worker execute_process(COMMAND sh -c "cd ${CMAKE_CURRENT_SOURCE_DIR}/compat/linux && grep -ve '\\*\\*\\*\\*' virtual_bpf.h > bpf.h") 26*387f9dfdSAndroid Build Coastguard Worker include_directories(${CMAKE_CURRENT_SOURCE_DIR}/compat) 27*387f9dfdSAndroid Build Coastguard Workerelse() 28*387f9dfdSAndroid Build Coastguard Worker include_directories(${CMAKE_CURRENT_SOURCE_DIR}/libbpf/include) 29*387f9dfdSAndroid Build Coastguard Worker include_directories(${CMAKE_CURRENT_SOURCE_DIR}/libbpf/include/uapi) 30*387f9dfdSAndroid Build Coastguard Workerendif() 31*387f9dfdSAndroid Build Coastguard Worker 32*387f9dfdSAndroid Build Coastguard Worker# add_definitions has a problem parsing "-D_GLIBCXX_USE_CXX11_ABI=0", this is safer 33*387f9dfdSAndroid Build Coastguard Workerseparate_arguments(LLVM_DEFINITIONS) 34*387f9dfdSAndroid Build Coastguard Workeradd_compile_options(${LLVM_DEFINITIONS}) 35*387f9dfdSAndroid Build Coastguard Worker 36*387f9dfdSAndroid Build Coastguard Workerconfigure_file(libbcc.pc.in libbcc.pc @ONLY) 37*387f9dfdSAndroid Build Coastguard Workerconfigure_file(bcc_version.h.in bcc_version.h @ONLY) 38*387f9dfdSAndroid Build Coastguard Worker 39*387f9dfdSAndroid Build Coastguard Workerset(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC -DBCC_PROG_TAG_DIR='\"${BCC_PROG_TAG_DIR}\"'") 40*387f9dfdSAndroid Build Coastguard Workerset(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-unused-result") 41*387f9dfdSAndroid Build Coastguard Workerset(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC -Wno-unused-result") 42*387f9dfdSAndroid Build Coastguard Worker 43*387f9dfdSAndroid Build Coastguard Workerif (NOT HAVE_REALLOCARRAY_SUPPORT) 44*387f9dfdSAndroid Build Coastguard Worker set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DCOMPAT_NEED_REALLOCARRAY") 45*387f9dfdSAndroid Build Coastguard Workerendif() 46*387f9dfdSAndroid Build Coastguard Worker 47*387f9dfdSAndroid Build Coastguard Workerinclude(static_libstdc++) 48*387f9dfdSAndroid Build Coastguard Worker 49*387f9dfdSAndroid Build Coastguard Workerif(LIBBPF_INCLUDE_DIR) 50*387f9dfdSAndroid Build Coastguard Worker # Add user libbpf include and notify compilation 51*387f9dfdSAndroid Build Coastguard Worker # that we are using external libbpf. It's checked 52*387f9dfdSAndroid Build Coastguard Worker # in src/cc/libbpf.h and proper files are included. 53*387f9dfdSAndroid Build Coastguard Worker include_directories(${LIBBPF_INCLUDE_DIR}) 54*387f9dfdSAndroid Build Coastguard Worker add_definitions(-DHAVE_EXTERNAL_LIBBPF) 55*387f9dfdSAndroid Build Coastguard Workerendif() 56*387f9dfdSAndroid Build Coastguard Worker 57*387f9dfdSAndroid Build Coastguard Workerif(NOT CMAKE_USE_LIBBPF_PACKAGE) 58*387f9dfdSAndroid Build Coastguard Worker if(LIBBPF_FOUND) 59*387f9dfdSAndroid Build Coastguard Worker set(extract_dir ${CMAKE_CURRENT_BINARY_DIR}/libbpf_a_extract) 60*387f9dfdSAndroid Build Coastguard Worker execute_process(COMMAND sh -c "mkdir -p ${extract_dir} && cd ${extract_dir} && ${CMAKE_AR} x ${LIBBPF_STATIC_LIBRARIES}") 61*387f9dfdSAndroid Build Coastguard Worker file(GLOB libbpf_sources "${extract_dir}/*.o") 62*387f9dfdSAndroid Build Coastguard Worker else() 63*387f9dfdSAndroid Build Coastguard Worker file(GLOB libbpf_sources "libbpf/src/*.c") 64*387f9dfdSAndroid Build Coastguard Worker endif() 65*387f9dfdSAndroid Build Coastguard Worker 66*387f9dfdSAndroid Build Coastguard Worker set(libbpf_uapi libbpf/include/uapi/linux/) 67*387f9dfdSAndroid Build Coastguard Workerendif() 68*387f9dfdSAndroid Build Coastguard Worker 69*387f9dfdSAndroid Build Coastguard Workerset(bcc_common_sources bcc_common.cc bpf_module.cc bcc_btf.cc exported_files.cc) 70*387f9dfdSAndroid Build Coastguard Workerif (${LLVM_PACKAGE_VERSION} VERSION_EQUAL 6 OR ${LLVM_PACKAGE_VERSION} VERSION_GREATER 6) 71*387f9dfdSAndroid Build Coastguard Worker set(bcc_common_sources ${bcc_common_sources} bcc_debug.cc) 72*387f9dfdSAndroid Build Coastguard Workerendif() 73*387f9dfdSAndroid Build Coastguard Worker 74*387f9dfdSAndroid Build Coastguard Workerif(ENABLE_LLVM_NATIVECODEGEN) 75*387f9dfdSAndroid Build Coastguard Workerset(bcc_common_sources ${bcc_common_sources} bpf_module_rw_engine.cc) 76*387f9dfdSAndroid Build Coastguard Workerelse() 77*387f9dfdSAndroid Build Coastguard Workerset(bcc_common_sources ${bcc_common_sources} bpf_module_rw_engine_disabled.cc) 78*387f9dfdSAndroid Build Coastguard Workerendif() 79*387f9dfdSAndroid Build Coastguard Worker 80*387f9dfdSAndroid Build Coastguard Workerset(bcc_table_sources table_storage.cc shared_table.cc bpffs_table.cc json_map_decl_visitor.cc) 81*387f9dfdSAndroid Build Coastguard Workerset(bcc_util_sources common.cc) 82*387f9dfdSAndroid Build Coastguard Workerset(bcc_sym_sources bcc_syms.cc bcc_elf.c bcc_perf_map.c bcc_proc.c bcc_zip.c) 83*387f9dfdSAndroid Build Coastguard Workerset(bcc_common_headers libbpf.h perf_reader.h "${CMAKE_CURRENT_BINARY_DIR}/bcc_version.h") 84*387f9dfdSAndroid Build Coastguard Workerset(bcc_table_headers file_desc.h table_desc.h table_storage.h) 85*387f9dfdSAndroid Build Coastguard Workerset(bcc_api_headers bcc_common.h bpf_module.h bcc_exception.h bcc_syms.h bcc_proc.h bcc_elf.h) 86*387f9dfdSAndroid Build Coastguard Workerif(LIBBPF_FOUND) 87*387f9dfdSAndroid Build Coastguard Worker set(bcc_common_sources ${bcc_common_sources} libbpf.c perf_reader.c) 88*387f9dfdSAndroid Build Coastguard Workerendif() 89*387f9dfdSAndroid Build Coastguard Worker 90*387f9dfdSAndroid Build Coastguard Workerif(ENABLE_CLANG_JIT) 91*387f9dfdSAndroid Build Coastguard Workeradd_library(bcc-shared SHARED 92*387f9dfdSAndroid Build Coastguard Worker link_all.cc ${bcc_common_sources} ${bcc_table_sources} ${bcc_sym_sources} 93*387f9dfdSAndroid Build Coastguard Worker ${bcc_util_sources}) 94*387f9dfdSAndroid Build Coastguard Workerset_target_properties(bcc-shared PROPERTIES VERSION ${REVISION_LAST} SOVERSION 0) 95*387f9dfdSAndroid Build Coastguard Workerset_target_properties(bcc-shared PROPERTIES OUTPUT_NAME bcc) 96*387f9dfdSAndroid Build Coastguard Worker 97*387f9dfdSAndroid Build Coastguard Workerif(ENABLE_USDT) 98*387f9dfdSAndroid Build Coastguard Worker add_definitions(-DEXPORT_USDT) 99*387f9dfdSAndroid Build Coastguard Worker set(bcc_usdt_sources usdt/usdt.cc usdt/usdt_args.cc) 100*387f9dfdSAndroid Build Coastguard Worker # else undefined 101*387f9dfdSAndroid Build Coastguard Workerendif() 102*387f9dfdSAndroid Build Coastguard Worker 103*387f9dfdSAndroid Build Coastguard Workeradd_library(bcc-loader-static STATIC ${bcc_sym_sources} ${bcc_util_sources}) 104*387f9dfdSAndroid Build Coastguard Workertarget_link_libraries(bcc-loader-static elf z) 105*387f9dfdSAndroid Build Coastguard Workeradd_library(bcc-static STATIC 106*387f9dfdSAndroid Build Coastguard Worker ${bcc_common_sources} ${bcc_table_sources} ${bcc_util_sources} ${bcc_usdt_sources} ${bcc_sym_sources} ${bcc_util_sources}) 107*387f9dfdSAndroid Build Coastguard Workerset_target_properties(bcc-static PROPERTIES OUTPUT_NAME bcc) 108*387f9dfdSAndroid Build Coastguard Workerset(bcc-lua-static 109*387f9dfdSAndroid Build Coastguard Worker ${bcc_common_sources} ${bcc_table_sources} ${bcc_sym_sources} ${bcc_util_sources}) 110*387f9dfdSAndroid Build Coastguard Worker 111*387f9dfdSAndroid Build Coastguard Workerset(bpf_sources libbpf.c perf_reader.c ${libbpf_sources} ${bcc_sym_sources} ${bcc_util_sources} ${bcc_usdt_sources}) 112*387f9dfdSAndroid Build Coastguard Workeradd_library(bpf-static STATIC ${bpf_sources}) 113*387f9dfdSAndroid Build Coastguard Workerset_target_properties(bpf-static PROPERTIES OUTPUT_NAME bcc_bpf) 114*387f9dfdSAndroid Build Coastguard Workertarget_link_libraries(bpf-static elf z) 115*387f9dfdSAndroid Build Coastguard Workeradd_library(bpf-shared SHARED ${bpf_sources}) 116*387f9dfdSAndroid Build Coastguard Workerset_target_properties(bpf-shared PROPERTIES VERSION ${REVISION_LAST} SOVERSION 0) 117*387f9dfdSAndroid Build Coastguard Workerset_target_properties(bpf-shared PROPERTIES OUTPUT_NAME bcc_bpf) 118*387f9dfdSAndroid Build Coastguard Workertarget_link_libraries(bpf-shared elf z) 119*387f9dfdSAndroid Build Coastguard Workerif(LIBLZMA_FOUND) 120*387f9dfdSAndroid Build Coastguard Worker target_link_libraries(bpf-shared ${LIBLZMA_LIBRARIES}) 121*387f9dfdSAndroid Build Coastguard Workerendif(LIBLZMA_FOUND) 122*387f9dfdSAndroid Build Coastguard Workerif(LIBDEBUGINFOD_FOUND) 123*387f9dfdSAndroid Build Coastguard Worker target_link_libraries(bpf-shared ${LIBDEBUGINFOD_LIBRARIES}) 124*387f9dfdSAndroid Build Coastguard Workerendif(LIBDEBUGINFOD_FOUND) 125*387f9dfdSAndroid Build Coastguard Workerif(CMAKE_USE_LIBBPF_PACKAGE AND LIBBPF_FOUND) 126*387f9dfdSAndroid Build Coastguard Worker target_link_libraries(bpf-shared ${LIBBPF_LIBRARIES}) 127*387f9dfdSAndroid Build Coastguard Workerendif() 128*387f9dfdSAndroid Build Coastguard Worker 129*387f9dfdSAndroid Build Coastguard Workerinclude(clang_libs) 130*387f9dfdSAndroid Build Coastguard Workerset(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${clang_lib_exclude_flags}") 131*387f9dfdSAndroid Build Coastguard Workerset(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${llvm_lib_exclude_flags}") 132*387f9dfdSAndroid Build Coastguard Worker 133*387f9dfdSAndroid Build Coastguard Worker# bcc_common_libs_for_a for archive libraries 134*387f9dfdSAndroid Build Coastguard Worker# bcc_common_libs_for_s for shared libraries 135*387f9dfdSAndroid Build Coastguard Workerset(bcc_common_libs clang_frontend 136*387f9dfdSAndroid Build Coastguard Worker -Wl,--whole-archive ${clang_libs} ${llvm_libs} -Wl,--no-whole-archive 137*387f9dfdSAndroid Build Coastguard Worker ${LIBELF_LIBRARIES}) 138*387f9dfdSAndroid Build Coastguard Workerif (LIBLZMA_FOUND) 139*387f9dfdSAndroid Build Coastguard Worker list(APPEND bcc_common_libs ${LIBLZMA_LIBRARIES}) 140*387f9dfdSAndroid Build Coastguard Workerendif (LIBLZMA_FOUND) 141*387f9dfdSAndroid Build Coastguard Workerif (LIBDEBUGINFOD_FOUND) 142*387f9dfdSAndroid Build Coastguard Worker list(APPEND bcc_common_libs ${LIBDEBUGINFOD_LIBRARIES}) 143*387f9dfdSAndroid Build Coastguard Workerendif (LIBDEBUGINFOD_FOUND) 144*387f9dfdSAndroid Build Coastguard Workerset(bcc_common_libs_for_a ${bcc_common_libs}) 145*387f9dfdSAndroid Build Coastguard Workerset(bcc_common_libs_for_s ${bcc_common_libs}) 146*387f9dfdSAndroid Build Coastguard Workerset(bcc_common_libs_for_lua clang_frontend 147*387f9dfdSAndroid Build Coastguard Worker ${clang_libs} ${llvm_libs} ${LIBELF_LIBRARIES}) 148*387f9dfdSAndroid Build Coastguard Workerif(LIBBPF_FOUND) 149*387f9dfdSAndroid Build Coastguard Worker list(APPEND bcc_common_libs_for_a ${LIBBPF_LIBRARIES}) 150*387f9dfdSAndroid Build Coastguard Worker list(APPEND bcc_common_libs_for_s ${LIBBPF_LIBRARIES}) 151*387f9dfdSAndroid Build Coastguard Worker list(APPEND bcc_common_libs_for_lua ${LIBBPF_LIBRARIES}) 152*387f9dfdSAndroid Build Coastguard Workerelse() 153*387f9dfdSAndroid Build Coastguard Worker list(APPEND bcc_common_libs_for_a bpf-static) 154*387f9dfdSAndroid Build Coastguard Worker list(APPEND bcc_common_libs_for_s bpf-static) 155*387f9dfdSAndroid Build Coastguard Worker list(APPEND bcc_common_libs_for_lua bpf-static) 156*387f9dfdSAndroid Build Coastguard Workerendif() 157*387f9dfdSAndroid Build Coastguard Worker 158*387f9dfdSAndroid Build Coastguard Workerif(ENABLE_CPP_API) 159*387f9dfdSAndroid Build Coastguard Worker add_subdirectory(api) 160*387f9dfdSAndroid Build Coastguard Worker target_sources(bcc-static PRIVATE $<TARGET_OBJECTS:api-objects>) 161*387f9dfdSAndroid Build Coastguard Worker # Keep all API functions 162*387f9dfdSAndroid Build Coastguard Worker list(APPEND bcc_common_libs_for_s -Wl,--whole-archive api-static -Wl,--no-whole-archive) 163*387f9dfdSAndroid Build Coastguard Workerendif() 164*387f9dfdSAndroid Build Coastguard Worker 165*387f9dfdSAndroid Build Coastguard Workerif(ENABLE_USDT) 166*387f9dfdSAndroid Build Coastguard Worker list(APPEND bcc_api_headers bcc_usdt.h) 167*387f9dfdSAndroid Build Coastguard Worker add_subdirectory(usdt) 168*387f9dfdSAndroid Build Coastguard Worker list(APPEND bcc_common_libs_for_a usdt-static) 169*387f9dfdSAndroid Build Coastguard Worker list(APPEND bcc_common_libs_for_s usdt-static) 170*387f9dfdSAndroid Build Coastguard Worker list(APPEND bcc_common_libs_for_lua usdt-static) 171*387f9dfdSAndroid Build Coastguard Workerendif() 172*387f9dfdSAndroid Build Coastguard Worker 173*387f9dfdSAndroid Build Coastguard Workeradd_subdirectory(frontends) 174*387f9dfdSAndroid Build Coastguard Worker 175*387f9dfdSAndroid Build Coastguard Workertarget_sources(bcc-static PRIVATE $<TARGET_OBJECTS:clang_frontend-objects>) 176*387f9dfdSAndroid Build Coastguard Worker 177*387f9dfdSAndroid Build Coastguard Worker# Link against LLVM libraries 178*387f9dfdSAndroid Build Coastguard Workertarget_link_libraries(bcc-shared ${bcc_common_libs_for_s}) 179*387f9dfdSAndroid Build Coastguard Workertarget_link_libraries(bcc-static ${bcc_common_libs_for_a} bcc-loader-static) 180*387f9dfdSAndroid Build Coastguard Workerset(bcc-lua-static ${bcc-lua-static} ${bcc_common_libs_for_lua}) 181*387f9dfdSAndroid Build Coastguard Worker 182*387f9dfdSAndroid Build Coastguard Workerinstall(TARGETS bcc-shared bcc-static bcc-loader-static bpf-static LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) 183*387f9dfdSAndroid Build Coastguard Workerinstall(FILES ${bcc_table_headers} DESTINATION include/bcc) 184*387f9dfdSAndroid Build Coastguard Workerinstall(FILES ${bcc_api_headers} DESTINATION include/bcc) 185*387f9dfdSAndroid Build Coastguard Workerinstall(DIRECTORY ${libbpf_uapi} DESTINATION include/bcc/compat/linux FILES_MATCHING PATTERN "*.h") 186*387f9dfdSAndroid Build Coastguard Workerinstall(FILES ${CMAKE_CURRENT_BINARY_DIR}/libbcc.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig) 187*387f9dfdSAndroid Build Coastguard Workerendif(ENABLE_CLANG_JIT) 188*387f9dfdSAndroid Build Coastguard Workerinstall(FILES ${bcc_common_headers} DESTINATION include/bcc) 189*387f9dfdSAndroid Build Coastguard Workerinstall(TARGETS bpf-shared LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}) 190