106f6ba60Sopenharmony_ci# Copyright (c) Huawei Technologies Co., Ltd. 2021. All rights reserved.
206f6ba60Sopenharmony_ci# Licensed under the Apache License, Version 2.0 (the "License");
306f6ba60Sopenharmony_ci# you may not use this file except in compliance with the License.
406f6ba60Sopenharmony_ci# You may obtain a copy of the License at
506f6ba60Sopenharmony_ci#
606f6ba60Sopenharmony_ci#     http://www.apache.org/licenses/LICENSE-2.0
706f6ba60Sopenharmony_ci#
806f6ba60Sopenharmony_ci# Unless required by applicable law or agreed to in writing, software
906f6ba60Sopenharmony_ci# distributed under the License is distributed on an "AS IS" BASIS,
1006f6ba60Sopenharmony_ci# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1106f6ba60Sopenharmony_ci# See the License for the specific language governing permissions and
1206f6ba60Sopenharmony_ci# limitations under the License.
1306f6ba60Sopenharmony_ci
1406f6ba60Sopenharmony_ciimport("//build/ohos.gni")
1506f6ba60Sopenharmony_ciimport("//developtools/profiler/device/base/config.gni")
1606f6ba60Sopenharmony_ci
1706f6ba60Sopenharmony_ciskel_src_dir = "$target_out_dir/src"
1806f6ba60Sopenharmony_ciskel_out_dir = "$root_gen_dir/cpp/developtools/profiler/hiebpf/ebpf_skeleton"
1906f6ba60Sopenharmony_ci
2006f6ba60Sopenharmony_ciconfig("common_config") {
2106f6ba60Sopenharmony_ci  cflags = [
2206f6ba60Sopenharmony_ci    "-Wno-unused-command-line-argument",
2306f6ba60Sopenharmony_ci    "-Wno-unused-variable",
2406f6ba60Sopenharmony_ci    "-Wno-unused-function",
2506f6ba60Sopenharmony_ci    "-Wno-gnu-folding-constant",
2606f6ba60Sopenharmony_ci    "-fno-omit-frame-pointer",
2706f6ba60Sopenharmony_ci    "-mno-omit-leaf-frame-pointer",
2806f6ba60Sopenharmony_ci    "-fno-inline",
2906f6ba60Sopenharmony_ci    "-fno-optimize-sibling-calls",
3006f6ba60Sopenharmony_ci    "-Wno-format",
3106f6ba60Sopenharmony_ci    "-Wno-switch",
3206f6ba60Sopenharmony_ci    "-Wno-braced-scalar-init",
3306f6ba60Sopenharmony_ci    "-fno-common",
3406f6ba60Sopenharmony_ci  ]
3506f6ba60Sopenharmony_ci  defines = [
3606f6ba60Sopenharmony_ci    "__KERNEL__",
3706f6ba60Sopenharmony_ci    "BPF_LOGGER_DEBUG",
3806f6ba60Sopenharmony_ci    "HH_LOGGER_DEBUG",
3906f6ba60Sopenharmony_ci  ]
4006f6ba60Sopenharmony_ci  include_dirs = [
4106f6ba60Sopenharmony_ci    "$skel_out_dir",
4206f6ba60Sopenharmony_ci    "./include",
4306f6ba60Sopenharmony_ci    "//third_party/libbpf/src",
4406f6ba60Sopenharmony_ci  ]
4506f6ba60Sopenharmony_ci}
4606f6ba60Sopenharmony_ci
4706f6ba60Sopenharmony_ciconfig("user_common_config") {
4806f6ba60Sopenharmony_ci  cflags = [
4906f6ba60Sopenharmony_ci    "-g",
5006f6ba60Sopenharmony_ci    "-Wno-unknown-attributes",
5106f6ba60Sopenharmony_ci    "-Wno-bitwise-op-parentheses",
5206f6ba60Sopenharmony_ci    "-Wno-shift-op-parentheses",
5306f6ba60Sopenharmony_ci    "-Wno-sign-compare",
5406f6ba60Sopenharmony_ci    "-Wno-format",
5506f6ba60Sopenharmony_ci  ]
5606f6ba60Sopenharmony_ci  include_dirs = []
5706f6ba60Sopenharmony_ci  defines = [ "__aarch64__" ]
5806f6ba60Sopenharmony_ci}
5906f6ba60Sopenharmony_ci
6006f6ba60Sopenharmony_ciconfig("kern_common_config") {
6106f6ba60Sopenharmony_ci  cflags = [
6206f6ba60Sopenharmony_ci    "-target",
6306f6ba60Sopenharmony_ci    "bpf",
6406f6ba60Sopenharmony_ci    "-g",
6506f6ba60Sopenharmony_ci    "-fno-stack-protector",
6606f6ba60Sopenharmony_ci    "-fno-data-sections",
6706f6ba60Sopenharmony_ci  ]
6806f6ba60Sopenharmony_ci  defines = [ "__aarch64__" ]
6906f6ba60Sopenharmony_ci  include_dirs = []
7006f6ba60Sopenharmony_ci}
7106f6ba60Sopenharmony_ci
7206f6ba60Sopenharmony_ciohos_source_set("hiebpf.bpf") {
7306f6ba60Sopenharmony_ci  remove_configs = [ "//build/config/coverage:default_coverage" ]
7406f6ba60Sopenharmony_ci  if (use_libfuzzer) {
7506f6ba60Sopenharmony_ci    remove_configs += [ "//build/config/sanitizers:default_sanitizer_flags" ]
7606f6ba60Sopenharmony_ci  }
7706f6ba60Sopenharmony_ci  cflags_c = [ "-fno-lto" ]
7806f6ba60Sopenharmony_ci  sources = [ "./src/hiebpf.bpf.c" ]
7906f6ba60Sopenharmony_ci  configs = [
8006f6ba60Sopenharmony_ci    ":common_config",
8106f6ba60Sopenharmony_ci    ":kern_common_config",
8206f6ba60Sopenharmony_ci  ]
8306f6ba60Sopenharmony_ci  subsystem_name = "${OHOS_PROFILER_SUBSYS_NAME}"
8406f6ba60Sopenharmony_ci  part_name = "${OHOS_PROFILER_PART_NAME}"
8506f6ba60Sopenharmony_ci  output_name = "hiebpf.bpf.o"
8606f6ba60Sopenharmony_ci}
8706f6ba60Sopenharmony_ci
8806f6ba60Sopenharmony_ciaction("gen_bpf_skeleton") {
8906f6ba60Sopenharmony_ci  script = "./scripts/gen_skeleton.sh"
9006f6ba60Sopenharmony_ci  sources = []
9106f6ba60Sopenharmony_ci  outputs = [ "$skel_out_dir/hiebpf.skel.h" ]
9206f6ba60Sopenharmony_ci  bpftool_dir = rebase_path("//prebuilts/develop_tools/bpftool/bin/bpftool")
9306f6ba60Sopenharmony_ci  skel_src_dir_abs = rebase_path("${skel_src_dir}")
9406f6ba60Sopenharmony_ci  skel_out_dir_abs = rebase_path("${skel_out_dir}")
9506f6ba60Sopenharmony_ci  args = [
9606f6ba60Sopenharmony_ci    bpftool_dir,
9706f6ba60Sopenharmony_ci    skel_src_dir_abs,
9806f6ba60Sopenharmony_ci    skel_out_dir_abs,
9906f6ba60Sopenharmony_ci  ]
10006f6ba60Sopenharmony_ci  deps = [ ":hiebpf.bpf" ]
10106f6ba60Sopenharmony_ci}
10206f6ba60Sopenharmony_ci
10306f6ba60Sopenharmony_ciohos_source_set("hiebpf_source_common") {
10406f6ba60Sopenharmony_ci  public_configs = [
10506f6ba60Sopenharmony_ci    ":common_config",
10606f6ba60Sopenharmony_ci    ":user_common_config",
10706f6ba60Sopenharmony_ci    "${OHOS_PROFILER_DIR}/device/base:hiprofiler_test_config",
10806f6ba60Sopenharmony_ci  ]
10906f6ba60Sopenharmony_ci
11006f6ba60Sopenharmony_ci  sources = [
11106f6ba60Sopenharmony_ci    "./src/bpf_controller.cpp",
11206f6ba60Sopenharmony_ci    "./src/bpf_event_receiver.cpp",
11306f6ba60Sopenharmony_ci    "./src/bpf_log_reader.cpp",
11406f6ba60Sopenharmony_ci    "./src/command_helper.cpp",
11506f6ba60Sopenharmony_ci    "./src/elf_file.cpp",
11606f6ba60Sopenharmony_ci    "./src/elf_symbol_info.cpp",
11706f6ba60Sopenharmony_ci    "./src/fstrace_args_converter.cpp",
11806f6ba60Sopenharmony_ci    "./src/hhlog.cpp",
11906f6ba60Sopenharmony_ci    "./src/hiebpf_data_file.cpp",
12006f6ba60Sopenharmony_ci    "./src/ipc_unix_socket.cpp",
12106f6ba60Sopenharmony_ci    "./src/kernel_symbol_info.cpp",
12206f6ba60Sopenharmony_ci    "./src/libbpf_logger.cpp",
12306f6ba60Sopenharmony_ci    "./src/maps_info.cpp",
12406f6ba60Sopenharmony_ci    "./src/ringbuffer.cpp",
12506f6ba60Sopenharmony_ci    "./src/utilities.cpp",
12606f6ba60Sopenharmony_ci  ]
12706f6ba60Sopenharmony_ci
12806f6ba60Sopenharmony_ci  public_deps = [ ":gen_bpf_skeleton" ]
12906f6ba60Sopenharmony_ci  external_deps = [
13006f6ba60Sopenharmony_ci    "bounds_checking_function:libsec_shared",
13106f6ba60Sopenharmony_ci    "libbpf:libbpf",
13206f6ba60Sopenharmony_ci  ]
13306f6ba60Sopenharmony_ci  subsystem_name = "${OHOS_PROFILER_SUBSYS_NAME}"
13406f6ba60Sopenharmony_ci  part_name = "${OHOS_PROFILER_PART_NAME}"
13506f6ba60Sopenharmony_ci}
13606f6ba60Sopenharmony_ci
13706f6ba60Sopenharmony_ciohos_executable("hiebpf") {
13806f6ba60Sopenharmony_ci  sources = [ "./src/hiebpf.cpp" ]  # this is main()
13906f6ba60Sopenharmony_ci
14006f6ba60Sopenharmony_ci  deps = [ ":hiebpf_source_common" ]
14106f6ba60Sopenharmony_ci  external_deps = [ "bounds_checking_function:libsec_shared" ]
14206f6ba60Sopenharmony_ci  subsystem_name = "${OHOS_PROFILER_SUBSYS_NAME}"
14306f6ba60Sopenharmony_ci  part_name = "${OHOS_PROFILER_PART_NAME}"
14406f6ba60Sopenharmony_ci  output_name = "hiebpf"
14506f6ba60Sopenharmony_ci}
14606f6ba60Sopenharmony_ci
14706f6ba60Sopenharmony_cigroup("hiebpf_tool") {
14806f6ba60Sopenharmony_ci  if (current_toolchain == "//build/toolchain/ohos:ohos_clang_arm64") {
14906f6ba60Sopenharmony_ci    if (!is_asan && !is_tsan && use_musl) {
15006f6ba60Sopenharmony_ci      if (build_variant == "root") {
15106f6ba60Sopenharmony_ci        deps = [
15206f6ba60Sopenharmony_ci          ":hiebpf",
15306f6ba60Sopenharmony_ci          ":hiebpf.bpf",
15406f6ba60Sopenharmony_ci        ]
15506f6ba60Sopenharmony_ci      }
15606f6ba60Sopenharmony_ci    }
15706f6ba60Sopenharmony_ci  }
15806f6ba60Sopenharmony_ci}
15906f6ba60Sopenharmony_ci
16006f6ba60Sopenharmony_cigroup("hiebpf_all") {
16106f6ba60Sopenharmony_ci  testonly = true
16206f6ba60Sopenharmony_ci  deps = [
16306f6ba60Sopenharmony_ci    ":hiebpf_tool",
16406f6ba60Sopenharmony_ci    "test:hiebpf_ut",
16506f6ba60Sopenharmony_ci  ]
16606f6ba60Sopenharmony_ci}
167