xref: /aosp_15_r20/external/bcc/src/cc/CMakeLists.txt (revision 387f9dfdfa2baef462e92476d413c7bc2470293e)
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