| .. | .. |
|---|
| 4 | 4 | TOOLS_PATH := $(BPF_SAMPLES_PATH)/../../tools |
|---|
| 5 | 5 | |
|---|
| 6 | 6 | # List of programs to build |
|---|
| 7 | | -hostprogs-y := test_lru_dist |
|---|
| 8 | | -hostprogs-y += sock_example |
|---|
| 9 | | -hostprogs-y += fds_example |
|---|
| 10 | | -hostprogs-y += sockex1 |
|---|
| 11 | | -hostprogs-y += sockex2 |
|---|
| 12 | | -hostprogs-y += sockex3 |
|---|
| 13 | | -hostprogs-y += tracex1 |
|---|
| 14 | | -hostprogs-y += tracex2 |
|---|
| 15 | | -hostprogs-y += tracex3 |
|---|
| 16 | | -hostprogs-y += tracex4 |
|---|
| 17 | | -hostprogs-y += tracex5 |
|---|
| 18 | | -hostprogs-y += tracex6 |
|---|
| 19 | | -hostprogs-y += tracex7 |
|---|
| 20 | | -hostprogs-y += test_probe_write_user |
|---|
| 21 | | -hostprogs-y += trace_output |
|---|
| 22 | | -hostprogs-y += lathist |
|---|
| 23 | | -hostprogs-y += offwaketime |
|---|
| 24 | | -hostprogs-y += spintest |
|---|
| 25 | | -hostprogs-y += map_perf_test |
|---|
| 26 | | -hostprogs-y += test_overhead |
|---|
| 27 | | -hostprogs-y += test_cgrp2_array_pin |
|---|
| 28 | | -hostprogs-y += test_cgrp2_attach |
|---|
| 29 | | -hostprogs-y += test_cgrp2_attach2 |
|---|
| 30 | | -hostprogs-y += test_cgrp2_sock |
|---|
| 31 | | -hostprogs-y += test_cgrp2_sock2 |
|---|
| 32 | | -hostprogs-y += xdp1 |
|---|
| 33 | | -hostprogs-y += xdp2 |
|---|
| 34 | | -hostprogs-y += xdp_router_ipv4 |
|---|
| 35 | | -hostprogs-y += test_current_task_under_cgroup |
|---|
| 36 | | -hostprogs-y += trace_event |
|---|
| 37 | | -hostprogs-y += sampleip |
|---|
| 38 | | -hostprogs-y += tc_l2_redirect |
|---|
| 39 | | -hostprogs-y += lwt_len_hist |
|---|
| 40 | | -hostprogs-y += xdp_tx_iptunnel |
|---|
| 41 | | -hostprogs-y += test_map_in_map |
|---|
| 42 | | -hostprogs-y += per_socket_stats_example |
|---|
| 43 | | -hostprogs-y += load_sock_ops |
|---|
| 44 | | -hostprogs-y += xdp_redirect |
|---|
| 45 | | -hostprogs-y += xdp_redirect_map |
|---|
| 46 | | -hostprogs-y += xdp_redirect_cpu |
|---|
| 47 | | -hostprogs-y += xdp_monitor |
|---|
| 48 | | -hostprogs-y += xdp_rxq_info |
|---|
| 49 | | -hostprogs-y += syscall_tp |
|---|
| 50 | | -hostprogs-y += cpustat |
|---|
| 51 | | -hostprogs-y += xdp_adjust_tail |
|---|
| 52 | | -hostprogs-y += xdpsock |
|---|
| 53 | | -hostprogs-y += xdp_fwd |
|---|
| 54 | | -hostprogs-y += task_fd_query |
|---|
| 55 | | -hostprogs-y += xdp_sample_pkts |
|---|
| 7 | +tprogs-y := test_lru_dist |
|---|
| 8 | +tprogs-y += sock_example |
|---|
| 9 | +tprogs-y += fds_example |
|---|
| 10 | +tprogs-y += sockex1 |
|---|
| 11 | +tprogs-y += sockex2 |
|---|
| 12 | +tprogs-y += sockex3 |
|---|
| 13 | +tprogs-y += tracex1 |
|---|
| 14 | +tprogs-y += tracex2 |
|---|
| 15 | +tprogs-y += tracex3 |
|---|
| 16 | +tprogs-y += tracex4 |
|---|
| 17 | +tprogs-y += tracex5 |
|---|
| 18 | +tprogs-y += tracex6 |
|---|
| 19 | +tprogs-y += tracex7 |
|---|
| 20 | +tprogs-y += test_probe_write_user |
|---|
| 21 | +tprogs-y += trace_output |
|---|
| 22 | +tprogs-y += lathist |
|---|
| 23 | +tprogs-y += offwaketime |
|---|
| 24 | +tprogs-y += spintest |
|---|
| 25 | +tprogs-y += map_perf_test |
|---|
| 26 | +tprogs-y += test_overhead |
|---|
| 27 | +tprogs-y += test_cgrp2_array_pin |
|---|
| 28 | +tprogs-y += test_cgrp2_attach |
|---|
| 29 | +tprogs-y += test_cgrp2_sock |
|---|
| 30 | +tprogs-y += test_cgrp2_sock2 |
|---|
| 31 | +tprogs-y += xdp1 |
|---|
| 32 | +tprogs-y += xdp2 |
|---|
| 33 | +tprogs-y += xdp_router_ipv4 |
|---|
| 34 | +tprogs-y += test_current_task_under_cgroup |
|---|
| 35 | +tprogs-y += trace_event |
|---|
| 36 | +tprogs-y += sampleip |
|---|
| 37 | +tprogs-y += tc_l2_redirect |
|---|
| 38 | +tprogs-y += lwt_len_hist |
|---|
| 39 | +tprogs-y += xdp_tx_iptunnel |
|---|
| 40 | +tprogs-y += test_map_in_map |
|---|
| 41 | +tprogs-y += per_socket_stats_example |
|---|
| 42 | +tprogs-y += xdp_redirect |
|---|
| 43 | +tprogs-y += xdp_redirect_map |
|---|
| 44 | +tprogs-y += xdp_redirect_cpu |
|---|
| 45 | +tprogs-y += xdp_monitor |
|---|
| 46 | +tprogs-y += xdp_rxq_info |
|---|
| 47 | +tprogs-y += syscall_tp |
|---|
| 48 | +tprogs-y += cpustat |
|---|
| 49 | +tprogs-y += xdp_adjust_tail |
|---|
| 50 | +tprogs-y += xdpsock |
|---|
| 51 | +tprogs-y += xsk_fwd |
|---|
| 52 | +tprogs-y += xdp_fwd |
|---|
| 53 | +tprogs-y += task_fd_query |
|---|
| 54 | +tprogs-y += xdp_sample_pkts |
|---|
| 55 | +tprogs-y += ibumad |
|---|
| 56 | +tprogs-y += hbm |
|---|
| 56 | 57 | |
|---|
| 57 | 58 | # Libbpf dependencies |
|---|
| 58 | 59 | LIBBPF = $(TOOLS_PATH)/lib/bpf/libbpf.a |
|---|
| .. | .. |
|---|
| 60 | 61 | CGROUP_HELPERS := ../../tools/testing/selftests/bpf/cgroup_helpers.o |
|---|
| 61 | 62 | TRACE_HELPERS := ../../tools/testing/selftests/bpf/trace_helpers.o |
|---|
| 62 | 63 | |
|---|
| 63 | | -fds_example-objs := bpf_load.o fds_example.o |
|---|
| 64 | | -sockex1-objs := bpf_load.o sockex1_user.o |
|---|
| 65 | | -sockex2-objs := bpf_load.o sockex2_user.o |
|---|
| 66 | | -sockex3-objs := bpf_load.o sockex3_user.o |
|---|
| 67 | | -tracex1-objs := bpf_load.o tracex1_user.o |
|---|
| 68 | | -tracex2-objs := bpf_load.o tracex2_user.o |
|---|
| 69 | | -tracex3-objs := bpf_load.o tracex3_user.o |
|---|
| 70 | | -tracex4-objs := bpf_load.o tracex4_user.o |
|---|
| 71 | | -tracex5-objs := bpf_load.o tracex5_user.o |
|---|
| 72 | | -tracex6-objs := bpf_load.o tracex6_user.o |
|---|
| 73 | | -tracex7-objs := bpf_load.o tracex7_user.o |
|---|
| 74 | | -load_sock_ops-objs := bpf_load.o load_sock_ops.o |
|---|
| 75 | | -test_probe_write_user-objs := bpf_load.o test_probe_write_user_user.o |
|---|
| 76 | | -trace_output-objs := bpf_load.o trace_output_user.o $(TRACE_HELPERS) |
|---|
| 77 | | -lathist-objs := bpf_load.o lathist_user.o |
|---|
| 78 | | -offwaketime-objs := bpf_load.o offwaketime_user.o $(TRACE_HELPERS) |
|---|
| 79 | | -spintest-objs := bpf_load.o spintest_user.o $(TRACE_HELPERS) |
|---|
| 80 | | -map_perf_test-objs := bpf_load.o map_perf_test_user.o |
|---|
| 64 | +fds_example-objs := fds_example.o |
|---|
| 65 | +sockex1-objs := sockex1_user.o |
|---|
| 66 | +sockex2-objs := sockex2_user.o |
|---|
| 67 | +sockex3-objs := sockex3_user.o |
|---|
| 68 | +tracex1-objs := tracex1_user.o $(TRACE_HELPERS) |
|---|
| 69 | +tracex2-objs := tracex2_user.o |
|---|
| 70 | +tracex3-objs := tracex3_user.o |
|---|
| 71 | +tracex4-objs := tracex4_user.o |
|---|
| 72 | +tracex5-objs := tracex5_user.o $(TRACE_HELPERS) |
|---|
| 73 | +tracex6-objs := tracex6_user.o |
|---|
| 74 | +tracex7-objs := tracex7_user.o |
|---|
| 75 | +test_probe_write_user-objs := test_probe_write_user_user.o |
|---|
| 76 | +trace_output-objs := trace_output_user.o $(TRACE_HELPERS) |
|---|
| 77 | +lathist-objs := lathist_user.o |
|---|
| 78 | +offwaketime-objs := offwaketime_user.o $(TRACE_HELPERS) |
|---|
| 79 | +spintest-objs := spintest_user.o $(TRACE_HELPERS) |
|---|
| 80 | +map_perf_test-objs := map_perf_test_user.o |
|---|
| 81 | 81 | test_overhead-objs := bpf_load.o test_overhead_user.o |
|---|
| 82 | 82 | test_cgrp2_array_pin-objs := test_cgrp2_array_pin.o |
|---|
| 83 | 83 | test_cgrp2_attach-objs := test_cgrp2_attach.o |
|---|
| 84 | | -test_cgrp2_attach2-objs := test_cgrp2_attach2.o $(CGROUP_HELPERS) |
|---|
| 85 | 84 | test_cgrp2_sock-objs := test_cgrp2_sock.o |
|---|
| 86 | 85 | test_cgrp2_sock2-objs := bpf_load.o test_cgrp2_sock2.o |
|---|
| 87 | 86 | xdp1-objs := xdp1_user.o |
|---|
| 88 | 87 | # reuse xdp1 source intentionally |
|---|
| 89 | 88 | xdp2-objs := xdp1_user.o |
|---|
| 90 | | -xdp_router_ipv4-objs := bpf_load.o xdp_router_ipv4_user.o |
|---|
| 91 | | -test_current_task_under_cgroup-objs := bpf_load.o $(CGROUP_HELPERS) \ |
|---|
| 89 | +xdp_router_ipv4-objs := xdp_router_ipv4_user.o |
|---|
| 90 | +test_current_task_under_cgroup-objs := $(CGROUP_HELPERS) \ |
|---|
| 92 | 91 | test_current_task_under_cgroup_user.o |
|---|
| 93 | | -trace_event-objs := bpf_load.o trace_event_user.o $(TRACE_HELPERS) |
|---|
| 94 | | -sampleip-objs := bpf_load.o sampleip_user.o $(TRACE_HELPERS) |
|---|
| 92 | +trace_event-objs := trace_event_user.o $(TRACE_HELPERS) |
|---|
| 93 | +sampleip-objs := sampleip_user.o $(TRACE_HELPERS) |
|---|
| 95 | 94 | tc_l2_redirect-objs := bpf_load.o tc_l2_redirect_user.o |
|---|
| 96 | 95 | lwt_len_hist-objs := bpf_load.o lwt_len_hist_user.o |
|---|
| 97 | | -xdp_tx_iptunnel-objs := bpf_load.o xdp_tx_iptunnel_user.o |
|---|
| 98 | | -test_map_in_map-objs := bpf_load.o test_map_in_map_user.o |
|---|
| 96 | +xdp_tx_iptunnel-objs := xdp_tx_iptunnel_user.o |
|---|
| 97 | +test_map_in_map-objs := test_map_in_map_user.o |
|---|
| 99 | 98 | per_socket_stats_example-objs := cookie_uid_helper_example.o |
|---|
| 100 | | -xdp_redirect-objs := bpf_load.o xdp_redirect_user.o |
|---|
| 101 | | -xdp_redirect_map-objs := bpf_load.o xdp_redirect_map_user.o |
|---|
| 102 | | -xdp_redirect_cpu-objs := bpf_load.o xdp_redirect_cpu_user.o |
|---|
| 103 | | -xdp_monitor-objs := bpf_load.o xdp_monitor_user.o |
|---|
| 99 | +xdp_redirect-objs := xdp_redirect_user.o |
|---|
| 100 | +xdp_redirect_map-objs := xdp_redirect_map_user.o |
|---|
| 101 | +xdp_redirect_cpu-objs := xdp_redirect_cpu_user.o |
|---|
| 102 | +xdp_monitor-objs := xdp_monitor_user.o |
|---|
| 104 | 103 | xdp_rxq_info-objs := xdp_rxq_info_user.o |
|---|
| 105 | | -syscall_tp-objs := bpf_load.o syscall_tp_user.o |
|---|
| 106 | | -cpustat-objs := bpf_load.o cpustat_user.o |
|---|
| 104 | +syscall_tp-objs := syscall_tp_user.o |
|---|
| 105 | +cpustat-objs := cpustat_user.o |
|---|
| 107 | 106 | xdp_adjust_tail-objs := xdp_adjust_tail_user.o |
|---|
| 108 | 107 | xdpsock-objs := xdpsock_user.o |
|---|
| 108 | +xsk_fwd-objs := xsk_fwd.o |
|---|
| 109 | 109 | xdp_fwd-objs := xdp_fwd_user.o |
|---|
| 110 | 110 | task_fd_query-objs := bpf_load.o task_fd_query_user.o $(TRACE_HELPERS) |
|---|
| 111 | 111 | xdp_sample_pkts-objs := xdp_sample_pkts_user.o $(TRACE_HELPERS) |
|---|
| 112 | +ibumad-objs := bpf_load.o ibumad_user.o $(TRACE_HELPERS) |
|---|
| 113 | +hbm-objs := bpf_load.o hbm.o $(CGROUP_HELPERS) |
|---|
| 112 | 114 | |
|---|
| 113 | 115 | # Tell kbuild to always build the programs |
|---|
| 114 | | -always := $(hostprogs-y) |
|---|
| 115 | | -always += sockex1_kern.o |
|---|
| 116 | | -always += sockex2_kern.o |
|---|
| 117 | | -always += sockex3_kern.o |
|---|
| 118 | | -always += tracex1_kern.o |
|---|
| 119 | | -always += tracex2_kern.o |
|---|
| 120 | | -always += tracex3_kern.o |
|---|
| 121 | | -always += tracex4_kern.o |
|---|
| 122 | | -always += tracex5_kern.o |
|---|
| 123 | | -always += tracex6_kern.o |
|---|
| 124 | | -always += tracex7_kern.o |
|---|
| 125 | | -always += sock_flags_kern.o |
|---|
| 126 | | -always += test_probe_write_user_kern.o |
|---|
| 127 | | -always += trace_output_kern.o |
|---|
| 128 | | -always += tcbpf1_kern.o |
|---|
| 129 | | -always += tc_l2_redirect_kern.o |
|---|
| 130 | | -always += lathist_kern.o |
|---|
| 131 | | -always += offwaketime_kern.o |
|---|
| 132 | | -always += spintest_kern.o |
|---|
| 133 | | -always += map_perf_test_kern.o |
|---|
| 134 | | -always += test_overhead_tp_kern.o |
|---|
| 135 | | -always += test_overhead_raw_tp_kern.o |
|---|
| 136 | | -always += test_overhead_kprobe_kern.o |
|---|
| 137 | | -always += parse_varlen.o parse_simple.o parse_ldabs.o |
|---|
| 138 | | -always += test_cgrp2_tc_kern.o |
|---|
| 139 | | -always += xdp1_kern.o |
|---|
| 140 | | -always += xdp2_kern.o |
|---|
| 141 | | -always += xdp_router_ipv4_kern.o |
|---|
| 142 | | -always += test_current_task_under_cgroup_kern.o |
|---|
| 143 | | -always += trace_event_kern.o |
|---|
| 144 | | -always += sampleip_kern.o |
|---|
| 145 | | -always += lwt_len_hist_kern.o |
|---|
| 146 | | -always += xdp_tx_iptunnel_kern.o |
|---|
| 147 | | -always += test_map_in_map_kern.o |
|---|
| 148 | | -always += cookie_uid_helper_example.o |
|---|
| 149 | | -always += tcp_synrto_kern.o |
|---|
| 150 | | -always += tcp_rwnd_kern.o |
|---|
| 151 | | -always += tcp_bufs_kern.o |
|---|
| 152 | | -always += tcp_cong_kern.o |
|---|
| 153 | | -always += tcp_iw_kern.o |
|---|
| 154 | | -always += tcp_clamp_kern.o |
|---|
| 155 | | -always += tcp_basertt_kern.o |
|---|
| 156 | | -always += xdp_redirect_kern.o |
|---|
| 157 | | -always += xdp_redirect_map_kern.o |
|---|
| 158 | | -always += xdp_redirect_cpu_kern.o |
|---|
| 159 | | -always += xdp_monitor_kern.o |
|---|
| 160 | | -always += xdp_rxq_info_kern.o |
|---|
| 161 | | -always += xdp2skb_meta_kern.o |
|---|
| 162 | | -always += syscall_tp_kern.o |
|---|
| 163 | | -always += cpustat_kern.o |
|---|
| 164 | | -always += xdp_adjust_tail_kern.o |
|---|
| 165 | | -always += xdpsock_kern.o |
|---|
| 166 | | -always += xdp_fwd_kern.o |
|---|
| 167 | | -always += task_fd_query_kern.o |
|---|
| 168 | | -always += xdp_sample_pkts_kern.o |
|---|
| 116 | +always-y := $(tprogs-y) |
|---|
| 117 | +always-y += sockex1_kern.o |
|---|
| 118 | +always-y += sockex2_kern.o |
|---|
| 119 | +always-y += sockex3_kern.o |
|---|
| 120 | +always-y += tracex1_kern.o |
|---|
| 121 | +always-y += tracex2_kern.o |
|---|
| 122 | +always-y += tracex3_kern.o |
|---|
| 123 | +always-y += tracex4_kern.o |
|---|
| 124 | +always-y += tracex5_kern.o |
|---|
| 125 | +always-y += tracex6_kern.o |
|---|
| 126 | +always-y += tracex7_kern.o |
|---|
| 127 | +always-y += sock_flags_kern.o |
|---|
| 128 | +always-y += test_probe_write_user_kern.o |
|---|
| 129 | +always-y += trace_output_kern.o |
|---|
| 130 | +always-y += tcbpf1_kern.o |
|---|
| 131 | +always-y += tc_l2_redirect_kern.o |
|---|
| 132 | +always-y += lathist_kern.o |
|---|
| 133 | +always-y += offwaketime_kern.o |
|---|
| 134 | +always-y += spintest_kern.o |
|---|
| 135 | +always-y += map_perf_test_kern.o |
|---|
| 136 | +always-y += test_overhead_tp_kern.o |
|---|
| 137 | +always-y += test_overhead_raw_tp_kern.o |
|---|
| 138 | +always-y += test_overhead_kprobe_kern.o |
|---|
| 139 | +always-y += parse_varlen.o parse_simple.o parse_ldabs.o |
|---|
| 140 | +always-y += test_cgrp2_tc_kern.o |
|---|
| 141 | +always-y += xdp1_kern.o |
|---|
| 142 | +always-y += xdp2_kern.o |
|---|
| 143 | +always-y += xdp_router_ipv4_kern.o |
|---|
| 144 | +always-y += test_current_task_under_cgroup_kern.o |
|---|
| 145 | +always-y += trace_event_kern.o |
|---|
| 146 | +always-y += sampleip_kern.o |
|---|
| 147 | +always-y += lwt_len_hist_kern.o |
|---|
| 148 | +always-y += xdp_tx_iptunnel_kern.o |
|---|
| 149 | +always-y += test_map_in_map_kern.o |
|---|
| 150 | +always-y += tcp_synrto_kern.o |
|---|
| 151 | +always-y += tcp_rwnd_kern.o |
|---|
| 152 | +always-y += tcp_bufs_kern.o |
|---|
| 153 | +always-y += tcp_cong_kern.o |
|---|
| 154 | +always-y += tcp_iw_kern.o |
|---|
| 155 | +always-y += tcp_clamp_kern.o |
|---|
| 156 | +always-y += tcp_basertt_kern.o |
|---|
| 157 | +always-y += tcp_tos_reflect_kern.o |
|---|
| 158 | +always-y += tcp_dumpstats_kern.o |
|---|
| 159 | +always-y += xdp_redirect_kern.o |
|---|
| 160 | +always-y += xdp_redirect_map_kern.o |
|---|
| 161 | +always-y += xdp_redirect_cpu_kern.o |
|---|
| 162 | +always-y += xdp_monitor_kern.o |
|---|
| 163 | +always-y += xdp_rxq_info_kern.o |
|---|
| 164 | +always-y += xdp2skb_meta_kern.o |
|---|
| 165 | +always-y += syscall_tp_kern.o |
|---|
| 166 | +always-y += cpustat_kern.o |
|---|
| 167 | +always-y += xdp_adjust_tail_kern.o |
|---|
| 168 | +always-y += xdp_fwd_kern.o |
|---|
| 169 | +always-y += task_fd_query_kern.o |
|---|
| 170 | +always-y += xdp_sample_pkts_kern.o |
|---|
| 171 | +always-y += ibumad_kern.o |
|---|
| 172 | +always-y += hbm_out_kern.o |
|---|
| 173 | +always-y += hbm_edt_kern.o |
|---|
| 174 | +always-y += xdpsock_kern.o |
|---|
| 169 | 175 | |
|---|
| 170 | | -KBUILD_HOSTCFLAGS += -I$(objtree)/usr/include |
|---|
| 171 | | -KBUILD_HOSTCFLAGS += -I$(srctree)/tools/lib/ |
|---|
| 172 | | -KBUILD_HOSTCFLAGS += -I$(srctree)/tools/testing/selftests/bpf/ |
|---|
| 173 | | -KBUILD_HOSTCFLAGS += -I$(srctree)/tools/lib/ -I$(srctree)/tools/include |
|---|
| 174 | | -KBUILD_HOSTCFLAGS += -I$(srctree)/tools/perf |
|---|
| 175 | | -KBUILD_HOSTCFLAGS += -DHAVE_ATTR_TEST=0 |
|---|
| 176 | +ifeq ($(ARCH), arm) |
|---|
| 177 | +# Strip all except -D__LINUX_ARM_ARCH__ option needed to handle linux |
|---|
| 178 | +# headers when arm instruction set identification is requested. |
|---|
| 179 | +ARM_ARCH_SELECTOR := $(filter -D__LINUX_ARM_ARCH__%, $(KBUILD_CFLAGS)) |
|---|
| 180 | +BPF_EXTRA_CFLAGS := $(ARM_ARCH_SELECTOR) |
|---|
| 181 | +TPROGS_CFLAGS += $(ARM_ARCH_SELECTOR) |
|---|
| 182 | +endif |
|---|
| 176 | 183 | |
|---|
| 177 | | -HOSTCFLAGS_bpf_load.o += -I$(objtree)/usr/include -Wno-unused-variable |
|---|
| 178 | | -HOSTCFLAGS_trace_helpers.o += -I$(srctree)/tools/lib/bpf/ |
|---|
| 184 | +TPROGS_CFLAGS += -Wall -O2 |
|---|
| 185 | +TPROGS_CFLAGS += -Wmissing-prototypes |
|---|
| 186 | +TPROGS_CFLAGS += -Wstrict-prototypes |
|---|
| 179 | 187 | |
|---|
| 180 | | -HOSTCFLAGS_trace_output_user.o += -I$(srctree)/tools/lib/bpf/ |
|---|
| 181 | | -HOSTCFLAGS_offwaketime_user.o += -I$(srctree)/tools/lib/bpf/ |
|---|
| 182 | | -HOSTCFLAGS_spintest_user.o += -I$(srctree)/tools/lib/bpf/ |
|---|
| 183 | | -HOSTCFLAGS_trace_event_user.o += -I$(srctree)/tools/lib/bpf/ |
|---|
| 184 | | -HOSTCFLAGS_sampleip_user.o += -I$(srctree)/tools/lib/bpf/ |
|---|
| 185 | | -HOSTCFLAGS_task_fd_query_user.o += -I$(srctree)/tools/lib/bpf/ |
|---|
| 186 | | -HOSTCFLAGS_xdp_sample_pkts_user.o += -I$(srctree)/tools/lib/bpf/ |
|---|
| 188 | +TPROGS_CFLAGS += -I$(objtree)/usr/include |
|---|
| 189 | +TPROGS_CFLAGS += -I$(srctree)/tools/testing/selftests/bpf/ |
|---|
| 190 | +TPROGS_CFLAGS += -I$(srctree)/tools/lib/ |
|---|
| 191 | +TPROGS_CFLAGS += -I$(srctree)/tools/include |
|---|
| 192 | +TPROGS_CFLAGS += -I$(srctree)/tools/perf |
|---|
| 193 | +TPROGS_CFLAGS += -DHAVE_ATTR_TEST=0 |
|---|
| 187 | 194 | |
|---|
| 188 | | -KBUILD_HOSTLDLIBS += $(LIBBPF) -lelf |
|---|
| 189 | | -HOSTLDLIBS_tracex4 += -lrt |
|---|
| 190 | | -HOSTLDLIBS_trace_output += -lrt |
|---|
| 191 | | -HOSTLDLIBS_map_perf_test += -lrt |
|---|
| 192 | | -HOSTLDLIBS_test_overhead += -lrt |
|---|
| 193 | | -HOSTLDLIBS_xdpsock += -pthread |
|---|
| 195 | +ifdef SYSROOT |
|---|
| 196 | +TPROGS_CFLAGS += --sysroot=$(SYSROOT) |
|---|
| 197 | +TPROGS_LDFLAGS := -L$(SYSROOT)/usr/lib |
|---|
| 198 | +endif |
|---|
| 199 | + |
|---|
| 200 | +TPROGCFLAGS_bpf_load.o += -Wno-unused-variable |
|---|
| 201 | + |
|---|
| 202 | +TPROGS_LDLIBS += $(LIBBPF) -lelf -lz |
|---|
| 203 | +TPROGLDLIBS_tracex4 += -lrt |
|---|
| 204 | +TPROGLDLIBS_trace_output += -lrt |
|---|
| 205 | +TPROGLDLIBS_map_perf_test += -lrt |
|---|
| 206 | +TPROGLDLIBS_test_overhead += -lrt |
|---|
| 207 | +TPROGLDLIBS_xdpsock += -pthread |
|---|
| 208 | +TPROGLDLIBS_xsk_fwd += -pthread |
|---|
| 194 | 209 | |
|---|
| 195 | 210 | # Allows pointing LLC/CLANG to a LLVM backend with bpf support, redefine on cmdline: |
|---|
| 196 | | -# make samples/bpf/ LLC=~/git/llvm/build/bin/llc CLANG=~/git/llvm/build/bin/clang |
|---|
| 211 | +# make M=samples/bpf/ LLC=~/git/llvm/build/bin/llc CLANG=~/git/llvm/build/bin/clang |
|---|
| 197 | 212 | LLC ?= llc |
|---|
| 198 | 213 | CLANG ?= clang |
|---|
| 214 | +OPT ?= opt |
|---|
| 215 | +LLVM_DIS ?= llvm-dis |
|---|
| 199 | 216 | LLVM_OBJCOPY ?= llvm-objcopy |
|---|
| 200 | 217 | BTF_PAHOLE ?= pahole |
|---|
| 201 | 218 | |
|---|
| 202 | 219 | # Detect that we're cross compiling and use the cross compiler |
|---|
| 203 | 220 | ifdef CROSS_COMPILE |
|---|
| 204 | | -HOSTCC = $(CROSS_COMPILE)gcc |
|---|
| 205 | | -CLANG_ARCH_ARGS = -target $(ARCH) |
|---|
| 221 | +CLANG_ARCH_ARGS = --target=$(notdir $(CROSS_COMPILE:%-=%)) |
|---|
| 222 | +endif |
|---|
| 223 | + |
|---|
| 224 | +# Don't evaluate probes and warnings if we need to run make recursively |
|---|
| 225 | +ifneq ($(src),) |
|---|
| 226 | +HDR_PROBE := $(shell printf "\#include <linux/types.h>\n struct list_head { int a; }; int main() { return 0; }" | \ |
|---|
| 227 | + $(CC) $(TPROGS_CFLAGS) $(TPROGS_LDFLAGS) -x c - \ |
|---|
| 228 | + -o /dev/null 2>/dev/null && echo okay) |
|---|
| 229 | + |
|---|
| 230 | +ifeq ($(HDR_PROBE),) |
|---|
| 231 | +$(warning WARNING: Detected possible issues with include path.) |
|---|
| 232 | +$(warning WARNING: Please install kernel headers locally (make headers_install).) |
|---|
| 206 | 233 | endif |
|---|
| 207 | 234 | |
|---|
| 208 | 235 | BTF_LLC_PROBE := $(shell $(LLC) -march=bpf -mattr=help 2>&1 | grep dwarfris) |
|---|
| 209 | 236 | BTF_PAHOLE_PROBE := $(shell $(BTF_PAHOLE) --help 2>&1 | grep BTF) |
|---|
| 210 | 237 | BTF_OBJCOPY_PROBE := $(shell $(LLVM_OBJCOPY) --help 2>&1 | grep -i 'usage.*llvm') |
|---|
| 238 | +BTF_LLVM_PROBE := $(shell echo "int main() { return 0; }" | \ |
|---|
| 239 | + $(CLANG) -target bpf -O2 -g -c -x c - -o ./llvm_btf_verify.o; \ |
|---|
| 240 | + readelf -S ./llvm_btf_verify.o | grep BTF; \ |
|---|
| 241 | + /bin/rm -f ./llvm_btf_verify.o) |
|---|
| 211 | 242 | |
|---|
| 243 | +BPF_EXTRA_CFLAGS += -fno-stack-protector |
|---|
| 244 | +ifneq ($(BTF_LLVM_PROBE),) |
|---|
| 245 | + BPF_EXTRA_CFLAGS += -g |
|---|
| 246 | +else |
|---|
| 212 | 247 | ifneq ($(and $(BTF_LLC_PROBE),$(BTF_PAHOLE_PROBE),$(BTF_OBJCOPY_PROBE)),) |
|---|
| 213 | | - EXTRA_CFLAGS += -g |
|---|
| 248 | + BPF_EXTRA_CFLAGS += -g |
|---|
| 214 | 249 | LLC_FLAGS += -mattr=dwarfris |
|---|
| 215 | 250 | DWARF2BTF = y |
|---|
| 251 | +endif |
|---|
| 252 | +endif |
|---|
| 216 | 253 | endif |
|---|
| 217 | 254 | |
|---|
| 218 | 255 | # Trick to allow make to be run from this directory |
|---|
| 219 | 256 | all: |
|---|
| 220 | | - $(MAKE) -C ../../ $(CURDIR)/ BPF_SAMPLES_PATH=$(CURDIR) |
|---|
| 257 | + $(MAKE) -C ../../ M=$(CURDIR) BPF_SAMPLES_PATH=$(CURDIR) |
|---|
| 221 | 258 | |
|---|
| 222 | 259 | clean: |
|---|
| 223 | 260 | $(MAKE) -C ../../ M=$(CURDIR) clean |
|---|
| .. | .. |
|---|
| 225 | 262 | |
|---|
| 226 | 263 | $(LIBBPF): FORCE |
|---|
| 227 | 264 | # Fix up variables inherited from Kbuild that tools/ build system won't like |
|---|
| 228 | | - $(MAKE) -C $(dir $@) RM='rm -rf' LDFLAGS= srctree=$(BPF_SAMPLES_PATH)/../../ O= |
|---|
| 229 | | - |
|---|
| 230 | | -$(obj)/syscall_nrs.s: $(src)/syscall_nrs.c |
|---|
| 231 | | - $(call if_changed_dep,cc_s_c) |
|---|
| 265 | + $(MAKE) -C $(dir $@) RM='rm -rf' EXTRA_CFLAGS="$(TPROGS_CFLAGS)" \ |
|---|
| 266 | + LDFLAGS=$(TPROGS_LDFLAGS) srctree=$(BPF_SAMPLES_PATH)/../../ O= |
|---|
| 232 | 267 | |
|---|
| 233 | 268 | $(obj)/syscall_nrs.h: $(obj)/syscall_nrs.s FORCE |
|---|
| 234 | 269 | $(call filechk,offsets,__SYSCALL_NRS_H__) |
|---|
| 235 | 270 | |
|---|
| 271 | +targets += syscall_nrs.s |
|---|
| 236 | 272 | clean-files += syscall_nrs.h |
|---|
| 237 | 273 | |
|---|
| 238 | 274 | FORCE: |
|---|
| .. | .. |
|---|
| 260 | 296 | $(src)/*.c: verify_target_bpf $(LIBBPF) |
|---|
| 261 | 297 | |
|---|
| 262 | 298 | $(obj)/tracex5_kern.o: $(obj)/syscall_nrs.h |
|---|
| 299 | +$(obj)/hbm_out_kern.o: $(src)/hbm.h $(src)/hbm_kern.h |
|---|
| 300 | +$(obj)/hbm.o: $(src)/hbm.h |
|---|
| 301 | +$(obj)/hbm_edt_kern.o: $(src)/hbm.h $(src)/hbm_kern.h |
|---|
| 302 | + |
|---|
| 303 | +-include $(BPF_SAMPLES_PATH)/Makefile.target |
|---|
| 263 | 304 | |
|---|
| 264 | 305 | # asm/sysreg.h - inline assembly used by it is incompatible with llvm. |
|---|
| 265 | 306 | # But, there is no easy way to fix it, so just exclude it since it is |
|---|
| 266 | 307 | # useless for BPF samples. |
|---|
| 308 | +# below we use long chain of commands, clang | opt | llvm-dis | llc, |
|---|
| 309 | +# to generate final object file. 'clang' compiles the source into IR |
|---|
| 310 | +# with native target, e.g., x64, arm64, etc. 'opt' does bpf CORE IR builtin |
|---|
| 311 | +# processing (llvm12) and IR optimizations. 'llvm-dis' converts |
|---|
| 312 | +# 'opt' output to IR, and finally 'llc' generates bpf byte code. |
|---|
| 267 | 313 | $(obj)/%.o: $(src)/%.c |
|---|
| 268 | 314 | @echo " CLANG-bpf " $@ |
|---|
| 269 | | - $(Q)$(CLANG) $(NOSTDINC_FLAGS) $(LINUXINCLUDE) $(EXTRA_CFLAGS) -I$(obj) \ |
|---|
| 270 | | - -I$(srctree)/tools/testing/selftests/bpf/ \ |
|---|
| 315 | + $(Q)$(CLANG) $(NOSTDINC_FLAGS) $(LINUXINCLUDE) $(BPF_EXTRA_CFLAGS) \ |
|---|
| 316 | + -I$(obj) -I$(srctree)/tools/testing/selftests/bpf/ \ |
|---|
| 317 | + -I$(srctree)/tools/lib/ \ |
|---|
| 271 | 318 | -D__KERNEL__ -D__BPF_TRACING__ -Wno-unused-value -Wno-pointer-sign \ |
|---|
| 272 | | - -D__TARGET_ARCH_$(ARCH) -Wno-compare-distinct-pointer-types \ |
|---|
| 319 | + -D__TARGET_ARCH_$(SRCARCH) -Wno-compare-distinct-pointer-types \ |
|---|
| 273 | 320 | -Wno-gnu-variable-sized-type-not-at-end \ |
|---|
| 274 | 321 | -Wno-address-of-packed-member -Wno-tautological-compare \ |
|---|
| 275 | 322 | -Wno-unknown-warning-option $(CLANG_ARCH_ARGS) \ |
|---|
| 276 | | - -O2 -emit-llvm -c $< -o -| $(LLC) -march=bpf $(LLC_FLAGS) -filetype=obj -o $@ |
|---|
| 323 | + -I$(srctree)/samples/bpf/ -include asm_goto_workaround.h \ |
|---|
| 324 | + -O2 -emit-llvm -Xclang -disable-llvm-passes -c $< -o - | \ |
|---|
| 325 | + $(OPT) -O2 -mtriple=bpf-pc-linux | $(LLVM_DIS) | \ |
|---|
| 326 | + $(LLC) -march=bpf $(LLC_FLAGS) -filetype=obj -o $@ |
|---|
| 277 | 327 | ifeq ($(DWARF2BTF),y) |
|---|
| 278 | 328 | $(BTF_PAHOLE) -J $@ |
|---|
| 279 | 329 | endif |
|---|