xref: /linux/tools/testing/selftests/bpf/libarena/Makefile (revision 9f5b3ffc3f1dac7204e32eeeff84bc5cc55c393e)
1d5327480SEmil Tsalapatis# SPDX-License-Identifier: LGPL-2.1 OR BSD-2-Clause
2d5327480SEmil Tsalapatis# Copyright (c) 2026 Meta Platforms, Inc. and affiliates.
3d5327480SEmil Tsalapatis
4d5327480SEmil Tsalapatis.PHONY: clean
5d5327480SEmil Tsalapatis
6d5327480SEmil Tsalapatis# Defaults for standalone builds
7d5327480SEmil Tsalapatis
8d5327480SEmil TsalapatisCLANG ?= clang
9d5327480SEmil TsalapatisBPFTOOL ?= bpftool
10d5327480SEmil TsalapatisLDLIBS ?= -lbpf -lelf -lz -lrt -lpthread -lzstd
11d5327480SEmil Tsalapatis
12d5327480SEmil Tsalapatisifeq ($(V),1)
13d5327480SEmil TsalapatisQ =
14d5327480SEmil Tsalapatismsg =
15d5327480SEmil Tsalapatiselse
16d5327480SEmil TsalapatisQ ?= @
17d5327480SEmil Tsalapatismsg = @printf '  %-8s%s %s%s\n' "$(1)" "$(if $(2), [$(2)])" "$(notdir $(3))" "$(if $(4), $(4))";
18d5327480SEmil Tsalapatisendif
19d5327480SEmil Tsalapatis
20d5327480SEmil TsalapatisIS_LITTLE_ENDIAN = $(shell $(CC) -dM -E - </dev/null | \
21d5327480SEmil Tsalapatis			grep 'define __BYTE_ORDER__ __ORDER_LITTLE_ENDIAN__')
22d5327480SEmil TsalapatisBPF_TARGET_ENDIAN ?= $(if $(IS_LITTLE_ENDIAN),--target=bpfel,--target=bpfeb)
23d5327480SEmil Tsalapatis
24d5327480SEmil TsalapatisLIBARENA=$(abspath .)
25d5327480SEmil TsalapatisBPFDIR=$(abspath $(LIBARENA)/..)
26d5327480SEmil Tsalapatis
27d5327480SEmil TsalapatisINCLUDE_DIR ?= $(BPFDIR)/tools/include
28d5327480SEmil TsalapatisLIBBPF_INCLUDE ?= $(INCLUDE_DIR)
29d5327480SEmil Tsalapatis
30d5327480SEmil Tsalapatis# Scan src/ and selftests/ to generate the final binaries
31d5327480SEmil TsalapatisLIBARENA_SOURCES = $(wildcard $(LIBARENA)/src/*.bpf.c) $(wildcard $(LIBARENA)/selftests/*.bpf.c)
32d5327480SEmil TsalapatisLIBARENA_OBJECTS = $(notdir $(LIBARENA_SOURCES:.bpf.c=.bpf.o))
33*cfc00618SEmil TsalapatisLIBARENA_OBJECTS_ASAN = $(notdir $(LIBARENA_SOURCES:.bpf.c=_asan.bpf.o))
34d5327480SEmil Tsalapatis
35d5327480SEmil TsalapatisINCLUDES = -I$(LIBARENA)/include -I$(BPFDIR)
36d5327480SEmil Tsalapatisifneq ($(INCLUDE_DIR),)
37d5327480SEmil TsalapatisINCLUDES += -I$(INCLUDE_DIR)
38d5327480SEmil Tsalapatisendif
39d5327480SEmil Tsalapatisifneq ($(LIBBPF_INCLUDE),)
40d5327480SEmil TsalapatisINCLUDES += -I$(LIBBPF_INCLUDE)
41d5327480SEmil Tsalapatisendif
42d5327480SEmil Tsalapatis
43*cfc00618SEmil TsalapatisASAN_FLAGS = -fsanitize=kernel-address -fno-stack-protector -fno-builtin
44*cfc00618SEmil TsalapatisASAN_FLAGS += -mllvm -asan-instrument-address-spaces=1 -mllvm -asan-shadow-addr-space=1
45*cfc00618SEmil TsalapatisASAN_FLAGS += -mllvm -asan-use-stack-safety=0 -mllvm -asan-stack=0
46*cfc00618SEmil TsalapatisASAN_FLAGS += -mllvm -asan-kernel=1
47*cfc00618SEmil TsalapatisASAN_FLAGS += -mllvm -asan-constructor-kind=none
48*cfc00618SEmil TsalapatisASAN_FLAGS += -mllvm -asan-destructor-kind=none
49*cfc00618SEmil Tsalapatis
50d5327480SEmil Tsalapatis# ENABLE_ATOMICS_TESTS required because we use arena spinlocks
51d5327480SEmil Tsalapatisoverride BPF_CFLAGS += -DENABLE_ATOMICS_TESTS
52d5327480SEmil Tsalapatisoverride BPF_CFLAGS += -O2 -g
53d5327480SEmil Tsalapatisoverride BPF_CFLAGS += -Wno-incompatible-pointer-types-discards-qualifiers
54d5327480SEmil Tsalapatis# Required for suppressing harmless vmlinux.h-related warnings.
55d5327480SEmil Tsalapatisoverride BPF_CFLAGS += -Wno-missing-declarations
56d5327480SEmil Tsalapatisoverride BPF_CFLAGS += $(INCLUDES)
57d5327480SEmil Tsalapatis
58d5327480SEmil TsalapatisCFLAGS = -O2 -no-pie
59d5327480SEmil TsalapatisCFLAGS += $(INCLUDES)
60d5327480SEmil Tsalapatis
61d5327480SEmil Tsalapatisvpath %.bpf.c $(LIBARENA)/src $(LIBARENA)/selftests
62d5327480SEmil Tsalapatisvpath %.c $(LIBARENA)/src $(LIBARENA)/selftests
63d5327480SEmil Tsalapatis
64*cfc00618SEmil Tsalapatisskeletons: libarena.skel.h libarena_asan.skel.h
65*cfc00618SEmil Tsalapatis.PHONY: skeletons
66*cfc00618SEmil Tsalapatis
67*cfc00618SEmil Tsalapatislibarena_asan.skel.h: libarena_asan.bpf.o
68*cfc00618SEmil Tsalapatis	$(call msg,GEN-SKEL,libarena,$@)
69*cfc00618SEmil Tsalapatis	$(Q)$(BPFTOOL) gen skeleton $< name "libarena_asan" > $@
70*cfc00618SEmil Tsalapatis
71d5327480SEmil Tsalapatislibarena.skel.h: libarena.bpf.o
72d5327480SEmil Tsalapatis	$(call msg,GEN-SKEL,libarena,$@)
73d5327480SEmil Tsalapatis	$(Q)$(BPFTOOL) gen skeleton $< name "libarena" > $@
74d5327480SEmil Tsalapatis
75*cfc00618SEmil Tsalapatislibarena_asan.bpf.o: $(LIBARENA_OBJECTS_ASAN)
76*cfc00618SEmil Tsalapatis	$(call msg,GEN-OBJ,libarena,$@)
77*cfc00618SEmil Tsalapatis	$(Q)$(BPFTOOL) gen object $@ $^
78*cfc00618SEmil Tsalapatis
79d5327480SEmil Tsalapatislibarena.bpf.o: $(LIBARENA_OBJECTS)
80d5327480SEmil Tsalapatis	$(call msg,GEN-OBJ,libarena,$@)
81d5327480SEmil Tsalapatis	$(Q)$(BPFTOOL) gen object $@ $^
82d5327480SEmil Tsalapatis
83*cfc00618SEmil Tsalapatis%_asan.bpf.o: %.bpf.c
84*cfc00618SEmil Tsalapatis	$(call msg,CLNG-BPF,libarena,$@)
85*cfc00618SEmil Tsalapatis	$(Q)$(CLANG) $(BPF_CFLAGS) $(ASAN_FLAGS) -DBPF_ARENA_ASAN $(BPF_TARGET_ENDIAN) -c $< -o $@
86*cfc00618SEmil Tsalapatis
87d5327480SEmil Tsalapatis%.bpf.o: %.bpf.c
88d5327480SEmil Tsalapatis	$(call msg,CLNG-BPF,libarena,$@)
89d5327480SEmil Tsalapatis	$(Q)$(CLANG) $(BPF_CFLAGS) $(BPF_TARGET_ENDIAN) -c $< -o $@
90d5327480SEmil Tsalapatis
91d5327480SEmil Tsalapatisclean:
92*cfc00618SEmil Tsalapatis	$(Q)rm -f *.skel.h *.bpf.o *.linked*.o
93